Admin Account Routing Refactor

This commit is contained in:
AconiteX
2021-08-16 11:44:25 -04:00
parent 89169339c6
commit 55976968a0
11 changed files with 236 additions and 92 deletions
@@ -10,17 +10,19 @@
// ======================================================================
ClientPermissionsMessage::ClientPermissionsMessage(bool canLogin, bool canCreateRegularCharacter, bool canCreateJediCharacter, bool canSkipTutorial) :
ClientPermissionsMessage::ClientPermissionsMessage(bool canLogin, bool canCreateRegularCharacter, bool canCreateJediCharacter, bool canSkipTutorial, bool isAdmin) :
GameNetworkMessage("ClientPermissionsMessage"),
m_canLogin(canLogin),
m_canCreateRegularCharacter(canCreateRegularCharacter),
m_canCreateJediCharacter(canCreateJediCharacter),
m_canSkipTutorial(canSkipTutorial)
m_canSkipTutorial(canSkipTutorial),
m_isAdmin(isAdmin)
{
addVariable(m_canLogin);
addVariable(m_canCreateRegularCharacter);
addVariable(m_canCreateJediCharacter);
addVariable(m_canSkipTutorial);
addVariable(m_isAdmin);
}
//-----------------------------------------------------------------------
@@ -30,12 +32,14 @@ ClientPermissionsMessage::ClientPermissionsMessage(Archive::ReadIterator & sourc
m_canLogin(),
m_canCreateRegularCharacter(),
m_canCreateJediCharacter(),
m_canSkipTutorial()
m_canSkipTutorial(),
m_isAdmin()
{
addVariable(m_canLogin);
addVariable(m_canCreateRegularCharacter);
addVariable(m_canCreateJediCharacter);
addVariable(m_canSkipTutorial);
addVariable(m_isAdmin);
unpack(source);
}
@@ -24,7 +24,7 @@
class ClientPermissionsMessage : public GameNetworkMessage
{
public:
ClientPermissionsMessage(bool canLogin, bool canCreateRegularCharacter, bool canCreateJediCharacter, bool canSkipTutorial);
ClientPermissionsMessage(bool canLogin, bool canCreateRegularCharacter, bool canCreateJediCharacter, bool canSkipTutorial, bool isAdmin);
explicit ClientPermissionsMessage(Archive::ReadIterator & source);
virtual ~ClientPermissionsMessage();
@@ -33,12 +33,14 @@ class ClientPermissionsMessage : public GameNetworkMessage
bool getCanCreateRegularCharacter() const;
bool getCanCreateJediCharacter() const;
bool getCanSkipTutorial() const;
bool getIsAdmin() const;
private:
Archive::AutoVariable<bool> m_canLogin;
Archive::AutoVariable<bool> m_canCreateRegularCharacter;
Archive::AutoVariable<bool> m_canCreateJediCharacter;
Archive::AutoVariable<bool> m_canSkipTutorial;
Archive::AutoVariable<bool> m_isAdmin;
ClientPermissionsMessage();
ClientPermissionsMessage(const ClientPermissionsMessage&);
@@ -73,6 +75,13 @@ inline bool ClientPermissionsMessage::getCanSkipTutorial() const
return m_canSkipTutorial.get();
}
// ----------------------------------------------------------------------
inline bool ClientPermissionsMessage::getIsAdmin() const
{
return m_isAdmin.get();
}
// ======================================================================
#endif // _INCLUDED_ClientCentralMessages_H
@@ -31,6 +31,17 @@ struct LoginClusterStatus_ClusterData
bool m_dontRecommend;
uint32 m_onlinePlayerLimit;
uint32 m_onlineFreeTrialLimit;
// This flag tells the client that the account which requested the cluster information
// is considered an admin by the server (in Admin Account Table). This enables connection
// to locked clusters and viewing secret clusters. We don't need to worry about this flag
// being manipulated because the Connection Server verifies admin permissions after the fact.
// This flag merely unblocks client-side user interface elements for locked/secret clusters.
// We also send this flag in the ClientPermissionsMessage header for character creation.
bool m_isAdmin;
// Flag so we can append (Secret) in Client (for admins)
bool m_isSecret;
};
/**
@@ -85,6 +96,8 @@ namespace Archive
get(source,c.m_dontRecommend);
get(source,c.m_onlinePlayerLimit);
get(source,c.m_onlineFreeTrialLimit);
get(source, c.m_isAdmin);
get(source,c.m_isSecret);
}
inline void put(ByteStream & target, const LoginClusterStatus_ClusterData &c)
@@ -101,6 +114,8 @@ namespace Archive
put(target,c.m_dontRecommend);
put(target,c.m_onlinePlayerLimit);
put(target,c.m_onlineFreeTrialLimit);
put(target,c.m_isAdmin);
put(target,c.m_isSecret);
}
}