X-Git-Url: https://git.cworth.org/git?p=turbot;a=blobdiff_plain;f=gsheets-authenticate.py;h=ca0d0fa10d7182a774e45331fa6a058fb85a4234;hp=7140b8ecac3359b00f45176158859e3b1e5a8ad6;hb=465eb019a7e380590df492762b9c904ece977069;hpb=d420bedebbb6b9c045cbf1ebbd9e65ad6830e2a3 diff --git a/gsheets-authenticate.py b/gsheets-authenticate.py index 7140b8e..ca0d0fa 100755 --- a/gsheets-authenticate.py +++ b/gsheets-authenticate.py @@ -1,14 +1,18 @@ #!/usr/bin/env python3 import pickle +import base64 import os.path from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request -# If modifying these scopes, delete the file token.pickle. -SCOPES = ['https://www.googleapis.com/auth/spreadsheets'] +TOKEN_FILE = ".gsheets-pickle.base64" -TOKEN_FILE = ".gsheets-token.pickle" +# If modifying these scopes, delete the token file +SCOPES = [ + 'https://www.googleapis.com/auth/spreadsheets', + 'https://www.googleapis.com/auth/drive' +] def main(): """Allows user to authenticate for the Sheets API. @@ -16,26 +20,32 @@ def main(): Resulting authorization token is stored in token.pickle. """ creds = None - # The file token.pickle stores the user's access and refresh tokens, and is + # The token file stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. if os.path.exists(TOKEN_FILE): - with open(TOKEN_FILE, 'rb') as token: - creds = pickle.load(token) + with open(TOKEN_FILE, 'rb') as token_file: + creds_base64 = token_file.read() + creds_pickle = base64.b64decode(creds_base64) + creds = pickle.loads(creds_pickle) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: + print("Token seems to have expired. Refreshing.") creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( - 'credentials.json', SCOPES) + '.gsheets-creds.json', SCOPES) creds = flow.run_local_server(port=0) # Save the credentials for the next run - with open(TOKEN_FILE, 'wb') as token: - pickle.dump(creds, token) - - print("Token now saved in {}".format(TOKEN_FILE)) + with open(TOKEN_FILE, 'wb') as token_file: + creds_pickle = pickle.dumps(creds) + creds_base64 = base64.b64encode(creds_pickle) + token_file.write(creds_base64) + print("Token now saved in {}".format(TOKEN_FILE)) + else: + print("Valid token in {} left unchanged.".format(TOKEN_FILE)) if __name__ == '__main__': main()