diff options
Diffstat (limited to 'src/Controllers/KeyController.php')
-rw-r--r-- | src/Controllers/KeyController.php | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/Controllers/KeyController.php b/src/Controllers/KeyController.php index a999e40..5050d9b 100644 --- a/src/Controllers/KeyController.php +++ b/src/Controllers/KeyController.php @@ -2,6 +2,10 @@ namespace App\Controllers; +use App\Errors\AppException; +use App\Errors\ErrorCode; +use App\Models\Tokens; +use App\Support\RequestValidator; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\JsonResponse; @@ -29,4 +33,34 @@ class KeyController public function query(string $serverName): Response {} + + /** + * POST /_matrix/client/v3/refresh + */ + public function refresh(): Response + { + $request = Request::createFromGlobals(); + RequestValidator::validateJson(); + $body = json_decode($request->getContent(), true); + + $tokens = Tokens::fetchWithRefreshToken($body["refresh_token"]); + + if (empty($tokens)) { + throw new AppException( + ErrorCode::UNKNOWN_TOKEN, + "Soft logged out", + Response::HTTP_UNAUTHORIZED, + ["soft_logout" => true], + ); + } + + $newTokens = Tokens::new($tokens->getUserId(), $tokens->getDeviceId()); + $newTokens->insert(); + + return new JsonResponse([ + "access_token" => $newTokens->getAccessToken(), + "expires_in" => $newTokens->getExpiresIn(), + "refresh_token" => $newTokens->getRefreshToken(), + ]); + } } |