summaryrefslogtreecommitdiff
path: root/src/Controllers/LoginController.php
diff options
context:
space:
mode:
authorDaniel Weipert <git@mail.dweipert.de>2026-04-10 13:37:26 +0200
committerDaniel Weipert <git@mail.dweipert.de>2026-04-10 14:39:36 +0200
commit74a524ded12c6527745957ac219e1ca34828aa6c (patch)
tree8dee7358b036f4d9e0730b8d89cb801caf46dff3 /src/Controllers/LoginController.php
parent6929089fea7cf79ae5ca9e05486ba33b0e5b216d (diff)
switch routing to attributes
Diffstat (limited to 'src/Controllers/LoginController.php')
-rw-r--r--src/Controllers/LoginController.php151
1 files changed, 0 insertions, 151 deletions
diff --git a/src/Controllers/LoginController.php b/src/Controllers/LoginController.php
deleted file mode 100644
index f9576fb..0000000
--- a/src/Controllers/LoginController.php
+++ /dev/null
@@ -1,151 +0,0 @@
-<?php
-
-namespace App\Controllers;
-
-use App\Database;
-use App\Errors\AppException;
-use App\Errors\UnknownError;
-use App\Models\Device;
-use App\Models\Tokens;
-use App\Models\User;
-use App\Support\Logger;
-use App\Support\Parser;
-use App\Support\RequestValidator;
-use Matrix\Data\LoginFlow;
-use Matrix\Enums\ErrorCode;
-use Matrix\Enums\LoginType;
-use Matrix\Enums\UserRegistrationKind;
-use Matrix\Responses\ClientLoginGetResponse;
-use Matrix\Responses\ClientLoginPostResponse;
-use Matrix\Responses\ClientRegisterPostResponse;
-use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\HttpFoundation\Response;
-use Symfony\Component\HttpFoundation\JsonResponse;
-
-class LoginController
-{
- /**
- * GET /_matrix/client/r0/login
- */
- public function supportedLoginTypes(Request $request): Response
- {
- return new JsonResponse(new ClientLoginGetResponse([
- (new LoginFlow(LoginType::PASSWORD)),
- ]));
- }
-
- /**
- * POST /_matrix/client/v3/login
- */
- public function login(Request $request): Response
- {
- Logger::logRequestToFile($request);
-
- $body = json_decode($request->getContent(), true);
- RequestValidator::validateJson();
-
- // validate login type
- $loginType = null;
- try {
- $loginType = LoginType::from($body["type"]);
- } catch (\ValueError $error) {
- throw new UnknownError("Bad login type.", Response::HTTP_BAD_REQUEST);
- }
-
- // get user id
- $userId = Parser::parseUser($body["identifier"]["user"]);
- if (empty($userId["server"])) {
- #$userId = "@$userId[username]:$_ENV[DOMAIN]";
- $userId = "@$userId[username]:localhost";
- } else {
- $userId = "@$userId[username]:$userId[server]";
- }
-
- #if ($loginType == LoginType::PASSWORD) {}
-
- $user = User::fetchWithPassword($userId, $body["password"]);
-
- if (! $user) {
- throw new AppException(ErrorCode::FORBIDDEN, "Invalid credentials", Response::HTTP_FORBIDDEN);
- }
-
- $deviceId = $body["device_id"] ?? "";
-
- $device = null;
- $tokens = null;
-
- // create new device with tokens
- if (empty($deviceId)) {
- $device = Device::new(
- $user->getId(),
- initialDisplayName: $body["initial_device_display_name"] ?? "",
- );
- $device->insert();
-
- $tokens = Tokens::new($userId, $device->getId());
- $tokens->insert();
- } else { // fetch existing device and tokens
- $device = $user->fetchDevice($deviceId);
- $tokens = Tokens::fetch($userId, $device->getId());
-
- if (empty($tokens)) {
- throw new AppException(
- ErrorCode::UNKNOWN_TOKEN,
- "Soft logged out",
- Response::HTTP_UNAUTHORIZED,
- ["soft_logout" => true],
- );
- }
- }
-
- return new JsonResponse(new ClientLoginPostResponse(
- accessToken: $tokens->getAccessToken(),
- deviceId:$device->getId(),
- userId: $user->getId(),
- expiresInMilliseconds: $tokens->getExpiresIn(),
- refreshToken: $tokens->getRefreshToken(),
- ));
- }
-
- /**
- * POST /_matrix/client/v3/register
- */
- public function register(Request $request): Response
- {
- $body = json_decode($request->getContent(), true);
- RequestValidator::validateJson();
-
- // validate kind
- $kind = null;
- try {
- $kind = UserRegistrationKind::from($request->query->get("kind") ?? "user");
- } catch (\ValueError $error) {
- throw new UnknownError("Bad registration kind.", Response::HTTP_BAD_REQUEST);
- }
-
- $username = $body["username"];
- $userId = "@$username:$_ENV[DOMAIN]";
-
- Database::getInstance()->query("insert into users (id, password) values (:id, :password)", [
- "id" => $userId,
- "password" => $body["password"],
- ]);
-
- $device_id = $body["device_id"] ?? "";
- $initialDeviceDisplayName = $body["initial_device_display_name"] ?? "";
-
- $device = Device::new($userId, $device_id, $initialDeviceDisplayName);
- $device->insert();
-
- $tokens = Tokens::new($userId, $device->getId());
- $tokens->insert();
-
- return new JsonResponse(new ClientRegisterPostResponse(
- accessToken: $tokens->getAccessToken(),
- deviceId: $device->getId(),
- expiresInMilliseconds: $tokens->getExpiresIn(),
- refreshToken: $tokens->getRefreshToken(),
- userId: $userId,
- ));
- }
-}