Пример #1
0
def oauthLogin(provider_name):
    authomatic = Authomatic(AUTHOMATIC_CONFIG,
                            'your secret string',
                            report_errors=True)
    response = make_response()
    result = authomatic.login(WerkZeug(request, response), provider_name)
    if result:
        if result.user:
            result.user.update()
            appuser = dict(username=result.user.username,
                           email=result.user.email,
                           password="******")
            logging.debug(appuser)
            user = User()
            uid = user.get_id(appuser['username'])
            if uid is not None:
                log_user_in(appuser['username'], uid)
            else:
                # call register user
                message = register_user(appuser)
                if message is None:
                    return log_user_in(appuser['username'], uid)
                return str(message)
            # query db and see if result.user.email is there,
            # if the answer is yes, get username and all stuff for this user
            # log him in with the data from our database
            # if he is not there then add result.user.email, result.user.stuff
            # generate password for him and log him in with that
            #log_user_in(appuser.username,appuser.uid) #,True,result.user.email)
        return redirect(url_for('startpage', n=0))
    return response
Пример #2
0
def login_with(provider_name):
    response = make_response()

    authomatic = Authomatic(
        {
            'default': 'google',
            'google': {
                'class_': 'authomatic.providers.oauth2.Google',
                'consumer_key': '426158043393-j1gnqba0dpucop2o5m9lo7m248vr1744'
                '.apps.googleusercontent.com',
                'consumer_secret': 'd88vSFHyhZJ63O4ug6GrksTB',
                'scope': ['profile', 'email'],
                'url': 'https://www.googleapis.com/userinfo/v2/me',
            },
        }, app.secret_key)

    result = authomatic.login(
        WerkzeugAdapter(request, response),
        provider_name,
        None,
        session=session,
        session_saver=lambda: app.save_session(session, response))

    if result and result.user and result.user.credentials:
        response = result.provider.access(
            authomatic.config.get(provider_name).get('url'))

        if response.status == 200:
            user = User.first_or_new(email=response.data.get('email'))
            user.name = response.data.get('name')
            user.save()
            login_user(user)

        return redirect(url_for('index'))
    return response
Пример #3
0
def login_with(provider_name):
    """
    The below is login page action using OAuth with Google

    :param provider_name: The provider name. google by default
    """
    response = make_response()

    authomatic = Authomatic(app.config['SOCIAL_LOGIN'], app.secret_key)

    result = authomatic.login(
        WerkzeugAdapter(request, response),
        provider_name,
        None,
        session=session,
        session_saver=lambda: app.save_session(session, response))

    if result and result.user and result.user.credentials:
        response = result.provider.access(
            authomatic.config.get(provider_name).get('url'))

        if response.status == 200:
            """
            Create a new user if the provided email is
            not exists. Otherwise, update the current user
            """
            user = User.first_or_new(email=response.data.get('email'))
            user.name = response.data.get('name')
            user.save()
            login_user(user)

        return redirect(url_for('index'))

    return response
Пример #4
0
def includeme(config: Configurator) -> None:
    """Pyramid knob."""
    settings = config.registry.settings

    # Pyramid requires an authorization policy to be active.
    config.set_authorization_policy(ACLAuthorizationPolicy())

    # Enable JWT authentication.
    config.include("pyramid_jwt")
    config.set_jwt_authentication_policy(
        config.registry.settings["jwt.secret"], auth_type="Token"
    )

    # Add API routes for auth
    config.add_route("user", "/api/user")
    config.add_route("login", "/login")

    # Add request.user shorthand
    config.add_request_method(get_user, "user", reify=True)

    # Add request.authomatic shorthand
    authomatic = Authomatic(
        config={
            "github": {
                "class_": oauth2.GitHub,
                "consumer_key": settings["github.consumer_key"],
                "consumer_secret": settings["github.consumer_secret"],
                "access_headers": {"User-Agent": "getoffmylawn"},
            }
        },
        secret=settings["jwt.secret"],
    )
    config.add_request_method(lambda self: authomatic, "authomatic", reify=True)
