Skip to content

Commit 345a1e9

Browse files
committed
feat: delete sharedkey if invalid and attempt other auth method
1 parent 650a0d1 commit 345a1e9

2 files changed

Lines changed: 46 additions & 15 deletions

File tree

src/sumo/wrapper/_auth_provider.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ def has_case_token(self, case_uuid):
9999
get_token_path(self._resource_id, ".sharedkey", case_uuid)
100100
)
101101

102+
def delete_token(self):
103+
return False
104+
102105
pass
103106

104107

@@ -400,9 +403,10 @@ class AuthProviderSumoToken(AuthProvider):
400403
def __init__(self, resource_id, case_uuid=None):
401404
super().__init__(resource_id)
402405
protect_token_cache(resource_id, ".sharedkey", case_uuid)
403-
token_path = get_token_path(resource_id, ".sharedkey", case_uuid)
404-
with open(token_path, "r") as f:
406+
self.token_path = get_token_path(resource_id, ".sharedkey", case_uuid)
407+
with open(self.token_path, "r") as f:
405408
self._token = f.readline().strip()
409+
406410
return
407411

408412
def get_token(self):
@@ -411,6 +415,11 @@ def get_token(self):
411415
def get_authorization(self):
412416
return {"X-SUMO-Token": self._token}
413417

418+
def delete_token(self):
419+
if os.path.exists(self.token_path):
420+
os.unlink(self.token_path)
421+
return True
422+
414423

415424
@tn.retry(
416425
retry=tn.retry_if_exception(_maybe_nfs_exception),

src/sumo/wrapper/sumo_client.py

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -100,19 +100,6 @@ def __init__(
100100
pass
101101
pass
102102

103-
cleanup_shared_keys()
104-
105-
self.auth = get_auth_provider(
106-
client_id=APP_REGISTRATION[env]["CLIENT_ID"],
107-
authority=f"{AUTHORITY_HOST_URI}/{TENANT_ID}",
108-
resource_id=APP_REGISTRATION[env]["RESOURCE_ID"],
109-
interactive=interactive,
110-
refresh_token=refresh_token,
111-
access_token=access_token,
112-
devicecode=devicecode,
113-
case_uuid=case_uuid,
114-
)
115-
116103
if env == "prod":
117104
self.base_url = "https://api.sumo.equinor.com/api/v1"
118105
elif env == "localhost":
@@ -121,6 +108,41 @@ def __init__(
121108
self.base_url = (
122109
f"https://main-sumo-core-{env}.c3.radix.equinor.com/api/v1"
123110
)
111+
cleanup_shared_keys()
112+
113+
def _get_auth_provider():
114+
return get_auth_provider(
115+
client_id=APP_REGISTRATION[env]["CLIENT_ID"],
116+
authority=f"{AUTHORITY_HOST_URI}/{TENANT_ID}",
117+
resource_id=APP_REGISTRATION[env]["RESOURCE_ID"],
118+
interactive=interactive,
119+
refresh_token=refresh_token,
120+
access_token=access_token,
121+
devicecode=devicecode,
122+
case_uuid=case_uuid,
123+
)
124+
125+
def _try_setup_auth_provider():
126+
self.auth = _get_auth_provider()
127+
response = httpx.get(
128+
url=self.base_url + "/userpermissions",
129+
headers=self.auth.get_authorization(),
130+
)
131+
if response.is_success:
132+
return True, False
133+
134+
elif response.status_code == 401:
135+
return False, self.auth.delete_token()
136+
137+
else:
138+
raise httpx.HTTPStatusError
139+
140+
ok, retry = _try_setup_auth_provider()
141+
if retry:
142+
ok, retry = _try_setup_auth_provider()
143+
if retry:
144+
ok, retry = _try_setup_auth_provider()
145+
124146
return
125147

126148
def __enter__(self):

0 commit comments

Comments
 (0)