Files
openclaw/skills/google-calendar/scripts/refresh_token.py
2026-03-01 17:44:19 +03:00

52 lines
2.0 KiB
Python

#!/usr/bin/env python3
import os, sys, json, urllib.request, urllib.parse
def refresh():
client_id = os.getenv('GOOGLE_CLIENT_ID')
client_secret = os.getenv('GOOGLE_CLIENT_SECRET')
refresh_token = os.getenv('GOOGLE_REFRESH_TOKEN')
if not all([client_id, client_secret, refresh_token]):
sys.stderr.write('Missing one of GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REFRESH_TOKEN\n')
sys.exit(1)
data = urllib.parse.urlencode({
'client_id': client_id,
'client_secret': client_secret,
'refresh_token': refresh_token,
'grant_type': 'refresh_token',
}).encode()
req = urllib.request.Request('https://oauth2.googleapis.com/token', data=data, method='POST')
req.add_header('Content-Type', 'application/x-www-form-urlencoded')
try:
with urllib.request.urlopen(req) as resp:
resp_data = json.load(resp)
except urllib.error.HTTPError as e:
sys.stderr.write(f'HTTP error {e.code}: {e.read().decode()}\n')
sys.exit(1)
access_token = resp_data.get('access_token')
if not access_token:
sys.stderr.write('No access_token in response\n')
sys.exit(1)
# Update the secrets.env file
env_path = os.path.expanduser('~/.config/google-calendar/secrets.env')
# Read existing lines, replace or add GOOGLE_ACCESS_TOKEN
lines = []
if os.path.exists(env_path):
with open(env_path, 'r') as f:
lines = f.readlines()
new_lines = []
token_set = False
for line in lines:
if line.startswith('export GOOGLE_ACCESS_TOKEN='):
new_lines.append(f'export GOOGLE_ACCESS_TOKEN={access_token}\n')
token_set = True
else:
new_lines.append(line)
if not token_set:
new_lines.append(f'export GOOGLE_ACCESS_TOKEN={access_token}\n')
with open(env_path, 'w') as f:
f.writelines(new_lines)
print(json.dumps(resp_data, indent=2))
if __name__ == '__main__':
refresh()