Use the Index router in Uiharu.
This commit is contained in:
parent
0a668992d9
commit
9948642a5a
5 changed files with 695 additions and 575 deletions
2
public/index.html
Normal file
2
public/index.html
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
<!doctype html>
|
||||||
|
<pre>Metadata lookup service - OK</pre>
|
1035
public/index.php
1035
public/index.php
File diff suppressed because it is too large
Load diff
22
src/MediaTypeExts.php
Normal file
22
src/MediaTypeExts.php
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
namespace Uiharu;
|
||||||
|
|
||||||
|
use Index\MediaType;
|
||||||
|
|
||||||
|
final class MediaTypeExts {
|
||||||
|
public static function toV1(MediaType $mediaType): array {
|
||||||
|
$parts = [
|
||||||
|
'string' => (string)$mediaType,
|
||||||
|
'type' => $mediaType->getCategory(),
|
||||||
|
'subtype' => $mediaType->getKind(),
|
||||||
|
];
|
||||||
|
|
||||||
|
if(!empty($suffix = $mediaType->getSuffix()))
|
||||||
|
$parts['suffix'] = $suffix;
|
||||||
|
|
||||||
|
if(!empty($params = $mediaType->getParams()))
|
||||||
|
$parts['params'] = $params;
|
||||||
|
|
||||||
|
return $parts;
|
||||||
|
}
|
||||||
|
}
|
207
src/Url.php
Normal file
207
src/Url.php
Normal file
|
@ -0,0 +1,207 @@
|
||||||
|
<?php
|
||||||
|
namespace Uiharu;
|
||||||
|
|
||||||
|
use InvalidArgumentException;
|
||||||
|
|
||||||
|
final class Url {
|
||||||
|
private string $scheme = '';
|
||||||
|
private string $host = '';
|
||||||
|
private int $port = 0;
|
||||||
|
private string $user = '';
|
||||||
|
private string $pass = '';
|
||||||
|
private string $path = '';
|
||||||
|
private string $query = '';
|
||||||
|
private string $fragment = '';
|
||||||
|
|
||||||
|
private ?string $formatted = null;
|
||||||
|
|
||||||
|
public function __construct(array $parts) {
|
||||||
|
if(isset($parts['scheme']))
|
||||||
|
$this->scheme = $parts['scheme'];
|
||||||
|
if(isset($parts['host']))
|
||||||
|
$this->host = $parts['host'];
|
||||||
|
if(isset($parts['port']))
|
||||||
|
$this->port = $parts['port'];
|
||||||
|
if(isset($parts['user']))
|
||||||
|
$this->user = $parts['user'];
|
||||||
|
if(isset($parts['pass']))
|
||||||
|
$this->pass = $parts['pass'];
|
||||||
|
if(isset($parts['path']))
|
||||||
|
$this->path = $parts['path'];
|
||||||
|
if(isset($parts['query']))
|
||||||
|
$this->query = $parts['query'];
|
||||||
|
if(isset($parts['fragment']))
|
||||||
|
$this->fragment = $parts['fragment'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function parse(string $urlString): Url {
|
||||||
|
$parts = parse_url($urlString);
|
||||||
|
if($parts === false)
|
||||||
|
throw new InvalidArgumentException('Invalid URL provided.');
|
||||||
|
return new Url($parts);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function resetString(): void {
|
||||||
|
$this->formatted = null;
|
||||||
|
}
|
||||||
|
public function setScheme(string $scheme): void {
|
||||||
|
$this->scheme = $scheme;
|
||||||
|
$this->resetString();
|
||||||
|
}
|
||||||
|
public function discardFragment(): void {
|
||||||
|
$this->fragment = '';
|
||||||
|
$this->resetString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hasScheme(): bool {
|
||||||
|
return $this->scheme !== '';
|
||||||
|
}
|
||||||
|
public function hasHost(): bool {
|
||||||
|
return $this->host !== '';
|
||||||
|
}
|
||||||
|
public function hasPort(): bool {
|
||||||
|
return $this->port !== 0;
|
||||||
|
}
|
||||||
|
public function hasUser(): bool {
|
||||||
|
return $this->user !== '';
|
||||||
|
}
|
||||||
|
public function hasPassword(): bool {
|
||||||
|
return $this->pass !== '';
|
||||||
|
}
|
||||||
|
public function hasPath(): bool {
|
||||||
|
return $this->path !== '';
|
||||||
|
}
|
||||||
|
public function hasQuery(): bool {
|
||||||
|
return $this->query !== '';
|
||||||
|
}
|
||||||
|
public function hasFragment(): bool {
|
||||||
|
return $this->fragment !== '';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getScheme(): string {
|
||||||
|
return $this->scheme;
|
||||||
|
}
|
||||||
|
public function getHost(): string {
|
||||||
|
return $this->host;
|
||||||
|
}
|
||||||
|
public function getPort(): int {
|
||||||
|
return $this->port;
|
||||||
|
}
|
||||||
|
public function getUser(): string {
|
||||||
|
return $this->user;
|
||||||
|
}
|
||||||
|
public function getPassword(): string {
|
||||||
|
return $this->pass;
|
||||||
|
}
|
||||||
|
public function getPath(): string {
|
||||||
|
return $this->path;
|
||||||
|
}
|
||||||
|
public function getQuery(): string {
|
||||||
|
return $this->query;
|
||||||
|
}
|
||||||
|
public function getFragment(): string {
|
||||||
|
return $this->fragment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hasUserInfo(): bool {
|
||||||
|
return $this->hasUser()
|
||||||
|
|| $this->hasPassword();
|
||||||
|
}
|
||||||
|
public function hasAuthority(): bool {
|
||||||
|
return $this->hasUserInfo()
|
||||||
|
|| $this->hasHost();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUserInfo(): string {
|
||||||
|
$userInfo = $this->user;
|
||||||
|
if($this->pass !== '')
|
||||||
|
$userInfo .= ':' . $this->pass;
|
||||||
|
return $userInfo;
|
||||||
|
}
|
||||||
|
public function getAuthority(): string {
|
||||||
|
$authority = '//';
|
||||||
|
|
||||||
|
if($this->hasUserInfo())
|
||||||
|
$authority .= $this->getUserInfo() . '@';
|
||||||
|
|
||||||
|
$authority .= $this->host;
|
||||||
|
|
||||||
|
if($this->port !== 0)
|
||||||
|
$authority .= ':' . $this->port;
|
||||||
|
|
||||||
|
return $authority;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function calculateHash(bool $raw = true): string {
|
||||||
|
return hash('sha256', (string)$this, $raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __toString(): string {
|
||||||
|
if($this->formatted === null) {
|
||||||
|
$string = '';
|
||||||
|
|
||||||
|
if($this->hasScheme())
|
||||||
|
$string .= $this->getScheme() . ':';
|
||||||
|
|
||||||
|
$hasAuthority = $this->hasAuthority();
|
||||||
|
if($hasAuthority)
|
||||||
|
$string .= $this->getAuthority();
|
||||||
|
|
||||||
|
$hasPath = $this->hasPath();
|
||||||
|
$path = $this->getPath();
|
||||||
|
|
||||||
|
if($hasAuthority && (!$hasPath || $path[0] !== '/'))
|
||||||
|
$string .= '/';
|
||||||
|
elseif(!$hasAuthority && $path[1] === '/')
|
||||||
|
$path = '/' . trim($path, '/');
|
||||||
|
|
||||||
|
$string .= $path;
|
||||||
|
|
||||||
|
// is all this necessary...?
|
||||||
|
if($this->hasQuery()) {
|
||||||
|
$string .= '?';
|
||||||
|
$parts = explode('&', $this->getQuery());
|
||||||
|
|
||||||
|
foreach($parts as $part) {
|
||||||
|
$param = explode('=', $part, 2);
|
||||||
|
$string .= rawurlencode($param[0]);
|
||||||
|
if(isset($param[1]))
|
||||||
|
$string .= '=' . rawurlencode($param[1]);
|
||||||
|
$string .= '&';
|
||||||
|
}
|
||||||
|
|
||||||
|
$string = substr($string, 0, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($this->hasFragment())
|
||||||
|
$string .= '#' . rawurlencode($this->getFragment());
|
||||||
|
|
||||||
|
$this->formatted = $string;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->formatted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function toV1(): array {
|
||||||
|
$parts = ['uri' => (string)$this];
|
||||||
|
|
||||||
|
if($this->hasScheme())
|
||||||
|
$parts['scheme'] = $this->getScheme();
|
||||||
|
if($this->hasHost())
|
||||||
|
$parts['host'] = $this->getHost();
|
||||||
|
if($this->hasPort())
|
||||||
|
$parts['port'] = $this->getPort();
|
||||||
|
if($this->hasUser())
|
||||||
|
$parts['user'] = $this->getUser();
|
||||||
|
if($this->hasPassword())
|
||||||
|
$parts['pass'] = $parts['password'] = $this->getPassword();
|
||||||
|
if($this->hasPath())
|
||||||
|
$parts['path'] = $this->getPath();
|
||||||
|
if($this->hasQuery())
|
||||||
|
$parts['query'] = $this->getQuery();
|
||||||
|
if($this->hasFragment())
|
||||||
|
$parts['fragment'] = $this->getFragment();
|
||||||
|
|
||||||
|
return $parts;
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,9 +12,7 @@ define('UIH_DEBUG', is_file(UIH_ROOT . '/.debug'));
|
||||||
define('UIH_PUBLIC', UIH_ROOT . '/public');
|
define('UIH_PUBLIC', UIH_ROOT . '/public');
|
||||||
define('UIH_SOURCE', UIH_ROOT . '/src');
|
define('UIH_SOURCE', UIH_ROOT . '/src');
|
||||||
define('UIH_LIBRARY', UIH_ROOT . '/lib');
|
define('UIH_LIBRARY', UIH_ROOT . '/lib');
|
||||||
define('UIH_VERSION', '20220714');
|
define('UIH_VERSION', '20220715');
|
||||||
define('UIH_SEM_NAME', 'U');
|
|
||||||
define('UIH_SEM_PATH', sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'uiharu');
|
|
||||||
|
|
||||||
require_once UIH_LIBRARY . '/index/index.php';
|
require_once UIH_LIBRARY . '/index/index.php';
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue