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 }
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-*')
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'])
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, )