Beispiel #1
0
def store_credentials(gplus_id, test, credentials):
    """Stores credentials for the provide Google+ User ID to Datastore"""
    if test is not None:
        storage = StorageByKeyName(utils.TestUser, gplus_id, "credentials")
    else:
        storage = StorageByKeyName(utils.User, gplus_id, "credentials")
    storage.put(credentials)
  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 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))
Beispiel #4
0
def store_credentials(gplus_id, test, credentials):
    """Stores credentials for the provide Google+ User ID to Datastore"""
    if test is not None:
        storage = StorageByKeyName(TestUser, gplus_id, "credentials")
    else:
        storage = StorageByKeyName(User, gplus_id, "credentials")
    storage.put(credentials)
    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))
Beispiel #6
0
  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())
Beispiel #7
0
  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 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
Beispiel #9
0
 def get(self):
     flow = flow_from_clientsecrets(CLIENTSECRETS_LOCATION,
                                    scope=' '.join(SCOPES),
                                    redirect_uri=REDIRECT_URI)
     flow.params['access_type'] = 'offline'
     credentials = flow.step2_exchange(self.request.get('code'))
     storage = StorageByKeyName(AdminCredentialsModel, 'theadminaccount',
                                'credentials')
     storage.put(credentials)
     self.redirect('/')
Beispiel #10
0
 def get(self):
   flow = flow_from_clientsecrets(CLIENTSECRETS_LOCATION,
                                  scope=' '.join(SCOPES),
                                  redirect_uri=REDIRECT_URI)
   flow.params['access_type'] = 'offline'
   credentials = flow.step2_exchange(self.request.get('code'))
   storage = StorageByKeyName(AdminCredentialsModel,
                              'theadminaccount',
                              'credentials')
   storage.put(credentials)
   self.redirect('/')
Beispiel #11
0
def _refresh_oauth2_token(credentials, userid):
    """
    This updates the token via the OAuth2Credentials code and
    modifies the httplib2.Http.request stuff.  We store the updated
    credentials for later.
    """
    http = httplib2.Http()
    http = credentials.authorize(http)
    credentials.refresh(http)
    storage = StorageByKeyName(CredentialsNDBModel, userid, 'credentials')
    storage.put(credentials)
    return credentials
Beispiel #12
0
    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())
Beispiel #13
0
    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())
Beispiel #14
0
    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")
Beispiel #15
0
  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')
Beispiel #16
0
def oauth2callback(request):
  user = users.get_current_user()
  flow = pickle.loads(memcache.get(user.user_id()))

  try:
    credentials = flow.step2_exchange(request.GET)
    request.session['credentials'] = credentials
    storage = StorageByKeyName(CredentialsModel, user.user_id(), 'credentials')
    storage.put(credentials)
    redirect = request.session.get('redirect', '/')
    return HttpResponseRedirect(redirect)
  except FlowExchangeError:
    logger.exception('Failed to authenticate')

  return HttpResponseRedirect(reverse(settings.OAUTH_FAILED_REDIRECT))
Beispiel #17
0
def oauth2callback():
    user = users.get_current_user()

    if request.args.get('code'):

        credentials = call.flow.step2_exchange(request.args.get('code'))
        storage = StorageByKeyName(
            CredentialsNDBModel, user.user_id(), 'credentials'
        )
        storage.put(credentials)

        http = httplib2.Http()
        http = credentials.authorize(http)

        return "credentials successfully stored!"

    elif request.args.get('error'):
        return "User denied the request for credentials"
Beispiel #18
0
def oauth2callback():
    user = users.get_current_user()

    if request.args.get('code'):

        credentials = call.flow.step2_exchange(request.args.get('code'))
        storage = StorageByKeyName(
            CredentialsNDBModel, user.user_id(), 'credentials'
        )
        storage.put(credentials)

        http = httplib2.Http()
        http = credentials.authorize(http)
        flash(u'Signin complete.', 'info')
        return redirect('/')

    elif request.args.get('error'):
        return "User denied the request for credentials"
