diff --git a/lib/Notifications.lib.php b/lib/Notifications.lib.php index 7823915..2b685a4 100644 --- a/lib/Notifications.lib.php +++ b/lib/Notifications.lib.php @@ -42,13 +42,18 @@ class Notifications { * Fetch all notifications for a user. * @global $database * @param User $user + * @param bool $all If false, only returns unseen notifications. * @return array * @throws Exception */ - public static function get(User $user) { + public static function get(User $user, bool $all = true) { global $database, $Strings; if ($user->exists()) { - $notifications = $database->select('notifications', ['notificationid (id)', 'timestamp', 'title', 'content', 'url', 'seen', 'sensitive'], ['uid' => $user->getUID(), 'ORDER' => ['seen', 'timestamp' => 'DESC']]); + if ($all) { + $notifications = $database->select('notifications', ['notificationid (id)', 'timestamp', 'title', 'content', 'url', 'seen', 'sensitive'], ['uid' => $user->getUID(), 'ORDER' => ['seen', 'timestamp' => 'DESC']]); + } else { + $notifications = $database->select('notifications', ['notificationid (id)', 'timestamp', 'title', 'content', 'url', 'seen', 'sensitive'], ["AND" => ['uid' => $user->getUID(), 'seen' => 0], 'ORDER' => ['timestamp' => 'DESC']]); + } for ($i = 0; $i < count($notifications); $i++) { $notifications[$i]['id'] = $notifications[$i]['id'] * 1; $notifications[$i]['seen'] = ($notifications[$i]['seen'] == "1" ? true : false); @@ -90,4 +95,5 @@ class Notifications { } throw new Exception($Strings->get("user does not exist", false)); } + } diff --git a/mobile/index.php b/mobile/index.php index f47bbbb..5d8d322 100644 --- a/mobile/index.php +++ b/mobile/index.php @@ -36,7 +36,7 @@ $user_key_valid = $database->has('mobile_codes', ['[>]accounts' => ['uid' => 'ui if ($user_key_valid !== TRUE) { engageRateLimit(); //http_response_code(401); - insertAuthLog(21, null, "Username: " . $username . ", Key: " . $key); + Log::insert(LogType::MOBILE_BAD_KEY, null, "Username: " . $username . ", Key: " . $key); die(json_encode(["status" => "ERROR", "msg" => "Invalid username and/or access key."])); } @@ -119,6 +119,87 @@ switch ($VARS['action']) { $database->delete("onetimekeys", ["expires[<]" => date("Y-m-d H:i:s")]); // cleanup exit(json_encode(["status" => "OK", "code" => $code])); + case "checknotifications": + if (!empty($VARS['username'])) { + $user = User::byUsername($VARS['username']); + } else if (!empty($VARS['uid'])) { + $user = new User($VARS['uid']); + } else { + http_response_code(400); + die("\"400 Bad Request\""); + } + try { + $notifications = Notifications::get($user, false); + exit(json_encode(["status" => "OK", "notifications" => $notifications])); + } catch (Exception $ex) { + exit(json_encode(["status" => "ERROR", "msg" => $ex->getMessage()])); + } + break; + case "readnotification": + if (!empty($VARS['username'])) { + $user = User::byUsername($VARS['username']); + } else if (!empty($VARS['uid'])) { + $user = new User($VARS['uid']); + } else { + http_response_code(400); + die("\"400 Bad Request\""); + } + if (empty($VARS['id'])) { + exit(json_encode(["status" => "ERROR", "msg" => $Strings->get("invalid parameters", false)])); + } + try { + Notifications::read($user, $VARS['id']); + exit(json_encode(["status" => "OK"])); + } catch (Exception $ex) { + exit(json_encode(["status" => "ERROR", "msg" => $ex->getMessage()])); + } + break; + case "addnotification": + if (!empty($VARS['username'])) { + $user = User::byUsername($VARS['username']); + } else if (!empty($VARS['uid'])) { + $user = new User($VARS['uid']); + } else { + http_response_code(400); + die("\"400 Bad Request\""); + } + + try { + $timestamp = ""; + if (!empty($VARS['timestamp'])) { + $timestamp = date("Y-m-d H:i:s", strtotime($VARS['timestamp'])); + } + $url = ""; + if (!empty($VARS['url'])) { + $url = $VARS['url']; + } + $nid = Notifications::add($user, $VARS['title'], $VARS['content'], $timestamp, $url, isset($VARS['sensitive'])); + + exit(json_encode(["status" => "OK", "id" => $nid])); + } catch (Exception $ex) { + exit(json_encode(["status" => "ERROR", "msg" => $ex->getMessage()])); + } + break; + case "deletenotification": + if (!empty($VARS['username'])) { + $user = User::byUsername($VARS['username']); + } else if (!empty($VARS['uid'])) { + $user = new User($VARS['uid']); + } else { + http_response_code(400); + die("\"400 Bad Request\""); + } + + if (empty($VARS['id'])) { + exit(json_encode(["status" => "ERROR", "msg" => $Strings->get("invalid parameters", false)])); + } + try { + Notifications::delete($user, $VARS['id']); + exit(json_encode(["status" => "OK"])); + } catch (Exception $ex) { + exit(json_encode(["status" => "ERROR", "msg" => $ex->getMessage()])); + } + break; default: http_response_code(404); die(json_encode(["status" => "ERROR", "msg" => "The requested action is not available."]));