Source code for authomatic.providers.gaeopenid

# -*- coding: utf-8 -*-
"""
Google App Engine OpenID Providers
----------------------------------

|openid|_ provider implementations based on the |gae_users_api|_.

.. note::

    When using the :class:`GAEOpenID` provider, the :class:`.User` object
    will always have only the
    :attr:`.User.user_id`,
    :attr:`.User.email`,
    :attr:`.User.gae_user`
    attributes populated with data.
    Moreover the :attr:`.User.user_id` will always be empty on the
    `GAE Development Server <https://developers.google.com/appengine/docs/python/tools/devserver>`_.

.. autosummary::
    
    GAEOpenID
    Yahoo
    Google 

"""

import logging

from google.appengine.api import users

import authomatic.core as core
from authomatic import providers
from authomatic.exceptions import FailureError


__all__ = ['GAEOpenID', 'Yahoo', 'Google']


[docs]class GAEOpenID(providers.AuthenticationProvider): """ |openid|_ provider based on the |gae_users_api|_. Accepts additional keyword arguments inherited from :class:`.AuthenticationProvider`. """ @providers.login_decorator def login(self): """Launches the OpenID authentication procedure.""" if self.params.get(self.identifier_param): #=================================================================== # Phase 1 before redirect. #=================================================================== self._log(logging.INFO, 'Starting OpenID authentication procedure.') url = users.create_login_url(dest_url=self.url, federated_identity=self.identifier) self._log(logging.INFO, 'Redirecting user to {0}.'.format(url)) self.redirect(url) else: #=================================================================== # Phase 2 after redirect. #=================================================================== self._log(logging.INFO, 'Continuing OpenID authentication procedure after redirect.') user = users.get_current_user() if user: self._log(logging.INFO, 'Authentication successful.') self._log(logging.INFO, 'Creating user.') self.user = core.User(self, id=user.federated_identity(), email=user.email(), gae_user=user) #=============================================================== # We're done #=============================================================== else: raise FailureError('Unable to authenticate identifier "{0}"!'.format(self.identifier))
[docs]class Yahoo(GAEOpenID): """ :class:`.GAEOpenID` provider with the :attr:`.identifier` set to ``"me.yahoo.com"``. """ identifier = 'me.yahoo.com'
[docs]class Google(GAEOpenID): """ :class:`.GAEOpenID` provider with the :attr:`.identifier` set to ``"https://www.google.com/accounts/o8/id"``. """ identifier = 'https://www.google.com/accounts/o8/id'
Fork me on GitHub