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()
 |