Ejemplo n.º 1
0
def get_user(user_id):
    if request.method == "GET":
        # get user
        user = UserService.get_user(user_id)
        return make_response(jsonify(user.serialize), 200)
        # update user
    if request.method == 'PUT':
        req = request.get_json()
        user = UserService.change_my_name(req, user_id)
        return user.serialize
        # delete user
    if request.method == 'DELETE':
        req = request.get_json()
        user = UserService.delete_user(req['userId'])
        return make_response(f'DELETED USER: {user}:', 200)
Ejemplo n.º 2
0
def update_user_and_refesh_token(db_session, email):
    user_service = UserService(db_session)
    user = user_service.get_user(email)
    user_service.update_user(user, request.json)
    user_service.set_token(user, AuthenticationService.generate_token())
    return user
Ejemplo n.º 3
0
class APICreateUser(unittest.TestCase):
    def setUp(self):
        os.environ['ONE_AUTH_ENV'] = 'test'
        APP.config['TESTING'] = True
        self.app = APP.test_client()

        self.db_connection = get_db_session(APP.db_engine)
        self.user_service = UserService(self.db_connection)
        self.validation_code_service = ValidationCodeService(
            self.db_connection)
        self.create_user("*****@*****.**")

    def tearDown(self):
        self.delete_user('*****@*****.**')
        self.delete_user('*****@*****.**')

    def create_user(self, email):
        return self.app.post('/one_auth/api/user',
                             data='{"email": "' + email + '"}',
                             content_type='application/json')

    def test_should_log_out(self):
        some_email = '*****@*****.**'
        # self.user_service.delete_user(some_email)
        self.app.post('/one_auth/api/user',
                      data='{"email": "*****@*****.**"}',
                      content_type='application/json')
        self.user_service = UserService(self.db_connection)
        #
        update_data = '{"email": "*****@*****.**", "validation_code": "%s", "password": "******"}' % \
                      111111

        self.app.put('/one_auth/api/user',
                     data=update_data,
                     content_type='application/json')

        response = self.app.get('/one_auth/api/access_tokens',
                                content_type='application/json',
                                headers={
                                    'Authorization':
                                    'Basic eHh4QHRlc3QuY29tOnBhc3N3b3JkMQ=='
                                })

        result_data = json.loads(response.data.decode('utf8'))
        self.assertEqual(200, response.status_code)
        self.assertIsNotNone(result_data['access_token'])
        access_token = some_email + ':' + result_data['access_token']
        auth = base64.b64encode(access_token.encode('utf-8')).decode('utf-8')

        basic_auth = 'Basic {}'.format(auth)
        response = self.app.delete('/one_auth/api/access_tokens',
                                   headers={'Authorization': basic_auth})

        self.assertEquals(200, response.status_code)
        user = self.user_service.get_user(some_email)
        self.assertIsNone(user.access_token)

        response = self.app.get('/one_auth/api/validations',
                                headers={'Authorization': basic_auth})

        self.assertEquals(401, response.status_code)

        response = self.app.get('/one_auth/api/access_tokens',
                                content_type='application/json',
                                headers={
                                    'Authorization':
                                    'Basic eHh4QHRlc3QuY29tOnBhc3N3b3JkMQ=='
                                })
        self.assertEquals(200, response.status_code)

    def delete_user(self, email):
        UserService(get_db_session(APP.db_engine)).delete_user(email)
