mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-04-27 07:48:01 -07:00
Initial release of client ID generation.
This commit is contained in:
parent
44d757f691
commit
52db13a1ca
14 changed files with 246 additions and 186 deletions
|
|
@ -1,58 +1,59 @@
|
|||
message Response {
|
||||
enum ResponseCode {
|
||||
RespNotConnected = -1;
|
||||
RespNothing = 0;
|
||||
RespOk = 1;
|
||||
RespNotInRoom = 2;
|
||||
RespInternalError = 3;
|
||||
RespInvalidCommand = 4;
|
||||
RespInvalidData = 5;
|
||||
RespNameNotFound = 6;
|
||||
RespLoginNeeded = 7;
|
||||
RespFunctionNotAllowed = 8;
|
||||
RespGameNotStarted = 9;
|
||||
RespGameFull = 10;
|
||||
RespContextError = 11;
|
||||
RespWrongPassword = 12;
|
||||
RespSpectatorsNotAllowed = 13;
|
||||
RespOnlyBuddies = 14;
|
||||
RespUserLevelTooLow = 15;
|
||||
RespInIgnoreList = 16;
|
||||
RespWouldOverwriteOldSession = 17;
|
||||
RespChatFlood = 18;
|
||||
RespUserIsBanned = 19;
|
||||
RespAccessDenied = 20;
|
||||
RespUsernameInvalid = 21;
|
||||
RespRegistrationRequired = 22;
|
||||
RespRegistrationAccepted = 23; // Server agrees to process client's registration request
|
||||
RespUserAlreadyExists = 24; // Client attempted to register a name which is already registered
|
||||
RespEmailRequiredToRegister = 25; // Server requires email to register accounts but client did not provide one
|
||||
RespTooManyRequests = 26; // Server refused to complete command because client has sent too many too quickly
|
||||
RespPasswordTooShort = 27; // Server requires a decent password
|
||||
RespAccountNotActivated = 28; // Client attempted to log into a registered username but the account hasn't been activated
|
||||
RespRegistrationDisabled = 29; // Server does not allow clients to register
|
||||
RespRegistrationFailed = 30; // Server accepted a reg request but failed to perform the registration
|
||||
RespActivationAccepted = 31; // Server accepted a reg user activation token
|
||||
RespActivationFailed = 32; // Server didn't accept a reg user activation token
|
||||
RespRegistrationAcceptedNeedsActivation = 33; // Server accepted cient registration, but it will need token activation
|
||||
}
|
||||
enum ResponseType {
|
||||
JOIN_ROOM = 1000;
|
||||
LIST_USERS = 1001;
|
||||
GET_GAMES_OF_USER = 1002;
|
||||
GET_USER_INFO = 1003;
|
||||
DUMP_ZONE = 1004;
|
||||
LOGIN = 1005;
|
||||
DECK_LIST = 1006;
|
||||
DECK_DOWNLOAD = 1007;
|
||||
DECK_UPLOAD = 1008;
|
||||
REGISTER = 1009;
|
||||
ACTIVATE = 1010;
|
||||
REPLAY_LIST = 1100;
|
||||
REPLAY_DOWNLOAD = 1101;
|
||||
}
|
||||
required uint64 cmd_id = 1;
|
||||
optional ResponseCode response_code = 2;
|
||||
|
||||
extensions 100 to max;
|
||||
enum ResponseCode {
|
||||
RespNotConnected = -1;
|
||||
RespNothing = 0;
|
||||
RespOk = 1;
|
||||
RespNotInRoom = 2;
|
||||
RespInternalError = 3;
|
||||
RespInvalidCommand = 4;
|
||||
RespInvalidData = 5;
|
||||
RespNameNotFound = 6;
|
||||
RespLoginNeeded = 7;
|
||||
RespFunctionNotAllowed = 8;
|
||||
RespGameNotStarted = 9;
|
||||
RespGameFull = 10;
|
||||
RespContextError = 11;
|
||||
RespWrongPassword = 12;
|
||||
RespSpectatorsNotAllowed = 13;
|
||||
RespOnlyBuddies = 14;
|
||||
RespUserLevelTooLow = 15;
|
||||
RespInIgnoreList = 16;
|
||||
RespWouldOverwriteOldSession = 17;
|
||||
RespChatFlood = 18;
|
||||
RespUserIsBanned = 19;
|
||||
RespAccessDenied = 20;
|
||||
RespUsernameInvalid = 21;
|
||||
RespRegistrationRequired = 22;
|
||||
RespRegistrationAccepted = 23; // Server agrees to process client's registration request
|
||||
RespUserAlreadyExists = 24; // Client attempted to register a name which is already registered
|
||||
RespEmailRequiredToRegister = 25; // Server requires email to register accounts but client did not provide one
|
||||
RespTooManyRequests = 26; // Server refused to complete command because client has sent too many too quickly
|
||||
RespPasswordTooShort = 27; // Server requires a decent password
|
||||
RespAccountNotActivated = 28; // Client attempted to log into a registered username but the account hasn't been activated
|
||||
RespRegistrationDisabled = 29; // Server does not allow clients to register
|
||||
RespRegistrationFailed = 30; // Server accepted a reg request but failed to perform the registration
|
||||
RespActivationAccepted = 31; // Server accepted a reg user activation token
|
||||
RespActivationFailed = 32; // Server didn't accept a reg user activation token
|
||||
RespRegistrationAcceptedNeedsActivation = 33; // Server accepted cient registration, but it will need token activation
|
||||
RespClientIDRequired = 34; // Server require's client to generate and send its client id before allowing access
|
||||
}
|
||||
enum ResponseType {
|
||||
JOIN_ROOM = 1000;
|
||||
LIST_USERS = 1001;
|
||||
GET_GAMES_OF_USER = 1002;
|
||||
GET_USER_INFO = 1003;
|
||||
DUMP_ZONE = 1004;
|
||||
LOGIN = 1005;
|
||||
DECK_LIST = 1006;
|
||||
DECK_DOWNLOAD = 1007;
|
||||
DECK_UPLOAD = 1008;
|
||||
REGISTER = 1009;
|
||||
ACTIVATE = 1010;
|
||||
REPLAY_LIST = 1100;
|
||||
REPLAY_DOWNLOAD = 1101;
|
||||
}
|
||||
required uint64 cmd_id = 1;
|
||||
optional ResponseCode response_code = 2;
|
||||
|
||||
extensions 100 to max;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,157 +1,158 @@
|
|||
import "serverinfo_user.proto";
|
||||
|
||||
message SessionCommand {
|
||||
enum SessionCommandType {
|
||||
PING = 1000;
|
||||
LOGIN = 1001;
|
||||
MESSAGE = 1002;
|
||||
LIST_USERS = 1003;
|
||||
GET_GAMES_OF_USER = 1004;
|
||||
GET_USER_INFO = 1005;
|
||||
ADD_TO_LIST = 1006;
|
||||
REMOVE_FROM_LIST = 1007;
|
||||
DECK_LIST = 1008;
|
||||
DECK_NEW_DIR = 1009;
|
||||
DECK_DEL_DIR = 1010;
|
||||
DECK_DEL = 1011;
|
||||
DECK_DOWNLOAD = 1012;
|
||||
DECK_UPLOAD = 1013;
|
||||
LIST_ROOMS = 1014;
|
||||
JOIN_ROOM = 1015;
|
||||
REGISTER = 1016;
|
||||
ACTIVATE = 1017;
|
||||
ACCOUNT_EDIT = 1018;
|
||||
ACCOUNT_IMAGE = 1019;
|
||||
ACCOUNT_PASSWORD = 1020;
|
||||
REPLAY_LIST = 1100;
|
||||
REPLAY_DOWNLOAD = 1101;
|
||||
REPLAY_MODIFY_MATCH = 1102;
|
||||
REPLAY_DELETE_MATCH = 1103;
|
||||
}
|
||||
extensions 100 to max;
|
||||
enum SessionCommandType {
|
||||
PING = 1000;
|
||||
LOGIN = 1001;
|
||||
MESSAGE = 1002;
|
||||
LIST_USERS = 1003;
|
||||
GET_GAMES_OF_USER = 1004;
|
||||
GET_USER_INFO = 1005;
|
||||
ADD_TO_LIST = 1006;
|
||||
REMOVE_FROM_LIST = 1007;
|
||||
DECK_LIST = 1008;
|
||||
DECK_NEW_DIR = 1009;
|
||||
DECK_DEL_DIR = 1010;
|
||||
DECK_DEL = 1011;
|
||||
DECK_DOWNLOAD = 1012;
|
||||
DECK_UPLOAD = 1013;
|
||||
LIST_ROOMS = 1014;
|
||||
JOIN_ROOM = 1015;
|
||||
REGISTER = 1016;
|
||||
ACTIVATE = 1017;
|
||||
ACCOUNT_EDIT = 1018;
|
||||
ACCOUNT_IMAGE = 1019;
|
||||
ACCOUNT_PASSWORD = 1020;
|
||||
REPLAY_LIST = 1100;
|
||||
REPLAY_DOWNLOAD = 1101;
|
||||
REPLAY_MODIFY_MATCH = 1102;
|
||||
REPLAY_DELETE_MATCH = 1103;
|
||||
}
|
||||
extensions 100 to max;
|
||||
}
|
||||
|
||||
message Command_Ping {
|
||||
extend SessionCommand {
|
||||
optional Command_Ping ext = 1000;
|
||||
}
|
||||
extend SessionCommand {
|
||||
optional Command_Ping ext = 1000;
|
||||
}
|
||||
}
|
||||
|
||||
message Command_Login {
|
||||
extend SessionCommand {
|
||||
optional Command_Login ext = 1001;
|
||||
}
|
||||
optional string user_name = 1;
|
||||
optional string password = 2;
|
||||
extend SessionCommand {
|
||||
optional Command_Login ext = 1001;
|
||||
}
|
||||
optional string user_name = 1;
|
||||
optional string password = 2;
|
||||
optional string clientid = 3;
|
||||
}
|
||||
|
||||
message Command_Message {
|
||||
extend SessionCommand {
|
||||
optional Command_Message ext = 1002;
|
||||
}
|
||||
optional string user_name = 1;
|
||||
optional string message = 2;
|
||||
extend SessionCommand {
|
||||
optional Command_Message ext = 1002;
|
||||
}
|
||||
optional string user_name = 1;
|
||||
optional string message = 2;
|
||||
}
|
||||
|
||||
message Command_ListUsers {
|
||||
extend SessionCommand {
|
||||
optional Command_ListUsers ext = 1003;
|
||||
}
|
||||
extend SessionCommand {
|
||||
optional Command_ListUsers ext = 1003;
|
||||
}
|
||||
}
|
||||
|
||||
message Command_GetGamesOfUser {
|
||||
extend SessionCommand {
|
||||
optional Command_GetGamesOfUser ext = 1004;
|
||||
}
|
||||
optional string user_name = 1;
|
||||
extend SessionCommand {
|
||||
optional Command_GetGamesOfUser ext = 1004;
|
||||
}
|
||||
optional string user_name = 1;
|
||||
}
|
||||
|
||||
message Command_GetUserInfo {
|
||||
extend SessionCommand {
|
||||
optional Command_GetUserInfo ext = 1005;
|
||||
}
|
||||
optional string user_name = 1;
|
||||
extend SessionCommand {
|
||||
optional Command_GetUserInfo ext = 1005;
|
||||
}
|
||||
optional string user_name = 1;
|
||||
}
|
||||
|
||||
message Command_AddToList {
|
||||
extend SessionCommand {
|
||||
optional Command_AddToList ext = 1006;
|
||||
}
|
||||
optional string list = 1;
|
||||
optional string user_name = 2;
|
||||
extend SessionCommand {
|
||||
optional Command_AddToList ext = 1006;
|
||||
}
|
||||
optional string list = 1;
|
||||
optional string user_name = 2;
|
||||
}
|
||||
|
||||
message Command_RemoveFromList {
|
||||
extend SessionCommand {
|
||||
optional Command_RemoveFromList ext = 1007;
|
||||
}
|
||||
optional string list = 1;
|
||||
optional string user_name = 2;
|
||||
extend SessionCommand {
|
||||
optional Command_RemoveFromList ext = 1007;
|
||||
}
|
||||
optional string list = 1;
|
||||
optional string user_name = 2;
|
||||
}
|
||||
|
||||
message Command_ListRooms {
|
||||
extend SessionCommand {
|
||||
optional Command_ListRooms ext = 1014;
|
||||
}
|
||||
extend SessionCommand {
|
||||
optional Command_ListRooms ext = 1014;
|
||||
}
|
||||
}
|
||||
|
||||
message Command_JoinRoom {
|
||||
extend SessionCommand {
|
||||
optional Command_JoinRoom ext = 1015;
|
||||
}
|
||||
optional uint32 room_id = 1;
|
||||
extend SessionCommand {
|
||||
optional Command_JoinRoom ext = 1015;
|
||||
}
|
||||
optional uint32 room_id = 1;
|
||||
}
|
||||
|
||||
// User wants to register a new account
|
||||
message Command_Register {
|
||||
extend SessionCommand {
|
||||
optional Command_Register ext = 1016;
|
||||
}
|
||||
// User name client wants to register
|
||||
required string user_name = 1;
|
||||
// Hashed password to be inserted into database
|
||||
required string password = 2;
|
||||
// Email address of the client for user validation
|
||||
optional string email = 3;
|
||||
// Gender of the user
|
||||
optional ServerInfo_User.Gender gender = 4;
|
||||
// Country code of the user. 2 letter ISO format
|
||||
optional string country = 5;
|
||||
optional string real_name = 6;
|
||||
extend SessionCommand {
|
||||
optional Command_Register ext = 1016;
|
||||
}
|
||||
// User name client wants to register
|
||||
required string user_name = 1;
|
||||
// Hashed password to be inserted into database
|
||||
required string password = 2;
|
||||
// Email address of the client for user validation
|
||||
optional string email = 3;
|
||||
// Gender of the user
|
||||
optional ServerInfo_User.Gender gender = 4;
|
||||
// Country code of the user. 2 letter ISO format
|
||||
optional string country = 5;
|
||||
optional string real_name = 6;
|
||||
}
|
||||
|
||||
// User wants to activate an account
|
||||
message Command_Activate {
|
||||
extend SessionCommand {
|
||||
optional Command_Activate ext = 1017;
|
||||
}
|
||||
// User name client wants to activate
|
||||
required string user_name = 1;
|
||||
// Activation token
|
||||
required string token = 2;
|
||||
extend SessionCommand {
|
||||
optional Command_Activate ext = 1017;
|
||||
}
|
||||
// User name client wants to activate
|
||||
required string user_name = 1;
|
||||
// Activation token
|
||||
required string token = 2;
|
||||
}
|
||||
|
||||
message Command_AccountEdit {
|
||||
extend SessionCommand {
|
||||
optional Command_AccountEdit ext = 1018;
|
||||
}
|
||||
optional string real_name = 1;
|
||||
optional string email = 2;
|
||||
optional ServerInfo_User.Gender gender = 3;
|
||||
optional string country = 4;
|
||||
extend SessionCommand {
|
||||
optional Command_AccountEdit ext = 1018;
|
||||
}
|
||||
optional string real_name = 1;
|
||||
optional string email = 2;
|
||||
optional ServerInfo_User.Gender gender = 3;
|
||||
optional string country = 4;
|
||||
}
|
||||
|
||||
message Command_AccountImage {
|
||||
extend SessionCommand {
|
||||
optional Command_AccountImage ext = 1019;
|
||||
}
|
||||
optional bytes image = 1;
|
||||
extend SessionCommand {
|
||||
optional Command_AccountImage ext = 1019;
|
||||
}
|
||||
optional bytes image = 1;
|
||||
}
|
||||
|
||||
message Command_AccountPassword {
|
||||
extend SessionCommand {
|
||||
optional Command_AccountPassword ext = 1020;
|
||||
}
|
||||
optional string old_password = 1;
|
||||
optional string new_password = 2;
|
||||
}
|
||||
extend SessionCommand {
|
||||
optional Command_AccountPassword ext = 1020;
|
||||
}
|
||||
optional string old_password = 1;
|
||||
optional string new_password = 2;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ Server_DatabaseInterface *Server::getDatabaseInterface() const
|
|||
return databaseInterfaces.value(QThread::currentThread());
|
||||
}
|
||||
|
||||
AuthenticationResult Server::loginUser(Server_ProtocolHandler *session, QString &name, const QString &password, QString &reasonStr, int &secondsLeft)
|
||||
AuthenticationResult Server::loginUser(Server_ProtocolHandler *session, QString &name, const QString &password, QString &reasonStr, int &secondsLeft, QString &clientid)
|
||||
{
|
||||
if (name.size() > 35)
|
||||
name = name.left(35);
|
||||
|
|
@ -123,6 +123,8 @@ AuthenticationResult Server::loginUser(Server_ProtocolHandler *session, QString
|
|||
databaseInterface->lockSessionTables();
|
||||
|
||||
if (authState == PasswordRight) {
|
||||
|
||||
// verify that new session would not cause problems with older existing session
|
||||
if (users.contains(name) || databaseInterface->userSessionExists(name)) {
|
||||
qDebug("Login denied: would overwrite old session");
|
||||
databaseInterface->unlockSessionTables();
|
||||
|
|
@ -168,6 +170,15 @@ AuthenticationResult Server::loginUser(Server_ProtocolHandler *session, QString
|
|||
event.mutable_user_info()->CopyFrom(session->copyUserInfo(true, true, true));
|
||||
locker.unlock();
|
||||
|
||||
// check if client id exists (older client compatibility)
|
||||
if (clientid.isEmpty()){
|
||||
// client id is empty, either out dated client or client has been modified
|
||||
}
|
||||
else {
|
||||
// update users database table with client id
|
||||
databaseInterface->updateUsersClientID(name, clientid);
|
||||
}
|
||||
|
||||
se = Server_ProtocolHandler::prepareSessionEvent(event);
|
||||
sendIsl_SessionEvent(*se);
|
||||
delete se;
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ public:
|
|||
Server(bool _threaded, QObject *parent = 0);
|
||||
~Server();
|
||||
void setThreaded(bool _threaded) { threaded = _threaded; }
|
||||
AuthenticationResult loginUser(Server_ProtocolHandler *session, QString &name, const QString &password, QString &reason, int &secondsLeft);
|
||||
AuthenticationResult loginUser(Server_ProtocolHandler *session, QString &name, const QString &password, QString &reason, int &secondsLeft, QString &clientid);
|
||||
|
||||
const QMap<int, Server_Room *> &getRooms() { return rooms; }
|
||||
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ public:
|
|||
virtual bool getRequireRegistration() { return false; }
|
||||
virtual bool registerUser(const QString & /* userName */, const QString & /* realName */, ServerInfo_User_Gender const & /* gender */, const QString & /* password */, const QString & /* emailAddress */, const QString & /* country */, bool /* active = false */) { return false; }
|
||||
virtual bool activateUser(const QString & /* userName */, const QString & /* token */) { return false; }
|
||||
virtual void updateUsersClientID(const QString & /* userName */, const QString & /* userClientID */) { }
|
||||
|
||||
enum LogMessage_TargetType { MessageTargetRoom, MessageTargetGame, MessageTargetChat, MessageTargetIslRoom };
|
||||
virtual void logMessage(const int /* senderId */, const QString & /* senderName */, const QString & /* senderIp */, const QString & /* logMessage */, LogMessage_TargetType /* targetType */, const int /* targetId */, const QString & /* targetName */) { };
|
||||
|
|
|
|||
|
|
@ -381,11 +381,12 @@ Response::ResponseCode Server_ProtocolHandler::cmdPing(const Command_Ping & /*cm
|
|||
Response::ResponseCode Server_ProtocolHandler::cmdLogin(const Command_Login &cmd, ResponseContainer &rc)
|
||||
{
|
||||
QString userName = QString::fromStdString(cmd.user_name()).simplified();
|
||||
QString clientid = QString::fromStdString(cmd.clientid()).simplified();
|
||||
if (userName.isEmpty() || (userInfo != 0))
|
||||
return Response::RespContextError;
|
||||
QString reasonStr;
|
||||
int banSecondsLeft = 0;
|
||||
AuthenticationResult res = server->loginUser(this, userName, QString::fromStdString(cmd.password()), reasonStr, banSecondsLeft);
|
||||
AuthenticationResult res = server->loginUser(this, userName, QString::fromStdString(cmd.password()), reasonStr, banSecondsLeft, clientid);
|
||||
switch (res) {
|
||||
case UserIsBanned: {
|
||||
Response_Login *re = new Response_Login;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue