From 2a9ad78477648ce7bcf57b7214954e9dc959f92d Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Mon, 1 May 2017 14:29:22 -0600 Subject: [PATCH] Add more details to logging --- api.php | 38 ++++++++++++++++++++++++++++---------- database.mwb | Bin 14332 -> 14341 bytes index.php | 6 +++--- lib/login.php | 5 +++-- 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/api.php b/api.php index 6bdf63d..f973d23 100644 --- a/api.php +++ b/api.php @@ -15,19 +15,36 @@ header("Content-Type: application/json"); $key = $VARS['key']; if ($database->has('apikeys', ['key' => $key]) !== TRUE) { header("HTTP/1.1 403 Unauthorized"); + insertAuthLog(14, null, "Key: " . $key); die("\"403 Unauthorized\""); } +/** + * Get the API key with most of the characters replaced with *s. + * @global string $key + * @return string + */ +function getCensoredKey() { + global $key; + $resp = $key; + if (strlen($key) > 5) { + for ($i = 2; $i < strlen($key) - 2; $i++) { + $resp[$i] = "*"; + } + } + return $resp; +} + switch ($VARS['action']) { case "ping": exit(json_encode(["status" => "OK"])); break; case "auth": if (authenticate_user($VARS['username'], $VARS['password'])) { - insertAuthLog(12); + insertAuthLog(12, null, "Username: " . $VARS['username'] . ", Key: " . getCensoredKey()); exit(json_encode(["status" => "OK", "msg" => lang("login successful", false)])); } else { - insertAuthLog(13); + insertAuthLog(13, null, "Username: " . $VARS['username'] . ", Key: " . getCensoredKey()); exit(json_encode(["status" => "ERROR", "msg" => lang("login incorrect", false)])); } break; @@ -57,7 +74,7 @@ switch ($VARS['action']) { if (verifyTOTP($VARS['username'], $VARS['code'])) { exit(json_encode(["status" => "OK", "valid" => true])); } else { - insertAuthLog(7); + insertAuthLog(7, null, "Username: " . $VARS['username'] . ", Key: " . getCensoredKey()); exit(json_encode(["status" => "ERROR", "msg" => lang("2fa incorrect", false), "valid" => false])); } break; @@ -66,29 +83,30 @@ switch ($VARS['action']) { case "login": // simulate a login, checking account status and alerts if (authenticate_user($VARS['username'], $VARS['password'])) { + $uid = $database->select('accounts', 'uid', ['username' => $VARS['username']])[0]; switch (get_account_status($VARS['username'])) { case "LOCKED_OR_DISABLED": - insertAuthLog(5); + insertAuthLog(5, $uid, "Username: " . $VARS['username'] . ", Key: " . getCensoredKey()); exit(json_encode(["status" => "ERROR", "msg" => lang("account locked", false)])); case "TERMINATED": - insertAuthLog(5); + insertAuthLog(5, $uid, "Username: " . $VARS['username'] . ", Key: " . getCensoredKey()); exit(json_encode(["status" => "ERROR", "msg" => lang("account terminated", false)])); case "CHANGE_PASSWORD": - insertAuthLog(5); + insertAuthLog(5, $uid, "Username: " . $VARS['username'] . ", Key: " . getCensoredKey()); exit(json_encode(["status" => "ERROR", "msg" => lang("password expired", false)])); case "NORMAL": - insertAuthLog(4); + insertAuthLog(4, $uid, "Username: " . $VARS['username'] . ", Key: " . getCensoredKey()); exit(json_encode(["status" => "OK"])); case "ALERT_ON_ACCESS": sendLoginAlertEmail($VARS['username']); - insertAuthLog(4); + insertAuthLog(4, $uid, "Username: " . $VARS['username'] . ", Key: " . getCensoredKey()); exit(json_encode(["status" => "OK", "alert" => true])); default: - insertAuthLog(5); + insertAuthLog(5, $uid, "Username: " . $VARS['username'] . ", Key: " . getCensoredKey()); exit(json_encode(["status" => "ERROR", "msg" => lang("account state error", false)])); } } else { - insertAuthLog(5); + insertAuthLog(5, null, "Username: " . $VARS['username'] . ", Key: " . getCensoredKey()); exit(json_encode(["status" => "ERROR", "msg" => lang("login incorrect", false)])); } break; diff --git a/database.mwb b/database.mwb index 6c209b02a86640742212bb192b6966f2fa48679a..df49d6b1dffe637bfc456bfcab11fbaadceb7c46 100644 GIT binary patch literal 14341 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 TjBe)E00&byJ`y)KC;0yXxjCk6 diff --git a/index.php b/index.php index 8e0f7c3..1d9d55a 100644 --- a/index.php +++ b/index.php @@ -38,11 +38,11 @@ if ($VARS['progress'] == "1") { } } else { $alert = lang("login incorrect", false); - insertAuthLog(2); + insertAuthLog(2, null, "Username: ".$VARS['username']); } } else { $alert = lang("captcha error", false); - insertAuthLog(8); + insertAuthLog(8, null, "Username: ".$VARS['username']); } } else if ($VARS['progress'] == "2") { if (verifyTOTP($VARS['username'], $VARS['authcode'])) { @@ -52,7 +52,7 @@ if ($VARS['progress'] == "1") { die("Logged in, go to home.php"); } else { $alert = lang("2fa incorrect", false); - insertAuthLog(6); + insertAuthLog(6, null, "Username: ".$VARS['username']); } } ?> diff --git a/lib/login.php b/lib/login.php index 0716815..b68d958 100644 --- a/lib/login.php +++ b/lib/login.php @@ -183,8 +183,9 @@ function sendLoginAlertEmail($username) { // TODO: add email code } -function insertAuthLog($type, $uid = null) { +function insertAuthLog($type, $uid = null, $data = "") { global $database; + // find IP address $ip = ""; if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) { $ip = $_SERVER["HTTP_CF_CONNECTING_IP"]; @@ -203,7 +204,7 @@ function insertAuthLog($type, $uid = null) { } else { $ip = "NOT FOUND"; } - $database->insert("authlog", ['#logtime' => 'NOW()', 'logtype' => $type, 'uid' => $uid, 'ip' => $ip]); + $database->insert("authlog", ['#logtime' => 'NOW()', 'logtype' => $type, 'uid' => $uid, 'ip' => $ip, 'otherdata' => $data]); } function verifyReCaptcha($response) {