Ejemplo n.º 4
0
def device_repo_test():

    user_service = UserService()

    print "\n\n\n=======DEVICE REPO TEST======="
    print "\ncreating a test user"
    user, msg = user_service.add_user("muhaftab", "1234", "Muhammad", "Aftab", "*****@*****.**")
    print msg

    print "adding a new device for user:  %s" % user.username
    device1 = device_repo.add_device(user.username, "TableLamp")
    print "returned device is ", device1
    device2 = device_repo.add_device(user.username, "Kettle")
    print "returned device is ", device2

    print "\nfetching the new device from db"
    device = device_repo.find_device(user.username, device1.device_id)[0]
    print device

    print "\nfetching the user to see if device is added for user"
    user = user_service.get_user(user.username)
    print [d.serialize() for d in user.devices]

    print "\nadding some consumption data for the device"
    c1 = DeviceConsumption(10.0, 0.12, False, datetime.datetime.now())
    c2 = DeviceConsumption(11.0, 2.12, True, datetime.datetime.now())
    device_repo.add_device_consumption(device, c1)
    device_repo.add_device_consumption(device, c2)

    print "\ntesting if consumption data is added to device"
    print [c.serialize() for c in device.consumption]

    print "\nModifying device"
    new_device = Device("CoffeeMaker")
    updated_device = device_repo.update_device(user.username, device.device_id, new_device)
    print updated_device

    print "\ntesting if consumption data exists for updated device"
    print [c.serialize() for c in updated_device.consumption]

    print "\nadding device model to the device"
    json_params = {"p_peak": 80.8, "p_stable": 50.0, "lambda": 0.31}
    m1 = DeviceModel("ExponentialDecay", json_params)
    device_repo.add_device_model(updated_device, m1)
    print updated_device.serialize()

    print "\nfetching the user again to see if updated device is shown"
    user = user_service.get_user(user.username)
    print user.serialize()

    print "\nfetching list of devices for the user"
    print [device.serialize() for device in user_service.get_devices(user.username)]

    print "\ndeleting device"
    status = device_repo.delete_device(user.username, device.device_id)
    print status

    print "\nfetching the user agian to see if device is indeed deleted"
    user = user_service.get_user(user.username)
    print [d for d in user.devices]

    print "\nfinally deleting user"
    status = user_service.delete_user(user.username)
    print status
