From 10448793f34fbfadbf67f8ee08f868672807951f Mon Sep 17 00:00:00 2001 From: Timo Ley Date: Fri, 21 Aug 2020 23:34:27 +0200 Subject: [PATCH] jensmemes API --- jensmemes.php | 186 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 jensmemes.php diff --git a/jensmemes.php b/jensmemes.php new file mode 100644 index 0000000..59ae8c6 --- /dev/null +++ b/jensmemes.php @@ -0,0 +1,186 @@ +status = 404; +$req = $_SERVER["PATH_INFO"]; +$endpoint = explode("/", $req); +if ($req == "" or $req == "/") { + $obj->status = 200; + $obj->endpoints = endpoints(); +} +elseif ($req == "/all") { + $obj->status = 200; + //Memes + $q_memes = "SELECT * FROM images"; + $obj->memes = memesArray($q_memes); + //Categories + $q_cats = "SELECT * FROM cats"; + $obj->categories = categoryArray($q_cats); + //Users + $users = array(); + $q_users = "SELECT * FROM token"; + $res_users = mysqli_query($jmcon, $q_users); + checksql($res_users); + while ($row = mysqli_fetch_array( $res_users, MYSQLI_ASSOC)) { + array_push($users, $row["name"]); + } + mysqli_free_result($res_users); + $obj->users = $users; +} elseif ($req == "/base" or $req == "/baseurl") { + $obj->status = 200; + $obj->baseurl = $jmurl; +} elseif ($req == "/memes") { + $obj->status = 200; + $query = "SELECT * FROM images"; + if (isset($_GET["category"])) { + $query = addCondition('cat="' . $_GET["category"] . '"', $query); + } + if (isset($_GET["user"])) { + $query = addCondition('user LIKE "%' . $_GET["user"] . '%"', $query); + } + if (isset($_GET["search"])) { + $query = addCondition('path LIKE "%' . $_GET["search"] . '%"', $query); + } + $obj->memes = memesArray($query); +} elseif ($req == "/meme") { + if (isset($_GET["id"])) { + $q = 'SELECT * FROM images WHERE id=' . $_GET["id"]; + $res = mysqli_query($jmcon, $q); + checksql($res); + $row = mysqli_fetch_array($res, MYSQLI_ASSOC); + if ($row) { + $obj->status = 200; + $path = $row["path"]; + $path = str_replace(" ", "%20", $path); + $obj->link = $jmurl . $path; + $obj->user = $row["user"]; + $obj->category = $row["cat"]; + } + } +} elseif ($req == "/random") { + $query = "SELECT * FROM images"; + if (isset($_GET["category"])) { + $query = addCondition('cat="' . $_GET["category"] . '"', $query); + } + if (isset($_GET["user"])) { + $query = addCondition('user LIKE "%' . $_GET["user"] . '%"', $query); + } + $memes = memesArray($query); + $random = rand(0, count($memes) - 1); + $meme = $memes[$random]; + if (isset($meme->path)) { + $obj->status = 200; + $obj->link = $jmurl . $meme->path; + $obj->category = $meme->category; + $obj->user = $meme->user; + } +} elseif ($req == "/categories") { + $obj->status = 200; + $obj->categories = categoryArray("SELECT * FROM cats"); +} elseif ($req == "/category") { + if (isset($_GET["id"])) { + $q = 'SELECT * FROM cats WHERE id="' . $_GET["id"] . '"'; + $res = mysqli_query($jmcon, $q); + checksql($res); + $row = mysqli_fetch_array($res, MYSQLI_ASSOC); + if ($row) { + $obj->status = 200; + $obj->id = $row["id"]; + $obj->name = $row["name"]; + } + } +} elseif ($req == "/users") { + $users = array(); + $q_users = "SELECT * FROM token"; + $res_users = mysqli_query($jmcon, $q_users); + checksql($res_users); + while ($row = mysqli_fetch_array( $res_users, MYSQLI_ASSOC)) { + $user = new stdClass(); + $user->name = $row["name"]; + $user->tokenhash = md5($row["token"]); + $user->dayuploads = $row["uploadsLast24H"]; + array_push($users, $user); + } + mysqli_free_result($res_users); + $obj->users = $users; + $obj->status = 200; +} elseif ($req == "/token/random") { + if (isset($_GET["user"])) { + $obj->status = 200; + $obj->token = genToken($_GET["user"]); + } else { + $obj->error = "Need to set a user with ?user"; + } +} +else { + $obj->endpoints = endpoints(); +} +header('Content-Type: application/json'); +echo stripslashes(json_encode($obj, JSON_UNESCAPED_UNICODE)); + +function endpoints() { + return array("/all", "/baseurl", "/memes", "/meme", "/random", "/categories", "/category"); +} + +function checksql($res) { + global $jmcon; + global $obj; + if (!$res) { + $obj->status = 500; + $obj->error = mysqli_error($jmcon); + } +} + +function memesArray($query) { + global $jmcon; + + $memes = array(); + $res_memes = mysqli_query($jmcon, $query); + checksql($res_memes); + while ($row = mysqli_fetch_array( $res_memes, MYSQLI_ASSOC)) { + $meme = new stdClass(); + $meme->id = $row["id"]; + $path = $row["path"]; + $path = str_replace(" ", "%20", $path); + $meme->path = $path; + $meme->category = $row["cat"]; + $meme->user = $row["user"]; + array_push($memes, $meme); + } + mysqli_free_result($res_memes); + return $memes; +} + +function categoryArray($query) { + global $jmcon; + + $cats = array(); + $res_cats = mysqli_query($jmcon, $query); + checksql($res_cats); + while ($row = mysqli_fetch_array( $res_cats, MYSQLI_ASSOC)) { + $cat = new stdClass(); + $cat->id = $row["id"]; + $cat->name = $row["name"]; + array_push($cats, $cat); + } + mysqli_free_result($res_cats); + + return $cats; +} + +function addCondition($cond, $query) { + if (strpos($query, "WHERE")) { + $query = $query . " AND " . $cond; + } else { + $query = $query . " WHERE " . $cond; + } + return $query; +} + +function genToken($discord) { + $random = bin2hex(random_bytes(32)); + $prehash = $random . md5(time()) . $discord; + return md5($prehash); +}