Пример #5
0
    def init_app(self, app):

        if app.config.get("MODULE_USER_ACCOUNT_ENABLE_OAUTH_LOGIN"):
            secret = app.config.get("SECRET_KEY")
            providers = app.config.get("MODULE_USER_ACCOUNT_OAUTH_PROVIDERS")
            config = {}
            auth_providers = []

            for provider, conf in list(providers.items()):
                if hasattr(oauth2, provider):
                    cls = getattr(oauth2, provider)
                    conf[
                        "class_"] = conf["class_"] if "class_" in conf else cls
                elif hasattr(oauth1, provider):
                    cls = getattr(oauth1, provider)
                    conf[
                        "class_"] = conf["class_"] if "class_" in conf else cls
                else:
                    continue

                conf["id"] = provider_id()
                _provider = provider.lower()
                auth_providers.append(_provider)
                config[_provider] = conf

            self.oauth = Authomatic(config=config,
                                    secret=secret,
                                    session=session,
                                    report_errors=True)

            Juice.g(OAUTH_PROVIDERS=auth_providers)
Пример #6
0
def get_authomatic(request):
    settings = request.registry.settings
    # authomatic social auth
    authomatic_conf = {
        # callback http://yourapp.com/social_auth/twitter
        'twitter': {
            'class_': oauth1.Twitter,
            'consumer_key': settings.get('authomatic.pr.twitter.key', 'X'),
            'consumer_secret': settings.get('authomatic.pr.twitter.secret',
                                            'X'),
        },
        # callback http://yourapp.com/social_auth/facebook
        'facebook': {
            'class_': oauth2.Facebook,
            'consumer_key': settings.get('authomatic.pr.facebook.app_id', 'X'),
            'consumer_secret': settings.get('authomatic.pr.facebook.secret',
                                            'X'),
            'scope': ['email'],
        },
        # callback http://yourapp.com/social_auth/google
        'google': {
            'class_': oauth2.Google,
            'consumer_key': settings.get('authomatic.pr.google.key', 'X'),
            'consumer_secret': settings.get('authomatic.pr.google.secret',
                                            'X'),
            'scope': ['email'],
        }
    }
    return Authomatic(config=authomatic_conf,
                      secret=settings['authomatic.secret'])
Пример #7
0
 def __call__(self):
     cfg = authomatic_cfg()
     if cfg is None:
         return "Authomatic is not configured"
     if not (
         ISiteRoot.providedBy(self.context)
         or INavigationRoot.providedBy(self.context)
     ):
         # callback url is expected on either navigationroot or site root
         # so bevor going on redirect
         root = api.portal.get_navigation_root(self.context)
         self.request.response.redirect(
             "{0}/authomatic-handler/{1}".format(
                 root.absolute_url(), getattr(self, 'provider', '')
             )
         )
         return "redirecting"
     if not hasattr(self, 'provider'):
         return self.template()
     if self.provider not in cfg:
         return "Provider not supported"
     if not self.is_anon:
         if self.provider in self._provider_names:
             raise ValueError(
                 'Provider {0} is already connected to current '
                 'user.'.format(self.provider)
             )
         # TODO: some sort of CSRF check might be needed, so that
         #       not an account got connected by CSRF. Research needed.
         pass
     secret = authomatic_settings().secret
     if six.PY2 and isinstance(secret, six.text_type):
         secret = secret.encode('utf8')
     auth = Authomatic(cfg, secret=secret)
     result = auth.login(ZopeRequestAdapter(self), self.provider)
     if not result:
         logger.info('return from view')
         # let authomatic do its work
         return
     if result.error:
         return result.error.message
     display = cfg[self.provider].get('display', {})
     provider_name = display.get('title', self.provider)
     if not self.is_anon:
         # now we delegate to PAS plugin to add the identity
         self._add_identity(result, provider_name)
         self.request.response.redirect(
             "{0}".format(self.context.absolute_url())
         )
     else:
         # now we delegate to PAS plugin in order to login
         self._remember_identity(result, provider_name)
         if api.env.plone_version() < '5.2':
             self.request.response.redirect(
                 "{0}/login_success".format(self.context.absolute_url())
             )
         else:
             self.request.response.redirect(self.context.absolute_url())
     return "redirecting"
