decidim-verifications 0.29.6 → 0.30.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/app/commands/decidim/verifications/authorize_user.rb +24 -0
 - data/app/commands/decidim/verifications/revoke_by_name_authorizations.rb +51 -0
 - data/app/controllers/decidim/verifications/authorizations_controller.rb +73 -16
 - data/app/controllers/decidim/verifications/id_documents/authorizations_controller.rb +3 -1
 - data/app/forms/decidim/verifications/sms/mobile_phone_form.rb +1 -1
 - data/app/helpers/decidim/verifications/application_helper.rb +28 -0
 - data/app/models/decidim/verifications/conflict.rb +8 -0
 - data/app/services/decidim/authorization_handler.rb +22 -1
 - data/app/views/decidim/verifications/authorizations/_tos_acceptance_field.html.erb +11 -0
 - data/app/views/decidim/verifications/authorizations/index.html.erb +4 -4
 - data/app/views/decidim/verifications/authorizations/new.html.erb +14 -6
 - data/app/views/decidim/verifications/authorizations/onboarding_pending.html.erb +38 -0
 - data/app/views/decidim/verifications/id_documents/authorizations/choose.html.erb +2 -2
 - data/app/views/decidim/verifications/id_documents/authorizations/edit.html.erb +1 -1
 - data/app/views/decidim/verifications/id_documents/authorizations/new.html.erb +1 -1
 - data/app/views/decidim/verifications/postal_letter/authorizations/edit.html.erb +2 -2
 - data/app/views/decidim/verifications/postal_letter/authorizations/new.html.erb +1 -1
 - data/app/views/decidim/verifications/sms/authorizations/edit.html.erb +1 -1
 - data/app/views/decidim/verifications/sms/authorizations/new.html.erb +1 -1
 - data/app/views/dummy_authorization/_form.html.erb +0 -6
 - data/app/views/layouts/decidim/authorizations.html.erb +34 -0
 - data/config/locales/ar.yml +10 -21
 - data/config/locales/bg.yml +27 -36
 - data/config/locales/ca.yml +38 -37
 - data/config/locales/cs.yml +37 -35
 - data/config/locales/de.yml +38 -37
 - data/config/locales/el.yml +11 -22
 - data/config/locales/en.yml +16 -15
 - data/config/locales/es-MX.yml +38 -37
 - data/config/locales/es-PY.yml +38 -37
 - data/config/locales/es.yml +37 -36
 - data/config/locales/eu.yml +51 -50
 - data/config/locales/fi-plain.yml +37 -36
 - data/config/locales/fi.yml +37 -36
 - data/config/locales/fr-CA.yml +38 -37
 - data/config/locales/fr.yml +38 -37
 - data/config/locales/gl.yml +11 -24
 - data/config/locales/hu.yml +13 -25
 - data/config/locales/id-ID.yml +10 -21
 - data/config/locales/is-IS.yml +8 -16
 - data/config/locales/it.yml +11 -24
 - data/config/locales/ja.yml +36 -36
 - data/config/locales/lt.yml +16 -25
 - data/config/locales/lv.yml +11 -22
 - data/config/locales/nl.yml +11 -24
 - data/config/locales/no.yml +11 -24
 - data/config/locales/pl.yml +27 -36
 - data/config/locales/pt-BR.yml +11 -24
 - data/config/locales/pt.yml +11 -24
 - data/config/locales/ro-RO.yml +38 -58
 - data/config/locales/ru.yml +8 -17
 - data/config/locales/sk.yml +11 -22
 - data/config/locales/sv.yml +24 -37
 - data/config/locales/tr-TR.yml +11 -23
 - data/config/locales/uk.yml +8 -17
 - data/config/locales/zh-CN.yml +11 -25
 - data/config/locales/zh-TW.yml +16 -25
 - data/decidim-verifications.gemspec +1 -1
 - data/lib/decidim/verifications/adapter.rb +4 -4
 - data/lib/decidim/verifications/engine.rb +22 -1
 - data/lib/decidim/verifications/version.rb +1 -1
 - data/lib/decidim/verifications/workflow_manifest.rb +1 -0
 - metadata +13 -12
 - data/app/views/decidim/verifications/authorizations/first_login.html.erb +0 -21
 - data/config/locales/ca-IT.yml +0 -308
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 73370de2874c14a91d2dfa972ea2a2f228b2f1303a4deaa4e05643e8a19c2919
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: b373104782c2536d56db880fa35c12acac7ff4f493d0b813537e29f816579795
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: d9a4f2b93f42cf03451c9c6f3f08a1b661bb7f2384aba3b73df224bc862e4500aa9eabf67ca7452694fca5fe03d9814d342d5b188c7134a2e27ec92a1187fba0
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 6b5ba9a048fdca5b285ad5638583de4e93215d77f94c47c94bbbb0b31dc7779387c1f54199903445e0cfdcc5262266eedba5e376ad6debe08edc75c156450cb1
         
     | 
| 
         @@ -16,9 +16,22 @@ module Decidim 
     | 
|
| 
       16 
16 
     | 
    
         
             
                  #
         
     | 
| 
       17 
17 
     | 
    
         
             
                  # - :ok when everything is valid.
         
     | 
| 
       18 
18 
     | 
    
         
             
                  # - :invalid if the handler was not valid and we could not proceed.
         
     | 
| 
      
 19 
     | 
    
         
            +
                  # - :transferred if there is a duplicated authorization associated
         
     | 
| 
      
 20 
     | 
    
         
            +
                  #                to other user and the authorization can be
         
     | 
| 
      
 21 
     | 
    
         
            +
                  #                transferred.
         
     | 
| 
      
 22 
     | 
    
         
            +
                  # - :transfer_user if there is a duplicated authorization associated
         
     | 
| 
      
 23 
     | 
    
         
            +
                  #                  to an ephemeral user and the current user is also
         
     | 
| 
      
 24 
     | 
    
         
            +
                  #                  ephemeral the session is transferred to the user
         
     | 
| 
      
 25 
     | 
    
         
            +
                  #                  with the existing authorization
         
     | 
| 
       19 
26 
     | 
    
         
             
                  #
         
     | 
| 
       20 
27 
     | 
    
         
             
                  # Returns nothing.
         
     | 
| 
       21 
28 
     | 
    
         
             
                  def call
         
     | 
| 
      
 29 
     | 
    
         
            +
                    if !handler.unique? && handler.user_transferrable?
         
     | 
| 
      
 30 
     | 
    
         
            +
                      handler.user = handler.duplicate.user
         
     | 
| 
      
 31 
     | 
    
         
            +
                      Authorization.create_or_update_from(handler)
         
     | 
| 
      
 32 
     | 
    
         
            +
                      return broadcast(:transfer_user, handler.user)
         
     | 
| 
      
 33 
     | 
    
         
            +
                    end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
       22 
35 
     | 
    
         
             
                    return transfer_authorization if !handler.unique? && handler.transferrable?
         
     | 
