Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 10 additions & 9 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ GEM
smart_properties
bigdecimal (3.1.7)
bindata (2.4.15)
bootsnap (1.17.0)
bootsnap (1.18.3)
msgpack (~> 1.2)
brakeman (6.1.0)
browser (6.0.0)
Expand Down Expand Up @@ -423,7 +423,7 @@ GEM
method_source (1.0.0)
mini_histogram (0.3.1)
mini_mime (1.1.5)
mini_portile2 (2.8.5)
mini_portile2 (2.8.6)
minitest (5.22.3)
msgpack (1.7.2)
multiset (0.5.3)
Expand All @@ -444,15 +444,15 @@ GEM
net-ssh (6.1.0)
newrelic_rpm (9.7.0)
nio4r (2.7.0)
nokogiri (1.16.4)
nokogiri (1.16.5)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
openssl (3.0.2)
openssl-signature_algorithm (1.2.1)
openssl (> 2.0, < 3.1)
orm_adapter (0.5.0)
parallel (1.24.0)
parser (3.3.0.5)
parser (3.3.1.0)
ast (~> 2.4.1)
racc
pg (1.5.4)
Expand Down Expand Up @@ -489,12 +489,12 @@ GEM
pry (>= 0.10.4)
psych (5.1.2)
stringio
public_suffix (5.0.4)
public_suffix (5.0.5)
puma (6.4.2)
nio4r (~> 2.0)
raabro (1.4.0)
racc (1.7.3)
rack (3.0.10)
rack (3.0.11)
rack-cors (2.0.2)
rack (>= 2.0.0)
rack-headers_filter (0.0.1)
Expand Down Expand Up @@ -562,7 +562,7 @@ GEM
redis-client (>= 0.17.0)
redis-client (0.22.0)
connection_pool
regexp_parser (2.9.0)
regexp_parser (2.9.1)
reline (0.5.1)
io-console (~> 0.5)
request_store (1.5.1)
Expand Down Expand Up @@ -646,7 +646,8 @@ GEM
jwt (~> 2.0)
scrypt (3.0.7)
ffi-compiler (>= 1.0, < 2.0)
selenium-webdriver (4.11.0)
selenium-webdriver (4.20.1)
base64 (~> 0.2)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 3.0)
websocket (~> 1.0)
Expand Down Expand Up @@ -715,7 +716,7 @@ GEM
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
webrick (1.8.1)
websocket (1.2.9)
websocket (1.2.10)
websocket-driver (0.7.6)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
Expand Down
1 change: 1 addition & 0 deletions app/assets/images/idv/mobile-phone-icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions app/controllers/idv/how_to_verify_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ class HowToVerifyController < ApplicationController
include RenderConditionConcern

before_action :confirm_step_allowed
before_action :set_how_to_verify_presenter

check_or_render_not_found -> { self.class.enabled? }

Expand Down Expand Up @@ -90,5 +91,10 @@ def how_to_verify_form_params
rescue ActionController::ParameterMissing
ActionController::Parameters.new(selection: [])
end

def set_how_to_verify_presenter
@selfie_required = idv_session.selfie_check_required
@presenter = Idv::HowToVerifyPresenter.new(selfie_check_required: @selfie_required)
end
end
end
49 changes: 49 additions & 0 deletions app/jobs/reports/drop_off_report.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# frozen_string_literal: true

require 'reporting/drop_off_report'

module Reports
class DropOffReport < BaseReport
REPORT_NAME = 'drop-off-report'

attr_accessor :report_date

def perform(report_date)
self.report_date = report_date

subject = "Drop Off Report - #{report_date.to_date}"
JSON.parse(configs).each do |config|
reports = [report_maker(config['issuers']).as_emailable_reports]
config['emails'].each do |email|
ReportMailer.tables_report(
email: email,
subject: subject,
message: preamble,
reports: reports,
attachment_format: :csv,
).deliver_now
end
end
end

def preamble
<<~HTML.html_safe # rubocop:disable Rails/OutputSafety
<h2>
Drop Off Report
</h2>
HTML
end

def configs
IdentityConfig.store.drop_off_report_config
end