Пример #8
0
def authomatic_setup(request):
    magpie_secret = get_constant("MAGPIE_SECRET",
                                 request,
                                 settings_name="magpie.secret")
    return Authomatic(config=authomatic_config(request),
                      secret=magpie_secret,
                      logger=AUTHOMATIC_LOGGER,
                      report_errors=True,
                      logging_level=AUTHOMATIC_LOGGER.level)
Пример #9
0
    def login(self, request):

        authomatic = Authomatic(self.config, self.key, report_errors=True)

        response = make_response()
        result = authomatic.login(WerkzeugAdapter(request, response),
                                  self.provider)

        return response, result
Пример #10
0
def setup_authomatic(app):
    authomatic = Authomatic(app.config['OAUTH_CONFIG'],
                            app.config['SECRET_KEY'],
                            report_errors=True)

    def func():
        g.authomatic = authomatic

    return func
Пример #11
0
def init_app(app):
    if app.config['AUTH_PROVIDERS'] is None:
        raise RuntimeError('You must configure the authentication providers. For more info look at the local.conf file')

    app.authomatic = Authomatic(
        app.config['AUTH_PROVIDERS'],
        app.config['APP_SECRET_KEY'],
        report_errors=False
    )

    app.register_blueprint(mod)
Пример #12
0
    def __init__(self):
        self.authomatic_config = {
            'google': {
                'class_': oauth2.Google,
                'consumer_key': app.config['GOOGLE_OAUTH_CLIENT_ID'],
                'consumer_secret': app.config['GOOGLE_OAUTH_CONSUMER_SECRET'],
                'scope': ['profile', 'email']
            }
        }

        self.authomatic = Authomatic(self.authomatic_config,
                                     app.config['AUTHOMATIC_SALT'])
Пример #13
0
def oauth(request, provider):
    response = HttpResponse()
    authomatic = Authomatic(get_setting(settings.AUTHOMATIC_CONFIG, request),
                            get_setting(settings.SECRET_KEY, request))
    result = authomatic.login(DjangoAdapter(request, response), provider)

    if result:
        if result.error:
            messages.error(
                request, 'There was an error signing you in. Please try again')
            return HttpResponseRedirect(reverse('sign_in'))

        if result.user:
            # Then user is being redirected back from provider with their data
            #
            # OAuth 2.0 and OAuth 1.0a provide only limited user data on login,
            # We need to update the user to get more info.
            if not (result.user.name and result.user.id):
                result.user.update()

            provider = result.provider.name
            user = KagisoUser.get_user_from_auth_db(result.user.email)

            if user:
                _social_login(request, user.email, provider)
                return HttpResponseRedirect('/')
            else:
                gender = result.user.gender

                if gender:
                    # Form constants (region, gender) are in uppercase
                    gender = gender.upper()

                data = {
                    'provider': provider,
                    'email': result.user.email,
                    'first_name': result.user.first_name,
                    'last_name': result.user.last_name,
                    'gender': gender,
                    'birth_date': result.user.birth_date,
                }

                request.session['oauth_data'] = data
                return HttpResponseRedirect(reverse('sign_up'))

    # If result.user is None then user will be redirected to provider
    # to authenticate themselves, prior to being redirected back to this view.
    return response
