diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Controllers/ServerDiscoveryController.php | 8 | ||||
| -rw-r--r-- | src/Controllers/ServerImplementationController.php | 9 | ||||
| -rw-r--r-- | src/ErrorCode.php | 11 | ||||
| -rw-r--r-- | src/ErrorResponse.php | 16 | ||||
| -rw-r--r-- | src/Router.php | 13 | ||||
| -rw-r--r-- | src/routes.php | 25 | 
6 files changed, 76 insertions, 6 deletions
| diff --git a/src/Controllers/ServerDiscoveryController.php b/src/Controllers/ServerDiscoveryController.php index e5fdd31..076329b 100644 --- a/src/Controllers/ServerDiscoveryController.php +++ b/src/Controllers/ServerDiscoveryController.php @@ -22,4 +22,12 @@ class ServerDiscoveryController        ],      ]);    } +   +  public function support(): Response +  { +    return new JsonResponse([ +      "contacts" => [], +      "support_page" => "", +    ]); +  }  } diff --git a/src/Controllers/ServerImplementationController.php b/src/Controllers/ServerImplementationController.php index 4531ce5..b5d9d0f 100644 --- a/src/Controllers/ServerImplementationController.php +++ b/src/Controllers/ServerImplementationController.php @@ -16,4 +16,13 @@ class ServerImplementationController        ],      ]);    } +   +  public function versions(): Response +  { +    return new JsonResponse([ +      "versions" => [ +        "v1.1", +      ], +    ]); +  }  } diff --git a/src/ErrorCode.php b/src/ErrorCode.php new file mode 100644 index 0000000..048ef34 --- /dev/null +++ b/src/ErrorCode.php @@ -0,0 +1,11 @@ +<?php + +namespace App; + +enum ErrorCode: string +{ +  case FORBIDDEN = "M_FORBIDDEN"; +  case UNKNOWN_TOKEN = "M_UNKNOWN_TOKEN"; +   +  case UNKNOWN = "M_UNKNOWN"; +} diff --git a/src/ErrorResponse.php b/src/ErrorResponse.php new file mode 100644 index 0000000..05a77d1 --- /dev/null +++ b/src/ErrorResponse.php @@ -0,0 +1,16 @@ +<?php + +namespace App; + +use Symfony\Component\HttpFoundation\JsonResponse; + +class ErrorResponse extends JsonResponse +{ +  public function __construct(ErrorCode $code, string $message) +  { +    parent::__construct([ +      "errcode" => $code, +      "error" => $message, +    ]); +  } +} diff --git a/src/Router.php b/src/Router.php index deb852e..319d5e2 100644 --- a/src/Router.php +++ b/src/Router.php @@ -28,6 +28,17 @@ class Router    {      $request = Request::createFromGlobals(); +    if ($request->isMethod("OPTIONS")) { +      $response = new Response(); +      $response->headers->add([ +        "Access-Control-Allow-Origin" => "*", +        "Access-Control-Allow-Methods" => "GET, POST, PUT, DELETE, OPTIONS, PATCH, HEAD", +        "Access-Control-Allow-Headers" => "X-Requested-With, Content-Type, Authorization", +      ]); +       +      return $response; +    } +          $context = new RequestContext();      $context->fromRequest($request); @@ -40,7 +51,7 @@ class Router        return (new $class)->$method();      } catch (\Exception $exception) { -      return new Response("500: " . $exception->getMessage(), 500); +      return new ErrorResponse(ErrorCode::UNKNOWN, "Unknown error occured");      }    } diff --git a/src/routes.php b/src/routes.php index ff16ecc..25e2e1f 100644 --- a/src/routes.php +++ b/src/routes.php @@ -10,17 +10,32 @@ return function (RouteConfigurator $routes): void  {    $routes      ->add("well_known_matrix_server", "/.well-known/matrix/server") -    ->controller([ServerDiscoveryController::class, "server"]); -   +    ->controller([ServerDiscoveryController::class, "server"]) +    ->methods(["GET"]); +        $routes      ->add("well_known_matrix_client", "/.well-known/matrix/client") -    ->controller([ServerDiscoveryController::class, "client"]); -   +    ->controller([ServerDiscoveryController::class, "client"]) +    ->methods(["GET"]); +     +  $routes +    ->add("well_known_matrix_support", "/.well-known/matrix/support") +    ->controller([ServerDiscoveryController::class, "support"]) +    ->methods(["GET"]); +        $routes      ->add("matrix_federation_version", "/_matrix/federation/v1/version") -    ->controller([ServerImplementationController::class, "version"]); +    ->controller([ServerImplementationController::class, "version"]) +    ->methods(["GET"]); +     +  $routes +    ->add("matrix_client_versions", "/_matrix/client/versions") +    ->controller([ServerImplementationController::class, "versions"]) +    ->methods(["GET"]);    # /_matrix/key/v2/server    # /_matrix/key/v2/query    # /_matrix/key/v2/query/{serverName} +   +    }; | 
