def test_encode_auth_token(self): user = User( name='bombelek', password='******' ) db.session.add(user) db.session.commit() auth_token = user.encode_auth_token(user.id) self.assertTrue(isinstance(auth_token, bytes))
def test_login_correct_password(self): user = User( name='bombelek', password='******' ) db.session.add(user) db.session.commit() login_result = user.authenticate('bombelek', 'test') self.assertEqual(login_result, user)
def test_login_incorrect_password(self): user = User( name='bombelek', password='******' ) db.session.add(user) db.session.commit() login_result = user.authenticate('bombelek', 'bad_password') self.assertIsNone(login_result)
def test_decode_auth_token(self): user = User( name='bombelek', password='******' ) db.session.add(user) db.session.commit() auth_token = user.encode_auth_token(user.id) decoded_token_value = User.decode_auth_token(auth_token) self.assertTrue(decoded_token_value == user.id)
def get(self, measurement_id): auth_token = request.get_json().get('auth_token') try: auth_response = User.decode_auth_token(auth_token) except ValueError as e: response_object = { 'status': 'fail', 'message': str(e) } return make_response(jsonify(response_object)), 401 if measurement_id is None: # return a list of measurements measurements = Measurement.query.all() response_object = { 'status': 'success', 'data': measurements } return make_response(jsonpickle.encode(response_object)), 200 else: # expose a single measurement measurement = Measurement.query.filter_by(id=measurement_id)().first() response_object = { 'status': 'success', 'data': measurement } return make_response(jsonify(response_object)), 200
def post(self): # get the post data post_data = request.get_json() if post_data is None: response_object = {'status': 'fail', 'message': 'No data provided'} return make_response(jsonify(response_object)), 400 if 'name' not in post_data or 'password' not in post_data: response_object = { 'status': 'fail', 'message': 'Incorrect login or password' } return make_response(jsonify(response_object)), 401 user = User.authenticate(post_data['name'], post_data['password']) if user is None: response_object = { 'status': 'fail', 'message': 'Incorrect login or password' } return make_response(jsonify(response_object)), 401 try: auth_token = user.encode_auth_token(user.id) if auth_token: responseObject = { 'status': 'success', 'message': 'Successfully logged in.', 'auth_token': auth_token.decode() } return make_response(jsonify(responseObject)), 200 except Exception as e: print(e) response_object = {'status': 'fail', 'message': 'Try again'} return make_response(jsonify(response_object)), 500
def validate(self): if not super(LoginForm, self).validate(): return False self.user = User.authenticate(self.name.data, self.password.data) if not self.user: self.name.errors.append("Invalid email or password.") return False return True
def register_test_user_and_login(app): # Create user user = User("Name", "Password") db.session.add(user) db.session.commit() # registered user login response = app.client.post('api/v1/auth/login', data=json.dumps( dict(name='Name', password='******')), content_type='application/json') data = json.loads(response.data.decode()) return data['auth_token']
def post(self): auth_token = request.get_json().get('auth_token') try: auth_response = User.decode_auth_token(auth_token) except ValueError as e: response_object = { 'status': 'fail', 'message': str(e) } return make_response(jsonify(response_object)), 401 # get the post data post_data_json = request.get_json().get('data') if post_data_json == '' or post_data_json is None: response_object = { 'status': 'fail', 'message': 'No data provided to POST' } return make_response(jsonify(response_object)), 401 post_data = json.loads(post_data_json) # Create a dataframe from json data. df = pd.DataFrame.from_dict(post_data, orient='index') df.timestamp = pd.to_datetime(df.timestamp) # Add each row to database. for i, row in df.iterrows(): m = Measurement(row['timestamp'], row['device_name'], row['measurement_type'], row['measurement_value'], row['measurement_unit']) db.session.add(m) db.session.commit() response_object = { 'status': 'success', 'data': { 'added_items': len(df) } } return make_response(jsonify(response_object)), 200
def test_registered_user_login(self): """ Test for login of registered-user login """ with self.client: # Create user user = User("Name", "Password") db.session.add(user) db.session.commit() # registered user login response = self.client.post( '/api/v1/auth/login', data=json.dumps(dict( name='Name', password='******' )), content_type='application/json' ) data = json.loads(response.data.decode()) self.assertEqual(data['status'], 'success') self.assertEqual(data['message'], 'Successfully logged in.') self.assertTrue(data['auth_token']) self.assertEqual(response.content_type, 'application/json') self.assertEqual(response.status_code, 200)
from datetime import datetime from growing_commander_server import db from growing_commander_server.models import User, Measurement if __name__ == '__main__': db.create_all() user = User(name='admin', password='******', is_admin=True) db.session.add(user) db.session.commit() measurement_1 = Measurement(datetime.now(), "DHT11", "temperature", 25.7, "C") measurement_2 = Measurement(datetime.now(), "DHT11", "humidity", 29, "%") db.session.add(measurement_1) db.session.add(measurement_2) db.session.commit()