Пример #14
0
def view_authomatic_(self, config, e):
    response = Response()
    provider_name = e.context.name
    logger.info('using provider %r' % provider_name)
    if not provider_name in config:
        msg = 'I got to the URL for provider %r even though it is not in the config.' % provider_name
        raise ValueError(msg)
    authomatic = Authomatic(config=config, secret='some random secret string')
    url_base_public = self.options.url_base_public
    url_base_internal = self.options.url_base_internal
    if not ((url_base_public is None) == (url_base_public is None)):
        msg = 'Only one of url_base_public and url_base_internal is specified.'
        raise Exception(msg)
    result = authomatic.login(
        MyWebObAdapter(e.request, response, url_base_internal,
                       url_base_public), provider_name)
    if not result:
        return response

    # If there is result, the login procedure is over and we can write to response.
    response.write('<a href="..">Home</a>')

    if result.error:
        # Login procedure finished with an error.
        msg = result.error.message
        return self.show_error(e, msg, status=500)
    elif result.user:
        # OAuth 2.0 and OAuth 1.0a provide only limited user data on login,
        # We need to update the user to get more info.
        # if not (result.user.name and result.user.id):
        result.user.update()

        s = "user info: \n"
        for k, v in result.user.__dict__.items():
            s += '\n %s  : %s' % (k, v)
        logger.debug(s)

        next_location = config.get('next_location', e.root)
        handle_auth_success(self, e, provider_name, result, next_location)
    #
    #         response.write('<pre>'+s+'</pre>')
    #         # Welcome the user.
    #         response.write(u'<h1>Hi {0}</h1>'.format(result.user.name))
    #         response.write(u'<h2>Your id is: {0}</h2>'.format(result.user.id))
    #         response.write(u'<h2>Your email is: {0}</h2>'.format(result.user.email))

    # just regular login
    return response
Пример #15
0
 def login_view(self):
     log.debug('login_view')
     response = Response()
     dpconf = dict(class_=oauth2.Dataporten,
                   consumer_key=self.settings.get('oauth_client_id', ''),
                   consumer_secret=self.settings.get(
                       'oauth_client_secret', ''))
     authomatic = Authomatic(config=dict(dp=dpconf), secret='mumbojumbo')
     result = authomatic.login(WebObAdapter(self.request, response), 'dp')
     if result:
         # The login procedure is over
         log.debug('login_view - login complete')
         return self.login_complete(result)
     else:
         log.debug('login_view - login not complete')
         return response
Пример #16
0
async def redirect_login_record_session_google(request):
    success_cb, error_cb, adapter, first_response = oauth_init(request)

    if adapter is None:
        return first_response

    authomatic = Authomatic(config=CONFIG, secret=SECRET_SALT)

    result = authomatic.login(adapter, 'fb',
                              # session=session['authomatic'],
                              session_saver=lambda: None)

    if result:
        if result.error:
            warning("FB login error", result.error)
            return response.redirect('%s?error=%s' % (error_cb, result.error))
        elif result.user:
            debug("FB login success", result.user)
            result.user.update()
            user_dict = result.user.__dict__
            debug("FB retrieving email", user_dict)
            rea = authomatic.access(result.user.credentials,
                                    'https://graph.facebook.com/' + result.user.id + '?fields=email')
            user_email = json.loads(rea.read().decode('utf-8'))["email"]
            debug("FB login update success", result.user)
            return upsert_login_redirect(request, "facebook:" + user_email,
                                         {'email': user_email,
                                          'id': user_dict['id'],
                                          'username': user_dict['username'],
                                          'name': user_dict['name'],
                                          'first_name': user_dict['first_name'],
                                          'last_name': user_dict['last_name'],
                                          'nickname': user_dict['nickname'],
                                          'link': user_dict['link'],
                                          'gender': user_dict['gender'],
                                          'timezone': user_dict['timezone'],
                                          'locale': user_dict['locale'],
                                          'birth_date': user_dict['birth_date'],
                                          'country': user_dict['country'],
                                          'city': user_dict['city'],
                                          'location': user_dict['location'],
                                          'postal_code': user_dict['postal_code'],
                                          'picture': user_dict['picture'],
                                          'phone': user_dict['phone'],
                                          }, success_cb, adapter)
    return adapter.response
