Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import requests
- import time
- import base64
- from requests.auth import AuthBase
- class TokenAuth(AuthBase):
- """Refreshes SkyKick token, for use with all Skykick requests"""
- def __init__(self, Username: str, SubKey: str):
- self.Username = Username
- self.SubKey = SubKey
- # Initialise with no token and instant expiry
- self.Token = None
- self.TokenExpiry = time.time()
- self.Headers = {
- # Request headers
- 'Content-Type' : 'application/x-www-form-urlencoded',
- 'Ocp-Apim-Subscription-Key': self.SubKey,
- }
- self.Body = {
- # Request body
- 'grant_type': 'client_credentials',
- 'scope' : 'Partner'
- }
- def regenToken(self):
- # Sends request to regenerate token
- try:
- # Get key from API
- response = requests.post("https://apis.skykick.com/auth/token",
- headers=self.Headers,
- auth=(self.Username, self.SubKey),
- data=self.Body,
- ).json()
- except:
- raise Exception("Sending request failed, check connection.")
- # API errors are inconsistent, easiest way to catch them
- if "error" in response or "statusCode" in response:
- raise Exception(
- "Token requesting failed, cannot proceed with any Skykick actions, exiting.\n"
- f"Error raised was {response}")
- # Get token from response and set expiry
- self.Token = response["access_token"]
- self.TokenExpiry = time.time() + 82800
- def __call__(self, r):
- # If token expiry is now or in past, call regenToken
- if self.TokenExpiry <= time.time():
- self.regenToken()
- # Set headers and return complete requests.Request object
- r.headers["Authorization"] = f"Bearer {self.Token}"
- return r
- # Initialise our token class, so it is ready to call
- TokenClass = TokenAuth("test", "1234")
- #Send request with class as auth method.
- requests.get("https://apis.skykick.com/whoami", auth=TokenClass())
Add Comment
Please, Sign In to add comment