(self)
| 75 | return resp.json()["versions"] |
| 76 | |
| 77 | def login(self) -> None: |
| 78 | resp = requests.get(f"{self.baseurl}foundation/1.0/auth") |
| 79 | values = resp.json() |
| 80 | auth_endpoint = values["oauth2_auth_url"] |
| 81 | self.token_endpoint = values["oauth2_token_url"] |
| 82 | |
| 83 | with http.server.HTTPServer(("", 8080), OAuthReceiver) as server: |
| 84 | state = str(uuid.uuid4()) |
| 85 | query = urllib.parse.urlencode( |
| 86 | { |
| 87 | "client_id": self.client_id, |
| 88 | "response_type": "code", |
| 89 | "state": state, |
| 90 | "redirect_uri": f"http://localhost:{server.server_address[1]}/{self.redirect_subdir}", |
| 91 | } |
| 92 | ) |
| 93 | if "?" in auth_endpoint: |
| 94 | webbrowser.open(f"{auth_endpoint}&{query}") |
| 95 | else: |
| 96 | webbrowser.open(f"{auth_endpoint}?{query}") |
| 97 | server.timeout = 100 |
| 98 | server.handle_request() |
| 99 | if server.auth_code and server.auth_state == state: # pylint: disable=E1101 |
| 100 | data = { |
| 101 | "grant_type": "authorization_code", |
| 102 | "code": server.auth_code, # pylint: disable=E1101 type:ignore |
| 103 | "redirect_uri": f"http://localhost:{server.server_address[1]}/{self.redirect_subdir}", |
| 104 | } |
| 105 | headers = self._get_access_token_headers() |
| 106 | self.set_tokens_from_response(requests.post(self.token_endpoint, data=data, headers=headers)) |
| 107 | |
| 108 | def get_refresh_token(self) -> None: |
| 109 | self.set_tokens_from_response( |
no test coverage detected