def before_request():
    g.log = dict()
    g.log['out'] = list()
    g.log['request'] = log_request(request)

    g.endpoint = request.endpoint
    if request.blueprint:
        g.endpoint = g.endpoint[len(request.blueprint):].lstrip('.')

    reseller_info = get_reseller_info()
    g.reseller_name = reseller_info.name
    g.company_name = 'N/A'

    if not reseller_info.name:
        allow_public_endpoints_only()
        return

    if not check_oauth_signature(request):
        abort(401)

    g.auth = reseller_info.auth

    g.reseller = Reseller(reseller_info.name, reseller_info.id, None)
    g.reseller.refresh()

    if not g.reseller.token and not reseller_info.is_new:
        abort(403)
 def test_make_fallball_user(self, get_name_for_tenant_mock, flask_g_mock, OA_mock):
     OA_mock.get_resource.return_value = self.user_service
     flask_g_mock.reseller = Reseller('fake_reseller')
     get_name_for_tenant_mock.return_value = 'fake_client'
     user = make_fallball_user('123-123-123')
     assert user.client.name == 'fake_client'
     assert user.client.reseller.name == 'fake_reseller'
     assert user.user_id == '3c9ed599-cd79-4222-beb0-be83f9dc8078'
 def test_admin_login(self, get_name_for_fb_client_mock, flask_g_mock,
                      OA_mock, FbUser_mock):
     get_name_for_fb_client_mock.return_value = 'fake_client'
     flask_g_mock.reseller = Reseller('fake_reseller')
     fb_user_mock = FbUser_mock.return_value
     fb_user_mock.login_link.return_value = 'login_link_with_token'
     res = self.client.get('/connector/v1/tenant/123/adminlogin',
                           headers=self.headers)
     assert res.status_code == 200
     assert b'token' in res.data
 def test_make_fallball_user(self):
     with patch('connector.resources.user.OA') as fake_oa, \
             patch('connector.resources.user.g') as fake_g, \
             patch('connector.resources.user.get_name_for_tenant') as fake_name:
         fake_oa.get_resource.return_value = self.user_service
         fake_g.reseller = Reseller('fake_reseller')
         fake_name.return_value = 'fake_client'
         user = make_fallball_user('123-123-123')
         assert user.client.name == 'fake_client'
         assert user.client.reseller.name == 'fake_reseller'
         assert user.email == '*****@*****.**'
 def test_admin_login(self):
     with patch('connector.resources.tenant.get_name_for_tenant') as fake_name, \
             patch('connector.resources.tenant.g') as fake_g, \
             patch('connector.resources.tenant.OA'), \
             patch('connector.resources.tenant.FbUser') as fake_user:
         fake_name.return_value = 'fake_client'
         fake_g.reseller = Reseller('fake_reseller')
         user_instance = fake_user.return_value
         user_instance.login_link.return_value = 'login_link_with_token'
         res = self.client.get('/v1/tenant/123/adminlogin',
                               headers=self.headers)
         assert res.status_code == 200
         assert b'token' in res.data
 def test_admin_login_no_user_in_oa(self, get_name_for_fb_client_mock,
                                    flask_g_mock, OA_mock, FbUser_mock):
     get_name_for_fb_client_mock.return_value = 'fake_client'
     flask_g_mock.reseller = Reseller('fake_reseller')
     fake_oa_response = MagicMock()
     fake_oa_response.status_code = 404
     fake_oa_response.text = 'Get user from OA failed'
     OA_mock.get_resource.side_effect = OACommunicationException(
         fake_oa_response)
     fb_user_mock = FbUser_mock.return_value
     fb_user_mock.login_link.return_value = 'login_link_for_manual_login'
     res = self.client.get('/connector/v1/tenant/123/adminlogin',
                           headers=self.headers)
     assert res.status_code == 200
