def get_service_verify_reply_to_address_partials(service_id, notification_id):
    form = ServiceReplyToEmailForm()
    first_email_address = current_service.count_email_reply_to_addresses == 0
    notification = notification_api_client.get_notification(
        current_app.config["NOTIFY_SERVICE_ID"], notification_id)
    replace = request.args.get('replace', False)
    replace = False if replace == "False" else replace
    existing_is_default = False
    if replace:
        existing = current_service.get_email_reply_to_address(replace)
        existing_is_default = existing['is_default']
    verification_status = "pending"
    is_default = True if (request.args.get('is_default', False)
                          == "True") else False
    if notification["status"] in DELIVERED_STATUSES:
        verification_status = "success"
        if notification["to"] not in [
                i["email_address"]
                for i in current_service.email_reply_to_addresses
        ]:
            if replace:
                service_api_client.update_reply_to_email_address(
                    current_service.id,
                    replace,
                    email_address=notification["to"],
                    is_default=is_default)
            else:
                service_api_client.add_reply_to_email_address(
                    current_service.id,
                    email_address=notification["to"],
                    is_default=is_default)
    seconds_since_sending = (
        utc_string_to_aware_gmt_datetime(datetime.utcnow().isoformat()) -
        utc_string_to_aware_gmt_datetime(notification['created_at'])).seconds
    if notification["status"] in FAILURE_STATUSES or (
            notification["status"] in SENDING_STATUSES
            and seconds_since_sending >
            current_app.config['REPLY_TO_EMAIL_ADDRESS_VALIDATION_TIMEOUT']):
        verification_status = "failure"
        form.email_address.data = notification['to']
        form.is_default.data = is_default
    return {
        'status':
        render_template(
            'views/service-settings/email-reply-to/_verify-updates.html',
            reply_to_email_address=notification["to"],
            service_id=current_service.id,
            notification_id=notification_id,
            verification_status=verification_status,
            is_default=is_default,
            existing_is_default=existing_is_default,
            form=form,
            first_email_address=first_email_address,
            replace=replace),
        'stop':
        0 if verification_status == "pending" else 1
    }
Beispiel #2
0
def test_client_doesnt_delete_service_template_cache_when_none_exist(
        app_, mock_get_user,
        mock_get_service_templates_when_no_templates_exist, mocker):
    mocker.patch('app.notify_client.current_user', id='1')
    mocker.patch('notifications_python_client.base.BaseAPIClient.request')
    mock_redis_delete = mocker.patch('app.extensions.RedisClient.delete')

    service_api_client.update_reply_to_email_address(SERVICE_ONE_ID, uuid4(),
                                                     '*****@*****.**')

    assert len(mock_redis_delete.call_args_list) == 1
    assert mock_redis_delete.call_args_list[0] == call(
        'service-{}'.format(SERVICE_ONE_ID))
def test_client_deletes_service_template_cache_when_service_is_updated(
    app_,
    mock_get_user,
    mocker
):
    mocker.patch('app.notify_client.current_user', id='1')
    mocker.patch('notifications_python_client.base.BaseAPIClient.request')
    mock_redis_delete = mocker.patch('app.extensions.RedisClient.delete')
    mock_redis_delete_by_pattern = mocker.patch('app.extensions.RedisClient.delete_cache_keys_by_pattern')

    service_api_client.update_reply_to_email_address(SERVICE_ONE_ID, uuid4(), '*****@*****.**')

    assert len(mock_redis_delete.call_args_list) == 1
    assert mock_redis_delete.call_args_list[0] == call(f'service-{SERVICE_ONE_ID}')
    assert mock_redis_delete_by_pattern.call_args_list[0] == call(f'service-{SERVICE_ONE_ID}-template-*')
