Example #1
0
    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)
Example #9
0
    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)
Example #11
0
    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
Example #16
0
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