diff options
author | Frederick Muriuki Muriithi | 2024-10-03 11:37:49 -0500 |
---|---|---|
committer | Frederick Muriuki Muriithi | 2024-10-03 11:37:49 -0500 |
commit | 45f2eaa9d2965c79d77c898aab3a01a1f06e4149 (patch) | |
tree | 5b5945e81091c68d9f861c71ac8af3da8a05b4e3 /gn_auth/auth/authentication | |
parent | b9de9e436dd4f84174f6fc1b707e1b303a94fcf4 (diff) | |
download | gn-auth-45f2eaa9d2965c79d77c898aab3a01a1f06e4149.tar.gz |
Provide a way to change OAuth2 client secrets.
Diffstat (limited to 'gn_auth/auth/authentication')
-rw-r--r-- | gn_auth/auth/authentication/oauth2/models/oauth2client.py | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/gn_auth/auth/authentication/oauth2/models/oauth2client.py b/gn_auth/auth/authentication/oauth2/models/oauth2client.py index 8fac648..2c36f45 100644 --- a/gn_auth/auth/authentication/oauth2/models/oauth2client.py +++ b/gn_auth/auth/authentication/oauth2/models/oauth2client.py @@ -3,9 +3,9 @@ import json import logging import datetime from uuid import UUID -from dataclasses import dataclass from functools import cached_property -from typing import Sequence, Optional +from dataclasses import asdict, dataclass +from typing import Any, Sequence, Optional import requests from requests.exceptions import JSONDecodeError @@ -289,3 +289,22 @@ def delete_client( cursor.execute("DELETE FROM oauth2_tokens WHERE client_id=?", params) cursor.execute("DELETE FROM oauth2_clients WHERE client_id=?", params) return the_client + + +def update_client_attribute( + client: OAuth2Client, attribute: str, value: Any) -> OAuth2Client: + """Return a new OAuth2Client with the given attribute updated/changed.""" + attrs = { + attr: type(value) + for attr, value in asdict(client).items() + if attr != "client_id" + } + assert ( + attribute in attrs.keys() and isinstance(value, attrs[attribute])), ( + "Invalid attribute/value provided!") + return OAuth2Client( + client_id=client.client_id, + **{ + attr: (value if attr==attribute else getattr(client, attr)) + for attr in attrs + }) |