Пример #17
0
def setup_authomatic(app):
    authomatic = Authomatic(
        {
            'fb': {
                'consumer_key': app.config['CONSUMER_KEY'],
                'consumer_secret': app.config['CONSUMER_SECRET'],
                'class_': oauth2.Facebook,
                'scope': [],
            }
        },
        app.config['SECRET_KEY'],
        report_errors=False)

    def func():
        g.authomatic = authomatic

    return func
Пример #18
0
def configure_oauth(settings): # pragma: no cover
    CONFIG = {
        'fb': {
            'class_': oauth2.Facebook,
            'consumer_key': settings['facebook.key'],
            'consumer_secret': settings['facebook.secret'],
            'scope': ['email']
        },
        'google': {
            'class_': oauth2.Google,
            'consumer_key': settings['google.key'],
            'consumer_secret': settings['google.secret'],
            'scope': ['email']
        }
    }
    authomatic = Authomatic(config=CONFIG, secret="giftpacito")
    return authomatic
Пример #19
0
def get_authomatic(request):
    settings = request.registry.settings
    # authomatic social auth
    authomatic_conf = {
        # callback http://yourapp.com/social_auth/twitter
        'twitter': {
            'class_': oauth1.Twitter,
            'consumer_key': settings.get('authomatic.pr.twitter.key', ''),
            'consumer_secret': settings.get('authomatic.pr.twitter.secret',
                                            ''),
        },
        # callback http://yourapp.com/social_auth/facebook
        'facebook': {
            'class_': oauth2.Facebook,
            'consumer_key': settings.get('authomatic.pr.facebook.app_id', ''),
            'consumer_secret': settings.get('authomatic.pr.facebook.secret',
                                            ''),
            'scope': ['email'],
        },
        # callback http://yourapp.com/social_auth/google
        'google': {
            'class_': oauth2.Google,
            'consumer_key': settings.get('authomatic.pr.google.key', ''),
            'consumer_secret': settings.get('authomatic.pr.google.secret', ''),
            'scope': ['profile', 'email'],
        },
        'github': {
            'class_': oauth2.GitHub,
            'consumer_key': settings.get('authomatic.pr.github.key', ''),
            'consumer_secret': settings.get('authomatic.pr.github.secret', ''),
            'scope': ['repo', 'public_repo', 'user:email'],
            'access_headers': {
                'User-Agent': 'AppEnlight'
            },
        },
        'bitbucket': {
            'class_': oauth1.Bitbucket,
            'consumer_key': settings.get('authomatic.pr.bitbucket.key', ''),
            'consumer_secret': settings.get('authomatic.pr.bitbucket.secret',
                                            '')
        }
    }
    return Authomatic(config=authomatic_conf,
                      secret=settings['authomatic.secret'])
Пример #20
0
    def __call__(self):
        cfg = authomatic_cfg()
        if cfg is None:
            return "Authomatic is not configured"
        if not (ISiteRoot.providedBy(self.context)
                or INavigationRoot.providedBy(self.context)):
            # callback url is expected on either navigationroot or site root
            # so bevor going on redirect
            root = api.portal.get_navigation_root(self.context)
            self.request.response.redirect("{}/authomatic-handler/{}".format(
                root.absolute_url(), getattr(self, "provider", "")))
            return "redirecting"
        if not getattr(self, "provider", None):
            return self.template()
        if self.provider not in cfg:
            return "Provider not supported"
        if not self.is_anon:
            if self.provider in self._provider_names:
                logger.warn(
                    "Provider %s is already connected to current "
                    "user.", self.provider)
                return self._redirect()
            # TODO: some sort of CSRF check might be needed, so that
            #       not an account got connected by CSRF. Research needed.
            pass
        secret = authomatic_settings().secret
        auth = Authomatic(cfg, secret=secret)
        result = auth.login(ZopeRequestAdapter(self), self.provider)
        if not result:
            logger.info("return from view")
            # let authomatic do its work
            return
        if result.error:
            return result.error.message
        display = cfg[self.provider].get("display", {})
        provider_name = display.get("title", self.provider)
        if not self.is_anon:
            # now we delegate to PAS plugin to add the identity
            self._add_identity(result, provider_name)
        else:
            # now we delegate to PAS plugin in order to login
            self._remember_identity(result, provider_name)

        return self._redirect()
