The clean & modern RSS server that doesn't give you any crap. https://thearsse.com/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.8 KiB

<?php
/** @license MIT
* Copyright 2017 J. King, Dustin Wilson et al.
* See LICENSE and AUTHORS files for details */
declare(strict_types=1);
namespace JKingWeb\Arsse\Misc;
use Psr\Http\Message\MessageInterface;
use Psr\Http\Message\ResponseInterface;
use GuzzleHttp\Psr7\Response;
class HTTP {
public static function matchType(MessageInterface $msg, string ...$type): bool {
$header = $msg->getHeaderLine("Content-Type") ?? "";
foreach ($type as $t) {
if (($t[0] ?? "") === "+") {
$pattern = "/^[^+;,\s]*".preg_quote(trim($t), "/")."\s*($|;|,)/Di";
} else {
$pattern = "/^".preg_quote(trim($t), "/")."\s*($|;|,)/Di";
}
if (preg_match($pattern, $header)) {
return true;
}
}
return false;
}
public static function respEmpty(int $status, ?array $headers = []): ResponseInterface {
return new Response($status, $headers ?? []);
}
public static function respJson($body, int $status = 200, ?array $headers = []): ResponseInterface {
$headers = ($headers ?? []) + ['Content-Type' => "application/json"];
return new Response($status, $headers, json_encode($body, \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE));
}
public static function respText(string $body, int $status = 200, ?array $headers = []): ResponseInterface {
$headers = ($headers ?? []) + ['Content-Type' => "text/plain; charset=UTF-8"];
return new Response($status, $headers, $body);
}
public static function respXml(string $body, int $status = 200, ?array $headers = []): ResponseInterface {
$headers = ($headers ?? []) + ['Content-Type' => "application/xml; charset=UTF-8"];
return new Response($status, $headers, $body);
}
}