diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 2b1a5c8f..949c4792 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -377,6 +377,7 @@ add_library(skyline SHARED ${source_DIR}/skyline/services/account/IManagerForApplication.cpp ${source_DIR}/skyline/services/account/IProfile.cpp ${source_DIR}/skyline/services/account/IAsyncContext.cpp + ${source_DIR}/skyline/services/account/IAuthorizationRequest.cpp ${source_DIR}/skyline/services/friends/IServiceCreator.cpp ${source_DIR}/skyline/services/friends/IFriendService.cpp ${source_DIR}/skyline/services/friends/INotificationService.cpp diff --git a/app/src/main/cpp/skyline/services/account/IAuthorizationRequest.cpp b/app/src/main/cpp/skyline/services/account/IAuthorizationRequest.cpp new file mode 100644 index 00000000..d64e6709 --- /dev/null +++ b/app/src/main/cpp/skyline/services/account/IAuthorizationRequest.cpp @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright © 2023 Skyline Team and Contributors (https://github.com/skyline-emu/) + +#include "IAuthorizationRequest.h" +#include "IAsyncContext.h" + +namespace skyline::service::account { + IAuthorizationRequest::IAuthorizationRequest(const DeviceState &state, ServiceManager &manager) : BaseService(state, manager) {} + + Result IAuthorizationRequest::InvokeWithoutInteractionAsync(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { + manager.RegisterService(SRVREG(IAsyncContext), session, response); + return {}; + } + + Result IAuthorizationRequest::IsAuthorized(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { + response.Push(0); + return {}; + } + + Result IAuthorizationRequest::GetAuthorizationCode(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { + return {}; + } +} diff --git a/app/src/main/cpp/skyline/services/account/IAuthorizationRequest.h b/app/src/main/cpp/skyline/services/account/IAuthorizationRequest.h new file mode 100644 index 00000000..38863765 --- /dev/null +++ b/app/src/main/cpp/skyline/services/account/IAuthorizationRequest.h @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright © 2023 Skyline Team and Contributors (https://github.com/skyline-emu/) + +#pragma once + +#include + +namespace skyline::service::account { + /** + * @url https://switchbrew.org/wiki/Account_services#IAuthorizationRequest + */ + class IAuthorizationRequest : public BaseService { + public: + IAuthorizationRequest(const DeviceState &state, ServiceManager &manager); + + Result InvokeWithoutInteractionAsync(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + + Result IsAuthorized(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + + Result GetAuthorizationCode(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + + SERVICE_DECL( + SFUNC(0xA, IAuthorizationRequest, InvokeWithoutInteractionAsync), + SFUNC(0x13, IAuthorizationRequest, IsAuthorized), + SFUNC(0x15, IAuthorizationRequest, GetAuthorizationCode) + ) + }; +} diff --git a/app/src/main/cpp/skyline/services/account/IManagerForApplication.cpp b/app/src/main/cpp/skyline/services/account/IManagerForApplication.cpp index b3eaa50a..52a2971f 100644 --- a/app/src/main/cpp/skyline/services/account/IManagerForApplication.cpp +++ b/app/src/main/cpp/skyline/services/account/IManagerForApplication.cpp @@ -4,6 +4,7 @@ #include "IManagerForApplication.h" #include "IAccountServiceForApplication.h" #include "IAsyncContext.h" +#include "IAuthorizationRequest.h" namespace skyline::service::account { IManagerForApplication::IManagerForApplication(const DeviceState &state, ServiceManager &manager, std::vector &openedUsers) : BaseService(state, manager) { @@ -29,6 +30,11 @@ namespace skyline::service::account { return {}; } + Result IManagerForApplication::CreateAuthorizationRequest(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { + manager.RegisterService(SRVREG(IAuthorizationRequest), session, response); + return {}; + } + Result IManagerForApplication::StoreOpenContext(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { openedUsers->clear(); openedUsers->push_back(constant::DefaultUserId); diff --git a/app/src/main/cpp/skyline/services/account/IManagerForApplication.h b/app/src/main/cpp/skyline/services/account/IManagerForApplication.h index 01cac050..7832d573 100644 --- a/app/src/main/cpp/skyline/services/account/IManagerForApplication.h +++ b/app/src/main/cpp/skyline/services/account/IManagerForApplication.h @@ -32,6 +32,8 @@ namespace skyline::service::account { Result LoadIdTokenCache(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + Result CreateAuthorizationRequest(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + Result StoreOpenContext(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); SERVICE_DECL( @@ -39,6 +41,7 @@ namespace skyline::service::account { SFUNC(0x1, IManagerForApplication, GetAccountId), SFUNC(0x2, IManagerForApplication, EnsureIdTokenCacheAsync), SFUNC(0x3, IManagerForApplication, LoadIdTokenCache), + SFUNC(0x96, IManagerForApplication, CreateAuthorizationRequest), SFUNC(0xA0, IManagerForApplication, StoreOpenContext) ) };