aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorwinter2024-12-14 00:08:41 +0000
committerwinter2024-12-14 00:08:41 +0000
commit86cf52e8d2701e13bd9fd4c847b35eba7506c473 (patch)
tree7b21f99004650efc42057e96905967e5d4e01038
parent2713c1f73a39d4106936d4c52bf8f18d810d7f3c (diff)
add a godawful basic html actor page
-rw-r--r--Digitigrade/HttpResponseStatus.php1
-rw-r--r--Digitigrade/HttpResponseStatus/BadRequest.php3
-rw-r--r--Digitigrade/HttpResponseStatus/InternalServerError.php3
-rw-r--r--Digitigrade/HttpResponseStatus/NoHandlerFound.php3
-rw-r--r--Digitigrade/HttpResponseStatus/NotFound.php3
-rw-r--r--Digitigrade/HttpResponseStatus/TemporaryRedirect.php25
-rw-r--r--Digitigrade/Router.php1
-rw-r--r--routes/actor.php4
-rw-r--r--routes/user.php30
9 files changed, 73 insertions, 0 deletions
diff --git a/Digitigrade/HttpResponseStatus.php b/Digitigrade/HttpResponseStatus.php
index e169833..4b9a0d6 100644
--- a/Digitigrade/HttpResponseStatus.php
+++ b/Digitigrade/HttpResponseStatus.php
@@ -4,4 +4,5 @@ namespace Digitigrade;
interface HttpResponseStatus extends \Throwable {
public function httpCode(): int;
public function httpReason(): string;
+ public function httpHeaders();
} \ No newline at end of file
diff --git a/Digitigrade/HttpResponseStatus/BadRequest.php b/Digitigrade/HttpResponseStatus/BadRequest.php
index ba7ce65..e605f70 100644
--- a/Digitigrade/HttpResponseStatus/BadRequest.php
+++ b/Digitigrade/HttpResponseStatus/BadRequest.php
@@ -15,4 +15,7 @@ class BadRequest extends \Exception implements HttpResponseStatus {
public function httpReason(): string {
return "Bad Request";
}
+
+ public function httpHeaders() {
+ }
} \ No newline at end of file
diff --git a/Digitigrade/HttpResponseStatus/InternalServerError.php b/Digitigrade/HttpResponseStatus/InternalServerError.php
index 237c526..f04f64f 100644
--- a/Digitigrade/HttpResponseStatus/InternalServerError.php
+++ b/Digitigrade/HttpResponseStatus/InternalServerError.php
@@ -20,4 +20,7 @@ class InternalServerError extends \Exception implements HttpResponseStatus {
public function httpReason(): string {
return "Internal Server Error";
}
+
+ public function httpHeaders() {
+ }
} \ No newline at end of file
diff --git a/Digitigrade/HttpResponseStatus/NoHandlerFound.php b/Digitigrade/HttpResponseStatus/NoHandlerFound.php
index 871b873..e227a74 100644
--- a/Digitigrade/HttpResponseStatus/NoHandlerFound.php
+++ b/Digitigrade/HttpResponseStatus/NoHandlerFound.php
@@ -15,4 +15,7 @@ class NoHandlerFound extends \Exception implements HttpResponseStatus {
public function httpReason(): string {
return "Not Found";
}
+
+ public function httpHeaders() {
+ }
} \ No newline at end of file
diff --git a/Digitigrade/HttpResponseStatus/NotFound.php b/Digitigrade/HttpResponseStatus/NotFound.php
index 643976c..7da4187 100644
--- a/Digitigrade/HttpResponseStatus/NotFound.php
+++ b/Digitigrade/HttpResponseStatus/NotFound.php
@@ -15,4 +15,7 @@ class NotFound extends \Exception implements HttpResponseStatus {
public function httpReason(): string {
return "Not Found";
}
+
+ public function httpHeaders() {
+ }
} \ No newline at end of file
diff --git a/Digitigrade/HttpResponseStatus/TemporaryRedirect.php b/Digitigrade/HttpResponseStatus/TemporaryRedirect.php
new file mode 100644
index 0000000..fbf0def
--- /dev/null
+++ b/Digitigrade/HttpResponseStatus/TemporaryRedirect.php
@@ -0,0 +1,25 @@
+<?php
+namespace Digitigrade\HttpResponseStatus;
+
+use Digitigrade\HttpResponseStatus;
+
+class TemporaryRedirect extends \Exception implements HttpResponseStatus {
+ public string $target;
+
+ public function __construct(string $target) {
+ $this->target = $target;
+ $this->message = "Redirecting to $target";
+ }
+
+ public function httpCode(): int {
+ return 302;
+ }
+
+ public function httpReason(): string {
+ return "Found";
+ }
+
+ public function httpHeaders() {
+ header("Location: $this->target");
+ }
+} \ No newline at end of file
diff --git a/Digitigrade/Router.php b/Digitigrade/Router.php
index fb984d5..e8bea48 100644
--- a/Digitigrade/Router.php
+++ b/Digitigrade/Router.php
@@ -23,6 +23,7 @@ class Router extends Singleton {
$this->processRequestInner();
} catch (HttpResponseStatus $e) {
http_response_code($e->httpCode());
+ $e->httpHeaders();
echo '<h1>' . $e->httpReason() . '</h1><pre>' . $e->getMessage() . '</pre>';
}
}
diff --git a/routes/actor.php b/routes/actor.php
index 021b9f8..51c0e1a 100644
--- a/routes/actor.php
+++ b/routes/actor.php
@@ -1,6 +1,7 @@
<?php
use Digitigrade\HttpResponseStatus\NotFound;
+use Digitigrade\HttpResponseStatus\TemporaryRedirect;
use Digitigrade\Model\Actor;
use Digitigrade\Model\Note;
use Digitigrade\Router;
@@ -10,6 +11,9 @@ Router::getInstance()->mount('/user/:handle', function (array $args) {
if ($actor == null) {
throw new NotFound("i don't know any local user called " . $args['handle']);
}
+ if (str_contains($_SERVER['HTTP_ACCEPT'], 'text/html')) {
+ throw new TemporaryRedirect(path_to_uri("/@/$actor->handle"));
+ }
json_response($actor);
});
diff --git a/routes/user.php b/routes/user.php
new file mode 100644
index 0000000..5532448
--- /dev/null
+++ b/routes/user.php
@@ -0,0 +1,30 @@
+<?php
+
+use Digitigrade\HttpResponseStatus\NotFound;
+use Digitigrade\Model\Actor;
+use Digitigrade\Router;
+
+Router::getInstance()->mount('/@/:handle', function (array $args) {
+ $actor = Actor::findLocalByHandle($args['handle']);
+ if ($actor == null) {
+ throw new NotFound("i don't know any local user called " . $args['handle']);
+ }
+
+ ?>
+ <!DOCTYPE html>
+ <html>
+
+ <head>
+ <title><?= $actor->displayName ?> (@<?= $actor->handle ?>)</title>
+ </head>
+
+ <body>
+ <h1><?= $actor->displayName ?></h1>
+ <p>@<?= $actor->handle ?></p>
+ <hr>
+ <p><?= $actor->bio ?></p>
+ </body>
+
+ </html>
+ <?php
+}); \ No newline at end of file