summaryrefslogtreecommitdiff
path: root/src/Controllers/KeyController.php
diff options
context:
space:
mode:
authorDaniel Weipert <git@mail.dweipert.de>2025-08-20 14:58:10 +0200
committerDaniel Weipert <git@mail.dweipert.de>2025-08-20 14:58:10 +0200
commit6dc0447320272aaae51a98eb6606597019f986d3 (patch)
tree0acb527801a1d9eac943b5e0b0ccb33e610cd755 /src/Controllers/KeyController.php
parentd08f4c83470c25d35d24594bd73e4effdac191a0 (diff)
login produces devices and tokens
Diffstat (limited to 'src/Controllers/KeyController.php')
-rw-r--r--src/Controllers/KeyController.php34
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(),
+ ]);
+ }
}