|
@@ -14,38 +14,42 @@ const OPTIONS_PASSWORD = [
|
|
'threads' => 64,
|
|
'threads' => 64,
|
|
];
|
|
];
|
|
|
|
|
|
|
|
+function checkUsernameFormat($username) {
|
|
|
|
+ if (preg_match('/' . USERNAME_REGEX . '/Du', $username) !== 1)
|
|
|
|
+ output(403, 'Username malformed.');
|
|
|
|
+}
|
|
|
|
+
|
|
function checkPasswordFormat($password) {
|
|
function checkPasswordFormat($password) {
|
|
if (preg_match('/' . PASSWORD_REGEX . '/Du', $password) !== 1)
|
|
if (preg_match('/' . PASSWORD_REGEX . '/Du', $password) !== 1)
|
|
output(403, 'Password malformed.');
|
|
output(403, 'Password malformed.');
|
|
}
|
|
}
|
|
|
|
|
|
-function checkUsernameFormat($username) {
|
|
|
|
- if (preg_match('/' . USERNAME_REGEX . '/Du', $username) !== 1)
|
|
|
|
- output(403, 'Username malformed.');
|
|
|
|
|
|
+function hashUsername($username) {
|
|
|
|
+ return base64_encode(sodium_crypto_pwhash(32, $username, hex2bin(query('select', 'params', ['name' => 'username_salt'], 'value')[0]), 2**10, 2**14, SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13));
|
|
}
|
|
}
|
|
|
|
|
|
function hashPassword($password) {
|
|
function hashPassword($password) {
|
|
return password_hash($password, ALGO_PASSWORD, OPTIONS_PASSWORD);
|
|
return password_hash($password, ALGO_PASSWORD, OPTIONS_PASSWORD);
|
|
}
|
|
}
|
|
|
|
|
|
-function userExist($username) {
|
|
|
|
- return isset(query('select', 'users', ['username' => $username], 'username')[0]);
|
|
|
|
|
|
+function usernameExists($username) {
|
|
|
|
+ return isset(query('select', 'users', ['username' => $username], 'id')[0]);
|
|
}
|
|
}
|
|
|
|
|
|
-function checkPassword($username, $password) {
|
|
|
|
- return password_verify($password, query('select', 'users', ['username' => $username], 'password')[0]);
|
|
|
|
|
|
+function checkPassword($id, $password) {
|
|
|
|
+ return password_verify($password, query('select', 'users', ['id' => $id], 'password')[0]);
|
|
}
|
|
}
|
|
|
|
|
|
-function outdatedPasswordHash($username) {
|
|
|
|
- return password_needs_rehash(query('select', 'users', ['username' => $username], 'password')[0], ALGO_PASSWORD, OPTIONS_PASSWORD);
|
|
|
|
|
|
+function outdatedPasswordHash($id) {
|
|
|
|
+ return password_needs_rehash(query('select', 'users', ['id' => $id], 'password')[0], ALGO_PASSWORD, OPTIONS_PASSWORD);
|
|
}
|
|
}
|
|
|
|
|
|
-function changePassword($username, $password) {
|
|
|
|
|
|
+function changePassword($id, $password) {
|
|
$db = new PDO('sqlite:' . DB_PATH);
|
|
$db = new PDO('sqlite:' . DB_PATH);
|
|
|
|
|
|
- $stmt = $db->prepare('UPDATE users SET password = :password WHERE username = :username');
|
|
|
|
|
|
+ $stmt = $db->prepare('UPDATE users SET password = :password WHERE id = :id');
|
|
|
|
|
|
- $stmt->bindValue(':username', $username);
|
|
|
|
|
|
+ $stmt->bindValue(':id', $id);
|
|
$stmt->bindValue(':password', hashPassword($password));
|
|
$stmt->bindValue(':password', hashPassword($password));
|
|
|
|
|
|
$stmt->execute();
|
|
$stmt->execute();
|
|
@@ -61,7 +65,7 @@ function rateLimit() {
|
|
|
|
|
|
function rateLimitAccount($requestedTokens) {
|
|
function rateLimitAccount($requestedTokens) {
|
|
// Get
|
|
// Get
|
|
- $userData = query('select', 'users', ['username' => $_SESSION['username']]);
|
|
|
|
|
|
+ $userData = query('select', 'users', ['id' => $_SESSION['id']]);
|
|
$tokens = $userData[0]['bucket_tokens'];
|
|
$tokens = $userData[0]['bucket_tokens'];
|
|
$bucketLastUpdate = $userData[0]['bucket_last_update'];
|
|
$bucketLastUpdate = $userData[0]['bucket_last_update'];
|
|
|
|
|
|
@@ -75,8 +79,8 @@ function rateLimitAccount($requestedTokens) {
|
|
|
|
|
|
// Update
|
|
// Update
|
|
$db = new PDO('sqlite:' . DB_PATH);
|
|
$db = new PDO('sqlite:' . DB_PATH);
|
|
- $stmt = $db->prepare('UPDATE users SET bucket_tokens = :bucket_tokens, bucket_last_update = :bucket_last_update WHERE username = :username');
|
|
|
|
- $stmt->bindValue(':username', $_SESSION['username']);
|
|
|
|
|
|
+ $stmt = $db->prepare('UPDATE users SET bucket_tokens = :bucket_tokens, bucket_last_update = :bucket_last_update WHERE id = :id');
|
|
|
|
+ $stmt->bindValue(':id', $_SESSION['id']);
|
|
$stmt->bindValue(':bucket_tokens', $tokens);
|
|
$stmt->bindValue(':bucket_tokens', $tokens);
|
|
$stmt->bindValue(':bucket_last_update', time());
|
|
$stmt->bindValue(':bucket_last_update', time());
|
|
$stmt->execute();
|
|
$stmt->execute();
|