Guest User

Untitled

a guest
Jul 14th, 2021
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.18 KB | None | 0 0
  1. import requests
  2. import time
  3. import base64
  4.  
  5. from requests.auth import AuthBase
  6.  
  7. class TokenAuth(AuthBase):
  8. """Refreshes SkyKick token, for use with all Skykick requests"""
  9. def __init__(self, Username: str, SubKey: str):
  10. self.Username = Username
  11. self.SubKey = SubKey
  12.  
  13. # Initialise with no token and instant expiry
  14. self.Token = None
  15. self.TokenExpiry = time.time()
  16.  
  17.  
  18. self.Headers = {
  19. # Request headers
  20.  
  21. 'Content-Type' : 'application/x-www-form-urlencoded',
  22. 'Ocp-Apim-Subscription-Key': self.SubKey,
  23.  
  24. }
  25.  
  26. self.Body = {
  27. # Request body
  28. 'grant_type': 'client_credentials',
  29. 'scope' : 'Partner'
  30. }
  31.  
  32. def regenToken(self):
  33. # Sends request to regenerate token
  34. try:
  35. # Get key from API
  36. response = requests.post("https://apis.skykick.com/auth/token",
  37. headers=self.Headers,
  38. auth=(self.Username, self.SubKey),
  39. data=self.Body,
  40. ).json()
  41. except:
  42. raise Exception("Sending request failed, check connection.")
  43.  
  44. # API errors are inconsistent, easiest way to catch them
  45. if "error" in response or "statusCode" in response:
  46. raise Exception(
  47. "Token requesting failed, cannot proceed with any Skykick actions, exiting.\n"
  48. f"Error raised was {response}")
  49.  
  50. # Get token from response and set expiry
  51. self.Token = response["access_token"]
  52. self.TokenExpiry = time.time() + 82800
  53.  
  54. def __call__(self, r):
  55.  
  56. # If token expiry is now or in past, call regenToken
  57. if self.TokenExpiry <= time.time():
  58. self.regenToken()
  59. # Set headers and return complete requests.Request object
  60. r.headers["Authorization"] = f"Bearer {self.Token}"
  61. return r
  62.  
  63. # Initialise our token class, so it is ready to call
  64. TokenClass = TokenAuth("test", "1234")
  65.  
  66. #Send request with class as auth method.
  67. requests.get("https://apis.skykick.com/whoami", auth=TokenClass())
Add Comment
Please, Sign In to add comment