Beispiel #1
0
def _configure_provider(app, blueprint, oauth, provider_id, provider_config):
    """Configures the service provider and its connect and login routes. The 
    remote app is then registered with the main application and is accessible 
    via:
    
        from flask import current_app
        current_app.social.<provider_id>
    """
    oauth_config = provider_config['oauth']
    
    try:
        oauth_config['consumer_key']
        oauth_config['consumer_secret']
    except KeyError:
        raise Exception('consumer_key and/or consumer_secret not found for '
                        'provider %s' % provider_config['display_name'])
    
    service_provider = oauth.remote_app(provider_id, **oauth_config)
    
    connect_handler = get_class_by_name(
        provider_config['connect_handler'])(**oauth_config)
        
    login_handler = get_class_by_name(
        provider_config['login_handler'])(**oauth_config)
    
    factory = get_class_by_name(
        provider_config['connection_factory'])(
            login_handler=login_handler, 
            connect_handler=connect_handler, 
            **oauth_config)
        
    setattr(factory, 'remote_app', service_provider)
    setattr(app.social, provider_id, factory)
    
    @service_provider.tokengetter
    def get_token():
        # No need to return a token since the remote app from the oauth 
        # extension is kind of bogus. Using API wrappers/bindings for specific 
        # services is preferred and accessed through the connection factories
        return None    
    
    @blueprint.route('/connect/%s' % provider_id, 
                     methods=['GET'], 
                     endpoint='connect_%s_callback' % provider_id)
    @login_required
    @service_provider.authorized_handler
    def connect_callback(response):
        return connect_handler(response)
    
    @blueprint.route('/login/%s' % provider_id, 
                     methods=['GET'], 
                     endpoint='login_%s_callback' % provider_id)
    @service_provider.authorized_handler
    def login_callback(response):
        return login_handler(response)
Beispiel #2
0
def _configure_provider(app, blueprint, oauth, provider_id, provider_config):
    """Configures the service provider and its connect and login routes. The 
    remote app is then registered with the main application and is accessible 
    via:
    
        from flask import current_app
        current_app.social.<provider_id>
    """
    oauth_config = provider_config['oauth']

    try:
        oauth_config['consumer_key']
        oauth_config['consumer_secret']
    except KeyError:
        raise Exception('consumer_key and/or consumer_secret not found for '
                        'provider %s' % provider_config['display_name'])

    service_provider = oauth.remote_app(provider_id, **oauth_config)

    connect_handler = get_class_by_name(
        provider_config['connect_handler'])(**oauth_config)

    login_handler = get_class_by_name(
        provider_config['login_handler'])(**oauth_config)

    factory = get_class_by_name(provider_config['connection_factory'])(
        login_handler=login_handler,
        connect_handler=connect_handler,
        **oauth_config)

    setattr(factory, 'remote_app', service_provider)
    setattr(app.social, provider_id, factory)

    @service_provider.tokengetter
    def get_token():
        # No need to return a token since the remote app from the oauth
        # extension is kind of bogus. Using API wrappers/bindings for specific
        # services is preferred and accessed through the connection factories
        return None

    @blueprint.route('/connect/%s' % provider_id,
                     methods=['GET'],
                     endpoint='connect_%s_callback' % provider_id)
    @login_required
    @service_provider.authorized_handler
    def connect_callback(response):
        return connect_handler(response)

    @blueprint.route('/login/%s' % provider_id,
                     methods=['GET'],
                     endpoint='login_%s_callback' % provider_id)
    @service_provider.authorized_handler
    def login_callback(response):
        return login_handler(response)
def get_class_from_config(key, config):
    """Get a reference to a class by its name from the config dictionary
    """
    try:
        return classutils.get_class_by_name(config[key])
    except Exception, e:
        raise AttributeError("Could not get class '%s' for Auth setting " "'%s' >> %s" % (config[key], key, e))
Beispiel #4
0
def get_class_from_config(key, config):
    """Get a reference to a class by its name from the config dictionary
    """
    try:
        return classutils.get_class_by_name(config[key])
    except Exception, e:
        raise AttributeError("Could not get class '%s' for Auth setting "
                             "'%s' >> %s" % (config[key], key, e))