def jwt_login(request): """ Login using a JWT token, this must be an encrypted JWT. :param request: The flask request """ # clear the session entry in the database session_storage.clear() # also clear the secure cookie data session.clear() if request.args.get('token') is None: raise NoTokenException("Please provide a token") token = _jwt_decrypt(request) # once we've decrypted the token correct # check we have the required user data _check_user_data(token) # get the hashed user id for eq user_id = UserIDGenerator.generate_id(token) user_ik = UserIDGenerator.generate_ik(token) # store the user id in the session session_storage.store_user_id(user_id) # store the user ik in the cookie session_storage.store_user_ik(user_ik) # store the meta data metadata = parse_metadata(token) logger.bind(tx_id=metadata["tx_id"]) questionnaire_store = get_questionnaire_store(user_id, user_ik) questionnaire_store.metadata = metadata questionnaire_store.add_or_update() logger.info("user authenticated")
def jwt_login(self, request): """ Login using a JWT token, this must be an encrypted JWT. :param request: The flask request """ # clear the session entry in the database session_manager.clear() # also clear the secure cookie data session.clear() if request.args.get(EQ_URL_QUERY_STRING_JWT_FIELD_NAME) is None: raise NoTokenException("Please provide a token") token = self._jwt_decrypt(request) # once we've decrypted the token correct # check we have the required user data self._check_user_data(token) # get the hashed user id for eq user_id = UserIDGenerator.generate_id(token) user_ik = UserIDGenerator.generate_ik(token) # store the user id in the session session_manager.store_user_id(user_id) # store the user ik in the cookie session_manager.store_user_ik(user_ik) # store the meta data metadata = parse_metadata(token) questionnaire_store = get_questionnaire_store(user_id, user_ik) questionnaire_store.metadata = metadata questionnaire_store.save() logger.info("User authenticated with tx_id=%s", metadata["tx_id"])
def test_is_valid_fails_invalid_return_by(self): jwt = { "user_id": "1", "form_type": "a", "collection_exercise_sid": "test-sid", "eq_id": "2", "period_id": "3", "period_str": "2016-01-01", "ref_p_start_date": "2016-12-31", "ref_p_end_date": "2016-03-31", "ru_ref": "2016-04-04", "ru_name": "Apple", "return_by": "2016-09-31" } valid, _ = is_valid_metadata(jwt) self.assertTrue(valid) with self.assertRaises(InvalidTokenException) as ite: parse_metadata(jwt) self.assertIn("Incorrect data in token", ite.exception.value)
def test_is_valid_fails_invalid_return_by(self): jwt = { "user_id": "1", "form_type": "a", "collection_exercise_sid": "test-sid", "eq_id": "2", "period_id": "3", "period_str": "2016-01-01", "ref_p_start_date": "2016-12-31", "ref_p_end_date": "2016-03-31", "ru_ref": "2016-04-04", "ru_name": "Apple", "return_by": "2016-09-31" } valid, field = is_valid_metadata(jwt) self.assertTrue(valid) with self.assertRaises(InvalidTokenException) as ite: parse_metadata(jwt) self.assertIn("Incorrect data in token", ite.exception.value)
def test_malformed_tx_id(self): jwt = { "user_id": "1", "form_type": "a", "collection_exercise_sid": "test-sid", "eq_id": "2", "period_id": "3", "period_str": "2016-01-01", "ref_p_start_date": "2016-02-02", "ref_p_end_date": "2016-03-03", "ru_ref": "2016-04-04", "ru_name": "Apple", "return_by": "2016-07-07", # one character short "tx_id": "83a3db82-bea7-403c-a411-6357ff70f2f" } valid, _ = is_valid_metadata(jwt) self.assertTrue(valid) with self.assertRaises(InvalidTokenException) as ite: parse_metadata(jwt) self.assertIn("Incorrect data in token", ite.exception.value)
def test_malformed_tx_id(self): jwt = { "user_id": "1", "form_type": "a", "collection_exercise_sid": "test-sid", "eq_id": "2", "period_id": "3", "period_str": "2016-01-01", "ref_p_start_date": "2016-02-02", "ref_p_end_date": "2016-03-03", "ru_ref": "2016-04-04", "ru_name": "Apple", "return_by": "2016-07-07", # one character short "tx_id": "83a3db82-bea7-403c-a411-6357ff70f2f" } valid, field = is_valid_metadata(jwt) self.assertTrue(valid) with self.assertRaises(InvalidTokenException) as ite: parse_metadata(jwt) self.assertIn("Incorrect data in token", ite.exception.value)
def setUp(self): super().setUp() self.jwt = { "user_id": "1", "form_type": "a", "collection_exercise_sid": "test-sid", "eq_id": "2", "period_id": "3", "period_str": "2016-01-01", "ref_p_start_date": "2016-02-02", "ref_p_end_date": "2016-03-03", "ru_ref": "2016-04-04", "ru_name": "Apple", "return_by": "2016-07-07", "tx_id": "4ec3aa9e-e8ac-4c8d-9793-6ed88b957c2f" } with self.application.test_request_context(): self.metadata = parse_metadata(self.jwt)
import dateutil.parser from app.data_model.answer_store import AnswerStore from app.parser.metadata_parser import parse_metadata from app.questionnaire.location import Location from app.submitter.converter import convert_answers, DataVersionError from tests.app.framework.survey_runner_test_case import SurveyRunnerTestCase metadata = parse_metadata({ "user_id": "789473423", "form_type": "0205", "collection_exercise_sid": "test-sid", "eq_id": "1", "period_id": "2016-02-01", "period_str": "2016-01-01", "ref_p_start_date": "2016-02-02", "ref_p_end_date": "2016-03-03", "ru_ref": "432423423423", "ru_name": "Apple", "return_by": "2016-07-07" }) class TestConverter(SurveyRunnerTestCase): def test_convert_answers(self): with self.application.test_request_context(): user_answer = [create_answer('ABC', '2016-01-01', group_id='group-1', block_id='block-1'), create_answer('DEF', '2016-03-30', group_id='group-1', block_id='block-1')] questionnaire = {