27.06.2020, 23:52
(
Last edited by SkyFlare; 28/06/2020 at 10:02 AM.
)
So I moved away from Whirlpool today.... well atleast I am trying to....
#include <bcrypt>
bCrypt is working, sort of... I can create an account but logging back in is the issue, however the hash has stored correctly in db.
I bet the issue is something stupid, thanks in advance.
#include <bcrypt>
bCrypt is working, sort of... I can create an account but logging back in is the issue, however the hash has stored correctly in db.
PHP Code:
enum E_PLAYERS
{
Name[MAX_PLAYER_NAME],
Password[BCRYPT_HASH_LENGTH] // bCrypt Hashingis a 61-character-long string (60 + null terminator), which is also defined as constant BCRYPT_HASH_LENGTH.
};
new Player[MAX_PLAYERS][E_PLAYERS];
PHP Code:
ONPLAYERCONNECT
new query[84];
new pname[MAX_PLAYER_NAME+1];
GetPlayerName(playerid, pname, sizeof(pname));
mysql_format(g_SQL, query, sizeof(query), "SELECT * FROM `players` WHERE `username` = '%e' LIMIT 1", pname);
mysql_tquery(g_SQL, query, "OnPlayerJoin", "dd", playerid, g_MysqlRaceCheck[playerid]);
PHP Code:
ONPLAYERJOIN
forward OnPlayerJoin(playerid, race_check);
public OnPlayerJoin(playerid, race_check)
{
if (race_check != g_MysqlRaceCheck[playerid]) return Kick(playerid);
new string[256];
new pname[MAX_PLAYER_NAME+1];
GetPlayerName(playerid, pname, sizeof(pname));
if(cache_num_rows() > 0)
{
cache_get_value(0, "password", Player[playerid][Password], 61);
Player[playerid][Cache_ID] = cache_save();
format(string, sizeof string, "This account (%s) is registered. Please login by entering your password in the field below:", pname);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", string, "Login", "Abort");
}
else
{
format(string, sizeof string, "Welcome %s, you can register by entering your password in the field below:", pname);
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration", string, "Register", "Abort");
}
return 1;
}
PHP Code:
ONDIALOGRESPONSE
case DIALOG_LOGIN:
{
new query[128], pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
SetPVarString(playerid, "Unhashed_Pass",inputtext);
mysql_format(g_SQL, query, sizeof(query), "SELECT password from `players` WHERE username = '%e'", pname);
mysql_tquery(g_SQL, query, "OnPlayerLogin", "d", playerid);
}
case DIALOG_REGISTER:
{
if(response)
{
if(strlen(inputtext) <= 5) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration", "Your password must be longer than 5 characters!\nPlease enter your password in the field below:", "Register", "Abort");
bcrypt_hash(inputtext, 12, "OnPassHash", "d", playerid);
}
}
PHP Code:
forward OnPlayerLogin(playerid);
public OnPlayerLogin(playerid)
{
new pPass[61], unhashed_pass[61];
GetPVarString(playerid, "Unhashed_Pass",unhashed_pass,sizeof(unhashed_pass));
if(cache_num_rows())
{
cache_get_value_name(0, "password", Player[playerid][Password], 60);
bcrypt_check(unhashed_pass, pPass, "OnPassCheck", "dd",playerid, Player[playerid][Password]);
}
else printf("ERROR: OnPlayerLogin, cant Cache_Num_Rows!");
return 1;
}
forward OnPassCheck(playerid, DBID);
public OnPassCheck(playerid, DBID)
{
if(bcrypt_is_equal())
{
SpawnPlayer(playerid);
return 1;
}
else
{
if(Player[playerid][LoginAttempts] >= 3)
{
ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_MSGBOX, "Login", "You've mistyped your password too often (3 times).", "Okay", "");
return 1;
}
else return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Wrong password!\nPlease enter your password in the field below:", "Login", "Abort");
}
}
forward OnPassHash(playerid);
public OnPassHash(playerid)
{
new pass[BCRYPT_HASH_LENGTH], query[512], pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
bcrypt_get_hash(pass);
mysql_format(g_SQL, query, sizeof(query), "INSERT INTO `players`(`username`, `password`) VALUES('%e', '%s')", pname, pass);
mysql_tquery(g_SQL, query, "OnPlayerRegister", "d", playerid);
return 1;
}
forward OnPlayerRegister(playerid);
public OnPlayerRegister(playerid)
{
return 1;
}