def get_activity_details(self, encrypted_request_token): response = self.__make_activity_details_request(encrypted_request_token) receipt = json.loads(response.text).get("receipt") proto = protobuf.Protobuf() encrypted_data = proto.current_user(receipt) encrypted_application_profile = proto.current_application(receipt) if not encrypted_data: return ActivityDetails(receipt) unwrapped_key = self.__crypto.decrypt_token(receipt["wrapped_receipt_key"]) decrypted_profile_data = self.__crypto.decipher( unwrapped_key, encrypted_data.iv, encrypted_data.cipher_text ) decrypted_application_data = self.__crypto.decipher( unwrapped_key, encrypted_application_profile.iv, encrypted_application_profile.cipher_text, ) user_profile_attribute_list = proto.attribute_list(decrypted_profile_data) application_profile_attribute_list = proto.attribute_list( decrypted_application_data ) return ActivityDetails( receipt=receipt, decrypted_profile=user_profile_attribute_list, decrypted_application_profile=application_profile_attribute_list, )
def test_try_parse_age_verified_field_age_under(successful_receipt): activity_details = ActivityDetails(successful_receipt) create_age_verified_field(activity_details, False, "false".encode(), 55) ActivityDetails.try_parse_age_verified_field(activity_details, activity_details.field) assert activity_details.user_profile[config.KEY_AGE_VERIFIED] is False
def test_try_parse_age_verified_both_missing_not_parsed(successful_receipt): activity_details = ActivityDetails(successful_receipt) field = None ActivityDetails.try_parse_age_verified_field(activity_details, field) assert not isinstance( activity_details.user_profile.get(config.KEY_AGE_VERIFIED), bool)
def test_try_parse_structured_postal_address_india(successful_receipt): activity_details = ActivityDetails(successful_receipt) structured_postal_address = { ADDRESS_FORMAT_KEY: INDIA_FORMAT_VALUE, CARE_OF_KEY: CARE_OF_VALUE, BUILDING_KEY: BUILDING_VALUE, STREET_KEY: STREET_VALUE, TOWN_CITY_KEY: TOWN_CITY_VALUE, SUBDISTRICT_KEY: SUBDISTRICT_VALUE, DISTRICT_KEY: DISTRICT_VALUE, STATE_KEY: INDIA_STATE_VALUE, POSTAL_CODE_KEY: INDIA_POSTAL_CODE_VALUE, POST_OFFICE_KEY: INDIA_POST_OFFICE_VALUE, COUNTRY_ISO_KEY: INDIA_COUNTRY_ISO_VALUE, COUNTRY_KEY: INDIA_COUNTRY_VALUE, config.KEY_FORMATTED_ADDRESS: INDIA_FORMATTED_ADDRESS_VALUE, } structured_postal_address_json = json.dumps(structured_postal_address) create_structured_postal_address_field(activity_details, structured_postal_address_json) activity_details.user_profile[ config. ATTRIBUTE_STRUCTURED_POSTAL_ADDRESS] = ActivityDetails.try_convert_structured_postal_address_to_dict( activity_details.field) actual_structured_postal_address_user_profile = activity_details.user_profile[ config.ATTRIBUTE_STRUCTURED_POSTAL_ADDRESS] assert (type(actual_structured_postal_address_user_profile) is collections.OrderedDict) assert (actual_structured_postal_address_user_profile[ADDRESS_FORMAT_KEY] == INDIA_FORMAT_VALUE) assert actual_structured_postal_address_user_profile[ CARE_OF_KEY] == CARE_OF_VALUE assert actual_structured_postal_address_user_profile[ BUILDING_KEY] == BUILDING_VALUE assert actual_structured_postal_address_user_profile[ STREET_KEY] == STREET_VALUE assert (actual_structured_postal_address_user_profile[TOWN_CITY_KEY] == TOWN_CITY_VALUE) assert (actual_structured_postal_address_user_profile[SUBDISTRICT_KEY] == SUBDISTRICT_VALUE) assert actual_structured_postal_address_user_profile[ DISTRICT_KEY] == DISTRICT_VALUE assert actual_structured_postal_address_user_profile[ STATE_KEY] == INDIA_STATE_VALUE assert (actual_structured_postal_address_user_profile[POSTAL_CODE_KEY] == INDIA_POSTAL_CODE_VALUE) assert (actual_structured_postal_address_user_profile[POST_OFFICE_KEY] == INDIA_POST_OFFICE_VALUE) assert (actual_structured_postal_address_user_profile[COUNTRY_ISO_KEY] == INDIA_COUNTRY_ISO_VALUE) assert (actual_structured_postal_address_user_profile[COUNTRY_KEY] == INDIA_COUNTRY_VALUE) assert (actual_structured_postal_address_user_profile[ config.KEY_FORMATTED_ADDRESS] == INDIA_FORMATTED_ADDRESS_VALUE)
def test_try_parse_age_verified_field_non_bool_value_not_parsed( successful_receipt): activity_details = ActivityDetails(successful_receipt) create_age_verified_field(activity_details, True, "18".encode(), 18) sys.stdout = open(os.devnull, "w") # disable print ActivityDetails.try_parse_age_verified_field(activity_details, activity_details.field) sys.stdout = sys.__stdout__ # enable print assert not isinstance( activity_details.user_profile.get(config.KEY_AGE_VERIFIED), bool)
def test_try_parse_structured_postal_address_nested_json(successful_receipt): formatted_address_json = { "item1": [[1, "a1"], [2, "a2"]], "item2": [[3, "b3"], [4, "b4"]], } activity_details = ActivityDetails(successful_receipt) structured_postal_address = { ADDRESS_FORMAT_KEY: ADDRESS_FORMAT_VALUE, BUILDING_NUMBER_KEY: BUILDING_NUMBER_VALUE, ADDRESS_LINE_1_KEY: ADDRESS_LINE_1_VALUE, TOWN_CITY_KEY: TOWN_CITY_VALUE, POSTAL_CODE_KEY: POSTAL_CODE_VALUE, COUNTRY_ISO_KEY: COUNTRY_ISO_VALUE, COUNTRY_KEY: COUNTRY_VALUE, config.KEY_FORMATTED_ADDRESS: formatted_address_json, } structured_postal_address_json = json.dumps(structured_postal_address) create_structured_postal_address_field(activity_details, structured_postal_address_json) activity_details.user_profile[ config. ATTRIBUTE_STRUCTURED_POSTAL_ADDRESS] = ActivityDetails.try_convert_structured_postal_address_to_dict( activity_details.field) actual_structured_postal_address_user_profile = activity_details.user_profile[ config.ATTRIBUTE_STRUCTURED_POSTAL_ADDRESS] assert (type(actual_structured_postal_address_user_profile) is collections.OrderedDict) assert (actual_structured_postal_address_user_profile[ADDRESS_FORMAT_KEY] == ADDRESS_FORMAT_VALUE) assert (actual_structured_postal_address_user_profile[BUILDING_NUMBER_KEY] == BUILDING_NUMBER_VALUE) assert (actual_structured_postal_address_user_profile[ADDRESS_LINE_1_KEY] == ADDRESS_LINE_1_VALUE) assert (actual_structured_postal_address_user_profile[TOWN_CITY_KEY] == TOWN_CITY_VALUE) assert (actual_structured_postal_address_user_profile[POSTAL_CODE_KEY] == POSTAL_CODE_VALUE) assert (actual_structured_postal_address_user_profile[COUNTRY_ISO_KEY] == COUNTRY_ISO_VALUE) assert actual_structured_postal_address_user_profile[ COUNTRY_KEY] == COUNTRY_VALUE assert (actual_structured_postal_address_user_profile[ config.KEY_FORMATTED_ADDRESS] == formatted_address_json)
def test_failure_receipt_handled(failure_receipt, user_id): activity_details = ActivityDetails(failure_receipt) assert activity_details.user_id == user_id assert activity_details.remember_me_id == user_id assert activity_details.outcome == "FAILURE" assert activity_details.timestamp == datetime(2016, 11, 14, 11, 35, 33)
def test_profile_outcome_is_success(self): user_id = 'some_id' user_profile = {'phone_number': '55555555'} receipt = {'remember_me_id': user_id, 'sharing_outcome': 'SUCCESS'} activity_details = ActivityDetails(receipt, None) activity_details.user_profile = user_profile request = self.factory.get('/profile/') self._update_session(request, activity_details=dict(activity_details)) response = profile(request) self.assertIsInstance(response, HttpResponse) self.assertEqual(response.status_code, 200) self.assertEqual(getattr(request, 'yoti_user_id', None), user_id) self.assertEqual(getattr(request, 'yoti_user_profile', None), user_profile)
def get_activity_details(self, encrypted_request_token): response = self.__make_request(encrypted_request_token) receipt = json.loads(response.text).get('receipt') encrypted_data = protobuf.Protobuf().current_user(receipt) if not encrypted_data: return ActivityDetails(receipt) unwrapped_key = self.__crypto.decrypt_token( receipt['wrapped_receipt_key']) decrypted_data = self.__crypto.decipher(unwrapped_key, encrypted_data.iv, encrypted_data.cipher_text) attribute_list = protobuf.Protobuf().attribute_list(decrypted_data) return ActivityDetails(receipt, attribute_list)
def test_try_parse_structured_postal_address_usa(successful_receipt): activity_details = ActivityDetails(successful_receipt) structured_postal_address = { ADDRESS_FORMAT_KEY: USA_FORMAT_VALUE, ADDRESS_LINE_1_KEY: ADDRESS_LINE_1_VALUE, TOWN_CITY_KEY: TOWN_CITY_VALUE, STATE_KEY: USA_STATE_VALUE, POSTAL_CODE_KEY: USA_POSTAL_CODE_VALUE, COUNTRY_ISO_KEY: USA_COUNTRY_ISO_VALUE, COUNTRY_KEY: USA_COUNTRY_VALUE, config.KEY_FORMATTED_ADDRESS: USA_FORMATTED_ADDRESS_VALUE, } structured_postal_address_json = json.dumps(structured_postal_address) create_structured_postal_address_field(activity_details, structured_postal_address_json) activity_details.user_profile[ config. ATTRIBUTE_STRUCTURED_POSTAL_ADDRESS] = ActivityDetails.try_convert_structured_postal_address_to_dict( activity_details.field) actual_structured_postal_address_user_profile = activity_details.user_profile[ config.ATTRIBUTE_STRUCTURED_POSTAL_ADDRESS] assert (type(actual_structured_postal_address_user_profile) is collections.OrderedDict) assert (actual_structured_postal_address_user_profile[ADDRESS_FORMAT_KEY] == USA_FORMAT_VALUE) assert (actual_structured_postal_address_user_profile[ADDRESS_LINE_1_KEY] == ADDRESS_LINE_1_VALUE) assert (actual_structured_postal_address_user_profile[TOWN_CITY_KEY] == TOWN_CITY_VALUE) assert actual_structured_postal_address_user_profile[ STATE_KEY] == USA_STATE_VALUE assert (actual_structured_postal_address_user_profile[POSTAL_CODE_KEY] == USA_POSTAL_CODE_VALUE) assert (actual_structured_postal_address_user_profile[COUNTRY_ISO_KEY] == USA_COUNTRY_ISO_VALUE) assert (actual_structured_postal_address_user_profile[COUNTRY_KEY] == USA_COUNTRY_VALUE) assert (actual_structured_postal_address_user_profile[ config.KEY_FORMATTED_ADDRESS] == USA_FORMATTED_ADDRESS_VALUE)
def test_profile_outcome_is_failure(self): receipt = {'remember_me_id': 'some_id', 'sharing_outcome': 'FAILURE'} activity_details = ActivityDetails(receipt, None) request = self.factory.get('/profile/') self._update_session(request, activity_details=dict(activity_details)) response = profile(request) self.assertIsInstance(response, HttpResponseRedirectBase) self.assertEqual(response.url, '/login/')
def test_set_address_to_be_formatted_address(successful_receipt): activity_details = ActivityDetails(successful_receipt) structured_postal_address = { config.KEY_FORMATTED_ADDRESS: FORMATTED_ADDRESS_VALUE } structured_postal_address_json = json.dumps(structured_postal_address) create_structured_postal_address_field(activity_details, structured_postal_address_json) activity_details.user_profile[ config. ATTRIBUTE_STRUCTURED_POSTAL_ADDRESS] = ActivityDetails.try_convert_structured_postal_address_to_dict( activity_details.field) assert config.ATTRIBUTE_POSTAL_ADDRESS not in activity_details.user_profile ActivityDetails.ensure_postal_address(activity_details) assert (activity_details.user_profile[config.ATTRIBUTE_POSTAL_ADDRESS] == FORMATTED_ADDRESS_VALUE)
def test_parent_remember_me_id_empty(empty_strings): activity_details = ActivityDetails(empty_strings) assert activity_details.user_id == "" assert activity_details.remember_me_id == "" assert isinstance(activity_details, ActivityDetails)
def test_missing_values_handled(no_values_receipt): activity_details = ActivityDetails(no_values_receipt) assert isinstance(activity_details, ActivityDetails)
def test_remember_me_id_valid(successful_receipt, user_id): activity_details = ActivityDetails(successful_receipt) assert activity_details.user_id == user_id assert activity_details.remember_me_id == user_id
def _activity_details(outcome='SUCCESS'): receipt = {'remember_me_id': 'some_user_id', 'sharing_outcome': outcome} activity_details = ActivityDetails(receipt, None) activity_details.user_profile.update({'phone_number': '55555555'}) return activity_details
def test_parent_remember_me_id_valid(successful_receipt, parent_remember_me_id): activity_details = ActivityDetails(successful_receipt) assert activity_details.parent_remember_me_id == parent_remember_me_id