diff options
| author | Daniel Weipert <git@mail.dweipert.de> | 2026-04-10 13:37:26 +0200 |
|---|---|---|
| committer | Daniel Weipert <git@mail.dweipert.de> | 2026-04-10 14:39:36 +0200 |
| commit | 74a524ded12c6527745957ac219e1ca34828aa6c (patch) | |
| tree | 8dee7358b036f4d9e0730b8d89cb801caf46dff3 /src/Controllers/LoginController.php | |
| parent | 6929089fea7cf79ae5ca9e05486ba33b0e5b216d (diff) | |
switch routing to attributes
Diffstat (limited to 'src/Controllers/LoginController.php')
| -rw-r--r-- | src/Controllers/LoginController.php | 151 |
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, - )); - } -} |
