aboutsummaryrefslogtreecommitdiff
path: root/lib/classes/OAuth2/Bridge/RefreshTokenRepository.php
diff options
context:
space:
mode:
authorMarcus Eibrink-Lunzenauer <lunzenauer@elan-ev.de>2022-07-15 11:47:35 +0000
committerMarcus Eibrink-Lunzenauer <lunzenauer@elan-ev.de>2022-07-15 11:47:35 +0000
commit55852ef4819e5eafce9ae53dc4de2d84cdad1778 (patch)
tree9aedcdf89f416a7936f7df80da339a537082b5d5 /lib/classes/OAuth2/Bridge/RefreshTokenRepository.php
parenta9585dad3547a4ebbadd00f44065f95017d18684 (diff)
StEP-366: Add OAuth2 support to Stud.IP
Closes #1035 and #1198 Merge request studip/studip!635
Diffstat (limited to 'lib/classes/OAuth2/Bridge/RefreshTokenRepository.php')
-rw-r--r--lib/classes/OAuth2/Bridge/RefreshTokenRepository.php63
1 files changed, 63 insertions, 0 deletions
diff --git a/lib/classes/OAuth2/Bridge/RefreshTokenRepository.php b/lib/classes/OAuth2/Bridge/RefreshTokenRepository.php
new file mode 100644
index 0000000..44cb16c
--- /dev/null
+++ b/lib/classes/OAuth2/Bridge/RefreshTokenRepository.php
@@ -0,0 +1,63 @@
+<?php
+
+namespace Studip\OAuth2\Bridge;
+
+use League\OAuth2\Server\Entities\RefreshTokenEntityInterface;
+use League\OAuth2\Server\Exception\UniqueTokenIdentifierConstraintViolationException;
+use League\OAuth2\Server\Repositories\RefreshTokenRepositoryInterface;
+use Studip\OAuth2\Models\RefreshToken;
+
+class RefreshTokenRepository implements RefreshTokenRepositoryInterface
+{
+ /**
+ * Creates a new refresh token.
+ */
+ public function getNewRefreshToken(): RefreshTokenEntityInterface
+ {
+ return new RefreshTokenEntity();
+ }
+
+ /**
+ * Create a new refresh token_name.
+ *
+ * @throws UniqueTokenIdentifierConstraintViolationException
+ */
+ public function persistNewRefreshToken(RefreshTokenEntityInterface $refreshTokenEntity): void
+ {
+ RefreshToken::create([
+ 'id' => $refreshTokenEntity->getIdentifier(),
+ 'access_token_id' => $refreshTokenEntity->getAccessToken()->getIdentifier(),
+ 'revoked' => 0,
+ 'expires_at' => $refreshTokenEntity->getExpiryDateTime()->getTimestamp(),
+ ]);
+
+ // TODO: Logging and metrics
+ }
+
+ /**
+ * Revoke the refresh token.
+ *
+ * @param string $tokenId
+ */
+ public function revokeRefreshToken($tokenId): void
+ {
+ $refreshToken = RefreshToken::find($tokenId);
+ if ($refreshToken) {
+ $refreshToken->revoke();
+ }
+ }
+
+ /**
+ * Check if the refresh token has been revoked.
+ *
+ * @param string $tokenId
+ *
+ * @return bool Return true if this token has been revoked
+ */
+ public function isRefreshTokenRevoked($tokenId): bool
+ {
+ $refreshToken = RefreshToken::find($tokenId);
+
+ return $refreshToken ? $refreshToken->isRevoked() : true;
+ }
+}