| 
       23 
36 
     | 
    
         | 
| 
       24 
37 
     | 
    
         
             
                    if handler.invalid?
         
     | 
| 
         @@ -27,6 +40,8 @@ module Decidim 
     | 
|
| 
       27 
40 
     | 
    
         
             
                      return broadcast(:invalid)
         
     | 
| 
       28 
41 
     | 
    
         
             
                    end
         
     | 
| 
       29 
42 
     | 
    
         | 
| 
      
 43 
     | 
    
         
            +
                    return broadcast(:invalid) unless set_tos_agreement
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
       30 
45 
     | 
    
         
             
                    Authorization.create_or_update_from(handler)
         
     | 
| 
       31 
46 
     | 
    
         | 
| 
       32 
47 
     | 
    
         
             
                    broadcast(:ok)
         
     | 
| 
         @@ -79,6 +94,15 @@ module Decidim 
     | 
|
| 
       79 
94 
     | 
    
         | 
| 
       80 
95 
     | 
    
         
             
                    conflict
         
     | 
| 
       81 
96 
     | 
    
         
             
                  end
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
                  def set_tos_agreement
         
     | 
| 
      
 99 
     | 
    
         
            +
                    user = handler.user
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                    return true if user.tos_accepted? || !user.ephemeral?
         
     | 
| 
      
 102 
     | 
    
         
            +
                    return unless handler.try(:tos_agreement)
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                    user.update(accepted_tos_version: @organization.tos_version)
         
     | 
| 
      
 105 
     | 
    
         
            +
                  end
         
     | 
| 
       82 
106 
     | 
    
         
             
                end
         
     | 
| 
       83 
107 
     | 
    
         
             
              end
         
     | 
| 
       84 
108 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,51 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Decidim
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Verifications
         
     | 
| 
      
 5 
     | 
    
         
            +
                # A command to revoke authorizations by name
         
     | 
| 
      
 6 
     | 
    
         
            +
                class RevokeByNameAuthorizations < Decidim::Command
         
     | 
| 
      
 7 
     | 
    
         
            +
                  # Public: Initializes the command.
         
     | 
| 
      
 8 
     | 
    
         
            +
                  #
         
     | 
| 
      
 9 
     | 
    
         
            +
                  # organization - Organization object.
         
     | 
| 
      
 10 
     | 
    
         
            +
                  # name - Authorizations handler name
         
     | 
| 
      
 11 
     | 
    
         
            +
                  # current_user - The current user.
         
     | 
| 
      
 12 
     | 
    
         
            +
                  def initialize(organization, name, current_user)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    @organization = organization
         
     | 
| 
      
 14 
     | 
    
         
            +
                    @current_user = current_user
         
     | 
| 
      
 15 
     | 
    
         
            +
                    @name = name
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  # Executes the command. Broadcasts these events:
         
     | 
| 
      
 19 
     | 
    
         
            +
                  #
         
     | 
| 
      
 20 
     | 
    
         
            +
                  # - :ok when everything is valid.
         
     | 
| 
      
 21 
     | 
    
         
            +
                  # - :invalid if the handler was not valid and we could not proceed.
         
     | 
| 
      
 22 
     | 
    
         
            +
                  #
         
     | 
| 
      
 23 
     | 
    
         
            +
                  # Returns nothing.
         
     | 
| 
      
 24 
     | 
    
         
            +
                  def call
         
     | 
| 
      
 25 
     | 
    
         
            +
                    return broadcast(:invalid) unless [organization, name].all?(&:present?)
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                    auths = Decidim::Verifications::Authorizations.new(
         
     | 
| 
      
 28 
     | 
    
         
            +
                      organization:,
         
     | 
| 
      
 29 
     | 
    
         
            +
                      name:,
         
     | 
| 
      
 30 
     | 
    
         
            +
                      granted: true
         
     | 
| 
      
 31 
     | 
    
         
            +
                    ).query
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                    auths.find_each do |auth|
         
     | 
| 
      
 34 
     | 
    
         
            +
                      Decidim.traceability.perform_action!(
         
     | 
| 
      
 35 
     | 
    
         
            +
                        :destroy,
         
     | 
| 
      
 36 
     | 
    
         
            +
                        auth,
         
     | 
| 
      
 37 
     | 
    
         
            +
                        current_user
         
     | 
| 
      
 38 
     | 
    
         
            +
                      ) do
         
     | 
| 
      
 39 
     | 
    
         
            +
                        auth.destroy
         
     | 
| 
      
 40 
     | 
    
         
            +
                      end
         
     | 
| 
      
 41 
     | 
    
         
            +
                    end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                    broadcast(:ok)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                  private
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                  attr_reader :organization, :name, :current_user
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -5,8 +5,11 @@ module Decidim 
     | 
|
| 
       5 
5 
     | 
    
         
             
                # This controller allows users to create and destroy their authorizations. It
         
     | 
| 
       6 
6 
     | 
    
         
             
                # should not be necessary to expand it to add new authorization schemes.
         
     | 
| 
       7 
7 
     | 
    
         
             
                class AuthorizationsController < Verifications::ApplicationController
         
     | 
| 
       8 
     | 
    
         
            -
                  helper_method :handler, :unauthorized_methods, :authorization_method, :authorization
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
      
 8 
     | 
    
         
            +
                  helper_method :handler, :unauthorized_methods, :authorization_method, :authorization,
         
     | 
| 
      
 9 
     | 
    
         
            +
                                :granted_authorizations, :pending_authorizations, :active_authorization_methods
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  before_action :valid_handler, :authorize_handler, only: [:new, :create]
         
     | 
| 
      
 12 
     | 
    
         
            +
                  before_action :set_ephemeral_user, only: :renew_onboarding_data
         
     | 
| 
       10 
13 
     | 
    
         | 
| 
       11 
14 
     | 
    
         
             
                  include Decidim::UserProfile
         
     | 
| 
       12 
15 
     | 
    
         
             
                  include Decidim::HtmlSafeFlash
         
     | 
| 
         @@ -16,23 +19,40 @@ module Decidim 
     | 
|
| 
       16 
19 
     | 
    
         
             
                  helper Decidim::AuthorizationFormHelper
         
     | 
| 
       17 
20 
     | 
    
         
             
                  helper Decidim::TranslationsHelper
         
     | 
| 
       18 
21 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
                  layout "layouts/decidim/authorizations", except: :index
         
     | 
| 
      
 22 
     | 
    
         
            +
                  layout "layouts/decidim/authorizations", except: [:index, :onboarding_pending]
         
     | 
| 
       20 
23 
     | 
    
         | 
| 
       21 
24 
     | 
    
         
             
                  def new; end
         
     | 
| 
       22 
25 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                  def index
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
      
 26 
     | 
    
         
            +
                  def index; end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  def onboarding_pending
         
     | 
| 
      
 29 
     | 
    
         
            +
                    return redirect_back(fallback_location: authorizations_path) unless onboarding_manager.valid?
         
     | 
