1/**
2 * @file account.h
3 * @brief Account service implementation.
4 */
5
6#pragma once
7
8#include <nn/os.h>
9#include <nn/types.h>
10
11namespace nn {
12namespace account {
13typedef char Nickname[0x21];
14typedef u64 NetworkServiceAccountId;
15
16class AsyncContext;
17
18class Uid {
19public:
20 bool IsValid() const { return m_Storage[0] != 0 || m_Storage[1] != 0; }
21
22 u64 m_Storage[2];
23};
24
25class UserHandle {
26public:
27 Uid m_Uid;
28 void* m_Handle;
29};
30
31void Initialize();
32Result ListAllUsers(s32*, Uid*, s32 numUsers);
33Result OpenUser(UserHandle*, Uid const&);
34Result IsNetworkServiceAccountAvailable(bool* out, UserHandle const&);
35void CloseUser(UserHandle const&);
36
37Result EnsureNetworkServiceAccountAvailable(UserHandle const& userHandle);
38Result EnsureNetworkServiceAccountIdTokenCacheAsync(AsyncContext*, UserHandle const&);
39Result LoadNetworkServiceAccountIdTokenCache(u64*, char*, u64, UserHandle const&);
40
41Result GetLastOpenedUser(Uid*);
42Result GetNickname(Nickname* nickname, Uid const& userID);
43
44Result GetUserId(Uid* uid, const UserHandle& handle);
45Result OpenPreselectedUser(UserHandle* handle);
46
47class AsyncContext {
48public:
49 AsyncContext();
50
51 Result HasDone(bool*);
52 Result GetResult();
53 Result Cancel();
54 Result GetSystemEvent(nn::os::SystemEvent*);
55};
56} // namespace account
57} // namespace nn
58