aboutsummaryrefslogtreecommitdiff
path: root/gn3/auth/authentication
diff options
context:
space:
mode:
Diffstat (limited to 'gn3/auth/authentication')
-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}'")