def models_fixture(app): """Fixture that contains the test data for models tests.""" from invenio_oauth2server.proxies import current_oauth2server with app.app_context(): # Register a test scope current_oauth2server.register_scope(Scope('test:scope1')) current_oauth2server.register_scope(Scope('test:scope2', internal=True)) datastore = app.extensions['security'].datastore with db.session.begin_nested(): app.test_user = datastore.create_user( email='*****@*****.**', password='******', ) app.resource_owner = datastore.create_user( email='*****@*****.**', password='******' ) app.consumer = datastore.create_user( email='*****@*****.**', password='******' ) # create resource_owner -> client_1 app.u1c1 = Client(client_id='client_test_u1c1', client_secret='client_test_u1c1', name='client_test_u1c1', description='', is_confidential=False, user=app.resource_owner, _redirect_uris='', _default_scopes="" ) # create resource_owner -> client_1 / resource_owner -> token_1 app.u1c1u1t1 = Token(client=app.u1c1, user=app.resource_owner, token_type='u', access_token='dev_access_1', refresh_token='dev_refresh_1', expires=None, is_personal=False, is_internal=False, _scopes='', ) # create consumer -> client_1 / resource_owner -> token_2 app.u1c1u2t2 = Token(client=app.u1c1, user=app.consumer, token_type='u', access_token='dev_access_2', refresh_token='dev_refresh_2', expires=None, is_personal=False, is_internal=False, _scopes='', ) db.session.add(app.u1c1) db.session.add(app.u1c1u1t1) db.session.add(app.u1c1u2t2) return app
def provider_fixture(app): """Fixture that contains test data for provider tests.""" from invenio_oauth2server.proxies import current_oauth2server # Mock the oauth client calls to prevent them from going online. oauth_client = create_oauth_client(app, 'oauth2test') oauth_client.http_request = MagicMock( side_effect=patch_request(app) ) datastore = app.extensions['security'].datastore with app.test_request_context(): with db.session.begin_nested(): current_oauth2server.register_scope(Scope('test:scope')) user1 = datastore.create_user( email='*****@*****.**', password='******', active=True, ) datastore.create_user( email='*****@*****.**', password='******', active=True ) c1 = Client(client_id='dev', client_secret='dev', name='dev', description='', is_confidential=False, user=user1, _redirect_uris=url_for( 'oauth2test.authorized', _external=True ), _default_scopes='test:scope' ) c2 = Client(client_id='confidential', client_secret='confidential', name='confidential', description='', is_confidential=True, user=user1, _redirect_uris=url_for( 'oauth2test.authorized', _external=True ), _default_scopes='test:scope' ) db.session.add(c1) db.session.add(c2) personal_token = Token.create_personal('test-personal', user1.id, scopes=[], is_internal=True) db.session.commit() app.user1_id = user1.id app.personal_token = personal_token.access_token return app
def settings_fixture(app): """Fixture for testing settings views.""" from invenio_oauth2server.proxies import current_oauth2server with app.app_context(): with db.session.begin_nested(): datastore = app.extensions['security'].datastore datastore.create_user(email='*****@*****.**', password='******') db.session.commit() current_oauth2server.register_scope(Scope('test:scope')) current_oauth2server.register_scope(Scope('test:scope2')) return app
def provider_fixture(app): """Fixture that contains test data for provider tests.""" from invenio_oauth2server.proxies import current_oauth2server # Mock the oauth client calls to prevent them from going online. oauth_client = create_oauth_client(app, 'oauth2test') oauth_client.http_request = MagicMock( side_effect=patch_request(app) ) datastore = app.extensions['security'].datastore with app.test_request_context(): with db.session.begin_nested(): current_oauth2server.register_scope(Scope('test:scope')) app.user1 = datastore.create_user( email='*****@*****.**', password='******', active=True, ) app.user2 = datastore.create_user( email='*****@*****.**', password='******', active=True ) app.c1 = Client(client_id='dev', client_secret='dev', name='dev', description='', is_confidential=False, user=app.user1, _redirect_uris=url_for( 'oauth2test.authorized', _external=True ), _default_scopes='test:scope' ) app.c2 = Client(client_id='confidential', client_secret='confidential', name='confidential', description='', is_confidential=True, user=app.user1, _redirect_uris=url_for( 'oauth2test.authorized', _external=True ), _default_scopes='test:scope' ) db.session.add(app.c1) db.session.add(app.c2) app.personal_token = Token.create_personal('test-personal', app.user1.id, scopes=[], is_internal=True) return app
def settings_fixture(app): """Fixture for testing settings views.""" from invenio_oauth2server.proxies import current_oauth2server with app.app_context(): with db.session.begin_nested(): datastore = app.extensions['security'].datastore datastore.create_user(email='*****@*****.**', password='******') db.session.commit() current_oauth2server.register_scope(Scope('test:scope')) current_oauth2server.register_scope(Scope('test:scope2')) return app
def resource_fixture(app, api_app): """Fixture that contains the test data for models tests.""" from flask import g, request from invenio_oauth2server.proxies import current_oauth2server # Setup API resources class Test0Resource(MethodView): def get(self): app.identity = g.identity return "success", 200 class Test1Resource(MethodView): # NOTE: Method decorators are applied in reverse order decorators = [ require_oauth_scopes('test:testscope'), require_api_auth(), ] def get(self): assert request.oauth.access_token app.identity = g.identity return "success", 200 def post(self): assert request.oauth.access_token return "success", 200 class Test2Resource(MethodView): @require_api_auth() @require_oauth_scopes('test:testscope') def get(self): assert request.oauth.access_token return "success", 200 @require_api_auth() @require_oauth_scopes('test:testscope') def post(self): assert request.oauth.access_token return "success", 200 class Test3Resource(MethodView): @require_api_auth() def post(self): return "success", 200 class Test4Resource(MethodView): @require_api_auth(allow_anonymous=True) def get(self): from flask_login import current_user return str(current_user.get_id()), 200 def post(self): from flask_login import current_user return str(current_user.get_id()), 200 # Register API resources api_app.add_url_rule( '/test0/identitytestcase/', view_func=Test0Resource.as_view('test0resource'), ) api_app.add_url_rule( '/test1/decoratorstestcase/', view_func=Test1Resource.as_view('test1resource'), ) api_app.add_url_rule( '/test2/decoratorstestcase/', view_func=Test2Resource.as_view('test2resource'), ) # This one is a UI resource using login_required api_app.add_url_rule( '/test3/loginrequiredstestcase/', view_func=Test3Resource.as_view('test3resource'), ) api_app.add_url_rule( '/test4/allowanonymous/', view_func=Test4Resource.as_view('test4resource'), ) datastore = app.extensions['security'].datastore with app.app_context(): # Register a test scope current_oauth2server.register_scope( Scope('test:testscope', group='Test', help_text='Test scope')) with db.session.begin_nested(): app.user = datastore.create_user( email='*****@*****.**', password='******', active=True, ) # Create tokens app.user_id = app.user.id app.token = Token.create_personal('test-', app.user.id, scopes=['test:testscope'], is_internal=True).access_token app.token_noscope = Token.create_personal( 'test-', app.user.id, scopes=[], is_internal=True).access_token db.session.commit() with api_app.test_request_context(): app.url_for_test3resource = url_for('test3resource') with api_app.test_request_context(): app.url_for_test0resource = url_for('test0resource') app.url_for_test1resource = url_for('test1resource') app.url_for_test2resource = url_for('test2resource') app.url_for_test4resource = url_for('test4resource') app.url_for_test0resource_token = url_for('test0resource', access_token=app.token) app.url_for_test1resource_token = url_for('test1resource', access_token=app.token) app.url_for_test2resource_token = url_for('test2resource', access_token=app.token) app.url_for_test1resource_token_noscope = url_for( 'test1resource', access_token=app.token_noscope) app.url_for_test2resource_token_noscope = url_for( 'test2resource', access_token=app.token_noscope) app.url_for_test4resource_token = url_for('test4resource', access_token=app.token) return app
def provider_fixture(app): """Fixture that contains test data for provider tests.""" from invenio_oauth2server.proxies import current_oauth2server # Mock the oauth client calls to prevent them from going online. oauth_client = create_oauth_client(app, 'oauth2test') oauth_client.http_request = MagicMock(side_effect=patch_request(app)) datastore = app.extensions['security'].datastore with app.test_request_context(): with db.session.begin_nested(): current_oauth2server.register_scope(Scope('test:scope')) user1 = datastore.create_user( email='*****@*****.**', password='******', active=True, ) datastore.create_user(email='*****@*****.**', password='******', active=True) user3 = datastore.create_user(email='*****@*****.**', password='******', active=False) c1 = Client(client_id='dev', client_secret='dev', name='dev', description='', is_confidential=False, user=user1, _redirect_uris=url_for('oauth2test.authorized', _external=True), _default_scopes='test:scope') c2 = Client(client_id='confidential', client_secret='confidential', name='confidential', description='', is_confidential=True, user=user1, _redirect_uris=url_for('oauth2test.authorized', _external=True), _default_scopes='test:scope') # Same as 'c2' but user belonging to a user that's inactive c3 = Client(client_id='confidential-user-inactive', client_secret='confidential-user-inactive', name='confidential-user-inactive', description='', is_confidential=True, user=user3, _redirect_uris=url_for('oauth2test.authorized', _external=True), _default_scopes='test:scope') c4 = Client(client_id='confidential-email', client_secret='confidential-email', name='confidential-email', description='', is_confidential=True, user=user1, _redirect_uris=url_for('oauth2test.authorized', _external=True), _default_scopes='email') db.session.add(c1) db.session.add(c2) db.session.add(c3) db.session.add(c4) personal_token = Token.create_personal('test-personal', user1.id, scopes=[], is_internal=True) personal_token3 = Token.create_personal('test-personal', user3.id, scopes=[], is_internal=True) db.session.commit() app.user1_id = user1.id app.user3_id = user3.id app.personal_token = personal_token.access_token app.personal_token3 = personal_token3.access_token return app
def test_registering_invalid_scope(models_fixture): app = models_fixture with app.app_context(): with pytest.raises(TypeError): current_oauth2server.register_scope('test:scope')
def test_registering_invalid_scope(models_fixture): app = models_fixture with app.app_context(): with pytest.raises(TypeError): current_oauth2server.register_scope('test:scope')
def resource_fixture(app): """Fixture that contains the test data for models tests.""" from flask import request from invenio_oauth2server.proxies import current_oauth2server # Setup API resources class Test1Resource(MethodView): # NOTE: Method decorators are applied in reverse order decorators = [ require_oauth_scopes('test:testscope'), require_api_auth(), ] def get(self): assert request.oauth.access_token return "success", 200 def post(self): assert request.oauth.access_token return "success", 200 class Test2Resource(MethodView): @require_api_auth() @require_oauth_scopes('test:testscope') def get(self): assert request.oauth.access_token return "success", 200 @require_api_auth() @require_oauth_scopes('test:testscope') def post(self): assert request.oauth.access_token return "success", 200 # Register API resources app.add_url_rule( '/api/test1/decoratorstestcase/', view_func=Test1Resource.as_view('test1resource'), ) app.add_url_rule( '/api/test2/decoratorstestcase/', view_func=Test2Resource.as_view('test2resource'), ) datastore = app.extensions['security'].datastore with app.app_context(): # Register a test scope current_oauth2server.register_scope(Scope( 'test:testscope', group='Test', help_text='Test scope' )) with db.session.begin_nested(): app.user = datastore.create_user( email='*****@*****.**', password='******', active=True, ) # Create tokens app.token = Token.create_personal( 'test-', app.user.id, scopes=['test:testscope'], is_internal=True) app.token_noscope = Token.create_personal( 'test-', app.user.id, scopes=[], is_internal=True) with app.test_request_context(): app.url_for_test1resource = url_for('test1resource') app.url_for_test2resource = url_for('test2resource') app.url_for_test1resource_token = url_for( 'test1resource', access_token=app.token.access_token ) app.url_for_test2resource_token = url_for( 'test2resource', access_token=app.token.access_token ) app.url_for_test1resource_token_noscope = url_for( 'test1resource', access_token=app.token_noscope.access_token ) app.url_for_test2resource_token_noscope = url_for( 'test2resource', access_token=app.token_noscope.access_token ) return app