| 
       27 
30 
     | 
    
         | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
      
 31 
     | 
    
         
            +
                    authorizations = action_authorized_to(onboarding_manager.action, **onboarding_manager.action_authorized_resources)
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                    authorization_status = authorizations.global_code
         
     | 
| 
      
 34 
     | 
    
         
            +
                    if authorizations.single_authorization_required?
         
     | 
| 
      
 35 
     | 
    
         
            +
                      flash.keep
         
     | 
| 
      
 36 
     | 
    
         
            +
                      return redirect_to(authorizations.statuses.first.current_path(redirect_url: decidim_verifications.onboarding_pending_authorizations_path))
         
     | 
| 
      
 37 
     | 
    
         
            +
                    end
         
     | 
| 
      
 38 
     | 
    
         
            +
                    return unless onboarding_manager.finished_verifications?(active_authorization_methods) || authorization_status == :unauthorized
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                    if authorization_status == :unauthorized
         
     | 
| 
      
 41 
     | 
    
         
            +
                      flash[:alert] = t("authorizations.onboarding_pending.unauthorized", scope: "decidim.verifications", action: onboarding_manager.action_text.downcase)
         
     | 
| 
      
 42 
     | 
    
         
            +
                    elsif current_user.ephemeral?
         
     | 
| 
      
 43 
     | 
    
         
            +
                      flash[:notice] = t("ephemeral_authorized_message", scope: "decidim.onboarding_action_message")
         
     | 
| 
      
 44 
     | 
    
         
            +
                    else
         
     | 
| 
      
 45 
     | 
    
         
            +
                      flash[:notice] = t(
         
     | 
| 
      
 46 
     | 
    
         
            +
                        "authorizations.onboarding_pending.completed_verifications",
         
     | 
| 
      
 47 
     | 
    
         
            +
                        scope: "decidim.verifications",
         
     | 
| 
      
 48 
     | 
    
         
            +
                        action: onboarding_manager.action_text.downcase,
         
     | 
| 
      
 49 
     | 
    
         
            +
                        resource_name: onboarding_manager.model_name.human.downcase
         
     | 
| 
       34 
50 
     | 
    
         
             
                      )
         
     | 
| 
       35 
51 
     | 
    
         
             
                    end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                    redirect_to onboarding_manager.finished_redirect_path
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                    clear_onboarding_data!(current_user)
         
     | 
| 
       36 
56 
     | 
    
         
             
                  end
         
     | 
| 
       37 
57 
     | 
    
         | 
| 
       38 
58 
     | 
    
         
             
                  def create
         
     | 
| 
         @@ -57,6 +77,14 @@ module Decidim 
     | 
|
| 
       57 
77 
     | 
    
         
             
                        redirect_to redirect_url || authorizations_path
         
     | 
| 
       58 
78 
     | 
    
         
             
                      end
         
     | 
| 
       59 
79 
     | 
    
         | 
| 
      
 80 
     | 
    
         
            +
                      on(:transfer_user) do |authorized_user|
         
     | 
| 
      
 81 
     | 
    
         
            +
                        authorized_user.update(last_sign_in_at: Time.current, deleted_at: nil)
         
     | 
| 
      
 82 
     | 
    
         
            +
                        sign_out(current_user)
         
     | 
| 
      
 83 
     | 
    
         
            +
                        sign_in(authorized_user)
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                        redirect_to decidim_verifications.onboarding_pending_authorizations_path
         
     | 
| 
      
 86 
     | 
    
         
            +
                      end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
       60 
88 
     | 
    
         
             
                      on(:invalid) do
         
     | 
| 
       61 
89 
     | 
    
         
             
                        flash[:alert] = t("authorizations.create.error", scope: "decidim.verifications")
         
     | 
| 
       62 
90 
     | 
    
         
             
                        render action: :new
         
     | 
| 
         @@ -64,6 +92,16 @@ module Decidim 
     | 
|
| 
       64 
92 
     | 
    
         
             
                    end
         
     | 
| 
       65 
93 
     | 
    
         
             
                  end
         
     | 
| 
       66 
94 
     | 
    
         | 
| 
      
 95 
     | 
    
         
            +
                  def renew_onboarding_data
         
     | 
| 
      
 96 
     | 
    
         
            +
                    store_onboarding_cookie_data!(current_user)
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
                    redirect_to onboarding_pending_authorizations_path
         
     | 
| 
      
 99 
     | 
    
         
            +
                  end
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                  def clear_onboarding_data
         
     | 
| 
      
 102 
     | 
    
         
            +
                    clear_onboarding_data!(current_user)
         
     | 
| 
      
 103 
     | 
    
         
            +
                  end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
       67 
105 
     | 
    
         
             
                  protected
         
     | 
| 
       68 
106 
     | 
    
         | 
| 
       69 
107 
     | 
    
         
             
                  def authorization_method(authorization)
         
     | 
| 
         @@ -103,6 +141,25 @@ module Decidim 
     | 
|
| 
       103 
141 
     | 
    
         
             
                    redirect_to(authorizations_path) && (return false)
         
     | 
| 
       104 
142 
     | 
    
         
             
                  end
         
     | 
| 
       105 
143 
     | 
    
         | 
| 
      
 144 
     | 
    
         
            +
                  def authorize_handler
         
     | 
| 
      
 145 
     | 
    
         
            +
                    raise Decidim::ActionForbidden if current_user.ephemeral? && !Decidim::Verifications::Adapter.from_element(handler_name).ephemeral?
         
     | 
| 
      
 146 
     | 
    
         
            +
                  end
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
                  def set_ephemeral_user
         
     | 
| 
      
 149 
     | 
    
         
            +
                    return if user_signed_in?
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
                    onboarding_manager = Decidim::OnboardingManager.new(Decidim::User.new(extended_data: onboarding_cookie_data))
         
     | 
| 
      
 152 
     | 
    
         
            +
                    authorizations = action_authorized_to(onboarding_manager.action, **onboarding_manager.action_authorized_resources)
         
     | 
| 
      
 153 
     | 
    
         
            +
                    return unless authorizations.ephemeral?
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
                    form = Decidim::EphemeralUserForm.new(organization: current_organization, locale: current_locale)
         
     | 
| 
      
 156 
     | 
    
         
            +
                    CreateEphemeralUser.call(form) do
         
     | 
| 
      
 157 
     | 
    
         
            +
                      on(:ok) do |ephemeral_user|
         
     | 
| 
      
 158 
     | 
    
         
            +
                        sign_in(ephemeral_user)
         
     | 
| 
      
 159 
     | 
    
         
            +
                      end
         
     | 
| 
      
 160 
     | 
    
         
            +
                    end
         
     | 
| 
      
 161 
     | 
    
         
            +
                  end
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
       106 
163 
     | 
    
         
             
                  def unauthorized_methods
         
     | 
| 
       107 
164 
     | 
    
         
             
                    @unauthorized_methods ||= available_verification_workflows.reject do |handler|
         
     | 
