Initial commit of Hammerspoon config
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
import time
|
||||
import json
|
||||
import os
|
||||
import urllib.request
|
||||
import urllib.parse
|
||||
|
||||
try:
|
||||
import jwt
|
||||
from cryptography.hazmat.primitives import serialization
|
||||
except ImportError:
|
||||
print("Error: Missing dependencies. Run: pip3 install PyJWT cryptography")
|
||||
exit(1)
|
||||
|
||||
base_path = os.path.expanduser("~/.hammerspoon/")
|
||||
key_file = os.path.join(base_path, "google-key.json")
|
||||
|
||||
if not os.path.exists(key_file):
|
||||
print(f"Error: {key_file} not found")
|
||||
exit(1)
|
||||
|
||||
with open(key_file) as f:
|
||||
key_data = json.load(f)
|
||||
|
||||
iat = int(time.time())
|
||||
exp = iat + 3600
|
||||
payload = {
|
||||
'iss': key_data['client_email'],
|
||||
'sub': key_data['client_email'],
|
||||
'aud': 'https://oauth2.googleapis.com/token',
|
||||
'iat': iat,
|
||||
'exp': exp,
|
||||
'scope': 'https://www.googleapis.com/auth/monitoring.read'
|
||||
}
|
||||
|
||||
try:
|
||||
# Sign the JWT using the private key from JSON
|
||||
signed_jwt = jwt.encode(payload, key_data['private_key'], algorithm='RS256')
|
||||
|
||||
# Exchange for Access Token
|
||||
url = 'https://oauth2.googleapis.com/token'
|
||||
params = urllib.parse.urlencode({
|
||||
'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer',
|
||||
'assertion': signed_jwt
|
||||
}).encode('utf-8')
|
||||
|
||||
req = urllib.request.Request(url, data=params, method='POST')
|
||||
with urllib.request.urlopen(req) as response:
|
||||
res_data = json.loads(response.read().decode('utf-8'))
|
||||
print(res_data['access_token'])
|
||||
except Exception as e:
|
||||
print(f"Auth Error: {str(e)}")
|
||||
exit(1)
|
||||
Reference in New Issue
Block a user