From 5374fa0611e0b46ef77bd12d53c78c22cd503726 Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Thu, 12 Jul 2018 00:00:38 -0600 Subject: [PATCH] Add notification API, close #7 --- api.php | 85 +++++++++++++++++++++++++++++++++ database.mwb | Bin 19989 -> 21207 bytes database_upgrade/1.0.1_2.0.sql | 21 ++++++++ 3 files changed, 106 insertions(+) diff --git a/api.php b/api.php index cd45386..3f5a40f 100644 --- a/api.php +++ b/api.php @@ -355,6 +355,91 @@ switch ($VARS['action']) { } exit(json_encode(["status" => "OK", "pinvalid" => ($pin == $VARS['pin'])])); break; + case "getnotifications": + 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 ($user->exists()) { + $notifications = $database->select('notifications', ['notificationid (id)', 'timestamp', 'title', 'content', 'url', 'seen', 'sensitive'], ['uid' => $user->getUID()]); + for ($i = 0; $i < count($notifications); $i++) { + $notifications[$i]['id'] = $notifications[$i]['id'] * 1; + $notifications[$i]['seen'] = ($notifications[$i]['seen'] == "1" ? true : false); + $notifications[$i]['sensitive'] = ($notifications[$i]['sensitive'] == "1" ? true : false); + } + exit(json_encode(["status" => "OK", "notifications" => $notifications])); + } + exit(json_encode(["status" => "ERROR", "msg" => $Strings->get("user does not exist", false)])); + 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 ($user->exists()) { + if ($database->has('notifications', ['AND' => ['uid' => $user->getUID(), 'notificationid' => $VARS['id']]])) { + $database->update('notifications', ['seen' => 1], ['AND' => ['uid' => $user->getUID(), 'notificationid' => $VARS['id']]]); + exit(json_encode(["status" => "OK"])); + } + exit(json_encode(["status" => "ERROR", "msg" => $Strings->get("invalid parameters", false)])); + } + exit(json_encode(["status" => "ERROR", "msg" => $Strings->get("user does not exist", false)])); + 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\""); + } + + if ($user->exists()) { + if (empty($VARS['title']) || empty($VARS['content'])) { + exit(json_encode(["status" => "ERROR", "msg" => $Strings->get("invalid parameters", false)])); + } + $timestamp = date("Y-m-d H:i:s"); + if (!empty($VARS['timestamp'])) { + $timestamp = date("Y-m-d H:i:s", strtotime($VARS['timestamp'])); + } + $url = ""; + if (!empty($VARS['url'])) { + $url = $VARS['url']; + } + $sensitive = 0; + if (isset($VARS['sensitive'])) { + $sensitive = 1; + } + $database->insert('notifications', ['uid' => $user->getUID(), 'timestamp' => $timestamp, 'title' => $VARS['title'], 'content' => $VARS['content'], 'url' => $url, 'seen' => 0, 'sensitive' => $sensitive]); + exit(json_encode(["status" => "OK", "id" => $database->id() * 1])); + } + exit(json_encode(["status" => "ERROR", "msg" => $Strings->get("user does not exist", false)])); + 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 ($user->exists()) { + if ($database->has('notifications', ['AND' => ['uid' => $user->getUID(), 'notificationid' => $VARS['id']]])) { + $database->delete('notifications', ['AND' => ['uid' => $user->getUID(), 'notificationid' => $VARS['id']]]); + exit(json_encode(["status" => "OK"])); + } + exit(json_encode(["status" => "ERROR", "msg" => $Strings->get("invalid parameters", false)])); + } + exit(json_encode(["status" => "ERROR", "msg" => $Strings->get("user does not exist", false)])); default: http_response_code(404); die(json_encode("404 Not Found: the requested action is not available.")); diff --git a/database.mwb b/database.mwb index 4cd363265fc55a3f4fe3759aef15e4145e27f0e7..361362ee4566190540cc3bd68012b3b537fe666d 100644 GIT binary patch literal 21207 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 z

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 EAO98nQUCw| diff --git a/database_upgrade/1.0.1_2.0.sql b/database_upgrade/1.0.1_2.0.sql index 0bcd983..5534e26 100644 --- a/database_upgrade/1.0.1_2.0.sql +++ b/database_upgrade/1.0.1_2.0.sql @@ -13,6 +13,27 @@ CREATE TABLE IF NOT EXISTS `onetimekeys` ( ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; +CREATE TABLE IF NOT EXISTS `notifications` ( + `notificationid` INT(11) NOT NULL AUTO_INCREMENT, + `uid` INT(11) NOT NULL, + `timestamp` DATETIME NOT NULL, + `title` VARCHAR(255) NOT NULL, + `content` TINYTEXT NOT NULL, + `url` VARCHAR(255) NOT NULL, + `seen` TINYINT(1) NOT NULL DEFAULT 0, + `sensitive` TINYINT(1) NOT NULL DEFAULT 0, + PRIMARY KEY (`notificationid`, `uid`), + UNIQUE INDEX `notificationid_UNIQUE` (`notificationid` ASC), + INDEX `fk_notifications_accounts1_idx` (`uid` ASC), + CONSTRAINT `fk_notifications_accounts1` + FOREIGN KEY (`uid`) + REFERENCES `accounthub`.`accounts` (`uid`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 + + SET FOREIGN_KEY_CHECKS = 0; ALTER TABLE `groups` CHANGE COLUMN `groupid` `groupid` INT(11) NOT NULL AUTO_INCREMENT;