56 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python3
 | |
| import os
 | |
| from typing import Optional
 | |
| 
 | |
| from oauth2client import client, tools
 | |
| from oauth2client.file import Storage
 | |
| 
 | |
| try:
 | |
|     import argparse
 | |
| 
 | |
|     flags = argparse.ArgumentParser(
 | |
|         parents=[tools.argparser]
 | |
|     ).parse_args()  # type: Optional[argparse.Namespace]
 | |
| except ImportError:
 | |
|     flags = None
 | |
| 
 | |
| # If modifying these scopes, delete your previously saved credentials
 | |
| # at zulip/bots/gcal/
 | |
| # NOTE: When adding more scopes, add them after the previous one in the same field, with a space
 | |
| # seperating them.
 | |
| SCOPES = "https://www.googleapis.com/auth/calendar.readonly"
 | |
| # This file contains the information that google uses to figure out which application is requesting
 | |
| # this client's data.
 | |
| CLIENT_SECRET_FILE = "client_secret.json"
 | |
| APPLICATION_NAME = "Zulip Calendar Bot"
 | |
| HOME_DIR = os.path.expanduser("~")
 | |
| 
 | |
| 
 | |
| def get_credentials() -> client.Credentials:
 | |
|     """Gets valid user credentials from storage.
 | |
| 
 | |
|     If nothing has been stored, or if the stored credentials are invalid,
 | |
|     the OAuth2 flow is completed to obtain the new credentials.
 | |
| 
 | |
|     Returns:
 | |
|         Credentials, the obtained credential.
 | |
|     """
 | |
| 
 | |
|     credential_path = os.path.join(HOME_DIR, "google-credentials.json")
 | |
| 
 | |
|     store = Storage(credential_path)
 | |
|     credentials = store.get()
 | |
|     if not credentials or credentials.invalid:
 | |
|         flow = client.flow_from_clientsecrets(os.path.join(HOME_DIR, CLIENT_SECRET_FILE), SCOPES)
 | |
|         flow.user_agent = APPLICATION_NAME
 | |
|         if flags:
 | |
|             # This attempts to open an authorization page in the default web browser, and asks the user
 | |
|             # to grant the bot access to their data. If the user grants permission, the run_flow()
 | |
|             # function returns new credentials.
 | |
|             credentials = tools.run_flow(flow, store, flags)
 | |
|         else:  # Needed only for compatibility with Python 2.6
 | |
|             credentials = tools.run(flow, store)
 | |
|         print("Storing credentials to " + credential_path)
 | |
| 
 | |
| 
 | |
| get_credentials()
 | 