def report_maker(issuers)
Reporting::DropOffReport.new(
issuers: issuers,
time_range: report_date.all_week,
slice: 1.week,
)
end
end
end
84 changes: 84 additions & 0 deletions app/presenters/idv/how_to_verify_presenter.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# frozen_string_literal: true

class Idv::HowToVerifyPresenter
include ActionView::Helpers::TagHelper
include ActionView::Helpers::TranslationHelper

attr_reader :selfie_required

def initialize(selfie_check_required:)
@selfie_required = selfie_check_required
end

def how_to_verify_info
if selfie_required
t('doc_auth.info.how_to_verify_selfie')
else
t('doc_auth.info.how_to_verify')
end
end

def asset_url
if selfie_required
'idv/mobile-phone-icon.svg'
else
'idv/remote.svg'
end
end

def alt_text
if selfie_required
t('image_description.phone_icon')
else
t('image_description.laptop_and_phone')
end
end

def verify_online_text
if selfie_required
t('doc_auth.headings.verify_online_selfie')
else
t('doc_auth.headings.verify_online')
end
end

def verify_online_instruction
if selfie_required
t('doc_auth.info.verify_online_instruction_selfie')
else
t('doc_auth.info.verify_online_instruction')
end
end

def verify_online_description
if selfie_required
t('doc_auth.info.verify_online_description_selfie')
else
t('doc_auth.info.verify_online_description')
end
end

def submit
if selfie_required
t('forms.buttons.continue_remote_selfie')
else
t('forms.buttons.continue_remote')
end
end

def post_office_instruction
if selfie_required
t('doc_auth.info.verify_at_post_office_instruction_selfie')
else
t('doc_auth.info.verify_at_post_office_instruction')
end
end

def post_office_description
if selfie_required
t('doc_auth.info.verify_at_post_office_description_selfie')
else
t('doc_auth.info.verify_at_post_office_description')
end
end
end
15 changes: 0 additions & 15 deletions app/services/store_sp_metadata_in_session.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,6 @@ def call(service_provider_request: nil, requested_service_provider: nil)

attr_reader :session, :request_id

def parsed_vot
return nil if !sp_request.vtr && !sp_request.acr_values

@parsed_vot ||= AuthnContextResolver.new(
service_provider: service_provider,
vtr: sp_request.vtr,
acr_values: sp_request.acr_values,
).resolve
end

def ial_context
@ial_context ||= IalContext.new(ial: sp_request.ial, service_provider: service_provider)
end

def sp_request
@sp_request ||= ServiceProviderRequestProxy.from_uuid(request_id)
end
Expand All @@ -42,7 +28,6 @@ def update_session
request_url: sp_request.url,
request_id: sp_request.uuid,
requested_attributes: sp_request.requested_attributes,
biometric_comparison_required: parsed_vot&.biometric_comparison?,
acr_values: sp_request.acr_values,
vtr: sp_request.vtr,
}
Expand Down
6 changes: 1 addition & 5 deletions app/views/devise/passwords/edit.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,7 @@
<%= t('instructions.password.password_key') %>
</p>

