Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Donald Haase
Cockatrice
Commits
52db13a1
Commit
52db13a1
authored
Aug 05, 2015
by
woogerboy21
Browse files
Initial release of client ID generation.
parent
44d757f6
Changes
14
Hide whitespace changes
Inline
Side-by-side
cockatrice/src/main.cpp
View file @
52db13a1
/***************************************************************************
/***************************************************************************
* Copyright (C) 2008 by Max-Wilhelm Bruker *
* Copyright (C) 2008 by Max-Wilhelm Bruker *
* brukie@gmx.net *
* brukie@gmx.net *
* *
* *
...
@@ -32,6 +32,9 @@
...
@@ -32,6 +32,9 @@
#include
<QDesktopServices>
#include
<QDesktopServices>
#include
<QDebug>
#include
<QDebug>
#include
<QSystemTrayIcon>
#include
<QSystemTrayIcon>
#include
"QtNetwork/QNetworkInterface"
#include
<QCryptographicHash>
#include
"main.h"
#include
"main.h"
#include
"window_main.h"
#include
"window_main.h"
...
@@ -97,6 +100,19 @@ bool settingsValid()
...
@@ -97,6 +100,19 @@ bool settingsValid()
!
settingsCache
->
getPicsPath
().
isEmpty
();
!
settingsCache
->
getPicsPath
().
isEmpty
();
}
}
void
generateClientID
()
{
QString
macList
;
foreach
(
QNetworkInterface
interface
,
QNetworkInterface
::
allInterfaces
())
{
if
(
interface
.
hardwareAddress
()
!=
""
)
if
(
interface
.
hardwareAddress
()
!=
"00:00:00:00:00:00:00:E0"
)
macList
+=
interface
.
hardwareAddress
()
+
"."
;
}
QString
strClientID
=
QCryptographicHash
::
hash
(
macList
.
toUtf8
(),
QCryptographicHash
::
Sha1
).
toHex
().
right
(
15
);
settingsCache
->
setClientID
(
strClientID
);
}
int
main
(
int
argc
,
char
*
argv
[])
int
main
(
int
argc
,
char
*
argv
[])
{
{
QApplication
app
(
argc
,
argv
);
QApplication
app
(
argc
,
argv
);
...
@@ -203,6 +219,9 @@ int main(int argc, char *argv[])
...
@@ -203,6 +219,9 @@ int main(int argc, char *argv[])
QIcon
icon
(
":/resources/appicon.svg"
);
QIcon
icon
(
":/resources/appicon.svg"
);
ui
.
setWindowIcon
(
icon
);
ui
.
setWindowIcon
(
icon
);
generateClientID
();
//generate the users client id
qDebug
()
<<
"ClientID In Cache: "
<<
settingsCache
->
getClientID
();
ui
.
show
();
ui
.
show
();
qDebug
(
"main(): ui.show() finished"
);
qDebug
(
"main(): ui.show() finished"
);
...
...
cockatrice/src/main.h
View file @
52db13a1
...
@@ -14,6 +14,7 @@ extern const QString translationPrefix;
...
@@ -14,6 +14,7 @@ extern const QString translationPrefix;
extern
QString
translationPath
;
extern
QString
translationPath
;
void
installNewTranslator
();
void
installNewTranslator
();
void
generateClientID
();
bool
settingsValid
();
bool
settingsValid
();
...
...
cockatrice/src/remoteclient.cpp
View file @
52db13a1
...
@@ -10,6 +10,7 @@
...
@@ -10,6 +10,7 @@
#include
"pb/response_activate.pb.h"
#include
"pb/response_activate.pb.h"
#include
"pb/server_message.pb.h"
#include
"pb/server_message.pb.h"
#include
"pb/event_server_identification.pb.h"
#include
"pb/event_server_identification.pb.h"
#include
"settingscache.h"
static
const
unsigned
int
protocolVersion
=
14
;
static
const
unsigned
int
protocolVersion
=
14
;
...
@@ -108,7 +109,7 @@ void RemoteClient::doLogin()
...
@@ -108,7 +109,7 @@ void RemoteClient::doLogin()
Command_Login
cmdLogin
;
Command_Login
cmdLogin
;
cmdLogin
.
set_user_name
(
userName
.
toStdString
());
cmdLogin
.
set_user_name
(
userName
.
toStdString
());
cmdLogin
.
set_password
(
password
.
toStdString
());
cmdLogin
.
set_password
(
password
.
toStdString
());
cmdLogin
.
set_clientid
(
settingsCache
->
getClientID
().
toStdString
());
PendingCommand
*
pend
=
prepareSessionCommand
(
cmdLogin
);
PendingCommand
*
pend
=
prepareSessionCommand
(
cmdLogin
);
connect
(
pend
,
SIGNAL
(
finished
(
Response
,
CommandContainer
,
QVariant
)),
this
,
SLOT
(
loginResponse
(
Response
)));
connect
(
pend
,
SIGNAL
(
finished
(
Response
,
CommandContainer
,
QVariant
)),
this
,
SLOT
(
loginResponse
(
Response
)));
sendCommand
(
pend
);
sendCommand
(
pend
);
...
@@ -243,6 +244,7 @@ void RemoteClient::doConnectToServer(const QString &hostname, unsigned int port,
...
@@ -243,6 +244,7 @@ void RemoteClient::doConnectToServer(const QString &hostname, unsigned int port,
userName
=
_userName
;
userName
=
_userName
;
password
=
_password
;
password
=
_password
;
QString
clientid
=
settingsCache
->
getClientID
();
lastHostname
=
hostname
;
lastHostname
=
hostname
;
lastPort
=
port
;
lastPort
=
port
;
...
...
cockatrice/src/settingscache.cpp
View file @
52db13a1
...
@@ -85,9 +85,7 @@ SettingsCache::SettingsCache()
...
@@ -85,9 +85,7 @@ SettingsCache::SettingsCache()
masterVolume
=
settings
->
value
(
"sound/mastervolume"
,
100
).
toInt
();
masterVolume
=
settings
->
value
(
"sound/mastervolume"
,
100
).
toInt
();
cardInfoViewMode
=
settings
->
value
(
"cards/cardinfoviewmode"
,
0
).
toInt
();
cardInfoViewMode
=
settings
->
value
(
"cards/cardinfoviewmode"
,
0
).
toInt
();
highlightWords
=
settings
->
value
(
"personal/highlightWords"
,
QString
()).
toString
();
highlightWords
=
settings
->
value
(
"personal/highlightWords"
,
QString
()).
toString
();
gameDescription
=
settings
->
value
(
"game/gamedescription"
,
""
).
toString
();
gameDescription
=
settings
->
value
(
"game/gamedescription"
,
""
).
toString
();
maxPlayers
=
settings
->
value
(
"game/maxplayers"
,
2
).
toInt
();
maxPlayers
=
settings
->
value
(
"game/maxplayers"
,
2
).
toInt
();
gameTypes
=
settings
->
value
(
"game/gametypes"
,
""
).
toString
();
gameTypes
=
settings
->
value
(
"game/gametypes"
,
""
).
toString
();
...
@@ -97,6 +95,8 @@ SettingsCache::SettingsCache()
...
@@ -97,6 +95,8 @@ SettingsCache::SettingsCache()
spectatorsNeedPassword
=
settings
->
value
(
"game/spectatorsneedpassword"
,
false
).
toBool
();
spectatorsNeedPassword
=
settings
->
value
(
"game/spectatorsneedpassword"
,
false
).
toBool
();
spectatorsCanTalk
=
settings
->
value
(
"game/spectatorscantalk"
,
false
).
toBool
();
spectatorsCanTalk
=
settings
->
value
(
"game/spectatorscantalk"
,
false
).
toBool
();
spectatorsCanSeeEverything
=
settings
->
value
(
"game/spectatorscanseeeverything"
,
false
).
toBool
();
spectatorsCanSeeEverything
=
settings
->
value
(
"game/spectatorscanseeeverything"
,
false
).
toBool
();
clientID
=
settings
->
value
(
"personal/clientid"
,
"notset"
).
toString
();
}
}
void
SettingsCache
::
setCardInfoViewMode
(
const
int
_viewMode
)
{
void
SettingsCache
::
setCardInfoViewMode
(
const
int
_viewMode
)
{
...
@@ -424,6 +424,12 @@ void SettingsCache::setPixmapCacheSize(const int _pixmapCacheSize)
...
@@ -424,6 +424,12 @@ void SettingsCache::setPixmapCacheSize(const int _pixmapCacheSize)
emit
pixmapCacheSizeChanged
(
pixmapCacheSize
);
emit
pixmapCacheSizeChanged
(
pixmapCacheSize
);
}
}
void
SettingsCache
::
setClientID
(
QString
_clientID
)
{
clientID
=
_clientID
;
settings
->
setValue
(
"personal/clientid"
,
clientID
);
}
QStringList
SettingsCache
::
getCountries
()
const
QStringList
SettingsCache
::
getCountries
()
const
{
{
static
QStringList
countries
=
QStringList
()
static
QStringList
countries
=
QStringList
()
...
...
cockatrice/src/settingscache.h
View file @
52db13a1
...
@@ -79,6 +79,7 @@ private:
...
@@ -79,6 +79,7 @@ private:
QString
picUrlHq
;
QString
picUrlHq
;
QString
picUrlFallback
;
QString
picUrlFallback
;
QString
picUrlHqFallback
;
QString
picUrlHqFallback
;
QString
clientID
;
bool
attemptAutoConnect
;
bool
attemptAutoConnect
;
int
pixmapCacheSize
;
int
pixmapCacheSize
;
bool
scaleCards
;
bool
scaleCards
;
...
@@ -169,6 +170,8 @@ public:
...
@@ -169,6 +170,8 @@ public:
bool
getSpectatorsCanTalk
()
const
{
return
spectatorsCanTalk
;
}
bool
getSpectatorsCanTalk
()
const
{
return
spectatorsCanTalk
;
}
bool
getSpectatorsCanSeeEverything
()
const
{
return
spectatorsCanSeeEverything
;
}
bool
getSpectatorsCanSeeEverything
()
const
{
return
spectatorsCanSeeEverything
;
}
int
getKeepAlive
()
const
{
return
keepalive
;
}
int
getKeepAlive
()
const
{
return
keepalive
;
}
void
setClientID
(
QString
clientID
);
QString
getClientID
()
{
return
clientID
;
}
public
slots
:
public
slots
:
void
setMainWindowGeometry
(
const
QByteArray
&
_mainWindowGeometry
);
void
setMainWindowGeometry
(
const
QByteArray
&
_mainWindowGeometry
);
void
setLang
(
const
QString
&
_lang
);
void
setLang
(
const
QString
&
_lang
);
...
...
common/pb/response.proto
View file @
52db13a1
message
Response
{
message
Response
{
enum
ResponseCode
{
enum
ResponseCode
{
RespNotConnected
=
-
1
;
RespNotConnected
=
-
1
;
RespNothing
=
0
;
RespNothing
=
0
;
RespOk
=
1
;
RespOk
=
1
;
RespNotInRoom
=
2
;
RespNotInRoom
=
2
;
RespInternalError
=
3
;
RespInternalError
=
3
;
RespInvalidCommand
=
4
;
RespInvalidCommand
=
4
;
RespInvalidData
=
5
;
RespInvalidData
=
5
;
RespNameNotFound
=
6
;
RespNameNotFound
=
6
;
RespLoginNeeded
=
7
;
RespLoginNeeded
=
7
;
RespFunctionNotAllowed
=
8
;
RespFunctionNotAllowed
=
8
;
RespGameNotStarted
=
9
;
RespGameNotStarted
=
9
;
RespGameFull
=
10
;
RespGameFull
=
10
;
RespContextError
=
11
;
RespContextError
=
11
;
RespWrongPassword
=
12
;
RespWrongPassword
=
12
;
RespSpectatorsNotAllowed
=
13
;
RespSpectatorsNotAllowed
=
13
;
RespOnlyBuddies
=
14
;
RespOnlyBuddies
=
14
;
RespUserLevelTooLow
=
15
;
RespUserLevelTooLow
=
15
;
RespInIgnoreList
=
16
;
RespInIgnoreList
=
16
;
RespWouldOverwriteOldSession
=
17
;
RespWouldOverwriteOldSession
=
17
;
RespChatFlood
=
18
;
RespChatFlood
=
18
;
RespUserIsBanned
=
19
;
RespUserIsBanned
=
19
;
RespAccessDenied
=
20
;
RespAccessDenied
=
20
;
RespUsernameInvalid
=
21
;
RespUsernameInvalid
=
21
;
RespRegistrationRequired
=
22
;
RespRegistrationRequired
=
22
;
RespRegistrationAccepted
=
23
;
// Server agrees to process client's registration request
RespRegistrationAccepted
=
23
;
// Server agrees to process client's registration request
RespUserAlreadyExists
=
24
;
// Client attempted to register a name which is already registered
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
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
RespTooManyRequests
=
26
;
// Server refused to complete command because client has sent too many too quickly
RespPasswordTooShort
=
27
;
// Server requires a decent password
RespPasswordTooShort
=
27
;
// Server requires a decent password
RespAccountNotActivated
=
28
;
// Client attempted to log into a registered username but the account hasn't been activated
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
RespRegistrationDisabled
=
29
;
// Server does not allow clients to register
RespRegistrationFailed
=
30
;
// Server accepted a reg request but failed to perform the registration
RespRegistrationFailed
=
30
;
// Server accepted a reg request but failed to perform the registration
RespActivationAccepted
=
31
;
// Server accepted a reg user activation token
RespActivationAccepted
=
31
;
// Server accepted a reg user activation token
RespActivationFailed
=
32
;
// Server didn't accept 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
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
;
enum
ResponseType
{
LIST_USERS
=
1001
;
JOIN_ROOM
=
1000
;
GET_GAMES_OF_USER
=
1002
;
LIST_USERS
=
1001
;
GET_USER_INFO
=
1003
;
GET_GAMES_OF_USER
=
1002
;
DUMP_ZONE
=
1004
;
GET_USER_INFO
=
1003
;
LOGIN
=
1005
;
DUMP_ZONE
=
1004
;
DECK_LIST
=
1006
;
LOGIN
=
1005
;
DECK_DOWNLOAD
=
1007
;
DECK_LIST
=
1006
;
DECK_UPLOAD
=
1008
;
DECK_DOWNLOAD
=
1007
;
REGISTER
=
1009
;
DECK_UPLOAD
=
1008
;
ACTIVATE
=
1010
;
REGISTER
=
1009
;
REPLAY_LIST
=
1100
;
ACTIVATE
=
1010
;
REPLAY_DOWNLOAD
=
1101
;
REPLAY_LIST
=
1100
;
}
REPLAY_DOWNLOAD
=
1101
;
required
uint64
cmd_id
=
1
;
}
optional
ResponseCode
response_code
=
2
;
required
uint64
cmd_id
=
1
;
optional
ResponseCode
response_code
=
2
;
extensions
100
to
max
;
extensions
100
to
max
;
}
}
common/pb/session_commands.proto
View file @
52db13a1
import
"serverinfo_user.proto"
;
import
"serverinfo_user.proto"
;
message
SessionCommand
{
message
SessionCommand
{
enum
SessionCommandType
{
enum
SessionCommandType
{
PING
=
1000
;
PING
=
1000
;
LOGIN
=
1001
;
LOGIN
=
1001
;
MESSAGE
=
1002
;
MESSAGE
=
1002
;
LIST_USERS
=
1003
;
LIST_USERS
=
1003
;
GET_GAMES_OF_USER
=
1004
;
GET_GAMES_OF_USER
=
1004
;
GET_USER_INFO
=
1005
;
GET_USER_INFO
=
1005
;
ADD_TO_LIST
=
1006
;
ADD_TO_LIST
=
1006
;
REMOVE_FROM_LIST
=
1007
;
REMOVE_FROM_LIST
=
1007
;
DECK_LIST
=
1008
;
DECK_LIST
=
1008
;
DECK_NEW_DIR
=
1009
;
DECK_NEW_DIR
=
1009
;
DECK_DEL_DIR
=
1010
;
DECK_DEL_DIR
=
1010
;
DECK_DEL
=
1011
;
DECK_DEL
=
1011
;
DECK_DOWNLOAD
=
1012
;
DECK_DOWNLOAD
=
1012
;
DECK_UPLOAD
=
1013
;
DECK_UPLOAD
=
1013
;
LIST_ROOMS
=
1014
;
LIST_ROOMS
=
1014
;
JOIN_ROOM
=
1015
;
JOIN_ROOM
=
1015
;
REGISTER
=
1016
;
REGISTER
=
1016
;
ACTIVATE
=
1017
;
ACTIVATE
=
1017
;
ACCOUNT_EDIT
=
1018
;
ACCOUNT_EDIT
=
1018
;
ACCOUNT_IMAGE
=
1019
;
ACCOUNT_IMAGE
=
1019
;
ACCOUNT_PASSWORD
=
1020
;
ACCOUNT_PASSWORD
=
1020
;
REPLAY_LIST
=
1100
;
REPLAY_LIST
=
1100
;
REPLAY_DOWNLOAD
=
1101
;
REPLAY_DOWNLOAD
=
1101
;
REPLAY_MODIFY_MATCH
=
1102
;
REPLAY_MODIFY_MATCH
=
1102
;
REPLAY_DELETE_MATCH
=
1103
;
REPLAY_DELETE_MATCH
=
1103
;
}
}
extensions
100
to
max
;
extensions
100
to
max
;
}
}
message
Command_Ping
{
message
Command_Ping
{
extend
SessionCommand
{
extend
SessionCommand
{
optional
Command_Ping
ext
=
1000
;
optional
Command_Ping
ext
=
1000
;
}
}
}
}
message
Command_Login
{
message
Command_Login
{
extend
SessionCommand
{
extend
SessionCommand
{
optional
Command_Login
ext
=
1001
;
optional
Command_Login
ext
=
1001
;
}
}
optional
string
user_name
=
1
;
optional
string
user_name
=
1
;
optional
string
password
=
2
;
optional
string
password
=
2
;
optional
string
clientid
=
3
;
}
}
message
Command_Message
{
message
Command_Message
{
extend
SessionCommand
{
extend
SessionCommand
{
optional
Command_Message
ext
=
1002
;
optional
Command_Message
ext
=
1002
;
}
}
optional
string
user_name
=
1
;
optional
string
user_name
=
1
;
optional
string
message
=
2
;
optional
string
message
=
2
;
}
}
message
Command_ListUsers
{
message
Command_ListUsers
{
extend
SessionCommand
{
extend
SessionCommand
{
optional
Command_ListUsers
ext
=
1003
;
optional
Command_ListUsers
ext
=
1003
;
}
}
}
}
message
Command_GetGamesOfUser
{
message
Command_GetGamesOfUser
{
extend
SessionCommand
{
extend
SessionCommand
{
optional
Command_GetGamesOfUser
ext
=
1004
;
optional
Command_GetGamesOfUser
ext
=
1004
;
}
}
optional
string
user_name
=
1
;
optional
string
user_name
=
1
;
}
}
message
Command_GetUserInfo
{
message
Command_GetUserInfo
{
extend
SessionCommand
{
extend
SessionCommand
{
optional
Command_GetUserInfo
ext
=
1005
;
optional
Command_GetUserInfo
ext
=
1005
;
}
}
optional
string
user_name
=
1
;
optional
string
user_name
=
1
;
}
}
message
Command_AddToList
{
message
Command_AddToList
{
extend
SessionCommand
{
extend
SessionCommand
{
optional
Command_AddToList
ext
=
1006
;
optional
Command_AddToList
ext
=
1006
;
}
}
optional
string
list
=
1
;
optional
string
list
=
1
;
optional
string
user_name
=
2
;
optional
string
user_name
=
2
;
}
}
message
Command_RemoveFromList
{
message
Command_RemoveFromList
{
extend
SessionCommand
{
extend
SessionCommand
{
optional
Command_RemoveFromList
ext
=
1007
;
optional
Command_RemoveFromList
ext
=
1007
;
}
}
optional
string
list
=
1
;
optional
string
list
=
1
;
optional
string
user_name
=
2
;
optional
string
user_name
=
2
;
}
}
message
Command_ListRooms
{
message
Command_ListRooms
{
extend
SessionCommand
{
extend
SessionCommand
{
optional
Command_ListRooms
ext
=
1014
;
optional
Command_ListRooms
ext
=
1014
;
}
}
}
}
message
Command_JoinRoom
{
message
Command_JoinRoom
{
extend
SessionCommand
{
extend
SessionCommand
{
optional
Command_JoinRoom
ext
=
1015
;
optional
Command_JoinRoom
ext
=
1015
;
}
}
optional
uint32
room_id
=
1
;
optional
uint32
room_id
=
1
;
}
}
// User wants to register a new account
// User wants to register a new account
message
Command_Register
{
message
Command_Register
{
extend
SessionCommand
{
extend
SessionCommand
{
optional
Command_Register
ext
=
1016
;
optional
Command_Register
ext
=
1016
;
}
}
// User name client wants to register
// User name client wants to register
required
string
user_name
=
1
;
required
string
user_name
=
1
;
// Hashed password to be inserted into database
// Hashed password to be inserted into database
required
string
password
=
2
;
required
string
password
=
2
;
// Email address of the client for user validation
// Email address of the client for user validation
optional
string
email
=
3
;
optional
string
email
=
3
;
// Gender of the user
// Gender of the user
optional
ServerInfo_User.Gender
gender
=
4
;
optional
ServerInfo_User.Gender
gender
=
4
;
// Country code of the user. 2 letter ISO format
// Country code of the user. 2 letter ISO format
optional
string
country
=
5
;
optional
string
country
=
5
;
optional
string
real_name
=
6
;
optional
string
real_name
=
6
;
}
}
// User wants to activate an account
// User wants to activate an account
message
Command_Activate
{
message
Command_Activate
{
extend
SessionCommand
{
extend
SessionCommand
{
optional
Command_Activate
ext
=
1017
;
optional
Command_Activate
ext
=
1017
;
}
}
// User name client wants to activate
// User name client wants to activate
required
string
user_name
=
1
;
required
string
user_name
=
1
;
// Activation token
// Activation token
required
string
token
=
2
;
required
string
token
=
2
;
}
}
message
Command_AccountEdit
{
message
Command_AccountEdit
{
extend
SessionCommand
{
extend
SessionCommand
{
optional
Command_AccountEdit
ext
=
1018
;
optional
Command_AccountEdit
ext
=
1018
;
}
}
optional
string
real_name
=
1
;
optional
string
real_name
=
1
;
optional
string
email
=
2
;
optional
string
email
=
2
;
optional
ServerInfo_User.Gender
gender
=
3
;
optional
ServerInfo_User.Gender
gender
=
3
;
optional
string
country
=
4
;
optional
string
country
=
4
;
}
}
message
Command_AccountImage
{
message
Command_AccountImage
{
extend
SessionCommand
{
extend
SessionCommand
{
optional
Command_AccountImage
ext
=
1019
;
optional
Command_AccountImage
ext
=
1019
;
}
}
optional
bytes
image
=
1
;
optional
bytes
image
=
1
;
}
}
message
Command_AccountPassword
{
message
Command_AccountPassword
{
extend
SessionCommand
{
extend
SessionCommand
{
optional
Command_AccountPassword
ext
=
1020
;
optional
Command_AccountPassword
ext
=
1020
;
}
}
optional
string
old_password
=
1
;
optional
string
old_password
=
1
;
optional
string
new_password
=
2
;
optional
string
new_password
=
2
;
}
}
\ No newline at end of file
common/server.cpp
View file @
52db13a1
...
@@ -103,7 +103,7 @@ Server_DatabaseInterface *Server::getDatabaseInterface() const
...
@@ -103,7 +103,7 @@ Server_DatabaseInterface *Server::getDatabaseInterface() const
return
databaseInterfaces
.
value
(
QThread
::
currentThread
());
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
)
if
(
name
.
size
()
>
35
)
name
=
name
.
left
(
35
);
name
=
name
.
left
(
35
);
...
@@ -123,6 +123,8 @@ AuthenticationResult Server::loginUser(Server_ProtocolHandler *session, QString
...
@@ -123,6 +123,8 @@ AuthenticationResult Server::loginUser(Server_ProtocolHandler *session, QString
databaseInterface
->
lockSessionTables
();
databaseInterface
->
lockSessionTables
();
if
(
authState
==
PasswordRight
)
{
if
(
authState
==
PasswordRight
)
{
// verify that new session would not cause problems with older existing session
if
(
users
.
contains
(
name
)
||
databaseInterface
->
userSessionExists
(
name
))
{
if
(
users
.
contains
(
name
)
||
databaseInterface
->
userSessionExists
(
name
))
{
qDebug
(
"Login denied: would overwrite old session"
);
qDebug
(
"Login denied: would overwrite old session"
);
databaseInterface
->
unlockSessionTables
();
databaseInterface
->
unlockSessionTables
();
...
@@ -168,6 +170,15 @@ AuthenticationResult Server::loginUser(Server_ProtocolHandler *session, QString
...
@@ -168,6 +170,15 @@ AuthenticationResult Server::loginUser(Server_ProtocolHandler *session, QString
event
.
mutable_user_info
()
->
CopyFrom
(
session
->
copyUserInfo
(
true
,
true
,
true
));
event
.
mutable_user_info
()
->
CopyFrom
(
session
->
copyUserInfo
(
true
,
true
,
true
));
locker
.
unlock
();
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
);
se
=
Server_ProtocolHandler
::
prepareSessionEvent
(
event
);
sendIsl_SessionEvent
(
*
se
);
sendIsl_SessionEvent
(
*
se
);
delete
se
;
delete
se
;
...
...
common/server.h
View file @
52db13a1
...
@@ -44,7 +44,7 @@ public:
...
@@ -44,7 +44,7 @@ public:
Server
(
bool
_threaded
,
QObject
*
parent
=
0
);
Server
(
bool
_threaded
,
QObject
*
parent
=
0
);
~
Server
();
~
Server
();
void
setThreaded
(
bool
_threaded
)
{
threaded
=
_threaded
;
}
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
;
}
const
QMap
<
int
,
Server_Room
*>
&
getRooms
()
{
return
rooms
;
}
...
...
common/server_database_interface.h
View file @
52db13a1
...
@@ -41,6 +41,7 @@ public:
...
@@ -41,6 +41,7 @@ public:
virtual
bool
getRequireRegistration
()
{
return
false
;
}
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
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
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
};
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 */
)
{
};
virtual
void
logMessage
(
const
int
/* senderId */
,
const
QString
&
/* senderName */
,
const
QString
&
/* senderIp */
,
const
QString
&
/* logMessage */
,
LogMessage_TargetType
/* targetType */
,
const
int
/* targetId */
,
const
QString
&
/* targetName */
)
{
};
...
...
common/server_protocolhandler.cpp
View file @
52db13a1
...
@@ -381,11 +381,12 @@ Response::ResponseCode Server_ProtocolHandler::cmdPing(const Command_Ping & /*cm
...
@@ -381,11 +381,12 @@ Response::ResponseCode Server_ProtocolHandler::cmdPing(const Command_Ping & /*cm
Response
::
ResponseCode
Server_ProtocolHandler
::
cmdLogin
(
const
Command_Login
&
cmd
,
ResponseContainer
&
rc
)
Response
::
ResponseCode
Server_ProtocolHandler
::
cmdLogin
(
const
Command_Login
&
cmd
,
ResponseContainer
&
rc
)
{
{
QString
userName
=
QString
::
fromStdString
(
cmd
.
user_name
()).
simplified
();
QString
userName
=
QString
::
fromStdString
(
cmd
.
user_name
()).
simplified
();
QString
clientid
=
QString
::
fromStdString
(
cmd
.
clientid
()).
simplified
();
if
(
userName
.
isEmpty
()
||
(
userInfo
!=
0
))
if
(
userName
.
isEmpty
()
||
(
userInfo
!=
0
))
return
Response
::
RespContextError
;
return
Response
::
RespContextError
;
QString
reasonStr
;
QString
reasonStr
;
int
banSecondsLeft
=
0
;
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
)
{
switch
(
res
)
{
case
UserIsBanned
:
{
case
UserIsBanned
:
{
Response_Login
*
re
=
new
Response_Login
;
Response_Login
*
re
=
new
Response_Login
;
...
...
servatrice/servatrice.sql
View file @
52db13a1
...
@@ -20,7 +20,7 @@ CREATE TABLE IF NOT EXISTS `cockatrice_schema_version` (
...
@@ -20,7 +20,7 @@ CREATE TABLE IF NOT EXISTS `cockatrice_schema_version` (
PRIMARY
KEY
(
`version`
)
PRIMARY
KEY
(
`version`
)
)
ENGINE
=
MyISAM
DEFAULT
CHARSET
=
utf8
;
)
ENGINE
=
MyISAM
DEFAULT
CHARSET
=
utf8
;
INSERT
INTO
cockatrice_schema_version
VALUES
(
1
);
INSERT
INTO
cockatrice_schema_version
VALUES
(
3
);
CREATE
TABLE
IF
NOT
EXISTS
`cockatrice_decklist_files`
(
CREATE
TABLE
IF
NOT
EXISTS
`cockatrice_decklist_files`
(
`id`
int
(
7
)
unsigned
zerofill
NOT
NULL
auto_increment
,
`id`
int
(
7
)
unsigned
zerofill
NOT
NULL
auto_increment
,
...
@@ -83,6 +83,7 @@ CREATE TABLE IF NOT EXISTS `cockatrice_users` (
...
@@ -83,6 +83,7 @@ CREATE TABLE IF NOT EXISTS `cockatrice_users` (
`registrationDate`
datetime
NOT
NULL
,
`registrationDate`
datetime
NOT
NULL
,
`active`
tinyint
(
1
)
NOT
NULL
,
`active`
tinyint
(
1
)
NOT
NULL
,
`token`
binary
(
16
)
NOT
NULL
,
`token`
binary
(
16
)
NOT
NULL
,
`clientid`
varchar
(
15
)
NOT
NULL
,
PRIMARY
KEY
(
`id`
),
PRIMARY
KEY
(
`id`
),
UNIQUE
KEY
`name`
(
`name`
),
UNIQUE
KEY
`name`
(
`name`
),
KEY
`token`
(
`token`
),
KEY
`token`
(
`token`
),
...
...
servatrice/src/servatrice_database_interface.cpp
View file @
52db13a1
...
@@ -811,20 +811,33 @@ bool Servatrice_DatabaseInterface::changeUserPassword(const QString &user, const
...
@@ -811,20 +811,33 @@ bool Servatrice_DatabaseInterface::changeUserPassword(const QString &user, const
int
Servatrice_DatabaseInterface
::
getActiveUserCount
()
int
Servatrice_DatabaseInterface
::
getActiveUserCount
()
{
{
int
userCount
=
0
;
int
userCount
=
0
;
if
(
!
checkSql
())
if
(
!
checkSql
())
return
userCount
;
return
userCount
;
QSqlQuery
*
query
=
prepareQuery
(
"select count(*) from {prefix}_sessions where id_server = :serverid AND end_time is NULL"
);
QSqlQuery
*
query
=
prepareQuery
(
"select count(*) from {prefix}_sessions where id_server = :serverid AND end_time is NULL"
);
query
->
bindValue
(
":serverid"
,
server
->
getServerId
());
query
->
bindValue
(
":serverid"
,
server
->
getServerId
());
if
(
!
execSqlQuery
(
query
)){
if
(
!
execSqlQuery
(
query
)){
return
userCount
;
return
userCount
;
}
}
if
(
query
->
next
()){
if
(
query
->
next
()){
userCount
=
query
->
value
(
0
).
toInt
();
userCount
=
query
->
value
(
0
).
toInt
();
}
}
return
userCount
;
return
userCount
;
}
}
\ No newline at end of file
void
Servatrice_DatabaseInterface
::
updateUsersClientID
(
const
QString
&
userName
,
const
QString
&
userClientID
)
{
if
(
!
checkSql
())
return
;
QSqlQuery
*
query
=
prepareQuery
(
"update {prefix}_users set clientid = :clientid where name = :username"
);
query
->
bindValue
(
":clientid"
,
userClientID
);
query
->
bindValue
(
":username"
,
userName
);
execSqlQuery
(
query
);
}
servatrice/src/servatrice_database_interface.h
View file @
52db13a1
...
@@ -9,7 +9,7 @@
...
@@ -9,7 +9,7 @@
#include
"server.h"
#include
"server.h"
#include
"server_database_interface.h"
#include
"server_database_interface.h"
#define DATABASE_SCHEMA_VERSION
2
#define DATABASE_SCHEMA_VERSION
3
class
Servatrice
;
class
Servatrice
;
...
@@ -72,7 +72,7 @@ public:
...
@@ -72,7 +72,7 @@ public:
bool
registerUser
(
const
QString
&
userName
,
const
QString
&
realName
,
ServerInfo_User_Gender
const
&
gender
,
bool
registerUser
(
const
QString
&
userName
,
const
QString
&
realName
,
ServerInfo_User_Gender
const
&
gender
,
const
QString
&
password
,
const
QString
&
emailAddress
,
const
QString
&
country
,
QString
&
token
,
bool
active
=
false
);
const
QString
&
password
,
const
QString
&
emailAddress
,
const
QString
&
country
,
QString
&
token
,
bool
active
=
false
);
bool
activateUser
(
const
QString
&
userName
,
const
QString
&
token
);
bool
activateUser
(
const
QString
&
userName
,
const
QString
&
token
);
void
updateUsersClientID
(
const
QString
&
userName
,
const
QString
&
userClientID
);
void
logMessage
(
const
int
senderId
,
const
QString
&
senderName
,
const
QString
&
senderIp
,
const
QString
&
logMessage
,
void
logMessage
(
const
int
senderId
,
const
QString
&
senderName
,
const
QString
&
senderIp
,
const
QString
&
logMessage
,
LogMessage_TargetType
targetType
,
const
int
targetId
,
const
QString
&
targetName
);
LogMessage_TargetType
targetType
,
const
int
targetId
,
const
QString
&
targetName
);
bool
changeUserPassword
(
const
QString
&
user
,
const
QString
&
oldPassword
,
const
QString
&
newPassword
);
bool
changeUserPassword
(
const
QString
&
user
,
const
QString
&
oldPassword
,
const
QString
&
newPassword
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment