realfan/src/base.methods.php

82 lines
1.9 KiB
PHP

<?php
function get_request_json() {
return @json_decode(file_get_contents('php://input'));
}
function unquote($text) {
$text = str_replace("'", "", $text);
$text = str_replace('"', '', $text);
return $text;
}
# HTTP result => JSON
function hres_json($code, $status, $message) {
header('Content-Type: application/json');
return hres($code, json_encode([
'status' => $status,
'message' => $message
]));
}
# HTTP result
function hres($code, $message) {
http_response_code($code);
die($message);
}
# Support instance aliases!
function resolve_instance($txt) {
$txt = preg_replace('/^https?:\/\//', '', strtolower(trim($txt)));
if (!preg_match('/^[a-zA-Z0-9\-\.]+$/', $txt))
return false;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://'.$txt.'/.well-known/host-meta');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
$output = curl_exec($ch);
$headers = explode("\n", $output);
if (count($headers) === 0)
return false;
$name = false;
$httpret = trim($headers[0]);
$httpret = explode(' ', $httpret);
if (count($httpret) !== 2)
return false;
$httpret = intval($httpret[1]);
# search for location header
if (in_array($httpret, [301, 302])) {
foreach ($headers as $header) {
$header = strtolower(trim($header));
if (str_starts_with($header, 'location:')) {
$url = trim(preg_replace('/^location:/','',$header));
$url = parse_url($url);
if (isset($url['host'])) {
$name = $url['host'];
break;
}
}
}
} else if ($httpret === 200) {
$name = $txt;
}
if ($name === false)
return $name;
return 'https://'.$name;
}
function mastodon_get($instance, $path, $token) {
$ch = curl_init($instance.$path);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer '.$token]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
return @json_decode($output);
}