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 _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))