<%= simple_form_for(
@reset_password_form,
url: user_password_path,
method: :put,
) do |f| %>
<%= simple_form_for(@reset_password_form, url: user_password_path, method: :put) do |f| %>
<%= f.input :reset_password_token, as: :hidden %>
<%= f.full_error :reset_password_token %>
<%= render PasswordConfirmationComponent.new(
Expand Down
5 changes: 1 addition & 4 deletions app/views/devise/passwords/new.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,7 @@
<%= t('instructions.password.forgot') %>
</p>

<%= simple_form_for(
@password_reset_email_form,
url: user_password_path,
) do |f| %>
<%= simple_form_for(@password_reset_email_form, url: user_password_path) do |f| %>
<%= render ValidatedFieldComponent.new(
form: f,
name: :email,
Expand Down
7 changes: 1 addition & 6 deletions app/views/devise/sessions/new.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,7 @@
</p>
<% end %>

<%= simple_form_for(
resource,
as: resource_name,
url: session_path(resource_name),
) do |f|
%>
<%= simple_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
<%= render ValidatedFieldComponent.new(
form: f,
name: :email,
Expand Down
5 changes: 1 addition & 4 deletions app/views/event_disavowal/new.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@

<%= render PageHeadingComponent.new.with_content(t('headings.passwords.change')) %>

<%= simple_form_for(
@password_reset_from_disavowal_form,
url: events_disavowal_url,
) do |f| %>
<%= simple_form_for(@password_reset_from_disavowal_form, url: events_disavowal_url) do |f| %>
<%= f.input :disavowal_token, as: :hidden,
input_html: { value: @disavowal_token, name: :disavowal_token } %>
<%= render PasswordToggleComponent.new(
Expand Down
5 changes: 1 addition & 4 deletions app/views/idv/by_mail/enter_code/_form.html.erb
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
<%= simple_form_for(
@gpo_verify_form,
url: idv_verify_by_mail_enter_code_path,
) do |f| %>
<%= simple_form_for(@gpo_verify_form, url: idv_verify_by_mail_enter_code_path) do |f| %>
<div class="grid-row margin-top-neg-2 margin-bottom-5">
<div class="grid-col-12 tablet:grid-col-6">
<%= render ValidatedFieldComponent.new(
Expand Down
42 changes: 22 additions & 20 deletions app/views/idv/how_to_verify/show.html.erb
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
<% self.title = t('doc_auth.headings.how_to_verify') %>

<%= render PageHeadingComponent.new.with_content(t('doc_auth.headings.how_to_verify')) %>
<p id='how-to-verify-info'><%= t('doc_auth.info.how_to_verify') %></p>

<p id='how-to-verify-info'><%= @presenter.how_to_verify_info %></p>
<div role="group" aria-labelledby="how-to-verify-info" class="border-bottom border-primary-light grid-row">
<div class="grid-col-12 tablet:grid-col-auto">
<%= image_tag(
asset_url('idv/remote.svg'),
width: 88,
height: 88,
class: 'margin-right-1 margin-top-4',
alt: t('image_description.laptop_and_phone'),
) %>
<%= image_tag(
asset_url(@presenter.asset_url),
width: 88,
height: 88,
class: 'margin-right-1 margin-top-0 tablet:margin-top-4',
alt: @presenter.alt_text,
) %>
</div>
<div class="grid-col-12 tablet:grid-col-fill">
<%= simple_form_for(
@idv_how_to_verify_form,
html: {
id: nil,
aria: { label: t('forms.buttons.continue_remote') },
aria: { label: @presenter.submit },
},
method: :put,
url: idv_how_to_verify_url,
Expand All @@ -31,14 +29,18 @@
<%= f.label(
:selection_remote,
) do %>
<h2 class="margin-top-0"><%= t('doc_auth.headings.verify_online') %></h2>
<div>
<p><%= t('doc_auth.info.verify_online_instruction') %></p>
<p><%= t('doc_auth.info.verify_online_description') %></p>
</div>

<% if @selfie_required %>
<span class="usa-tag usa-tag--informative margin-bottom-2">
<%= t('doc_auth.tips.mobile_phone_required') %>
</span>
<% end %>
<h2 class="margin-top-0"><%= @presenter.verify_online_text %></h2>
<div>
<p><%= @presenter.verify_online_instruction %></p>
<p><%= @presenter.verify_online_description %></p>
</div>
<% end %>
<%= f.submit t('forms.buttons.continue_remote'), class: 'display-block margin-top-3 margin-bottom-5' %>
<%= f.submit @presenter.submit, class: 'display-block margin-top-3 margin-bottom-5' %>
<% end %>
</div>
</div>
Expand Down Expand Up @@ -72,8 +74,8 @@
) do %>
<h3 class="h2 margin-top-0"><%= t('doc_auth.headings.verify_at_post_office') %></h3>
<div>
<p><%= t('doc_auth.info.verify_at_post_office_instruction') %></p>
<p><%= t('doc_auth.info.verify_at_post_office_description') %></p>
<p><%= @presenter.post_office_instruction %></p>
<p><%= @presenter.post_office_description %></p>
</div>
<% end %>
<%= f.submit t('forms.buttons.continue_ipp'), class: 'display-block margin-top-3 margin-bottom-5', outline: true %>
Expand Down
Loading