auth_client.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from services.api_client import JsonTransport
  2. class AuthClient:
  3. def __init__(self, base_url, client_type, token_store, transport=None, timeout=10, session_key=''):
  4. self.base_url = (base_url or '').rstrip('/')
  5. self.client_type = client_type
  6. self.token_store = token_store
  7. self.transport = transport or JsonTransport()
  8. self.timeout = int(timeout)
  9. self.session_key = str(session_key or '').strip()
  10. def exchange(self, auth_code):
  11. payload = {'auth_code': auth_code, 'client_type': self.client_type}
  12. if self.session_key:
  13. payload['session_key'] = self.session_key
  14. response = self.transport.post_json(
  15. self.base_url + '/admin/mcp/auth/exchange',
  16. payload,
  17. {},
  18. self.timeout,
  19. )
  20. self._persist_token(response)
  21. return response
  22. def refresh(self, mcp_token):
  23. response = self.transport.post_json(
  24. self.base_url + '/admin/mcp/auth/refresh',
  25. {'mcp_token': mcp_token},
  26. {'Authorization': 'Bearer {0}'.format(mcp_token)},
  27. self.timeout,
  28. )
  29. self._persist_token(response)
  30. return response
  31. def revoke(self, mcp_token):
  32. response = self.transport.post_json(
  33. self.base_url + '/admin/mcp/auth/revoke',
  34. {'mcp_token': mcp_token},
  35. {'Authorization': 'Bearer {0}'.format(mcp_token)},
  36. self.timeout,
  37. )
  38. if (response.get('code') or '') == 'MCP_0000':
  39. self.token_store.clear()
  40. return response
  41. def _persist_token(self, response):
  42. data = response.get('data') or {}
  43. token = data.get('mcp_token')
  44. expire_time = data.get('expire_time')
  45. if token and expire_time:
  46. self.token_store.save(token, expire_time)