Пример #21
0
    def __init__(self):
        print("Start server")

        self.printers = []
        self.printer_class = {}

        self.db = pymongo.MongoClient('localhost', 27017)['SunAlert']
        self.authomatic = Authomatic(CONFIG,
                                     'your secret string',
                                     report_errors=False)

        self.app = Flask('SunAlert')
        self.start()

        self.app.config['TEMPLATES_AUTO_RELOAD'] = True
        self.app.config['TESTING'] = True
        self.app.config['DEBUG'] = True
        self.app.config['ENV'] = "development"
        self.app.run(host="0.0.0.0", port=9999)
Пример #22
0
 def init_app(self, app):
     if self._authomatic:
         return
     self._authomatic = Authomatic(config={
         'facebook': {
             'class_': oauth2.Facebook,
             'consumer_key': app.config['FB_CONSUMER_KEY'],
             'consumer_secret': app.config['FB_CONSUMER_SECRET'],
             'scope': ['public_profile', 'email'],
         },
         'google': {
             'class_': oauth2.Google,
             'consumer_key': app.config['GOOGLE_CONSUMER_KEY'],
             'consumer_secret': app.config['GOOGLE_CONSUMER_SECRET'],
             'scope': ['profile', 'email'],
         },
     },
                                   secret=app.config['SECRET_KEY'],
                                   debug=True,
                                   logger=app.logger)
Пример #23
0
def includeme(config):
    """
        The authomatic config should look something like this:
        'fb': {

        'class_': authomatic.providers.oauth2.Facebook,

        # Facebook is an AuthorizationProvider too.
        'consumer_key': '########################',
        'consumer_secret': '########################',

        # But it is also an OAuth 2.0 provider and it needs scope.
        'scope': ['user_about_me', 'email', 'publish_stream'],
    },

        So we need to resolve the 'class_' part for whatever we have configured.

        For this project we'll also keep the secret within this file
    """
    authomatic_file = config.registry.settings.get('kedja.authomatic', '')
    if authomatic_file:
        with open(authomatic_file, 'r') as f:
            auth_config = yaml.safe_load(f)

        secret = auth_config.pop('secret', None)
        if secret is None:
            logger.warning("'secret' is missing within the automatic configuration. A random secret will be used.")
            secret = str(uuid4())
        # Fix all class names within the configuration
        for k, section in auth_config.items():
            if 'class_' in section:
                section['class_'] = config.maybe_dotted(section['class_'])
            else:
                raise ConfigurationError("The section '%s' lacks the 'class_' key which is required." % k)
        authomatic = Authomatic(config=auth_config, secret=secret)
        config.registry.registerUtility(authomatic, IAuthomatic)
        logger.debug("Registered authomatic with providers: '%s'" % ", ".join(auth_config.keys()))
    else:
        logger.warning("'kedja.authomatic' is missing in the paster.ini file. "
                       "It should point to a yaml file with Authomatic configuration. "
                       "Login with authomatic will be disabled!")