| 
       108 
165 
     | 
    
         
             
                      active_authorization_methods.include?(handler.key)
         
     | 
| 
         @@ -110,15 +167,15 @@ module Decidim 
     | 
|
| 
       110 
167 
     | 
    
         
             
                  end
         
     | 
| 
       111 
168 
     | 
    
         | 
| 
       112 
169 
     | 
    
         
             
                  def active_authorization_methods
         
     | 
| 
       113 
     | 
    
         
            -
                    Authorizations.new(organization: current_organization, user: current_user).pluck(:name)
         
     | 
| 
      
 170 
     | 
    
         
            +
                    @active_authorization_methods ||= Authorizations.new(organization: current_organization, user: current_user).pluck(:name)
         
     | 
| 
       114 
171 
     | 
    
         
             
                  end
         
     | 
| 
       115 
172 
     | 
    
         | 
| 
       116 
173 
     | 
    
         
             
                  def granted_authorizations
         
     | 
| 
       117 
     | 
    
         
            -
                    Authorizations.new(organization: current_organization, user: current_user, granted: true)
         
     | 
| 
      
 174 
     | 
    
         
            +
                    @granted_authorizations ||= Authorizations.new(organization: current_organization, user: current_user, granted: true)
         
     | 
| 
       118 
175 
     | 
    
         
             
                  end
         
     | 
| 
       119 
176 
     | 
    
         | 
| 
       120 
177 
     | 
    
         
             
                  def pending_authorizations
         
     | 
| 
       121 
     | 
    
         
            -
                    Authorizations.new(organization: current_organization, user: current_user, granted: false)
         
     | 
| 
      
 178 
     | 
    
         
            +
                    @pending_authorizations ||= Authorizations.new(organization: current_organization, user: current_user, granted: false)
         
     | 
| 
       122 
179 
     | 
    
         
             
                  end
         
     | 
| 
       123 
180 
     | 
    
         | 
| 
       124 
181 
     | 
    
         
             
                  def store_current_location
         
     | 
| 
         @@ -14,7 +14,9 @@ module Decidim 
     | 
|
| 
       14 
14 
     | 
    
         
             
                    before_action :load_authorization
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
                    def choose
         
     | 
| 
       17 
     | 
    
         
            -
                       
     | 
| 
      
 17 
     | 
    
         
            +
                      url_params = { redirect_url: }.compact
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                      return redirect_to(action: :new, **url_params.merge(using: verification_type)) if available_methods.count == 1
         
     | 
| 
       18 
20 
     | 
    
         | 
| 
       19 
21 
     | 
    
         
             
                      render :choose
         
     | 
| 
       20 
22 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -18,7 +18,7 @@ module Decidim 
     | 
|
| 
       18 
18 
     | 
    
         
             
                    # A mobile phone can only be verified once but it should be private.
         
     | 
| 
       19 
19 
     | 
    
         
             
                    def unique_id
         
     | 
| 
       20 
20 
     | 
    
         
             
                      Digest::MD5.hexdigest(
         
     | 
| 
       21 
     | 
    
         
            -
                        "#{mobile_phone_number}-#{Rails.application. 
     | 
| 
      
 21 
     | 
    
         
            +
                        "#{mobile_phone_number}-#{Rails.application.secret_key_base}"
         
     | 
| 
       22 
22 
     | 
    
         
             
                      )
         
     | 
| 
       23 
23 
     | 
    
         
             
                    end
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
         @@ -47,6 +47,12 @@ module Decidim 
     | 
|
| 
       47 
47 
     | 
    
         
             
                    renew_modal_authorizations_path(handler: authorization.name)
         
     | 
| 
       48 
48 
     | 
    
         
             
                  end
         
     | 
| 
       49 
49 
     | 
    
         | 
| 
      
 50 
     | 
    
         
            +
                  def authorizations_back_path(user, redirect_url: nil)
         
     | 
| 
      
 51 
     | 
    
         
            +
                    return redirect_url if redirect_url == decidim_verifications.onboarding_pending_authorizations_path && pending_onboarding_action?(user)
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                    decidim_verifications.authorizations_path
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
       50 
56 
     | 
    
         
             
                  def granted_authorization_explanation(authorization)
         
     | 
| 
       51 
57 
     | 
    
         
             
                    expiration_timestamp = authorization.expires_at.presence && l(authorization.expires_at, format: :long_with_particles)
         
     | 
| 
       52 
58 
     | 
    
         
             
                    if authorization.expired?
         
     | 
| 
         @@ -86,6 +92,28 @@ module Decidim 
     | 
|
| 
       86 
92 
     | 
    
         
             
                      button_text: t("authorizations.index.subscribe", scope: "decidim.verifications")
         
     | 
| 
       87 
93 
     | 
    
         
             
                    }
         
     | 
| 
       88 
94 
     | 
    
         
             
                  end
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                  def onboarding_sections(onboarding_manager, redirect_url: nil, granted_authorizations: nil, pending_authorizations: nil, unauthorized_methods: nil)
         
     | 
| 
      
 97 
     | 
    
         
            +
                    [
         
     | 
| 
      
 98 
     | 
    
         
            +
                      [
         
     | 
| 
      
 99 
     | 
    
         
            +
                        t("granted_verifications", scope: "decidim.verifications.authorizations.onboarding_pending"),
         
     | 
| 
      
 100 
     | 
    
         
            +
                        onboarding_manager.filter_authorizations(granted_authorizations),
         
     | 
| 
      
 101 
     | 
    
         
            +
                        :granted_authorization_display_data
         
     | 
| 
      
 102 
     | 
    
         
            +
                      ],
         
     | 
| 
      
 103 
     | 
    
         
            +
                      [
         
     | 
| 
      
 104 
     | 
    
         
            +
                        t("pending_admin_approval_verifications", scope: "decidim.verifications.authorizations.onboarding_pending"),
         
     | 
| 
      
 105 
     | 
    
         
            +
                        onboarding_manager.filter_authorizations(pending_authorizations),
         
     | 
| 
      
 106 
     | 
    
         
            +
                        :pending_authorization_display_data
         
     | 
| 
      
 107 
     | 
    
         
            +
                      ],
         
     | 
| 
      
 108 
     | 
    
         
            +
                      [
         
     | 
| 
      
 109 
     | 
    
         
            +
                        t("pending_verifications", scope: "decidim.verifications.authorizations.onboarding_pending"),
         
     | 
| 
      
 110 
     | 
    
         
            +
                        onboarding_manager.filter_authorizations(unauthorized_methods),
         
     | 
| 
      
 111 
     | 
    
         
            +
                        :unauthorized_method_display_data
         
     | 
| 
      
 112 
     | 
    
         
            +
                      ]
         
     | 
| 
      
 113 
     | 
    
         
            +
                    ].filter_map do |title, authorizations, presenter|
         
     | 
| 
      
 114 
     | 
    
         
            +
                      { title:, items: authorizations.map { |authorization| send(presenter, authorization, redirect_url) } } if authorizations.present?
         
     | 
