From 4116a33560433e902e8a528c3e4314445f8174e8 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Wed, 15 Jan 2025 18:54:46 +0530 Subject: [PATCH] perf: speed up oauth bearer token query (#29184) * perf: index user and make not_nullable * refactor: simpler expiry setting * perf: don't fetch all tokens --- .../doctype/oauth_bearer_token/oauth_bearer_token.json | 6 ++++-- .../doctype/oauth_bearer_token/oauth_bearer_token.py | 7 +++---- frappe/integrations/oauth2.py | 4 +++- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/frappe/integrations/doctype/oauth_bearer_token/oauth_bearer_token.json b/frappe/integrations/doctype/oauth_bearer_token/oauth_bearer_token.json index 317bb2c6f5..c48f5d10f2 100644 --- a/frappe/integrations/doctype/oauth_bearer_token/oauth_bearer_token.json +++ b/frappe/integrations/doctype/oauth_bearer_token/oauth_bearer_token.json @@ -30,8 +30,10 @@ "fieldname": "user", "fieldtype": "Link", "label": "User", + "not_nullable": 1, "options": "User", - "read_only": 1 + "read_only": 1, + "search_index": 1 }, { "fieldname": "scopes", @@ -75,7 +77,7 @@ } ], "links": [], - "modified": "2024-03-23 16:03:32.559867", + "modified": "2025-01-15 17:54:35.661941", "modified_by": "Administrator", "module": "Integrations", "name": "OAuth Bearer Token", diff --git a/frappe/integrations/doctype/oauth_bearer_token/oauth_bearer_token.py b/frappe/integrations/doctype/oauth_bearer_token/oauth_bearer_token.py index 6b6259da77..2d3d5cbc17 100644 --- a/frappe/integrations/doctype/oauth_bearer_token/oauth_bearer_token.py +++ b/frappe/integrations/doctype/oauth_bearer_token/oauth_bearer_token.py @@ -3,6 +3,7 @@ import frappe from frappe.model.document import Document +from frappe.utils.data import add_to_date class OAuthBearerToken(Document): @@ -21,11 +22,9 @@ class OAuthBearerToken(Document): refresh_token: DF.Data | None scopes: DF.Text | None status: DF.Literal["Active", "Revoked"] - user: DF.Link | None + user: DF.Link # end: auto-generated types def validate(self): if not self.expiration_time: - self.expiration_time = frappe.utils.datetime.datetime.strptime( - self.creation, "%Y-%m-%d %H:%M:%S.%f" - ) + frappe.utils.datetime.timedelta(seconds=self.expires_in) + self.expiration_time = add_to_date(self.creation, seconds=self.expires_in, as_datetime=True) diff --git a/frappe/integrations/oauth2.py b/frappe/integrations/oauth2.py index f04351eda5..59e9f675b6 100644 --- a/frappe/integrations/oauth2.py +++ b/frappe/integrations/oauth2.py @@ -93,7 +93,9 @@ def authorize(**kwargs): frappe.flags.oauth_credentials["client_id"], "skip_authorization", ) - unrevoked_tokens = frappe.get_all("OAuth Bearer Token", filters={"status": "Active"}) + unrevoked_tokens = frappe.db.exists( + "OAuth Bearer Token", {"status": "Active", "user": frappe.session.user} + ) if skip_auth or (get_oauth_settings().skip_authorization == "Auto" and unrevoked_tokens): frappe.local.response["type"] = "redirect"