Пример #24
0
def login(provider_name):
    """
    Login handler, must accept both GET and POST to be able to use OpenID.
    """

    authomatic = Authomatic(current_app.config['AUTHOMATIC'],
                            current_app.config['SECRET_KEY'],
                            report_errors=False)

    # We need response object for the WerkzeugAdapter.
    response = make_response()

    # Log the user in, pass it the adapter and the provider name.
    result = authomatic.login(WerkzeugAdapter(request, response),
                              provider_name)

    # If there is no LoginResult object, the login procedure is still pending.
    if result:
        if result.user:
            if not (result.user.first_name and result.user.last_name
                    and result.user.id and result.user.email):
                # We need to update the user to get more info.
                result.user.update()
            if not result.user.email.endswith("@thenewmotion.com"):
                return current_app.login_manager.unauthorized()
            user = User.query.filter_by(email=result.user.email).first()
            if not user:
                user = User(result.user.email,
                            first_name=result.user.first_name,
                            last_name=result.user.last_name,
                            active=True)
                db.session.add(user)
                db.session.commit()
            login_user(user)
            flash("Logged in successfully.", category="success")
            # The rest happens inside the template.
            return redirect(request.args.get('next') or url_for('public.home'))

    # Don't forget to return the response.
    return response
Пример #25
0
    def __init__(self,
                 app,
                 datastore,
                 geoip=None,
                 celery=None,
                 message_cls=None,
                 authomatic=None,
                 views=None,
                 schemas=None,
                 add_api_routes=True):
        self.app = app
        self.datastore = datastore

        self.config = config = self.config_cls(app.config)
        self.request_utils = self.request_utils_cls(config, geoip)
        self.emails = self.emails_cls(config, message_cls, celery)
        self.authomatic = authomatic or Authomatic(
            config['AUTHOMATIC_CONFIG'], config['AUTHOMATIC_SECRET_KEY'])

        self.schemas = schemas or self.schemas
        self.views = views or self.views

        self.blueprint = Blueprint('userflow',
                                   'flask_userflow',
                                   url_prefix=config['URL_PREFIX'],
                                   subdomain=config['SUBDOMAIN'],
                                   template_folder='templates')
        if add_api_routes:
            _add_api_routes(config, self.views, self.blueprint)
        app.register_blueprint(self.blueprint)

        self._init_login_manager()
        self._init_principal()

        self.auth_token_serializer = self._create_serializer('auth_token')
        self.register_confirm_serializer = self._create_serializer(
            'register_confirm')
        self.restore_confirm_serializer = \
            self._create_serializer('restore_confirm')
Пример #26
0
async def redirect_login_record_session_google(request):
    success_cb, error_cb, adapter, first_response = oauth_init(request)

    if adapter is None:
        return first_response

    authomatic = Authomatic(config=CONFIG, secret=SECRET_SALT)

    result = authomatic.login(adapter, 'google',
                              # session=session['authomatic'],
                              session_saver=lambda: None)
    if result:
        if result.error:
            warning("Google login error", result.error)
            return response.redirect('%s?error=%s' % (error_cb, result.error))
        elif result.user:
            debug("Google login success", result.user)
            result.user.update()
            debug("Google login update success", result.user)
            userdict = result.user.to_dict()
            return upsert_login_redirect(request, "google:" + userdict['email'], result.user.to_dict(), success_cb, adapter)
    return adapter.response
