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(), +    ]); +  }  } | 
