summaryrefslogtreecommitdiff
path: root/src/application/mystic/forum/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/application/mystic/forum/utils')
-rw-r--r--src/application/mystic/forum/utils/RequestUtils.php77
-rw-r--r--src/application/mystic/forum/utils/ValidationUtils.php22
2 files changed, 95 insertions, 4 deletions
diff --git a/src/application/mystic/forum/utils/RequestUtils.php b/src/application/mystic/forum/utils/RequestUtils.php
index 2f40013..f6ce3a3 100644
--- a/src/application/mystic/forum/utils/RequestUtils.php
+++ b/src/application/mystic/forum/utils/RequestUtils.php
@@ -3,17 +3,86 @@ declare(strict_types=1);
namespace mystic\forum\utils;
+use mystic\forum\Database;
use mystic\forum\Messaging;
+use mystic\forum\orm\User;
final class RequestUtils {
use StaticClass;
+ public static function getRequestMethod(): string {
+ return strtoupper($_SERVER["REQUEST_METHOD"] ?? "GET");
+ }
+
+ public static function isRequestMethod(string $method): bool {
+ $rMethod = self::getRequestMethod();
+ return strcasecmp($rMethod, $method) === 0;
+ }
+
public static function ensureRequestMethod(string $method): void {
- $rMethod = $_SERVER["REQUEST_METHOD"];
- if (strcasecmp($rMethod, $method) !== 0) {
- http_response_code(500);
- Messaging::error("Invalid request method $rMethod");
+ if (!self::isRequestMethod($method)) {
+ http_response_code(415);
+ Messaging::error("Invalid request method " . self::getRequestMethod());
+ exit;
+ }
+ }
+
+ public static function getRequiredField(string $field): string {
+ $fieldValue = $_POST[$field] ?? null;
+ if ($fieldValue === null) {
+ http_response_code(400);
+ Messaging::error("Missing required field $field");
exit;
}
+ return $fieldValue;
+ }
+
+ public static function storeForm(): void {
+ $_SESSION["lastForm"] = $_POST ?? [];
+ $_SESSION["lastForm_uri"] = $_SERVER["REQUEST_URI"];
+ }
+
+ public static function triggerFormError(string $message, ?string $next = null): never {
+ $next ??= $_SERVER["REQUEST_URI"];
+ $_SESSION["formError"] = $message;
+ // store last form submission
+ self::storeForm();
+ header("Location: $next");
+ exit;
+ }
+
+ public static function getAndClearFormError(): ?string {
+ $err = $_SESSION["formError"] ?? null;
+ unset($_SESSION["formError"]);
+ return $err;
+ }
+
+ public static function getLastForm(string &$lastFormUri): ?array {
+ $lastFormUri = $_SESSION["lastForm_uri"] ?? "";
+ return $_SESSION["lastForm"] ?? null;
+ }
+
+ public static function clearLastForm(): void {
+ unset($_SESSION["lastForm"]);
+ unset($_SESSION["lastForm_uri"]);
+ }
+
+ public static function getAuthorizedUser(Database &$db): ?User {
+ $userId = $_SESSION["authedUser"] ?? null;
+ if ($userId === null)
+ return null;
+ $user = new User();
+ $user->id = $userId;
+ if (!$db->fetch($user))
+ return null;
+ return $user;
+ }
+
+ public static function setAuthorizedUser(User &$user): void {
+ $_SESSION["authedUser"] = $user->id;
+ }
+
+ public static function unsetAuthorizedUser(): void {
+ unset($_SESSION["authedUser"]);
}
}
diff --git a/src/application/mystic/forum/utils/ValidationUtils.php b/src/application/mystic/forum/utils/ValidationUtils.php
new file mode 100644
index 0000000..df97914
--- /dev/null
+++ b/src/application/mystic/forum/utils/ValidationUtils.php
@@ -0,0 +1,22 @@
+<?php
+declare(strict_types=1);
+
+namespace mystic\forum\utils;
+
+use mystic\forum\Database;
+use mystic\forum\orm\User;
+
+final class ValidationUtils {
+ use StaticClass;
+
+ public static function isUsernameValid(string $name): bool {
+ return !!preg_match('/^[a-z0-9]([._](?![._])|[a-z0-9]){2,30}[a-z0-9]$/', $name);
+ }
+
+ public static function isUsernameAvailable(Database &$db, string $name): bool {
+ $user = new User();
+ $user->name = $name;
+ return !$db->fetchWhere($user, "name");
+ }
+}
+