mirror of
https://github.com/Nathanwoodburn/hnschat-web.git
synced 2025-01-18 11:48:13 +11:00
237 lines
6.1 KiB
PHP
237 lines
6.1 KiB
PHP
|
<?php
|
||
|
include "etc/includes.php";
|
||
|
|
||
|
$json = file_get_contents('php://input');
|
||
|
$data = json_decode($json, true);
|
||
|
|
||
|
if (!$data) {
|
||
|
$data = $_GET;
|
||
|
}
|
||
|
|
||
|
if (!@$data["action"]) {
|
||
|
die();
|
||
|
}
|
||
|
|
||
|
$output = [
|
||
|
"success" => true,
|
||
|
"fields" => []
|
||
|
];
|
||
|
|
||
|
foreach ($data as $key => $value) {
|
||
|
if (!is_array($data[$key])) {
|
||
|
$data[$key] = trim($value, ". ".chr(194).chr(160).PHP_EOL);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
switch ($data["action"]) {
|
||
|
case "setPublicKey":
|
||
|
case "getPublicKey":
|
||
|
case "saveSettings":
|
||
|
case "getGifCategories":
|
||
|
case "searchGifs":
|
||
|
case "pushToken":
|
||
|
case "getMessage":
|
||
|
if ($data["session"]) {
|
||
|
$keyValid = @sql("SELECT * FROM `sessions` WHERE `id` = ?", [$data["session"]]);
|
||
|
if (!$keyValid) {
|
||
|
error("Invalid key.");
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
error("Missing key.");
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
switch ($data["action"]) {
|
||
|
case "checkName":
|
||
|
if (!activeDomainForName($data["domain"])) {
|
||
|
error("The domain provided isn't available to message.");
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case "startSession":
|
||
|
$code = "V2-".generateCode("session");
|
||
|
sql("INSERT INTO `sessions` (id) VALUES (?)", [$code]);
|
||
|
$output["session"] = $code;
|
||
|
break;
|
||
|
|
||
|
case "setPublicKey":
|
||
|
$insert = sql("UPDATE `sessions` SET `pubkey` = ? WHERE `id` = ? AND `pubkey` IS NULL", [$data["pubkey"], $data["session"]]);
|
||
|
break;
|
||
|
|
||
|
case "getPublicKey":
|
||
|
$key = @sql("SELECT `pubkey` FROM `sessions` WHERE `id` = ?", [$data["session"]])[0]["pubkey"];
|
||
|
$output["pubkey"] = $key;
|
||
|
break;
|
||
|
|
||
|
case "getAddress":
|
||
|
$address = @sql("SELECT `address` FROM `domains` WHERE `id` = ?", [$data["domain"]])[0];
|
||
|
if ($address["address"]) {
|
||
|
$output["address"] = $address["address"];
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case "saveSettings":
|
||
|
$settings = json_decode($data["settings"], true);
|
||
|
|
||
|
$domainInfo = domainForID($data["domain"]);
|
||
|
$tld = tldForDomain($domainInfo["domain"]);
|
||
|
|
||
|
if (@$settings["avatar"]) {
|
||
|
if (in_array($tld, getStakedNames())) {
|
||
|
$settings["avatar"] = trim($settings["avatar"]);
|
||
|
|
||
|
if (!validImage($settings["avatar"])) {
|
||
|
error("The Avatar URL provided isn't a valid image.");
|
||
|
}
|
||
|
|
||
|
sql("UPDATE `domains` SET `avatar` = ? WHERE `id` = ? AND `session` = ?", [$settings["avatar"], $data["domain"], $data["session"]]);
|
||
|
|
||
|
$output["avatar"] = $settings["avatar"];
|
||
|
}
|
||
|
else {
|
||
|
error("Only SLD's of staked TLD's can set an Avatar here.");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (@$settings["address"]) {
|
||
|
if (in_array($tld, getStakedHIP2Names())) {
|
||
|
$settings["address"] = trim($settings["address"]);
|
||
|
|
||
|
if (!validateAddress($settings["address"])) {
|
||
|
error("The HNS Address provided isn't valid.");
|
||
|
}
|
||
|
|
||
|
sql("UPDATE `domains` SET `address` = ? WHERE `id` = ? AND `session` = ?", [$settings["address"], $data["domain"], $data["session"]]);
|
||
|
}
|
||
|
else {
|
||
|
error("Only SLD's of certain staked TLD's can set an address here.");
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case "getMetaTags":
|
||
|
$checkCache = @sql("SELECT `id`, `link`, `title`, `description`, `image`, `video` FROM `previews` WHERE `link` = ?", [$data["url"]])[0];
|
||
|
if ($checkCache) {
|
||
|
unset($checkCache["link"]);
|
||
|
|
||
|
foreach ($checkCache as $key => $value) {
|
||
|
if (!$value) {
|
||
|
unset($checkCache[$key]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$tags = $checkCache;
|
||
|
}
|
||
|
else {
|
||
|
$tags = fetchMetaTags($data["url"]);
|
||
|
}
|
||
|
|
||
|
if (@$tags["id"]) {
|
||
|
if (@$tags["title"]) {
|
||
|
$output["tags"] = $tags;
|
||
|
}
|
||
|
|
||
|
if (@$output["tags"]["image"]) {
|
||
|
$output["tags"]["image"] = "/preview/".$tags["id"];
|
||
|
}
|
||
|
|
||
|
if (@$output["tags"]["description"]) {
|
||
|
$output["tags"]["description"] = $output["tags"]["description"];
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case "getGifCategories":
|
||
|
$categories = [];
|
||
|
$getGifs = file_get_contents("https://tenor.googleapis.com/v2/categories?key=".$GLOBALS["tenorKey"]."&client_key=HNSChat&limit=20");
|
||
|
$json = json_decode($getGifs, true);
|
||
|
|
||
|
if (@$json["tags"]) {
|
||
|
foreach ($json["tags"] as $key => $tag) {
|
||
|
$categories[] = [
|
||
|
"term" => @$tag["searchterm"],
|
||
|
"gif" => @$tag["image"]
|
||
|
];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$output["categories"] = $categories;
|
||
|
break;
|
||
|
|
||
|
case "searchGifs":
|
||
|
if (@$data["query"]) {
|
||
|
$gifs = [];
|
||
|
$getGifs = file_get_contents("https://tenor.googleapis.com/v2/search?q=".urlencode($data["query"])."&key=".$GLOBALS["tenorKey"]."&client_key=HNSChat&limit=100");
|
||
|
$json = json_decode($getGifs, true);
|
||
|
|
||
|
if (@$json["results"]) {
|
||
|
foreach ($json["results"] as $key => $gif) {
|
||
|
$gifs[] = [
|
||
|
"id" => @$gif["id"],
|
||
|
"preview" => @$gif["media_formats"]["tinygif"]["url"],
|
||
|
"full" => @$gif["media_formats"]["gif"]["url"],
|
||
|
"width" => @$gif["media_formats"]["gif"]["dims"][0],
|
||
|
"height" => @$gif["media_formats"]["gif"]["dims"][1],
|
||
|
];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$output["gifs"] = $gifs;
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case "getMessage":
|
||
|
$message = @sql("SELECT * FROM `messages` WHERE `id` = ?", [$data["id"]])[0];
|
||
|
if ($message) {
|
||
|
$domain = domainForID($data["domain"]);
|
||
|
$channel = channelForID($message["conversation"]);
|
||
|
if ($channel) {
|
||
|
if ($channel["public"] || ($domain["tld"] == $channel["name"])) {
|
||
|
$output = [
|
||
|
"success" => true,
|
||
|
"id" => $message["id"],
|
||
|
"time" => $message["time"],
|
||
|
"conversation" => $message["conversation"],
|
||
|
"user" => $message["user"],
|
||
|
"message" => $message["message"],
|
||
|
"reactions" => $message["reactions"],
|
||
|
];
|
||
|
|
||
|
if (@$message["reply"]) {
|
||
|
$output["reply"] = true;
|
||
|
$output["replying"] = $message["replying"];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case "pushToken":
|
||
|
if (preg_match("/^ExponentPushToken\[.+?\]$/", $data["token"])) {
|
||
|
$exists = @sql("SELECT JSON_CONTAINS(`push`, JSON_QUOTE(?), '$') AS `exists` FROM `sessions` WHERE `id` = ?", [$data["token"], $data["session"]])[0]["exists"];
|
||
|
if (!$exists) {
|
||
|
sql("UPDATE `sessions` SET `push` = JSON_ARRAY_APPEND(`push`, '$', ?) WHERE `id` = ?", [$data["token"], $data["session"]]);
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
$output["message"] = "Unknown function.";
|
||
|
$output["success"] = false;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
end:
|
||
|
if (@$output["fields"] && @count($output["fields"])) {
|
||
|
$output["fields"] = array_unique($output["fields"]);
|
||
|
$output["success"] = false;
|
||
|
}
|
||
|
else {
|
||
|
unset($output["fields"]);
|
||
|
}
|
||
|
|
||
|
die(json_encode($output));
|
||
|
?>
|