def SetupAuth(interactive=False): """Sets up requestors with authentication tokens Args: interactive: boolean, when set to true can prompt user, otherwise returns False if authentication fails Returns: requestor, storage: Authenticated requestors and an instance of storage """ modifiedconfig = False # parse config file and extract useragents, which we use for account names userids = [] if os.path.exists( Auth.config ): content_file = open(Auth.config, 'r') content = content_file.read() data = json.loads(content) for user in data['data']: userids.append(str(user['credential']['user_agent'])) if len(userids) == 0: userids = [ None ] requestors = [] for userid in userids: storage = multistore_file.get_credential_storage( Auth.config, Auth.clientid, userid, ['https://www.googleapis.com/auth/cloudprint']) credentials = storage.get() if not credentials and interactive: # pragma: no cover credentials = Auth.AddAccount(storage, userid) modifiedconfig = True if userid == None: userid = credentials.user_agent elif not interactive and not credentials: return False # renew if expired requestor = cloudprintrequestor() if credentials.access_token_expired: # pragma: no cover credentials.refresh(requestor) requestor = credentials.authorize(requestor) requestor.setAccount(userid) requestors.append(requestor) # fix permissions if modifiedconfig: # pragma: no cover try: os.chmod(Auth.config, 0640) os.chown(Auth.config, 0, Auth.GetLPID()) except: sys.stderr.write("DEBUG: Cannot alter file permissions\n") pass return requestors, storage
def SetupAuth(interactive=False, permissions=['https://www.googleapis.com/auth/cloudprint']): """Sets up requestors with authentication tokens Args: interactive: boolean, when set to true can prompt user, otherwise returns False if authentication fails Returns: requestor, storage: Authenticated requestors and an instance of storage """ modifiedconfig = False # parse config file and extract useragents, which we use for account names userids = [] if os.path.exists(Auth.config): content_file = open(Auth.config, 'r') content = content_file.read() data = json.loads(content) for user in data['data']: userids.append(str(user['credential']['user_agent'])) else: modifiedconfig = True if len(userids) == 0: userids = [None] requestors = [] for userid in userids: storage = multistore_file.get_credential_storage( Auth.config, Auth.clientid, userid, permissions) credentials = storage.get() if not credentials and interactive: credentials = Auth.AddAccount(storage, userid) modifiedconfig = True if userid == None: userid = credentials.user_agent if credentials: # renew if expired requestor = cloudprintrequestor() if credentials.access_token_expired: from oauth2client.client import AccessTokenRefreshError try: credentials.refresh(requestor) except AccessTokenRefreshError as e: sys.stderr.write( "Failed to renew token (error: " + str(e) + "), if you have revoked access to CUPS Cloud Print in your Google Account, please delete /etc/cloudprint.conf and re-run /usr/share/cloudprint-cups/setupcloudprint.py\n" ) sys.exit(1) requestor = credentials.authorize(requestor) requestor.setAccount(userid) requestors.append(requestor) # fix permissions if modifiedconfig: Utils.FixFilePermissions(Auth.config) if not credentials: return False, False else: return requestors, storage
def setup_function(function): global requestor requestor = cloudprintrequestor()
def SetupAuth(interactive=False, permissions=['https://www.googleapis.com/auth/cloudprint']): """Sets up requestors with authentication tokens Args: interactive: boolean, when set to true can prompt user, otherwise returns False if authentication fails Returns: requestor, storage: Authenticated requestors and an instance of storage """ modifiedconfig = False # parse config file and extract useragents, which we use for account names userids = [] if os.path.exists( Auth.config ): content_file = open(Auth.config, 'r') content = content_file.read() data = json.loads(content) for user in data['data']: userids.append(str(user['credential']['user_agent'])) else: modifiedconfig = True if len(userids) == 0: userids = [ None ] requestors = [] for userid in userids: storage = multistore_file.get_credential_storage( Auth.config, Auth.clientid, userid, permissions) credentials = storage.get() if not credentials and interactive: credentials = Auth.AddAccount(storage, userid) modifiedconfig = True if userid == None: userid = credentials.user_agent if credentials: # renew if expired requestor = cloudprintrequestor() if credentials.access_token_expired: from oauth2client.client import AccessTokenRefreshError try: credentials.refresh(requestor) except AccessTokenRefreshError as e: sys.stderr.write("Failed to renew token (error: "+ str(e) +"), if you have revoked access to CUPS Cloud Print in your Google Account, please delete /etc/cloudprint.conf and re-run /usr/share/cloudprint-cups/setupcloudprint.py\n") sys.exit(1) requestor = credentials.authorize(requestor) requestor.setAccount(userid) requestors.append(requestor) # fix permissions if modifiedconfig: Utils.FixFilePermissions(Auth.config) if not credentials: return False, False else: return requestors, storage