| 
      
 115 
     | 
    
         
            +
                    end
         
     | 
| 
      
 116 
     | 
    
         
            +
                  end
         
     | 
| 
       89 
117 
     | 
    
         
             
                end
         
     | 
| 
       90 
118 
     | 
    
         
             
              end
         
     | 
| 
       91 
119 
     | 
    
         
             
            end
         
     | 
| 
         @@ -4,5 +4,13 @@ module Decidim::Verifications 
     | 
|
| 
       4 
4 
     | 
    
         
             
              class Conflict < ApplicationRecord
         
     | 
| 
       5 
5 
     | 
    
         
             
                belongs_to :current_user, class_name: "User"
         
     | 
| 
       6 
6 
     | 
    
         
             
                belongs_to :managed_user, class_name: "User"
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                def self.ransackable_attributes(_auth_object = nil)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  []
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def self.ransackable_associations(_auth_object = nil)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  %w(current_user)
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
       7 
15 
     | 
    
         
             
              end
         
     | 
| 
       8 
16 
     | 
    
         
             
            end
         
     | 
| 
         @@ -20,7 +20,10 @@ module Decidim 
     | 
|
| 
       20 
20 
     | 
    
         
             
                # infer the class name of the authorization handler.
         
     | 
| 
       21 
21 
     | 
    
         
             
                attribute :handler_name, String
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
      
 23 
     | 
    
         
            +
                attribute :tos_agreement, Boolean
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
       23 
25 
     | 
    
         
             
                validate :uniqueness
         
     | 
| 
      
 26 
     | 
    
         
            +
                validates :tos_agreement, allow_nil: false, acceptance: true, if: :ephemeral_tos_pending?
         
     | 
| 
       24 
27 
     | 
    
         | 
| 
       25 
28 
     | 
    
         
             
                # A unique ID to be implemented by the authorization handler that ensures
         
     | 
| 
       26 
29 
     | 
    
         
             
                # no duplicates are created. This uniqueness check will be skipped if
         
     | 
| 
         @@ -47,6 +50,15 @@ module Decidim 
     | 
|
| 
       47 
50 
     | 
    
         
             
                  duplicate.present? && duplicate.user.deleted?
         
     | 
| 
       48 
51 
     | 
    
         
             
                end
         
     | 
| 
       49 
52 
     | 
    
         | 
| 
      
 53 
     | 
    
         
            +
                # Defines whether the identity of an ephemeral user with the same authorization
         
     | 
| 
      
 54 
     | 
    
         
            +
                # can be transferred to the current session and replace the existing user.
         
     | 
| 
      
 55 
     | 
    
         
            +
                #
         
     | 
| 
      
 56 
     | 
    
         
            +
                # @return [Boolean] A boolean indicating whether the user identifier can be
         
     | 
| 
      
 57 
     | 
    
         
            +
                #   transferred.
         
     | 
| 
      
 58 
     | 
    
         
            +
                def user_transferrable?
         
     | 
| 
      
 59 
     | 
    
         
            +
                  duplicate.present? && [user, duplicate.user].all?(&:ephemeral?)
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
       50 
62 
     | 
    
         
             
                # Fetches the duplicate record of the same authorization currently belonging
         
     | 
| 
       51 
63 
     | 
    
         
             
                # to other user than the user being authorized.
         
     | 
| 
       52 
64 
     | 
    
         
             
                #
         
     | 
| 
         @@ -67,7 +79,10 @@ module Decidim 
     | 
|
| 
       67 
79 
     | 
    
         
             
                #
         
     | 
| 
       68 
80 
     | 
    
         
             
                # Returns an Array of Strings.
         
     | 
| 
       69 
81 
     | 
    
         
             
                def form_attributes
         
     | 
| 
       70 
     | 
    
         
            -
                   
     | 
| 
      
 82 
     | 
    
         
            +
                  excluded = %w(id user)
         
     | 
| 
      
 83 
     | 
    
         
            +
                  excluded << "tos_agreement" unless ephemeral_tos_pending?
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                  attributes.except(*excluded).keys
         
     | 
| 
       71 
86 
     | 
    
         
             
                end
         
     | 
| 
       72 
87 
     | 
    
         | 
| 
       73 
88 
     | 
    
         
             
                # The String partial path so Rails can render the handler as a form. This
         
     | 
| 
         @@ -155,6 +170,12 @@ module Decidim 
     | 
|
| 
       155 
170 
     | 
    
         
             
                  manifest.form.constantize.from_params(params || {})
         
     | 
| 
       156 
171 
     | 
    
         
             
                end
         
     | 
| 
       157 
172 
     | 
    
         | 
| 
      
 173 
     | 
    
         
            +
                def ephemeral_tos_pending?
         
     | 
| 
      
 174 
     | 
    
         
            +
                  return if user.blank?
         
     | 
| 
      
 175 
     | 
    
         
            +
             
     | 
| 
      
 176 
     | 
    
         
            +
                  user.ephemeral? && !user.tos_accepted?
         
     | 
| 
      
 177 
     | 
    
         
            +
                end
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
       158 
179 
     | 
    
         
             
                private
         
     | 
| 
       159 
180 
     | 
    
         | 
| 
       160 
181 
     | 
    
         
             
                def uniqueness
         
     | 
| 
         @@ -0,0 +1,11 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <div id="card__tos" class="form__wrapper-block">
         
     | 
| 
      
 2 
     | 
    
         
            +
              <h2 class="h4"><%= t("decidim.devise.registrations.new.tos_title") %></h2>
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
              <div>
         
     | 
| 
      
 5 
     | 
    
         
            +
                <% terms_of_service_summary_content_blocks.each do |content_block| %>
         
     | 
| 
      
 6 
     | 
    
         
            +
                  <%= cell content_block.manifest.cell, content_block %>
         
     | 
| 
      
 7 
     | 
    
         
            +
                <% end %>
         
     | 
| 
      
 8 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              <%= form.check_box :tos_agreement, label: t("decidim.verifications.authorizations.new.tos_agreement", link: link_to(t("decidim.devise.registrations.new.terms"), decidim.page_path("terms-of-service"))), label_options: { class: "form__wrapper-checkbox-label" } %>
         
     | 
| 
      
 11 
     | 
    
         
            +
            </div>
         
     | 
| 
         @@ -12,13 +12,13 @@ 
     | 
|
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
                    subsections << {
         
     | 
| 
       14 
14 
     | 
    
         
             
                      title: t("authorizations.index.granted_verification", scope: "decidim.verifications"),
         
     | 
| 
       15 
     | 
    
         
            -
                      items:  
     | 
| 
       16 
     | 
    
         
            -
                    } if  
     | 
| 
      
 15 
     | 
    
         
            +
                      items: granted_authorizations.map { |authorization| granted_authorization_display_data(authorization, redirect_url) }
         
     | 
