summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/Controllers/AccountController.php18
-rw-r--r--src/Controllers/KeyController.php31
-rw-r--r--src/Controllers/LoginController.php44
-rw-r--r--src/Models/User.php16
4 files changed, 55 insertions, 54 deletions
diff --git a/src/Controllers/AccountController.php b/src/Controllers/AccountController.php
index 858a6b5..8e20880 100755
--- a/src/Controllers/AccountController.php
+++ b/src/Controllers/AccountController.php
@@ -2,9 +2,9 @@
namespace App\Controllers;
-use App\Errors\UnauthorizedError;
use App\Models\Device;
use App\Models\User;
+use Matrix\Responses\ClientAccountWhoamiGetResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
@@ -18,18 +18,12 @@ class AccountController
*/
public function whoami(Request $request): Response
{
- $accessToken = str_replace("Bearer ", "", $request->headers->get("authorization") ?: "");
- $user = User::fetchWithAccessToken($accessToken);
-
- if (empty($user)) {
- throw new UnauthorizedError();
- }
-
+ $user = User::authenticateWithRequest($request);
$device = Device::fetch(userId: $user->getId());
- return new JsonResponse([
- "device_id" => $device->getId(),
- "user_id" => $user->getId(),
- ]);
+ return new JsonResponse(new ClientAccountWhoamiGetResponse(
+ userId: $user->getId(),
+ deviceId: $device->getId(),
+ ));
}
}
diff --git a/src/Controllers/KeyController.php b/src/Controllers/KeyController.php
index a8b4fb1..7777229 100644
--- a/src/Controllers/KeyController.php
+++ b/src/Controllers/KeyController.php
@@ -4,10 +4,11 @@ namespace App\Controllers;
use App\Errors\AppException;
use App\Errors\ErrorCode;
-use App\Errors\UnauthorizedError;
use App\Models\Tokens;
use App\Models\User;
use App\Support\RequestValidator;
+use Matrix\Responses\ClientKeysUploadPostResponse;
+use Matrix\Responses\ClientRefreshPostResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
@@ -29,22 +30,14 @@ class KeyController
*/
public function upload(Request $request): Response
{
- $accessToken = str_replace("Bearer ", "", $request->headers->get("authorization") ?: "");
- $user = User::fetchWithAccessToken($accessToken);
-
- if (empty($user)) {
- throw new UnauthorizedError();
- }
-
+ $user = User::authenticateWithRequest($request);
$body = json_decode($request->getContent(), true);
RequestValidator::validateJson();
- return new JsonResponse([
- "one_time_key_counts" => [
- "curve25519" => 0,
- "signed_curve25519" => count($body["one_time_keys"])
- ],
- ]);
+ return new JsonResponse(new ClientKeysUploadPostResponse([
+ "curve25519" => 0,
+ "signed_curve25519" => count($body["one_time_keys"]),
+ ]));
}
public function query(Request $request): Response
@@ -74,10 +67,10 @@ class KeyController
$newTokens = Tokens::new($tokens->getUserId(), $tokens->getDeviceId());
$newTokens->insert();
- return new JsonResponse([
- "access_token" => $newTokens->getAccessToken(),
- "expires_in" => $newTokens->getExpiresIn(),
- "refresh_token" => $newTokens->getRefreshToken(),
- ]);
+ return new JsonResponse(new ClientRefreshPostResponse(
+ accessToken: $newTokens->getAccessToken(),
+ expiresInMilliseconds: $newTokens->getExpiresIn(),
+ refreshToken: $newTokens->getRefreshToken(),
+ ));
}
}
diff --git a/src/Controllers/LoginController.php b/src/Controllers/LoginController.php
index 15f1583..c520e25 100644
--- a/src/Controllers/LoginController.php
+++ b/src/Controllers/LoginController.php
@@ -10,9 +10,12 @@ use App\Models\Device;
use App\Models\Tokens;
use App\Models\User;
use App\Support\RequestValidator;
-use App\Types\LoginFlow;
-use App\Types\LoginType;
use App\Types\UserRegistrationKind;
+use Matrix\Data\LoginFlow;
+use Matrix\Enums\LoginType;
+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;
@@ -24,11 +27,9 @@ class LoginController
*/
public function supportedLoginTypes(Request $request): Response
{
- return new JsonResponse([
- "flows" => [
- (new LoginFlow(LoginType::PASSWORD))->toArray(),
- ],
- ]);
+ return new JsonResponse(new ClientLoginGetResponse([
+ (new LoginFlow(LoginType::PASSWORD)),
+ ]));
}
/**
@@ -87,14 +88,13 @@ class LoginController
}
}
- return new JsonResponse([
- "access_token" => $tokens->getAccessToken(),
- "device_id" => $device->getId(),
- "expires_in_ms" => $tokens->getExpiresIn(),
- "refresh_token" => $tokens->getRefreshToken(),
- "user_id" => $user->getId(),
- #"well_known" => [],
- ]);
+ return new JsonResponse(new ClientLoginPostResponse(
+ accessToken: $tokens->getAccessToken(),
+ deviceId:$device->getId(),
+ userId: $user->getId(),
+ expiresInMilliseconds: $tokens->getExpiresIn(),
+ refreshToken: $tokens->getRefreshToken(),
+ ));
}
/**
@@ -130,12 +130,12 @@ class LoginController
$tokens = Tokens::new($userId, $device->getId());
$tokens->insert();
- return new JsonResponse([
- "access_token" => $tokens->getAccessToken(),
- "device_id" => $device->getId(),
- "expires_in_ms" => $tokens->getExpiresIn(),
- "refresh_token" => $tokens->getRefreshToken(),
- "user_id" => $userId,
- ]);
+ return new JsonResponse(new ClientRegisterPostResponse(
+ accessToken: $tokens->getAccessToken(),
+ deviceId: $device->getId(),
+ expiresInMilliseconds: $tokens->getExpiresIn(),
+ refreshToken: $tokens->getRefreshToken(),
+ userId: $userId,
+ ));
}
}
diff --git a/src/Models/User.php b/src/Models/User.php
index 423394a..c0c73f8 100644
--- a/src/Models/User.php
+++ b/src/Models/User.php
@@ -3,7 +3,9 @@
namespace App\Models;
use App\Database;
+use App\Errors\UnauthorizedError;
use App\Support\ConnectsToDatabase;
+use Symfony\Component\HttpFoundation\Request;
class User implements ConnectsToDatabase
{
@@ -50,7 +52,7 @@ class User implements ConnectsToDatabase
return self::fromDatabase($row);
}
- public static function fetchWithAccessToken(string $accessToken): ?static
+ public static function fetchWithAccessToken(string $accessToken): ?self
{
$row = Database::getInstance()->query(<<<SQL
select users.* from users left join tokens on tokens.user_id = users.id where tokens.access_token=:access_token
@@ -70,6 +72,18 @@ class User implements ConnectsToDatabase
return new self($id);
}
+ public static function authenticateWithRequest(Request $request): self
+ {
+ $accessToken = str_replace("Bearer ", "", $request->headers->get("authorization") ?: "");
+ $user = self::fetchWithAccessToken($accessToken);
+
+ if (empty($user)) {
+ throw new UnauthorizedError();
+ }
+
+ return $user;
+ }
+
public function insert(): bool
{
return !! Database::getInstance()->query(