|
1 | 1 | import requests |
2 | | -import logging |
| 2 | +import jwt |
| 3 | +import time |
3 | 4 |
|
4 | | -from .config import APP_REGISTRATION, TENANT_ID, AUTHORITY_HOST_URI |
5 | | -from ._auth import Auth |
| 5 | +from .config import APP_REGISTRATION, TENANT_ID |
| 6 | +from ._new_auth import NewAuth |
6 | 7 | from ._request_error import AuthenticationError, TransientError, PermanentError |
7 | 8 |
|
8 | | -logging.basicConfig( |
9 | | - format="%(asctime)s %(levelname)-8s %(message)s", |
10 | | - datefmt="%Y-%m-%d %H:%M:%S" |
11 | | -) |
12 | | - |
13 | | - |
14 | 9 | class SumoClient: |
15 | 10 | def __init__( |
16 | 11 | self, |
17 | 12 | env, |
18 | | - access_token=None, |
19 | | - logging_level='INFO', |
20 | | - write_back=False |
| 13 | + token=None, |
| 14 | + interactive=False |
21 | 15 | ): |
22 | | - self.env = env |
23 | | - self.user_provided_access_token = access_token |
24 | | - |
25 | | - self.logger = logging.getLogger(__name__) |
26 | | - self.logger.setLevel(level=logging_level) |
27 | | - |
28 | 16 | if env not in APP_REGISTRATION: |
29 | 17 | raise ValueError(f"Invalid environment: {env}") |
30 | 18 |
|
31 | | - self.client_id = APP_REGISTRATION[env]['CLIENT_ID'] |
32 | | - self.resource_id = APP_REGISTRATION[env]['RESOURCE_ID'] |
33 | | - self.authority_uri = AUTHORITY_HOST_URI + '/' + TENANT_ID |
34 | | - |
35 | | - if not self.user_provided_access_token: |
36 | | - self.auth = Auth( |
37 | | - client_id=self.client_id, |
38 | | - resource_id=self.resource_id, |
39 | | - authority=self.authority_uri, |
40 | | - writeback=write_back |
41 | | - ) |
42 | | - |
43 | | - self.access_token = self.auth.get_token() |
| 19 | + self.access_token = None |
| 20 | + self.access_token_expires = None |
| 21 | + self.refresh_token = None |
| 22 | + |
| 23 | + if token: |
| 24 | + payload = self.__decode_token(token) |
| 25 | + |
| 26 | + if payload: |
| 27 | + self.access_token = token |
| 28 | + self.access_token_expires = payload["exp"] |
| 29 | + else: |
| 30 | + self.refresh_token = token |
| 31 | + |
| 32 | + self.auth = NewAuth( |
| 33 | + client_id=APP_REGISTRATION[env]['CLIENT_ID'], |
| 34 | + resource_id=APP_REGISTRATION[env]['RESOURCE_ID'], |
| 35 | + tenant_id=TENANT_ID, |
| 36 | + interactive=interactive, |
| 37 | + refresh_token=self.refresh_token |
| 38 | + ) |
44 | 39 |
|
45 | 40 | if env == "localhost": |
46 | 41 | self.base_url = f"http://localhost:8084/api/v1" |
47 | 42 | else: |
48 | 43 | self.base_url = f"https://main-sumo-{env}.radix.equinor.com/api/v1" |
49 | 44 |
|
| 45 | + |
| 46 | + def __decode_token(self, token): |
| 47 | + try: |
| 48 | + payload = jwt.decode(token, options={"verify_signature": False}) |
| 49 | + return payload |
| 50 | + except: |
| 51 | + return None |
| 52 | + |
| 53 | + |
50 | 54 | def _retrieve_token(self): |
51 | | - if self.user_provided_access_token: |
52 | | - self.logger.debug("User provided token exists, returning token") |
53 | | - return self.user_provided_access_token |
54 | | - else: |
55 | | - if self.auth.is_token_expired(): |
56 | | - self.logger.debug("Token is expired, regenerating") |
57 | | - self.access_token = self.auth.get_token() |
| 55 | + if self.access_token: |
| 56 | + if self.access_token_expires <= int(time.time()): |
| 57 | + raise ValueError("Access_token has expired") |
| 58 | + else: |
| 59 | + return self.access_token |
| 60 | + |
| 61 | + return self.auth.get_token() |
58 | 62 |
|
59 | | - self.logger.debug("returning self.access_token from _retrieve_token") |
60 | | - return self.access_token |
61 | 63 |
|
62 | 64 | def _process_params(self, params_dict): |
63 | 65 | prefixed_params = {} |
@@ -174,9 +176,6 @@ def _raise_request_error_exception(self, code, message): |
174 | 176 | Raise the proper authentication error according to the code received from sumo. |
175 | 177 | """ |
176 | 178 |
|
177 | | - self.logger.debug("code: %s", code) |
178 | | - self.logger.debug("message: %s", message) |
179 | | - |
180 | 179 | if 503 <= code <= 504 or code == 404 or code == 500: |
181 | 180 | raise TransientError(code, message) |
182 | 181 | elif 401 <= code <= 403: |
|
0 commit comments