Beispiel #19
0
def _refresh_oauth2_token(credentials, userid):
    """
    This updates the token via the OAuth2Credentials code and
    modifies the httplib2.Http.request stuff.  We store the updated
    credentials for later.
    """
    from oauth2client.client import AccessTokenRefreshError

    http = httplib2.Http()
    http = credentials.authorize(http)
    storage = StorageByKeyName(CredentialsNDBModel, userid, "credentials")
    try:
        credentials.refresh(http)
    except AccessTokenRefreshError:
        logging.info("AccessTokenRefreshError: lets delete the creds.")
        storage.delete()
        return
    storage.put(credentials)
    return credentials
Beispiel #20
0
    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
Beispiel #21
0
    def get(self):

        if get_access_token():
            # App is set up, we just want to check if user belongs to org
            if not _user_is_org_member():
                self.render('403')
                self.error(403)
                return
            else:
                # User is now logged in, send to app
                self.session['logged_in'] = True
                self.redirect('/')
                return

        # Get the code out of the url
        code = _retrieve_code(self.request.url)

        # Create a Credentials object which will hold the access token
        flow = _create_flow_object()
        credentials = flow.step2_exchange(code)

        # Store the access token, app is now activated
        storage = StorageByKeyName(CredentialsModel, 'token', 'credentials')
        storage.put(credentials)

        if not _user_is_org_admin():
            # User is not an admin, bail
            self.error(403)
            self.render('not_admin')
            return

        # User is logged in
        self.session['logged_in'] = True

        context = {
            "access_token": credentials.access_token,
            "username": get_user_name(),
        }

        # Tell user that the app is activated
        self.render('login', context)
Beispiel #22
0
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
Beispiel #23
0
 def get(self):
     request = webapp2.get_request()
     code = request.get('code')
     state_string = request.get('state')
     state = pickle.loads(state_string)
     api_client = state['api_client']
     version = state['version']
     scope = state['scope']
     key = api_client + version + scope
     original_url = state['original_url']  # url of the original call
     flow = OAuth2WebServerFlow(
         client_id=google_credentials.CLIENT_ID,
         client_secret=google_credentials.CLIENT_SECRET,
         scope=scope,
         redirect_uri=request.path_url,
         access_type='offline')
     credentials = flow.step2_exchange(code)
     # store the credentials in the datastore
     storage = StorageByKeyName(CredentialsModel, key, 'credentials')
     storage.put(credentials)
     return webapp2.redirect(original_url)
Beispiel #24
0
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 get(self):
     request = webapp2.get_request()
     code = request.get("code")
     state_string = request.get("state")
     state = pickle.loads(state_string)
     api_client = state["api_client"]
     version = state["version"]
     scope = state["scope"]
     key = api_client + version + scope
     original_url = state["original_url"]  # url of the original call
     flow = OAuth2WebServerFlow(
         client_id=google_credentials.CLIENT_ID,
         client_secret=google_credentials.CLIENT_SECRET,
         scope=scope,
         redirect_uri=request.path_url,
         access_type="offline",
     )
     credentials = flow.step2_exchange(code)
     # store the credentials in the datastore
     storage = StorageByKeyName(CredentialsModel, key, "credentials")
     storage.put(credentials)
     return webapp2.redirect(original_url)
Beispiel #26
0
 def __storeCredentials(self, userid, propName):
   storage = StorageByKeyName(CredentialsModel, userid, propName)
   credentials = storage.get()
   storage.put(credentials)
Beispiel #27
0
def store_credentials(gplus_id, credentials):
    storage = StorageByKeyName(utils.User, gplus_id, "credentials")
    storage.put(credentials)
Beispiel #28
0
 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)                
Beispiel #29
0
def store_credentials(gplus_id, credentials):
    storage = StorageByKeyName(utils.User, gplus_id, "credentials")
    storage.put(credentials)