diff --git a/classes/Database.php b/classes/Database.php index 5902c80..8d33cb6 100644 --- a/classes/Database.php +++ b/classes/Database.php @@ -2,76 +2,84 @@ class DBConnector extends mysqli { - public static $config = [ + protected static $config = [ "host" => "", "username" => "", "password" => "", "database" => "stadia_avatars" ]; + protected static $instance; + + private function __construct() { + $config = self::$config; + + @parent::__construct($config["host"],$config["username"],$config["password"],$config["database"]); + + if(mysqli_connect_error()) { + throw new Exception(mysqli_connect_error(),mysqli_connect_errno()); + } + } + + public static function getInstance() { + if(!self::$instance) { + self::$instance = new self(); + } + return self::$instance; + } + + public function exec_query($query) { + if(!$this->real_query($query)) { + throw new Exception($this->error,$this->errno); + } + + $result = new mysqli_result($this); + return $result; + } + + public function prepare($query) { + $stmt = new mysqli_stmt($this,$query); + return $stmt; + } + + } + + class StadiaAvatarDB extends DBConnector { + public function __construct() { - parent::init(); - - if(!parent::options(MYSQLI_INIT_COMMAND,"SET AUTOCOMMIT = 0")) { - die("Setting MYSQLI_INIT_COMMAND failed"); - } - - if(!parent::options(MYSQLI_OPT_CONNECT_TIMEOUT,5)) { - die("Setting MYSQLI_OPT_CONNECT_TIMEOUT failed"); - } - - if(!parent::real_connect(DBConnector::$config["host"],DBConnector::$config["username"],DBConnector::$config["password"],DBConnector::$config["database"])) { - die("Connect Error (".mysqli_connect_errno().") ".mysqli_connect_error()); - } + $this->sql = DBConnector::getInstance(); } - private function check_connection() { - if(parent::connect_errno) { - die("Invalid connection"); - } - } - - private function insert_avatar($user_id,$value) { + private function insert_avatar($user_id,$avatar) { $time = time(); - $query = "INSERT INTO avatars (userid, avatar, modified) VALUES ('${user_id}', '${value}', '${time}');"; - if($result = parent::query($query) === true) { - http_response_code("206"); - return true; - } - - return false; + $SQL = "INSERT INTO `avatars` (`userid`, `avatar`, `modified`) VALUES ('${user_id}', '${avatar}', '${time}');"; + return $this->sql->exec_query($SQL); } - private function update_avatar($user_id,$value) { + private function update_avatar($user_id,$avatar) { $time = time(); - $query = "UPDATE avatars SET avatar = '${value}', modified = '${time}' WHERE avatars.userid = '${user_id}';"; - if($result = parent::query($query) === true) { - return true; - } - - return false; + $SQL = "UPDATE `avatars` SET `avatar` = '${avatar}', `modified` = '${time}' WHERE `avatars`.`userid` = '${user_id}';"; + return $this->sql->exec_query($SQL); } - // ---- - public function get_avatar($user_id) { - $query = "SELECT userid, avatar FROM avatars WHERE userid = '${user_id}';"; + $SQL = "SELECT `userid`, `avatar` FROM `avatars` WHERE `userid` = '${user_id}'"; + $query = $this->sql->exec_query($SQL); - if($result = parent::query($query)) { - return $result->fetch_array(MYSQLI_NUM)[1]; + while($row = $query->fetch_assoc()) { + return $row["avatar"]; } - - return false; } - public function set_avatar($user_id,$value) { - if($this->get_avatar($user_id)) { - return $this->update_avatar($user_id,$value); + public function set_avatar($user_id,$avatar) { + if(!$this->get_avatar($user_id)) { + http_response_code("201"); + return $this->insert_avatar($user_id,$avatar); } - return $this->insert_avatar($user_id,$value); + return $this->update_avatar($user_id,$avatar); } } \ No newline at end of file diff --git a/classes/Gravatar.php b/classes/Gravatar.php new file mode 100644 index 0000000..f4ef097 --- /dev/null +++ b/classes/Gravatar.php @@ -0,0 +1,9 @@ +hash = md5(strtolower(trim($email))); + } + + } \ No newline at end of file diff --git a/endpoint/get.php b/endpoint/get.php index b746b2f..cdb79cc 100644 --- a/endpoint/get.php +++ b/endpoint/get.php @@ -5,12 +5,11 @@ $user_id = $_GET["userID"] ?? error("400","No userID provided"); - $db = new DBConnector(); + $db = new StadiaAvatarDB(); $avatar = $db->get_avatar($user_id); - if($avatar) { - echo "{\"status\":\"OK\",\"avatar\":\"${avatar}\"}"; - return; + if(!$avatar) { + error("404","No avatar was found for the supplied userID"); } - - error("404","No avatar was found for the supplied userID"); \ No newline at end of file + + echo "{\"status\":\"OK\",\"avatar\":\"${avatar}\"}"; \ No newline at end of file diff --git a/endpoint/update.php b/endpoint/update.php index 36af3ce..7cfecd8 100644 --- a/endpoint/update.php +++ b/endpoint/update.php @@ -1,18 +1,22 @@ sharedSecret || $request->sharedSecret !== $shared_secret) { error("403","Invalid shared secret."); } - $db = new DBConnector(); + $db = new StadiaAvatarDB(); + $gravatar = new Gravatar($request->payload); - if(!$db->set_avatar("foo","bario")) { + if(!$db->set_avatar($request->userID,$gravatar->hash)) { error("500","Something went wrong."); } - + echo "{\"status\":\"OK\"}"; \ No newline at end of file