Make username case-insensitive when logging in

Username will be fixed automatically if not in the right casing
Logins are always sent over https
Logins are stored and salted using bcrypt on the server-side (wraps around original md5), fixes #294
This commit is contained in:
jacob1 2021-04-24 22:39:56 -04:00
parent 2e16eecae0
commit 4e2e054c50

View File

@ -1207,26 +1207,17 @@ std::vector<unsigned char> Client::GetSaveData(int saveID, int saveDate)
LoginStatus Client::Login(ByteString username, ByteString password, User & user) LoginStatus Client::Login(ByteString username, ByteString password, User & user)
{ {
lastError = ""; lastError = "";
char passwordHash[33];
char totalHash[33];
user.UserID = 0; user.UserID = 0;
user.Username = ""; user.Username = "";
user.SessionID = ""; user.SessionID = "";
user.SessionKey = ""; user.SessionKey = "";
//Doop
md5_ascii(passwordHash, (const unsigned char *)password.c_str(), password.length());
passwordHash[32] = 0;
ByteString total = ByteString::Build(username, "-", passwordHash);
md5_ascii(totalHash, (const unsigned char *)(total.c_str()), total.size());
totalHash[32] = 0;
ByteString data; ByteString data;
int dataStatus; int dataStatus;
data = http::Request::Simple(SCHEME SERVER "/Login.json", &dataStatus, { data = http::Request::Simple("https://" SERVER "/Login.json", &dataStatus, {
{ "Username", username }, { "name", username },
{ "Hash", totalHash }, { "pass", password },
}); });
RequestStatus ret = ParseServerReturn(data, dataStatus, true); RequestStatus ret = ParseServerReturn(data, dataStatus, true);
@ -1238,6 +1229,7 @@ LoginStatus Client::Login(ByteString username, ByteString password, User & user)
Json::Value objDocument; Json::Value objDocument;
dataStream >> objDocument; dataStream >> objDocument;
ByteString usernameTemp = objDocument["Username"].asString();
int userIDTemp = objDocument["UserID"].asInt(); int userIDTemp = objDocument["UserID"].asInt();
ByteString sessionIDTemp = objDocument["SessionID"].asString(); ByteString sessionIDTemp = objDocument["SessionID"].asString();
ByteString sessionKeyTemp = objDocument["SessionKey"].asString(); ByteString sessionKeyTemp = objDocument["SessionKey"].asString();
@ -1253,7 +1245,7 @@ LoginStatus Client::Login(ByteString username, ByteString password, User & user)
AddServerNotification(item); AddServerNotification(item);
} }
user.Username = username; user.Username = usernameTemp;
user.UserID = userIDTemp; user.UserID = userIDTemp;
user.SessionID = sessionIDTemp; user.SessionID = sessionIDTemp;
user.SessionKey = sessionKeyTemp; user.SessionKey = sessionKeyTemp;