def test_get_and_put_cached(self): storage = StorageByKeyName(CredentialsModel, 'foo', 'credentials', cache=memcache) self.assertEqual(None, storage.get()) self.credentials.set_store(storage) self.credentials._refresh(_http_request) credmodel = CredentialsModel.get_by_key_name('foo') self.assertEqual('bar', credmodel.credentials.access_token) # Now remove the item from the cache. memcache.delete('foo') # Check that getting refreshes the cache. credentials = storage.get() self.assertEqual('bar', credentials.access_token) self.assertNotEqual(None, memcache.get('foo')) # Deleting should clear the cache. storage.delete() credentials = storage.get() self.assertEqual(None, credentials) self.assertEqual(None, memcache.get('foo'))
def test_delete_ndb(self): # Start empty storage = StorageByKeyName(CredentialsNDBModel, "foo", "credentials") self.assertEqual(None, storage.get()) # Add credentials to model with storage, and check equivalent w/o storage storage.put(self.credentials) credmodel = CredentialsNDBModel.get_by_id("foo") self.assertEqual(credmodel.credentials.to_json(), self.credentials.to_json()) # Delete and make sure empty storage.delete() self.assertEqual(None, storage.get())
def test_get_and_put_set_store_on_cache_retrieval(self): storage = StorageByKeyName(CredentialsModel, "foo", "credentials", cache=memcache) self.assertEqual(None, storage.get()) self.credentials.set_store(storage) storage.put(self.credentials) # Pre-bug 292 old_creds wouldn't have storage, and the _refresh wouldn't # be able to store the updated cred back into the storage. old_creds = storage.get() self.assertEqual(old_creds.access_token, "foo") old_creds.invalid = True old_creds._refresh(_http_request) new_creds = storage.get() self.assertEqual(new_creds.access_token, "bar")
def test_delete_ndb(self): # Start empty storage = StorageByKeyName(CredentialsNDBModel, 'foo', 'credentials') self.assertEqual(None, storage.get()) # Add credentials to model with storage, and check equivalent w/o storage storage.put(self.credentials) credmodel = CredentialsNDBModel.get_by_id('foo') self.assertEqual(credmodel.credentials.to_json(), self.credentials.to_json()) # Delete and make sure empty storage.delete() self.assertEqual(None, storage.get())
def test_get_and_put_set_store_on_cache_retrieval(self): storage = StorageByKeyName( CredentialsModel, 'foo', 'credentials', cache=memcache) self.assertEqual(None, storage.get()) self.credentials.set_store(storage) storage.put(self.credentials) # Pre-bug 292 old_creds wouldn't have storage, and the _refresh wouldn't # be able to store the updated cred back into the storage. old_creds = storage.get() self.assertEqual(old_creds.access_token, 'foo') old_creds.invalid = True old_creds._refresh(_http_request) new_creds = storage.get() self.assertEqual(new_creds.access_token, 'bar')
def get_credentials(user_id): """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. """ storage = StorageByKeyName(CredentialsNDBModel, user_id, 'credentials') credentials = storage.get() if not credentials or credentials.invalid: flow = client.flow_from_clientsecrets( CLIENT_SECRET_FILE, SCOPES, redirect_uri=ridelisterconfig['ridelister']['callbackurl'], # redirect_uri="https://localhost:8080/oauth2callback", ) # Todo - Look this one up... flow.user_agent = APPLICATION_NAME # credentials = tools.run_flow(flow, storage) # print('Storing credentials') auth_uri = str(flow.step1_get_authorize_url()) return credentials
def _delete_creds(userid): storage = StorageByKeyName(CredentialsNDBModel, userid, "credentials") if storage.get(): credentials = storage.locked_delete() return True return False
def _get_creds(userid): """ We store the credentials by google userid from the users api. """ storage = StorageByKeyName(CredentialsNDBModel, userid, "credentials") credentials = storage.get() return credentials
def get(self): devices = None updated = 'Never' linkkey = self.request.get('id') fetcherror = 'Key not found' domainname = None if linkkey is not None: customerlink = CustomerLink.get_by_id(int(linkkey)) if customerlink is not None: domainname = customerlink.domainname try: authstorage = StorageByKeyName(CredentialsModel, customerlink.linkeduserid, 'credentials') credentials = authstorage.get() http = httplib2.Http() http = credentials.authorize(http) authstorage.put(credentials) active_users = get_active_users(customerlink.customerid, http) devices = get_devices(active_users, http) updated = datetime.now().strftime('%a, %d %b %Y, %H:%M UTC') fetcherror = None except: fetcherror = traceback.format_exc() variables = { 'linkkey': linkkey, 'domainname': domainname, 'devices': devices, 'updated': updated, 'fetcherror': fetcherror } self.response.headers['Content-Type'] = 'application/json' self.response.write(json.dumps(variables))
def _deliver_test(self): """Print to the admins printer.""" gcp_cred_storage = StorageByKeyName(GcpCredentials, self.user.user_id(), 'credentials') gcp_creds = gcp_cred_storage.get() if not gcp_creds: return self.redirect("/printers/add") account = Account.get_or_insert(self.user_bundle.user.user_id()) printers = Printer.query(Printer.owner == account.key).fetch(1000) PrintJobEnqueuer.enqueue_to_printers( printers, self.request.get("deliver_title"), self.request.get("deliver_url") ) self.template_values.update({ "deliver_title": self.request.get("deliver_title"), "deliver_url": self.request.get("deliver_url"), "printer_names": [printer.display_name for printer in printers] }) path = os.path.join(os.path.dirname(__file__), '../templates/admin_deliver.html') self.response.write(template.render(path, self.template_values))
def get(self): gcp_cred_storage = StorageByKeyName(GcpCredentials, self.user_bundle.user.user_id(), 'credentials') gcp_creds = gcp_cred_storage.get() if gcp_creds is None: if ann_config.oauth_decorator.has_credentials(): gcp_creds = ann_config.oauth_decorator.credentials gcp_cred_storage.put(gcp_creds) else: self.template_values.update({ "auth_url": ann_config.oauth_decorator.authorize_url(), }) path = os.path.join(os.path.dirname(__file__), '../templates/gcp_authorization_request.html') self.response.write(template.render(path, self.template_values)) return None http = gcp_creds.authorize(httplib2.Http()) resp, content = http.request('http://www.google.com/cloudprint/search') response_json = json.loads(content) printers = response_json["printers"] self.template_values.update({ "printers": printers, }) path = os.path.join(os.path.dirname(__file__), '../templates/printer_add.html') self.response.write(template.render(path, self.template_values))
def get(self): gcp_cred_storage = StorageByKeyName(GcpCredentials, self.user_bundle.user.user_id(), 'credentials') gcp_creds = gcp_cred_storage.get() if gcp_creds is None: if ann_config.oauth_decorator.has_credentials(): gcp_creds = ann_config.oauth_decorator.credentials gcp_cred_storage.put(gcp_creds) else: self.template_values.update({ "auth_url": ann_config.oauth_decorator.authorize_url(), }) path = os.path.join( os.path.dirname(__file__), '../templates/gcp_authorization_request.html') self.response.write(template.render(path, self.template_values)) return None http = gcp_creds.authorize(httplib2.Http()) resp, content = http.request('http://www.google.com/cloudprint/search') response_json = json.loads(content) printers = response_json["printers"] self.template_values.update({ "printers": printers, }) path = os.path.join(os.path.dirname(__file__), '../templates/printer_add.html') self.response.write(template.render(path, self.template_values))
def get_credentials(gplus_id, test): """Retrieves credentials for the provided Google+ User ID from the Datastore""" if test is not None: storage = StorageByKeyName(TestUser, gplus_id, "credentials") else: storage = StorageByKeyName(User, gplus_id, "credentials") credentials = storage.get() return credentials
def get_credentials(gplus_id, test): """Retrieves credentials for the provided Google+ User ID from the Datastore""" if test is not None: storage = StorageByKeyName(utils.TestUser, gplus_id, "credentials") else: storage = StorageByKeyName(utils.User, gplus_id, "credentials") credentials = storage.get() return credentials
def oauth2redirect(request): user = users.get_current_user() storage = StorageByKeyName(CredentialsModel, user.user_id(), 'credentials') credentials = storage.get() # if not credentials or not credentials.refresh_token: # return __initial_oauth_flow(request, approval_prompt='force') # Use approval_prompt='force' to ensure the refresh token is good. return __initial_oauth_flow(request, approval_prompt='force')
def test_get_and_put_simple(self): storage = StorageByKeyName(CredentialsModel, "foo", "credentials") self.assertEqual(None, storage.get()) self.credentials.set_store(storage) self.credentials._refresh(_http_request) credmodel = CredentialsModel.get_by_key_name("foo") self.assertEqual("bar", credmodel.credentials.access_token)
def test_get_and_put_simple(self): storage = StorageByKeyName(CredentialsModel, 'foo', 'credentials') self.assertEqual(None, storage.get()) self.credentials.set_store(storage) self.credentials._refresh(_http_request) credmodel = CredentialsModel.get_by_key_name('foo') self.assertEqual('bar', credmodel.credentials.access_token)
def build_gmail_service_for_user(userId): if not Constants.TEST_CONTEXT: storage = StorageByKeyName(CredentialsModel, userId, "credentials") credentials = storage.get() return GmailService(credentials) else: with open("gmailytics/test/credentials.json") as f: data = f.read() credentials = OAuth2Credentials.from_json(data) return GmailService(credentials)
def acquireLatestCredentials(user_id): """Returns credentials, and refreshes them if necessary.""" storage = StorageByKeyName(CredentialsModel, user_id, 'credentials') credentials = storage.get() if credentials.access_token_expired: logging.info('Credentials expired. Attempting to refresh...') credentials.refresh(httplib2.Http()) storage.put(credentials) logging.info('Successfully refreshed access token!') return credentials
def test_get_and_put_ndb(self): # Start empty storage = StorageByKeyName(CredentialsNDBModel, "foo", "credentials") self.assertEqual(None, storage.get()) # Refresh storage and retrieve without using storage self.credentials.set_store(storage) self.credentials._refresh(_http_request) credmodel = CredentialsNDBModel.get_by_id("foo") self.assertEqual("bar", credmodel.credentials.access_token) self.assertEqual(credmodel.credentials.to_json(), self.credentials.to_json())
def EndpointsGetAuthorizedHttp(): """Sign an Http with user credentials. Returns: Http: An authorized Http connection. """ user = users.get_current_user() storage = StorageByKeyName( CredentialsModel, user.user_id(), 'credentials') credentials = storage.get() http = Http() return credentials.authorize(http)
def get_access_token(): """Used to check app activation and append token to urls""" # Check if access token is in storage storage = StorageByKeyName(CredentialsModel, 'token', 'credentials') credentials = storage.get() if not credentials: return False return credentials.access_token
def test_get_and_put_ndb(self): # Start empty storage = StorageByKeyName(CredentialsNDBModel, 'foo', 'credentials') self.assertEqual(None, storage.get()) # Refresh storage and retrieve without using storage self.credentials.set_store(storage) self.credentials._refresh(_http_request) credmodel = CredentialsNDBModel.get_by_id('foo') self.assertEqual('bar', credmodel.credentials.access_token) self.assertEqual(credmodel.credentials.to_json(), self.credentials.to_json())
def test_delete_db_ndb_mixed(self): # Start empty storage_ndb = StorageByKeyName( CredentialsNDBModel, 'foo', 'credentials') storage = StorageByKeyName( CredentialsModel, 'foo', 'credentials') # First DB, then NDB self.assertEqual(None, storage.get()) storage.put(self.credentials) self.assertNotEqual(None, storage.get()) storage_ndb.delete() self.assertEqual(None, storage.get()) # First NDB, then DB self.assertEqual(None, storage_ndb.get()) storage_ndb.put(self.credentials) storage.delete() self.assertNotEqual(None, storage_ndb.get()) # NDB uses memcache and an instance cache (Context) ndb.get_context().clear_cache() memcache.flush_all() self.assertEqual(None, storage_ndb.get())
def test_delete_db_ndb_mixed(self): # Start empty storage_ndb = StorageByKeyName( CredentialsNDBModel, 'foo', 'credentials') storage = StorageByKeyName( CredentialsModel, 'foo', 'credentials') # First DB, then NDB self.assertEqual(None, storage.get()) storage.put(self.credentials) self.assertNotEqual(None, storage.get()) storage_ndb.delete() self.assertEqual(None, storage.get()) # First NDB, then DB self.assertEqual(None, storage_ndb.get()) storage_ndb.put(self.credentials) storage.delete() self.assertNotEqual(None, storage_ndb.get()) # NDB uses memcache and an instance cache (Context) ndb.get_context().clear_cache() memcache.flush_all() self.assertEqual(None, storage_ndb.get())
def test_get_and_put_mixed_db_storage_ndb_get(self): # Start empty storage = StorageByKeyName(CredentialsModel, "foo", "credentials") self.assertEqual(None, storage.get()) # Set DB store and refresh to add to storage self.credentials.set_store(storage) self.credentials._refresh(_http_request) # Retrieve same key from NDB model to confirm mixing works credmodel = CredentialsNDBModel.get_by_id("foo") self.assertEqual("bar", credmodel.credentials.access_token) self.assertEqual(self.credentials.to_json(), credmodel.credentials.to_json())
def test_get_and_put_cached(self): storage = StorageByKeyName(CredentialsModel, "foo", "credentials", cache=memcache) self.assertEqual(None, storage.get()) self.credentials.set_store(storage) self.credentials._refresh(_http_request) credmodel = CredentialsModel.get_by_key_name("foo") self.assertEqual("bar", credmodel.credentials.access_token) # Now remove the item from the cache. memcache.delete("foo") # Check that getting refreshes the cache. credentials = storage.get() self.assertEqual("bar", credentials.access_token) self.assertNotEqual(None, memcache.get("foo")) # Deleting should clear the cache. storage.delete() credentials = storage.get() self.assertEqual(None, credentials) self.assertEqual(None, memcache.get("foo"))
def test_get_and_put_mixed_db_storage_ndb_get(self): # Start empty storage = StorageByKeyName(CredentialsModel, 'foo', 'credentials') self.assertEqual(None, storage.get()) # Set DB store and refresh to add to storage self.credentials.set_store(storage) self.credentials._refresh(_http_request) # Retrieve same key from NDB model to confirm mixing works credmodel = CredentialsNDBModel.get_by_id('foo') self.assertEqual('bar', credmodel.credentials.access_token) self.assertEqual(self.credentials.to_json(), credmodel.credentials.to_json())
def getService(): flow = flow_from_clientsecrets( 'client_secrets.json', scope='https://www.googleapis.com/auth/youtube', redirect_uri='http://localhost:8080/oauth2callback') user = users.get_current_user() storage = StorageByKeyName(CredentialsModel, user.user_id(), 'credentials') credentials = storage.get() http = httplib2.Http() http = credentials.authorize(http) authenticated_service = build('youtube', 'v3', http=http) return authenticated_service
def post(self): gcp_cred_storage = StorageByKeyName(GcpCredentials, self.user_bundle.user.user_id(), 'credentials') gcp_creds = gcp_cred_storage.get() if not gcp_creds: return self.redirect("/printers/add") printer = Printer.get_by_id(int(self.request.get("printer_key_id"))) PrintJobEnqueuer.enqueue_to_printer( printer, "Distributed Press Test Print", "http://distributedpress.appspot.com" ) self.redirect("/dashboard")
def SendMessages(post_data): storage = StorageByKeyName(AdminCredentialsModel, 'theadminaccount', 'credentials') credentials = storage.get() if credentials: try: api_http = credentials.authorize(httplib2.Http()) for data in post_data: api_http.request( 'https://www.googleapis.com/gcm_for_chrome/v1/messages', 'POST', body=json.dumps(data), headers={'Content-Type': 'application/json'}) except AccessTokenRefreshError: logger.warning('Unable to refresh the Push Messaging access token!')
def SendMessages(post_data): storage = StorageByKeyName(AdminCredentialsModel, 'theadminaccount', 'credentials') credentials = storage.get() if credentials: try: api_http = credentials.authorize(httplib2.Http()) for data in post_data: api_http.request( 'https://www.googleapis.com/gcm_for_chrome/v1/messages', 'POST', body=json.dumps(data), headers={'Content-Type': 'application/json'}) except AccessTokenRefreshError: logger.warning( 'Unable to refresh the Push Messaging access token!')
def getService(): flow = flow_from_clientsecrets( "client_secrets.json", scope="https://www.googleapis.com/auth/youtube", redirect_uri="http://localhost:8080/oauth2callback", ) user = users.get_current_user() storage = StorageByKeyName(CredentialsModel, user.user_id(), "credentials") credentials = storage.get() http = httplib2.Http() http = credentials.authorize(http) authenticated_service = build("youtube", "v3", http=http) return authenticated_service
def post(self): gcp_cred_storage = StorageByKeyName(GcpCredentials, self.user_bundle.user.user_id(), 'credentials') gcp_creds = gcp_cred_storage.get() if not gcp_creds: return self.redirect("/printers/add") printer = Printer.get_by_id(int(self.request.get("printer_key_id"))) PrintJobEnqueuer.enqueue_to_printer( printer, "Distributed Press Test Print", "http://distributedpress.appspot.com") self.redirect("/dashboard")
def get(self): user = users.get_current_user() if user: storage = StorageByKeyName(Credentials, user.user_id(), 'credentials') credentials = storage.get() auth = GAPDecoratorAuthMethod(credentials) reader = GoogleReader(auth) reader.buildSubscriptionList() feeds = reader.getFeeds() template_values = { 'feeds': feeds } path = os.path.join(os.path.dirname(__file__), 'templates/template_slist.html') self.response.out.write(template.render(path, template_values)) else: self.redirect(users.create_login_url(self.request.uri))
def post(self): printer = Printer.get_by_id(int(self.request.get("printer_key_id"))) account = printer.owner gcp_cred_storage = StorageByKeyName(GcpCredentials, account.id(), 'credentials') gcp_creds = gcp_cred_storage.get() if not gcp_creds: return logging.warning("Missing credentials for %s" % printer) data = { 'printerid': printer.cloudprint_id, 'title': self.request.get("title"), 'content': self.request.get("url"), 'contentType': 'url', } body = urllib.urlencode(data) http = gcp_creds.authorize(httplib2.Http()) resp, content = http.request('https://www.google.com/cloudprint/submit', method="POST", body=body) self.response.write(content)
def get_credentials(self, api_type, **params): storage_ndb = StorageByKeyName( CredentialsNDBModel, api_type, 'credentials') credentials = storage_ndb.get() if credentials is None: # self.read_settings() with open(join(dirname(abspath(__file__)), self.ApiSettings["private_key_file"])) as f: private_key = f.read() credentials = SignedJwtAssertionCredentials( self.ApiSettings["service_account_name"], private_key, # sub=self.ApiSettings["google_account_owner_email"], # before commenting this line, # I got "AccessTokenRefreshError: unauthorized_client" error **params ) storage_ndb.put(credentials) return credentials
def GetCurrentCredentials(): """Fetch current user's credentials, refreshing if possible.""" user = users.get_current_user() if not user: return None storage = StorageByKeyName(CredentialsModel, user.user_id(), 'credentials') credentials = storage.get() if not credentials or not credentials.access_token: return None if credentials.access_token_expired: http = httplib2.Http() try: logging.info('Refreshing OAuth2 Access Token.') credentials.refresh(http) except AccessTokenRefreshError: return None storage.put(credentials) return credentials
def GetCurrentCredentials(): """Fetch current user's credentials, refreshing if possible.""" user = users.get_current_user() if not user: return None storage = StorageByKeyName(CredentialsModel, user.user_id(), 'credentials') credentials = storage.get() if not credentials or not credentials.access_token: return None if credentials.access_token_expired: http = httplib2.Http() try: logging.info('Refreshing OAuth2 Access Token.') credentials.refresh(http) except AccessTokenRefreshError: return None storage.put(credentials) return credentials
def post(self): printer = Printer.get_by_id(int(self.request.get("printer_key_id"))) account = printer.owner gcp_cred_storage = StorageByKeyName(GcpCredentials, account.id(), 'credentials') gcp_creds = gcp_cred_storage.get() if not gcp_creds: return logging.warning("Missing credentials for %s" % printer) data = { 'printerid': printer.cloudprint_id, 'title': self.request.get("title"), 'content': self.request.get("url"), 'contentType': 'url', } body = urllib.urlencode(data) http = gcp_creds.authorize(httplib2.Http()) resp, content = http.request( 'https://www.google.com/cloudprint/submit', method="POST", body=body) self.response.write(content)
def get_credentials(gplus_id): storage = StorageByKeyName(utils.User, gplus_id, "credentials") credentials = storage.get() return credentials
def get_credentials(gplus_id): storage = StorageByKeyName(utils.User, gplus_id, "credentials") credentials = storage.get() return credentials
def __storeCredentials(self, userid, propName): storage = StorageByKeyName(CredentialsModel, userid, propName) credentials = storage.get() storage.put(credentials)
def store_sfdc_credentials_for_user_id(cls, user_id, credentials): storage = StorageByKeyName(CredentialsModel, user_id+"sfdc", "credentials") cached_credentials = storage.get() if credentials.refresh_token or not cached_credentials or cached_credentials and not cached_credentials.refresh_token: storage.put(credentials)
def get_sfdc_credentials_from_user_id(cls, user_id): storage = StorageByKeyName(CredentialsModel, user_id+"sfdc", "credentials") return storage.get()