aboutsummaryrefslogtreecommitdiff
path: root/gn3/auth/authentication/oauth2/models/oauth2client.py
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2023-03-13 06:26:14 +0300
committerFrederick Muriuki Muriithi2023-03-13 06:26:14 +0300
commit4bcbe992b132dd77ff6f61185b0ad7299a4b7863 (patch)
tree77a205b39f6b093f5bbff05847d90f1d8a164bc6 /gn3/auth/authentication/oauth2/models/oauth2client.py
parent3dee24dc1e05893b49ace052ab61899e49a03bb7 (diff)
downloadgenenetwork3-4bcbe992b132dd77ff6f61185b0ad7299a4b7863.tar.gz
auth: separate user detail migration from data migration
Due to the fact that the data migration requires higher privileges than the user details, separate the user details migration endpoint from the data migrations endpoint.
Diffstat (limited to 'gn3/auth/authentication/oauth2/models/oauth2client.py')
-rw-r--r--gn3/auth/authentication/oauth2/models/oauth2client.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/gn3/auth/authentication/oauth2/models/oauth2client.py b/gn3/auth/authentication/oauth2/models/oauth2client.py
index 14f4d5d..5054393 100644
--- a/gn3/auth/authentication/oauth2/models/oauth2client.py
+++ b/gn3/auth/authentication/oauth2/models/oauth2client.py
@@ -154,3 +154,22 @@ def client(conn: db.DbConnection, client_id: uuid.UUID,
the_user))# type: ignore[arg-type]
return Nothing
+
+def client_by_id_and_secret(conn: db.DbConnection, client_id: uuid.UUID,
+ client_secret: str) -> OAuth2Client:
+ """Retrieve a client by its ID and secret"""
+ with db.cursor(conn) as cursor:
+ cursor.execute(
+ "SELECT * FROM oauth2_clients WHERE client_id=? AND "
+ "client_secret=?",
+ (str(client_id), client_secret))
+ row = cursor.fetchone()
+ if bool(row):
+ return OAuth2Client(
+ client_id, client_secret,
+ datetime.datetime.fromtimestamp(row["client_id_issued_at"]),
+ datetime.datetime.fromtimestamp(row["client_secret_expires_at"]),
+ json.loads(row["client_metadata"]),
+ user_by_id(conn, uuid.UUID(row["user_id"])))
+
+ raise NotFoundError(f"Could not find client with ID '{client_id}'")