def setup_fb_client():
    patcher = patch('connector.v1.resources.tenant.Client')
    FbClient_mock = patcher.start()
    fb_client_mock = FbClient_mock.return_value
    fb_client_mock.storage = {'usage': 1}
    fb_client_mock.environment = 'TEST'
    fb_client_mock.country = 'US'
    fb_client_mock.name = 'fake_company_name'
    fb_client_mock.users_by_type = {'PLATINUM': 1, 'BRONZE': 2}
    fb_client_mock.reseller = Reseller('fake_reseller')

    yield fb_client_mock

    patcher.stop()
 def test_admin_login_no_user_in_fallball(self, get_name_for_fb_client_mock,
                                          flask_g_mock, OA_mock,
                                          FbUser_mock):
     get_name_for_fb_client_mock.return_value = 'fake_client'
     flask_g_mock.reseller = Reseller('fake_reseller')
     fake_fallball_response = MagicMock()
     fake_fallball_response.status_code = 404
     fb_user_mock = FbUser_mock.return_value
     fb_user_mock.login_link.side_effect = [
         OACommunicationException(fake_fallball_response), DEFAULT
     ]
     fb_user_mock.login_link.return_value = 'login_link_for_manual_login'
     res = self.client.get('/connector/v1/tenant/123/adminlogin',
                           headers=self.headers)
     assert res.status_code == 200
 def test_new_tenant_no_diskspace(self):
     with patch('connector.resources.tenant.Client') as fake_client, \
             patch('connector.resources.tenant.OA') as fake_oa:
         instance = fake_client.return_value
         instance.name = 'fake_company_name'
         instance.reseller = Reseller('fake_reseller')
         fake_oa.get_resource.side_effect = [{
             'companyName': 'fake_company'
         }, {
             'subscriptionId': 555
         }]
         res = self.client.post('/v1/tenant',
                                headers=self.headers,
                                data=self.diskless_tenant)
         instance.create.assert_called()
     assert res.status_code == 201
 def test_admin_login_no_user_in_oa(self):
     with patch('connector.resources.tenant.get_name_for_tenant') as fake_name, \
             patch('connector.resources.tenant.g') as fake_g, \
             patch('connector.resources.tenant.OA') as fake_oa, \
             patch('connector.resources.tenant.FbUser') as fake_user:
         fake_name.return_value = 'fake_client'
         fake_g.reseller = Reseller('fake_reseller')
         fake_oa_response = MagicMock()
         fake_oa_response.status_code = 404
         fake_oa_response.text = 'Get user from OA failed'
         fake_oa.get_resource.side_effect = OACommunicationException(
             fake_oa_response)
         user_instance = fake_user.return_value
         user_instance.login_link.return_value = 'login_link_for_manual_login'
         res = self.client.get('/v1/tenant/123/adminlogin',
                               headers=self.headers)
         assert res.status_code == 200
    def test_fb_client_on_users_change(self, get_name_for_fb_client_mock,
                                       flask_g_mock, OA_mock, FbUser_mock):
        with setup_fb_client() as fb_client_mock:
            get_name_for_fb_client_mock.return_value = 'fake_client'
            flask_g_mock.reseller = Reseller('fake_reseller')
            fb_client_mock.users_by_type = {'BRILLIANT_USERS': 1}
            tenant = {
                config.devices_resource: {
                    'usage': 0
                },
                'BRILLIANT_USERS': {
                    'usage': 1
                },
                config.diskspace_resource: {
                    'usage': 1
                },
                'ENVIRONMENT': {
                    'usage': 1
                },
                'COUNTRY': {
                    'usage': 0
                }
            }
            OA_mock.get_user_resources.return_value = ['BRILLIANT_USERS']
            OA_mock.get_counters.return_value = [
                'DEVICES', 'DISKSPACE', 'USERS'
            ]
            self.client.post('/connector/v1/tenant/123/onUsersChange',
                             headers=self.headers,
                             data='{}')
            OA_mock.send_request.assert_called_with(
                'put', 'aps/2/application/tenant/123', tenant)

            fb_client_mock.users_by_type['SILVER_USERS'] = 2
            OA_mock.get_user_resources.return_value = [
                'BRILLIANT_USERS', 'SILVER_USERS'
            ]

            tenant['SILVER_USERS'] = {'usage': 2}

            self.client.post('/connector/v1/tenant/123/onUsersChange',
                             headers=self.headers,
                             data='{}')
            OA_mock.send_request.assert_called_with(
                'put', 'aps/2/application/tenant/123', tenant)
def get_reseller_name(reseller_id):
    res = [r for r in Reseller.all() if r.rid == reseller_id]
    return None if not res else res[0].name