Пример #27
0
def get_authomatic(request):
    settings = request.registry.settings
    # authomatic social auth
    authomatic_conf = {
        # callback http://yourapp.com/social_auth/twitter
        "twitter": {
            "class_": oauth1.Twitter,
            "consumer_key": settings.get("authomatic.pr.twitter.key", ""),
            "consumer_secret": settings.get("authomatic.pr.twitter.secret", ""),
        },
        # callback http://yourapp.com/social_auth/facebook
        "facebook": {
            "class_": oauth2.Facebook,
            "consumer_key": settings.get("authomatic.pr.facebook.app_id", ""),
            "consumer_secret": settings.get("authomatic.pr.facebook.secret", ""),
            "scope": ["email"],
        },
        # callback http://yourapp.com/social_auth/google
        "google": {
            "class_": oauth2.Google,
            "consumer_key": settings.get("authomatic.pr.google.key", ""),
            "consumer_secret": settings.get("authomatic.pr.google.secret", ""),
            "scope": ["profile", "email"],
        },
        "github": {
            "class_": oauth2.GitHub,
            "consumer_key": settings.get("authomatic.pr.github.key", ""),
            "consumer_secret": settings.get("authomatic.pr.github.secret", ""),
            "scope": ["repo", "public_repo", "user:email"],
            "access_headers": {"User-Agent": "AppEnlight"},
        },
        "bitbucket": {
            "class_": oauth1.Bitbucket,
            "consumer_key": settings.get("authomatic.pr.bitbucket.key", ""),
            "consumer_secret": settings.get("authomatic.pr.bitbucket.secret", ""),
        },
    }
    return Authomatic(config=authomatic_conf, secret=settings["authomatic.secret"])
Пример #28
0
def facebook_login_view(request):
    from pyramid.response import Response
    from authomatic.providers import oauth2
    from authomatic.adapters import WebObAdapter
    from authomatic import Authomatic

    CONFIG = {
        'fb': {
            'class_': oauth2.Facebook,
            'consumer_key': request.registry.settings['facebook.key'],
            'consumer_secret': request.registry.settings['facebook.secret'],
            'scope': ['public_profile', 'email']
        }
    }

    authomatic = Authomatic(config=CONFIG, secret='mysecret')
    response = Response()
    result = authomatic.login(WebObAdapter(request, response), 'fb')
    if result:
        if result.error:
            response.write(result.error.message)
        elif result.user:
            if result.user.credentials:
                url = 'https://graph.facebook.com/me?fields=id,name,email,first_name,last_name'
                fb_response = result.provider.access(url)
                if fb_response.status == 200:
                    data = fb_response.data
                    response.write('facebook id: {} <br />'.format(data['id']))
                    response.write('facebook name: {} <br />'.format(
                        data['name']))
                    response.write('facebook first name: {} <br />'.format(
                        data['first_name']))
                    response.write('facebook last name: {} <br />'.format(
                        data['last_name']))
                    response.write('facebook email: {} <br />'.format(
                        data['email']))
    return response
Пример #29
0
        'class_':
        oauth2.Google,
        'consumer_key':
        os.environ.get('GOOGLE_OAUTH_CLIENT_ID'),
        'consumer_secret':
        os.environ.get('GOOGLE_OAUTH_CONSUMER_SECRET'),
        'scope': [
            'https://www.googleapis.com/auth/drive',
            'https://www.googleapis.com/auth/userinfo.email'
        ],
        'offline':
        True,
    },
}

authomatic = Authomatic(authomatic_config, os.environ.get('AUTHOMATIC_SALT'))
"""
Logging
"""
LOG_FORMAT = '%(levelname)s:%(name)s:%(asctime)s: %(message)s'
"""
Utilities
"""


def get_secrets():
    """
    A method for accessing our secrets.
    """
    secrets_dict = {}
Пример #30
0
js = Bundle(
    #NOTE that these js files have to be loaded in a specific order.
    'js/vendor/*.js',
    'js/jquery/*.js',
    'js/foundation.min.js',
    'js/custom.js',
    filters='jsmin',
    output='gen/packed.js')
assets.register('js_all', js)

css = Bundle('css/*.css', filters='yui_css', output='gen/packed.css')
assets.register('css_all', css)

#########################################################################

authomatic = Authomatic(CONFIG, 'random secret string for session signing')


@app.route('/login/<provider_name>/', methods=['GET', 'POST'])
def login(provider_name):
    response = make_response()
    result = authomatic.login(WerkzeugAdapter(request, response),
                              provider_name)
    if result:
        print "found result"
        # procedure is complete
        if result.user:
            print "found result user"
            # ensure that the user is up to date....
            result.user.update()
            if (result.user.name and result.user.id):