| 
      
 16 
     | 
    
         
            +
                    } if granted_authorizations.any?
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
                    subsections << {
         
     | 
| 
       19 
19 
     | 
    
         
             
                      title: t("authorizations.index.pending_verification", scope: "decidim.verifications"),
         
     | 
| 
       20 
     | 
    
         
            -
                      items:  
     | 
| 
       21 
     | 
    
         
            -
                    } if  
     | 
| 
      
 20 
     | 
    
         
            +
                      items: pending_authorizations.map { |authorization| pending_authorization_display_data(authorization, redirect_url) }
         
     | 
| 
      
 21 
     | 
    
         
            +
                    } if pending_authorizations.any?
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
                    subsections << {
         
     | 
| 
       24 
24 
     | 
    
         
             
                      title: t("authorizations.index.unauthorized_methods", scope: "decidim.verifications"),
         
     | 
| 
         @@ -13,10 +13,16 @@ 
     | 
|
| 
       13 
13 
     | 
    
         
             
                </div>
         
     | 
| 
       14 
14 
     | 
    
         
             
              <% end %>
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
      
 16 
     | 
    
         
            +
              <% if current_user.ephemeral? && !current_user.tos_accepted? %>
         
     | 
| 
      
 17 
     | 
    
         
            +
                <%= render partial: "tos_acceptance_field", locals: { form: } %>
         
     | 
| 
      
 18 
     | 
    
         
            +
              <% end %>
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       16 
20 
     | 
    
         
             
              <div class="form__wrapper-block flex-col-reverse md:flex-row justify-between">
         
     | 
| 
       17 
     | 
    
         
            -
                 
     | 
| 
       18 
     | 
    
         
            -
                  <%=  
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 21 
     | 
    
         
            +
                <% if onboarding_manager.available_authorization_selection_page? %>
         
     | 
| 
      
 22 
     | 
    
         
            +
                  <%= link_to authorizations_back_path(current_user, redirect_url:), class: "button button__sm md:button__lg button__text-secondary" do %>
         
     | 
| 
      
 23 
     | 
    
         
            +
                    <%= icon "arrow-left-line", class: "fill-current" %>
         
     | 
| 
      
 24 
     | 
    
         
            +
                    <span><%= t("decidim.wizard_step_form.wizard_aside.back") %></span>
         
     | 
| 
      
 25 
     | 
    
         
            +
                  <% end %>
         
     | 
| 
       20 
26 
     | 
    
         
             
                <% end %>
         
     | 
| 
       21 
27 
     | 
    
         
             
                <button type="submit" class="button button__sm md:button__lg button__secondary">
         
     | 
| 
       22 
28 
     | 
    
         
             
                  <span><%= t("decidim.verifications.authorizations.new.authorize") %></span>
         
     | 
| 
         @@ -24,7 +30,9 @@ 
     | 
|
| 
       24 
30 
     | 
    
         
             
                </button>
         
     | 
| 
       25 
31 
     | 
    
         
             
              </div>
         
     | 
| 
       26 
32 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
               
     | 
| 
       28 
     | 
    
         
            -
                 
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
      
 33 
     | 
    
         
            +
              <% unless onboarding_manager.ephemeral? %>
         
     | 
| 
      
 34 
     | 
    
         
            +
                <p class="prose prose-a:text-secondary">
         
     | 
| 
      
 35 
     | 
    
         
            +
                  <%= t("decidim.verifications.authorizations.skip_verification", link: link_to(t("decidim.verifications.authorizations.start_exploring"), cta_button_path).html_safe).html_safe %>.
         
     | 
| 
      
 36 
     | 
    
         
            +
                </p>
         
     | 
| 
      
 37 
     | 
    
         
            +
              <% end %>
         
     | 
| 
       30 
38 
     | 
    
         
             
            <% end %>
         
     | 
| 
         @@ -0,0 +1,38 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <% add_decidim_page_title(t("authorizations", scope: "layouts.decidim.user_profile")) %>
         
     | 
| 
      
 2 
     | 
    
         
            +
            <% content_for(:subtitle) { t("authorizations", scope: "layouts.decidim.user_profile") } %>
         
     | 
| 
      
 3 
     | 
    
         
            +
            <% redirect_url = onboarding_pending_authorizations_path %>
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            <%= append_javascript_pack_tag "decidim_verifications" %>
         
     | 
| 
      
 6 
     | 
    
         
            +
            <%= append_stylesheet_pack_tag "decidim_verifications" %>
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            <%= render layout: "layouts/decidim/shared/layout_center" do %>
         
     | 
| 
      
 9 
     | 
    
         
            +
              <div class="py-10">
         
     | 
| 
      
 10 
     | 
    
         
            +
                <%= t(
         
     | 
| 
      
 11 
     | 
    
         
            +
                      "onboarding_message_html",
         
     | 
| 
      
 12 
     | 
    
         
            +
                      scope: "decidim.verifications.authorizations.onboarding_pending",
         
     | 
| 
      
 13 
     | 
    
         
            +
                      action: onboarding_manager.action_text.downcase,
         
     | 
| 
      
 14 
     | 
    
         
            +
                      resource_name: onboarding_manager.model_name.human.downcase,
         
     | 
| 
      
 15 
     | 
    
         
            +
                      resource_title: translated_attribute(onboarding_manager.model_title)
         
     | 
| 
      
 16 
     | 
    
         
            +
                    ) %>
         
     | 
| 
      
 17 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              <section class="authorizations-list">
         
     | 
| 
      
 20 
     | 
    
         
            +
                <% onboarding_sections(
         
     | 
| 
      
 21 
     | 
    
         
            +
                    onboarding_manager,
         
     | 
| 
      
 22 
     | 
    
         
            +
                    redirect_url:,
         
     | 
| 
      
 23 
     | 
    
         
            +
                    granted_authorizations:,
         
     | 
| 
      
 24 
     | 
    
         
            +
                    pending_authorizations:,
         
     | 
| 
      
 25 
     | 
    
         
            +
                    unauthorized_methods:
         
     | 
| 
      
 26 
     | 
    
         
            +
                  ).each do |section| %>
         
     | 
| 
      
 27 
     | 
    
         
            +
                  <div class="verification__container-title"><%= section[:title] %></div>
         
     | 
| 
      
 28 
     | 
    
         
            +
                  <div class="verification__container my-4">
         
     | 
| 
      
 29 
     | 
    
         
            +
                    <% section[:items].each do |locals| %>
         
     | 
| 
      
 30 
     | 
    
         
            +
                      <%= render partial: "item", locals: %>
         
     | 
| 
      
 31 
     | 
    
         
            +
                    <% end %>
         
     | 
| 
      
 32 
     | 
    
         
            +
                  </div>
         
     | 
| 
      
 33 
     | 
    
         
            +
                <% end %>
         
     | 
| 
      
 34 
     | 
    
         
            +
              </section>
         
     | 
| 
      
 35 
     | 
    
         
            +
              <p class="prose prose-a:text-secondary">
         
     | 
| 
      
 36 
     | 
    
         
            +
                <%= t("decidim.verifications.authorizations.skip_verification", link: link_to(t("decidim.verifications.authorizations.start_exploring"), cta_button_path).html_safe).html_safe %>.
         
     | 
| 
      
 37 
     | 
    
         
            +
              </p>
         
     | 
| 
      
 38 
     | 
    
         
            +
            <% end %>
         
     | 
| 
         @@ -7,6 +7,6 @@ 
     | 
|
| 
       7 
7 
     | 
    
         
             
            <p><%= t("decidim.verifications.id_documents.authorizations.choose.choose_a_type") %></p>
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
            <div class="mt-4 flex justify-between">
         
     | 
| 
       10 
     | 
    
         
            -
              <%= link_to t("decidim.verifications.id_documents.authorizations.choose.offline"), { action: :new, using: :offline }, class: "button button__sm md:button__lg button__transparent-secondary" %>
         
     | 
| 
       11 
     | 
    
         
            -
              <%= link_to t("decidim.verifications.id_documents.authorizations.choose.online"), { action: :new, using: :online }, class: "button button__sm md:button__lg button__secondary" %>
         
     | 
| 
      
 10 
     | 
    
         
            +
              <%= link_to t("decidim.verifications.id_documents.authorizations.choose.offline"), { action: :new, using: :offline, redirect_url: }.compact, class: "button button__sm md:button__lg button__transparent-secondary" %>
         
     | 
| 
      
 11 
     | 
    
         
            +
              <%= link_to t("decidim.verifications.id_documents.authorizations.choose.online"), { action: :new, using: :online, redirect_url: }.compact, class: "button button__sm md:button__lg button__secondary" %>
         
     | 
| 
       12 
12 
     | 
    
         
             
            </div>
         
     | 
| 
         @@ -18,7 +18,7 @@ 
     | 
|
| 
       18 
18 
     | 
    
         
             
                <%= render partial: "form", locals: { form: } %>
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
20 
     | 
    
         
             
              <div class="form__wrapper-block flex-col-reverse md:flex-row justify-between">
         
     | 
| 
       21 
     | 
    
         
            -
                <%= link_to  
     | 
| 
      
 21 
     | 
    
         
            +
                <%= link_to authorizations_back_path(current_user, redirect_url:), class: "button button__sm md:button__lg button__text-secondary" do %>
         
     | 
| 
       22 
22 
     | 
    
         
             
                  <%= icon "arrow-left-line", class: "fill-current" %>
         
     | 
| 
       23 
23 
     | 
    
         
             
                  <span><%= t("decidim.wizard_step_form.wizard_aside.back") %></span>
         
     | 
| 
       24 
24 
     | 
    
         
             
                <% end %>
         
     | 
| 
         @@ -10,7 +10,7 @@ 
     | 
|
| 
       10 
10 
     | 
    
         
             
                  <%= render partial: "form", locals: { form: } %>
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
              <div class="form__wrapper-block flex-col-reverse md:flex-row justify-between">
         
     | 
| 
       13 
     | 
    
         
            -
                <%= link_to  
     | 
| 
      
 13 
     | 
    
         
            +
                <%= link_to authorizations_back_path(current_user, redirect_url:), class: "button button__sm md:button__lg button__text-secondary" do %>
         
     | 
| 
       14 
14 
     | 
    
         
             
                  <%= icon "arrow-left-line", class: "fill-current" %>
         
     | 
| 
       15 
15 
     | 
    
         
             
                  <%= t("decidim.wizard_step_form.wizard_aside.back") %>
         
     | 
| 
       16 
16 
     | 
    
         
             
                <% end %>
         
     | 
| 
         @@ -13,7 +13,7 @@ 
     | 
|
| 
       13 
13 
     | 
    
         
             
                </div>
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
                <div class="form__wrapper-block flex-col-reverse md:flex-row justify-between">
         
     | 
| 
       16 
     | 
    
         
            -
                  <%= link_to  
     | 
| 
      
 16 
     | 
    
         
            +
                  <%= link_to authorizations_back_path(current_user, redirect_url:), class: "button button__sm md:button__lg button__text-secondary" do %>
         
     | 
| 
       17 
17 
     | 
    
         
             
                    <%= icon "arrow-left-line", class: "fill-current" %>
         
     | 
| 
       18 
18 
     | 
    
         
             
                    <span><%= t("decidim.wizard_step_form.wizard_aside.back") %></span>
         
     | 
| 
       19 
19 
     | 
    
         
             
                  <% end %>
         
     | 
| 
         @@ -29,7 +29,7 @@ 
     | 
|
| 
       29 
29 
     | 
    
         
             
              </div>
         
     | 
| 
       30 
30 
     | 
    
         | 
| 
       31 
31 
     | 
    
         
             
              <div class="form__wrapper-block">
         
     | 
| 
       32 
     | 
    
         
            -
                <%= link_to  
     | 
| 
      
 32 
     | 
    
         
            +
                <%= link_to authorizations_back_path(current_user, redirect_url:), class: "button button__sm md:button__lg button__text-secondary" do %>
         
     | 
| 
       33 
33 
     | 
    
         
             
                  <%= icon "arrow-left-line", class: "fill-current" %>
         
     | 
| 
       34 
34 
     | 
    
         
             
                  <%= t("decidim.wizard_step_form.wizard_aside.back") %>
         
     | 
| 
       35 
35 
     | 
    
         
             
                <% end %>
         
     | 
| 
         @@ -12,7 +12,7 @@ 
     | 
|
| 
       12 
12 
     | 
    
         
             
              </div>
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
              <div class="form__wrapper-block flex-col-reverse md:flex-row justify-between">
         
     | 
| 
       15 
     | 
    
         
            -
                <%= link_to  
     | 
| 
      
 15 
     | 
    
         
            +
                <%= link_to authorizations_back_path(current_user, redirect_url:), class: "button button__sm md:button__lg button__text-secondary" do %>
         
     | 
| 
       16 
16 
     | 
    
         
             
                  <%= icon "arrow-left-line", class: "fill-current" %>
         
     | 
| 
       17 
17 
     | 
    
         
             
                  <%= t("decidim.wizard_step_form.wizard_aside.back") %>
         
     | 
| 
       18 
18 
     | 
    
         
             
                <% end %>
         
     | 
| 
         @@ -12,7 +12,7 @@ 
     | 
|
| 
       12 
12 
     | 
    
         
             
              </div>
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
              <div class="form__wrapper-block flex-col-reverse md:flex-row justify-between">
         
     | 
| 
       15 
     | 
    
         
            -
                <%= link_to  
     | 
| 
      
 15 
     | 
    
         
            +
                <%= link_to authorizations_back_path(current_user, redirect_url:), class: "button button__sm md:button__lg button__text-secondary" do %>
         
     | 
| 
       16 
16 
     | 
    
         
             
                  <%= icon "arrow-left-line", class: "fill-current" %>
         
     | 
| 
       17 
17 
     | 
    
         
             
                  <span><%= t("decidim.wizard_step_form.wizard_aside.back") %></span>
         
     | 
| 
       18 
18 
     | 
    
         
             
                <% end %>
         
     | 
| 
         @@ -12,7 +12,7 @@ 
     | 
|
| 
       12 
12 
     | 
    
         
             
              </div>
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
              <div class="form__wrapper-block flex-col-reverse md:flex-row justify-between">
         
     | 
| 
       15 
     | 
    
         
            -
                <%= link_to  
     | 
| 
      
 15 
     | 
    
         
            +
                <%= link_to authorizations_back_path(current_user, redirect_url:), class: "button button__sm md:button__lg button__text-secondary" do %>
         
     | 
| 
       16 
16 
     | 
    
         
             
                  <%= icon "arrow-left-line", class: "fill-current" %>
         
     | 
| 
       17 
17 
     | 
    
         
             
                  <span><%= t("decidim.wizard_step_form.wizard_aside.back") %></span>
         
     | 
| 
       18 
18 
     | 
    
         
             
                <% end %>
         
     | 
| 
         @@ -3,10 +3,6 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
              <p><%= t("extra_explanation.postal_codes", scope: "decidim.verifications.dummy_authorization", postal_codes: postal_codes.join(", "), count: postal_codes.count, user_postal_code: request["user_postal_code"]) %></p>
         
     | 
| 
       4 
4 
     | 
    
         
             
            <% end %>
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
            <% if request["scope"] && (scope = Decidim::Scope.find(request["scope"]&.to_i)) %>
         
     | 
| 
       7 
     | 
    
         
            -
              <p><%= t("extra_explanation.scope", scope: "decidim.verifications.dummy_authorization", scope_name: translated_attribute(scope.name), user_scope_name: request["user_scope_name"]) %></p>
         
     | 
| 
       8 
     | 
    
         
            -
            <% end %>
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
6 
     | 
    
         
             
            <div class="form__wrapper" data-partial-demo>
         
     | 
| 
       11 
7 
     | 
    
         
             
              <%= form.hidden_field :handler_name %>
         
     | 
| 
       12 
8 
     | 
    
         
             
              <%= form.text_field :document_number %>
         
     | 
| 
         @@ -14,6 +10,4 @@ 
     | 
|
| 
       14 
10 
     | 
    
         
             
              <div class="row">
         
     | 
| 
       15 
11 
     | 
    
         
             
                <%= form.date_field :birthday %>
         
     | 
| 
       16 
12 
     | 
    
         
             
              </div>
         
     | 
| 
       17 
     | 
    
         
            -
              <%= scopes_select_field(form, :scope_id) %>
         
     | 
| 
       18 
13 
     | 
    
         
             
            </div>
         
     | 
| 
       19 
     | 
    
         
            -
            git
         
     | 
| 
         @@ -3,6 +3,40 @@ 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            <%= render "layouts/decidim/application" do %>
         
     | 
| 
       5 
5 
     | 
    
         
             
              <%= render layout: "layouts/decidim/shared/layout_center" do %>
         
     | 
| 
      
 6 
     | 
    
         
            +
                <% if onboarding_manager.valid? %>
         
     | 
| 
      
 7 
     | 
    
         
            +
                  <% authorizations = action_authorized_to(onboarding_manager.action, **onboarding_manager.action_authorized_resources) %>
         
     | 
| 
      
 8 
     | 
    
         
            +
                  <% if authorizations.single_authorization_required? && is_active_link?(authorizations.statuses.first.current_path) %>
         
     | 
| 
      
 9 
     | 
    
         
            +
                    <% if current_user.ephemeral? %>
         
     | 
| 
      
 10 
     | 
    
         
            +
                      <%= cell(
         
     | 
| 
      
 11 
     | 
    
         
            +
                        "decidim/announcement",
         
     | 
| 
      
 12 
     | 
    
         
            +
                        t("pending_ephemeral_authorization", scope: "decidim.onboarding_action_message"),
         
     | 
| 
      
 13 
     | 
    
         
            +
                        callout_class: "warning"
         
     | 
| 
      
 14 
     | 
    
         
            +
                      ) %>
         
     | 
| 
      
 15 
     | 
    
         
            +
                    <% else %>
         
     | 
| 
      
 16 
     | 
    
         
            +
                      <%= cell(
         
     | 
| 
      
 17 
     | 
    
         
            +
                        "decidim/announcement",
         
     | 
| 
      
 18 
     | 
    
         
            +
                        {
         
     | 
| 
      
 19 
     | 
    
         
            +
                          title: case authorizations.statuses.first.code
         
     | 
| 
      
 20 
     | 
    
         
            +
                                 when :expired
         
     | 
| 
      
 21 
     | 
    
         
            +
                                   t("expired_authorization_active_title", scope: "decidim.onboarding_action_message")
         
     | 
| 
      
 22 
     | 
    
         
            +
                                 when :incomplete
         
     | 
| 
      
 23 
     | 
    
         
            +
                                   t("incomplete_authorization_active_title", scope: "decidim.onboarding_action_message")
         
     | 
| 
      
 24 
     | 
    
         
            +
                                 else
         
     | 
| 
      
 25 
     | 
    
         
            +
                                   t("pending_authorization_active_title", scope: "decidim.onboarding_action_message")
         
     | 
| 
      
 26 
     | 
    
         
            +
                                 end,
         
     | 
| 
      
 27 
     | 
    
         
            +
                          body: t(
         
     | 
| 
      
 28 
     | 
    
         
            +
                              "pending_authorization_active_message",
         
     | 
| 
      
 29 
     | 
    
         
            +
                              scope: "decidim.onboarding_action_message",
         
     | 
| 
      
 30 
     | 
    
         
            +
                              action: onboarding_manager.action_text.downcase,
         
     | 
| 
      
 31 
     | 
    
         
            +
                              resource_name: onboarding_manager.model_name.human.downcase,
         
     | 
| 
      
 32 
     | 
    
         
            +
                              resource_title: decidim_sanitize_translated(onboarding_manager.model_title)
         
     | 
| 
      
 33 
     | 
    
         
            +
                            )
         
     | 
| 
      
 34 
     | 
    
         
            +
                        },
         
     | 
| 
      
 35 
     | 
    
         
            +
                        callout_class: "warning"
         
     | 
| 
      
 36 
     | 
    
         
            +
                      ) %>
         
     | 
| 
      
 37 
     | 
    
         
            +
                    <% end %>
         
     | 
| 
      
 38 
     | 
    
         
            +
                  <% end %>
         
     | 
| 
      
 39 
     | 
    
         
            +
                <% end %>
         
     | 
| 
       6 
40 
     | 
    
         
             
                <%= yield %>
         
     | 
| 
       7 
41 
     | 
    
         
             
              <% end %>
         
     | 
| 
       8 
42 
     | 
    
         
             
            <% end %>
         
     |