Ejemplo n.º 5
0
class OneAuthTests(unittest.TestCase):
    def setUp(self):
        os.environ['ONE_AUTH_ENV'] = 'test'
        APP.config['TESTING'] = True
        self.app = APP.test_client()
        self.mail = Mail(APP)
        self.db_connection = get_db_session(APP.db_engine)
        self.user_service = UserService(self.db_connection)
        self.validation_code_service = ValidationCodeService(self.db_connection)

    def test_should_return_415_while_not_passing_json(self):
        data = '{"email": "*****@*****.**"}'
        response = self.app.post('/one_auth/api/user', data=data, content_type='application/xml')
        self.assertEquals(415, response.status_code)

    def test_should_return_400_if_the_any_mandatory_field_is_not_exist_in_request_when_update_the_user_password(self):
        self.user_service.delete_user('*****@*****.**')
        with patch.object(one_auth.ValidationCodeService, 'generate_validation_code', lambda: '123456'):
            self.app.post('/one_auth/api/user', data='{"email": "*****@*****.**"}', content_type='application/json')

        update_data = '{"email": "*****@*****.**", "validation_code": "123456"}'
        response = self.app.put('/one_auth/api/user', data=update_data, content_type='application/json')
        self.assertEquals(400, response.status_code)

        update_data = '{"email": "*****@*****.**", "password": "******"}'
        response = self.app.put('/one_auth/api/user', data=update_data, content_type='application/json')
        self.assertEquals(400, response.status_code)

    def test_update_user_password(self):
        self.user_service.delete_user('*****@*****.**')
        with patch.object(one_auth.ValidationCodeService, 'generate_validation_code', lambda: '123456'):
            self.app.post('/one_auth/api/user', data='{"email": "*****@*****.**"}', content_type='application/json')

        update_data = '{"email": "*****@*****.**", "validation_code": "123456", "password": "******"}'

        response = self.app.put('/one_auth/api/user', data=update_data, content_type='application/json')

        self.db_connection.commit()
        created_user = self.user_service.get_user('*****@*****.**')
        response_json = json.loads(response.data.decode('utf8'))
        self.assertEquals(200, response.status_code)
        self.assertEquals('active', created_user.status)
        self.assertIsNotNone(response_json['access_token'])
        self.assertIsNotNone(created_user.password)

    def test_update_user_password_when_password_in_wrong_format(self):
        self.user_service.delete_user('*****@*****.**')
        with patch.object(one_auth.ValidationCodeService, 'generate_validation_code', lambda: '123456'):
            self.app.post('/one_auth/api/user', data='{"email": "*****@*****.**"}', content_type='application/json')

        update_data = '{"email": "*****@*****.**", "validation_code": "123456", "password": "******"}'

        response = self.app.put('/one_auth/api/user', data=update_data, content_type='application/json')

        # self.assertEquals(400, response.status_code)

    def test_create_and_get_user(self):
        self.user_service.delete_user('*****@*****.**')
        user = self.user_service.create_user('*****@*****.**')

        assert '*****@*****.**' == user.email
        self.user_service.delete_user('*****@*****.**')

    def test_should_return_access_token_when_login_with_correct_email_and_password(self):
        some_email = '*****@*****.**'
        self.user_service.delete_user(some_email)
        with patch.object(one_auth.ValidationCodeService, 'generate_validation_code', lambda : '123456'):
            self.app.post('/one_auth/api/user', data='{"email": "*****@*****.**"}', content_type='application/json')

        update_data = '{"email": "*****@*****.**", "validation_code": "123456", "password": "******"}'

        response = self.app.put('/one_auth/api/user', data=update_data, content_type='application/json')

        response = self.app.get('/one_auth/api/access_tokens', content_type='application/json',

                                headers={'Authorization': 'Basic eHh4QHRlc3QuY29tOnBhc3N3b3JkMQ=='})

        result_data = json.loads(response.data.decode('utf8'))

        self.assertEquals(200, response.status_code)
        self.assertIsNotNone(result_data['access_token'])

        self.user_service.delete_user(some_email)

    def test_should_return_401_when_login_with_incorrect_email_and_password(self):
        some_email = '*****@*****.**'
        self.user_service.delete_user(some_email)
        with patch.object(one_auth.ValidationCodeService, 'generate_validation_code', lambda : '123456'):
            self.app.post('/one_auth/api/user', data='{"email": "*****@*****.**"}', content_type='application/json')

        update_data = '{"email": "*****@*****.**", "validation_code": "123456", "password": "******"}'

        self.app.put('/one_auth/api/user', data=update_data, content_type='application/json')
        response = self.app.get('/one_auth/api/access_tokens', content_type='application/json',
                                headers={'Authorization': 'Basic OmFhYWE='})

        self.assertEquals(401, response.status_code)
        self.user_service.delete_user(some_email)

    def test_should_return_200_when_access_token_validation_success(self):
        access_token = create_user_and_get_token('*****@*****.**')
        authorization = basic_auth('*****@*****.**', access_token)

        response = self.app.get('/one_auth/api/validations', headers={
            'Authorization': authorization
        })

        self.assertEquals(200, response.status_code)

        result_data = json.loads(response.data.decode('utf8'))
        self.assertEquals('*****@*****.**', result_data['email'])
        self.assertEquals('', result_data['first_name'])
        self.assertEquals('', result_data['last_name'])
        self.assertEquals('', result_data['country'])
        self.assertEquals('', result_data['department'])
        self.assertEquals('', result_data['avatar'])

    @patch('one_auth.UserService')
    def test_should_return_401_when_access_token_validation_fail(self, mock_user_service):
        mock_user_service.encode_access_token_for = MagicMock(return_value='invalid_token')

        response = self.app.get('/one_auth/api/validations', headers={
            'Authorization': 'Basic eHh4QHRlc3QuY29tOnRlc3RfdG9rZW4='
        })

        self.assertEquals(401, response.status_code)