aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--backend/authentication/backend.py2
-rw-r--r--backend/authentication/user.py4
-rw-r--r--backend/discord.py24
-rw-r--r--backend/routes/auth/authorize.py2
-rw-r--r--backend/routes/discord.py4
-rw-r--r--backend/routes/forms/submit.py2
6 files changed, 13 insertions, 25 deletions
diff --git a/backend/authentication/backend.py b/backend/authentication/backend.py
index 2512761..c84ba10 100644
--- a/backend/authentication/backend.py
+++ b/backend/authentication/backend.py
@@ -63,7 +63,7 @@ class JWTAuthenticationBackend(authentication.AuthenticationBackend):
user = User(
token,
user_details,
- await discord.get_member(request.state.db, user_details["id"]),
+ await discord.get_member(user_details["id"]),
)
if await user.fetch_admin_status(request.state.db):
scopes.append("admin")
diff --git a/backend/authentication/user.py b/backend/authentication/user.py
index c81b7a9..ad59103 100644
--- a/backend/authentication/user.py
+++ b/backend/authentication/user.py
@@ -67,9 +67,9 @@ class User(BaseUser):
return self.admin
- async def refresh_data(self, database: Database) -> None:
+ async def refresh_data(self) -> None:
"""Fetches user data from discord, and updates the instance."""
- self.member = await discord.get_member(database, self.payload["id"])
+ self.member = await discord.get_member(self.payload["id"])
if self.member:
self.payload = self.member.user.dict()
diff --git a/backend/discord.py b/backend/discord.py
index dc5989a..855a606 100644
--- a/backend/discord.py
+++ b/backend/discord.py
@@ -124,7 +124,6 @@ async def _fetch_member_api(member_id: str) -> models.DiscordMember | None:
async def get_member(
- database: Database,
user_id: str,
*,
force_refresh: bool = False,
@@ -135,34 +134,23 @@ async def get_member(
If `force_refresh` is True, the cache is skipped and the entry is updated.
None may be returned if the member object does not exist.
"""
- collection = database.get_collection("discord_members")
+ member_key = f"forms-backend:member_cache:{user_id}"
if force_refresh:
- await collection.delete_one({"user": user_id})
-
- # `create_index` creates the index if it does not exist, or passes
- # This handles TTL on member objects
- await collection.create_index(
- "inserted_at",
- expireAfterSeconds=60 * 60, # 1 hour
- name="inserted_at",
- )
+ await constants.REDIS_CLIENT.delete(member_key)
- result = await collection.find_one({"user": user_id})
+ result = await constants.REDIS_CLIENT.get(member_key)
if result is not None:
- return models.DiscordMember(**json.loads(result["data"]))
+ return models.DiscordMember(**json.loads(result))
member = await _fetch_member_api(user_id)
if not member:
return None
- await collection.insert_one({
- "user": user_id,
- "data": member.json(),
- "inserted_at": datetime.datetime.now(tz=datetime.UTC),
- })
+ await constants.REDIS_CLIENT.set(member_key, member.json(), ex=60 * 60)
+
return member
diff --git a/backend/routes/auth/authorize.py b/backend/routes/auth/authorize.py
index bc80a7d..8fe7e85 100644
--- a/backend/routes/auth/authorize.py
+++ b/backend/routes/auth/authorize.py
@@ -44,7 +44,7 @@ async def process_token(
return AUTH_FAILURE
user_id = user_details["id"]
- member = await get_member(request.state.db, user_id, force_refresh=True)
+ member = await get_member(user_id, force_refresh=True)
max_age = datetime.timedelta(seconds=int(bearer_token["expires_in"]))
token_expiry = interaction_start + max_age
diff --git a/backend/routes/discord.py b/backend/routes/discord.py
index 53b8af3..196d902 100644
--- a/backend/routes/discord.py
+++ b/backend/routes/discord.py
@@ -60,7 +60,7 @@ class MemberRoute(route.Route):
async def delete(self, request: Request) -> JSONResponse:
"""Force a resync of the cache for the given user."""
body = await request.json()
- member = await discord.get_member(request.state.db, body["user_id"], force_refresh=True)
+ member = await discord.get_member(body["user_id"], force_refresh=True)
if member:
return JSONResponse(member.dict())
@@ -75,7 +75,7 @@ class MemberRoute(route.Route):
async def get(self, request: Request) -> JSONResponse:
"""Get a user's roles on the configured server."""
body = await request.json()
- member = await discord.get_member(request.state.db, body["user_id"])
+ member = await discord.get_member(body["user_id"])
if not member:
return NOT_FOUND_EXCEPTION
diff --git a/backend/routes/forms/submit.py b/backend/routes/forms/submit.py
index 5ba77e5..01c32cc 100644
--- a/backend/routes/forms/submit.py
+++ b/backend/routes/forms/submit.py
@@ -85,7 +85,7 @@ class SubmitForm(Route):
try:
if hasattr(request.user, User.refresh_data.__name__):
old = request.user.token
- await request.user.refresh_data(request.state.db)
+ await request.user.refresh_data()
if old != request.user.token:
try: