Skip to content

Commit 9235eab

Browse files
committed
feat(a2): implement identify backend
1 parent 4da7369 commit 9235eab

File tree

2 files changed

+66
-6
lines changed

2 files changed

+66
-6
lines changed

a2/resources.php

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,62 @@ function signup(&$request, &$response, &$db, &$pdo)
197197
function identify(&$request, &$response, &$db, &$pdo)
198198
{
199199
$username = $request->param("username"); // The username
200+
$username = strtolower($username);
201+
202+
$get_login_info_by_username = $db->get_login_info_by_username;
203+
$get_login_info_by_username->execute(array('username' => $username));
204+
$user = $get_login_info_by_username->fetch();
205+
206+
// Check if user exists
207+
if ($user) {
208+
// Check if user is valid
209+
if ($user["valid"] === "1") {
210+
// Check if challenge exists and is not expired
211+
$challenge = $user["challenge"];
212+
213+
if ($challenge && new DateTime() < date_create_from_format(DateTimeInterface::ISO8601, $user["expires"])) {
214+
log_to_console("Used existing challenge!");
215+
} else {
216+
// Generate new challenge, update expires
217+
$challenge = md5(rand()) . md5(rand());
218+
$expires = new DateTime("+2 minutes");
219+
$expires = $expires->format(DateTimeInterface::ISO8601);
220+
221+
$result = $db->update_login_info_by_username->execute(array(
222+
'challenge' => $challenge,
223+
'expires' => $expires,
224+
'username' => $username
225+
));
226+
227+
if (!$result) {
228+
$response->set_http_code(500);
229+
$response->failure("Failed to identify user.");
230+
log_to_console("Cannot update challenge in database.");
231+
232+
return false;
233+
}
234+
235+
log_to_console("Updated challenge!");
236+
}
237+
238+
$salt = $user["salt"];
239+
// Set data
240+
$response->set_data("salt", $salt);
241+
$response->set_data("challenge", $challenge);
242+
} else {
243+
$response->set_http_code(400);
244+
$response->failure("Failed to identify user.");
245+
log_to_console("User is not valid.");
246+
247+
return false;
248+
}
249+
} else {
250+
$response->set_http_code(400);
251+
$response->failure("Failed to identify user.");
252+
log_to_console("User does not exist.");
253+
254+
return false;
255+
}
200256

201257
$response->set_http_code(200);
202258
$response->success("Successfully identified user.");

a2/server.php

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,15 @@ public function __call($method, $arguments)
6363
$pdo->beginTransaction();
6464

6565
$db->create_user->execute(array(
66-
'username' => $pdo->quote($username),
67-
'passwd' => $pdo->quote($passwd),
68-
'email' => $pdo->quote($email),
69-
'modified' => $pdo->quote($modified)
66+
'username' => $username,
67+
'passwd' => $passwd,
68+
'email' => $email,
69+
'modified' => $modified
7070
));
7171

7272
$db->create_login_info->execute(array(
73-
'username' => $pdo->quote($username),
74-
'salt' => $pdo->quote($salt)
73+
'username' => $username,
74+
'salt' => $salt
7575
));
7676

7777
$pdo->commit();
@@ -85,6 +85,10 @@ public function __call($method, $arguments)
8585
}
8686
};
8787

88+
// identify
89+
$db->get_login_info_by_username = $pdo->prepare("SELECT valid, salt, challenge, expires FROM user LEFT OUTER JOIN user_login USING (username) WHERE username = :username");
90+
$db->update_login_info_by_username = $pdo->prepare("UPDATE user_login SET challenge = :challenge, expires = :expires WHERE username = :username");
91+
8892
$request = new Request($decoded_post_body);
8993
$response = null;
9094

0 commit comments

Comments
 (0)