Beispiel #4
0
def service_edit_email_reply_to(service_id, reply_to_email_id):
    form = ServiceReplyToEmailForm()
    reply_to_email_address = current_service.get_email_reply_to_address(
        reply_to_email_id)
    if request.method == 'GET':
        form.email_address.data = reply_to_email_address['email_address']
        form.is_default.data = reply_to_email_address['is_default']
    if form.validate_on_submit():
        if form.email_address.data == reply_to_email_address["email_address"]:
            service_api_client.update_reply_to_email_address(
                current_service.id,
                reply_to_email_id=reply_to_email_id,
                email_address=form.email_address.data,
                is_default=True if reply_to_email_address['is_default'] else
                form.is_default.data)
            return redirect(
                url_for('.service_email_reply_to', service_id=service_id))
        try:
            notification_id = service_api_client.verify_reply_to_email_address(
                service_id, form.email_address.data)["data"]["id"]
        except HTTPError as e:
            error_msg = "Your service already uses ‘{}’ as a reply-to email address.".format(
                form.email_address.data)
            if e.status_code == 400 and error_msg == e.message:
                flash(error_msg, 'error')
                return redirect(
                    url_for('.service_email_reply_to', service_id=service_id))
            else:
                raise e
        return redirect(
            url_for('.service_verify_reply_to_address',
                    service_id=service_id,
                    notification_id=notification_id,
                    is_default=True if reply_to_email_address['is_default']
                    else form.is_default.data,
                    replace=reply_to_email_id))

    if (request.endpoint == "main.service_confirm_delete_email_reply_to"):
        flash(
            _('Are you sure you want to delete this reply-to email address?'),
            'delete')
    return render_template(
        'views/service-settings/email-reply-to/edit.html',
        form=form,
        reply_to_email_address_id=reply_to_email_id,
    )
def service_edit_email_reply_to(service_id, reply_to_email_id):
    form = ServiceReplyToEmailForm()
    reply_to_email_address = service_api_client.get_reply_to_email_address(service_id, reply_to_email_id)
    if request.method == 'GET':
        form.email_address.data = reply_to_email_address['email_address']
        form.is_default.data = reply_to_email_address['is_default']
    if form.validate_on_submit():
        service_api_client.update_reply_to_email_address(
            current_service['id'],
            reply_to_email_id=reply_to_email_id,
            email_address=form.email_address.data,
            is_default=True if reply_to_email_address['is_default'] else form.is_default.data
        )
        return redirect(url_for('.service_email_reply_to', service_id=service_id))
    return render_template(
        'views/service-settings/email-reply-to/edit.html',
        form=form,
        reply_to_email_address_id=reply_to_email_address['id'])
Beispiel #6
0
def test_client_deletes_service_template_cache_when_service_is_updated(
        app_, mock_get_user, mock_get_service_templates, mocker):
    mocker.patch('app.notify_client.current_user', id='1')
    mocker.patch('notifications_python_client.base.BaseAPIClient.request')
    mock_redis_delete = mocker.patch('app.extensions.RedisClient.delete')

    service_api_client.update_reply_to_email_address(SERVICE_ONE_ID, uuid4(),
                                                     '*****@*****.**')

    assert len(mock_redis_delete.call_args_list) == 2
    assert mock_redis_delete.call_args_list[1] == call(
        'service-{}'.format(SERVICE_ONE_ID))

    templates_to_delete = mock_redis_delete.call_args_list[0][0]
    assert len(templates_to_delete) == 6
    for template_key in templates_to_delete:
        assert template_key.startswith(f'service-{SERVICE_ONE_ID}-template')
        assert template_key.endswith('version-None')
def service_edit_email_reply_to(service_id, reply_to_email_id):
    form = ServiceReplyToEmailForm()
    reply_to_email_address = current_service.get_email_reply_to_address(
        reply_to_email_id)
    if request.method == 'GET':
        form.email_address.data = reply_to_email_address['email_address']
        form.is_default.data = reply_to_email_address['is_default']
    if form.validate_on_submit():
        service_api_client.update_reply_to_email_address(
            current_service.id,
            reply_to_email_id=reply_to_email_id,
            email_address=form.email_address.data,
            is_default=True
            if reply_to_email_address['is_default'] else form.is_default.data)
        return redirect(
            url_for('.service_email_reply_to', service_id=service_id))
    if (request.endpoint == "main.service_confirm_delete_email_reply_to"):
        flash("Are you sure you want to delete this email reply-to address?",
              'delete')
    return render_template(
        'views/service-settings/email-reply-to/edit.html',
        form=form,
        reply_to_email_address_id=reply_to_email_id,
    )