Initial commit with translated description
This commit is contained in:
51
scripts/refresh_token.py
Normal file
51
scripts/refresh_token.py
Normal file
@@ -0,0 +1,51 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user