From bc8db87944de7657eec7ac924d727eae33470fb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?c=C4=83t=C4=83lin?= Date: Mon, 24 Feb 2025 11:27:10 +0100 Subject: [PATCH] fix: retrieve user profile after refreshing twitch creds --- devenv.nix | 1 + pyproject.toml | 2 +- src/huesoporro/actions/refresh.py | 20 ++++++++++---------- src/huesoporro/infra/authenticator.py | 3 ++- uv.lock | 2 +- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/devenv.nix b/devenv.nix index 06edec4..2342729 100644 --- a/devenv.nix +++ b/devenv.nix @@ -10,6 +10,7 @@ languages.python.version = "3.12.8"; enterShell = '' + uv sync ''; dotenv.enable = true; diff --git a/pyproject.toml b/pyproject.toml index 8b774ef..1b7363a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "huesoporro" -version = "0.2.5" +version = "0.2.8" description = "Misc Twitch bots" readme = "README.md" authors = [ diff --git a/src/huesoporro/actions/refresh.py b/src/huesoporro/actions/refresh.py index 4ba8543..f28cc7c 100644 --- a/src/huesoporro/actions/refresh.py +++ b/src/huesoporro/actions/refresh.py @@ -11,17 +11,17 @@ class RefreshAction(BaseModel): authenticator: TwitchAuthenticator s: Settings - async def run(self, user: User): + async def run(self, user: User) -> str | None: is_valid = await self.authenticator.token_is_valid( user.external_auth["twitch"]["access_token"] ) + if is_valid: + return None - if not is_valid: - new_tokens = await self.authenticator.refresh_token( - user.external_auth["twitch"]["refresh_token"] - ) - user.external_auth["twitch"]["access_token"] = new_tokens["access_token"] # type: ignore[index] - user.external_auth["twitch"]["refresh_token"] = new_tokens["refresh_token"] # type: ignore[index] - await self.user_repo.update(user) - return user.encode() - return None + twitch_auth = await self.authenticator.refresh_token( + user.external_auth["twitch"]["refresh_token"] + ) + user.external_auth["twitch"]["access_token"] = twitch_auth.access_token + user.external_auth["twitch"]["refresh_token"] = twitch_auth.refresh_token + await self.user_repo.update(user) + return user.encode() diff --git a/src/huesoporro/infra/authenticator.py b/src/huesoporro/infra/authenticator.py index 9c372d8..0405c8a 100644 --- a/src/huesoporro/infra/authenticator.py +++ b/src/huesoporro/infra/authenticator.py @@ -52,7 +52,8 @@ class TwitchAuthenticator(BaseModel): headers={"Accept": "application/json"}, ) response.raise_for_status() - return TwitchAuth(**response.json()) + profile = await self.get_userinfo(response.json()["access_token"]) + return TwitchAuth(**response.json(), userinfo=profile) async def validate_token(self, access_token: str) -> str: response = await self.client.get( diff --git a/uv.lock b/uv.lock index 3da5f24..1f980b7 100644 --- a/uv.lock +++ b/uv.lock @@ -472,7 +472,7 @@ wheels = [ [[package]] name = "huesoporro" -version = "0.2.5" +version = "0.2.8" source = { virtual = "." } dependencies = [ { name = "aiosqlite" },