decidim-verifications 0.32.0 → 0.32.2

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.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/app/commands/decidim/verifications/confirm_user_authorization.rb +31 -28
  3. data/app/commands/decidim/verifications/csv_census/confirm_census_authorization.rb +14 -5
  4. data/app/commands/decidim/verifications/perform_authorization_step.rb +3 -1
  5. data/app/controllers/concerns/decidim/verifications/admin/pending_authorization_loader.rb +2 -0
  6. data/app/controllers/decidim/verifications/application_controller.rb +2 -0
  7. data/app/controllers/decidim/verifications/authorizations_controller.rb +15 -3
  8. data/app/controllers/decidim/verifications/csv_census/admin/census_controller.rb +1 -1
  9. data/app/controllers/decidim/verifications/csv_census/authorizations_controller.rb +6 -1
  10. data/app/controllers/decidim/verifications/id_documents/admin/confirmations_controller.rb +6 -1
  11. data/app/controllers/decidim/verifications/id_documents/authorizations_controller.rb +2 -0
  12. data/app/controllers/decidim/verifications/postal_letter/authorizations_controller.rb +6 -1
  13. data/app/controllers/decidim/verifications/sms/authorizations_controller.rb +11 -1
  14. data/config/locales/ca-IT.yml +5 -0
  15. data/config/locales/ca.yml +5 -0
  16. data/config/locales/de.yml +11 -3
  17. data/config/locales/en.yml +5 -0
  18. data/config/locales/es-MX.yml +5 -0
  19. data/config/locales/es-PY.yml +5 -0
  20. data/config/locales/es.yml +5 -0
  21. data/config/locales/eu.yml +30 -25
  22. data/config/locales/fi.yml +5 -0
  23. data/config/locales/fr-CA.yml +25 -0
  24. data/config/locales/fr.yml +25 -0
  25. data/config/locales/gl.yml +196 -9
  26. data/config/locales/ja.yml +5 -0
  27. data/config/locales/sv.yml +12 -0
  28. data/decidim-verifications.gemspec +1 -1
  29. data/lib/decidim/verifications/version.rb +1 -1
  30. metadata +7 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 117ac2e2b276dbfb07468acc14f0714fd7f4a6a03d5a6dd2ecb03e8da108ccb7
4
- data.tar.gz: 912b387764e1c9b0350bc0df6cc52ce3193b5c3fedc5e18b83820e976eb29914
3
+ metadata.gz: bc1405e6d6499b3d3ca5d9c7ec4fe23026ce545d26dec39fd139b07b390991c2
4
+ data.tar.gz: 9a995e907c52f629723385203e5f747b4401536855d1396ea83a7543a9d40ecc
5
5
  SHA512:
6
- metadata.gz: 6284d41a65f12b4d9d0536dca5aff4b6928e5c928ff00c94de4685d893dc806e1c0814efe9f32f676ef6a6080344889529a06c35865a25254c5c7b3b95528920
7
- data.tar.gz: 21a4c696295a768340d2cfd7c3974aa08dcdb2a397e46494951f5447cb86f368f358fd5a1896003732fb8bcd3f97791b67f9b17bba6ea81050cf7378713e6a49
6
+ metadata.gz: 1ebdac29531d1b7a9c9ce4e48b1661f01b5ffeb0869be210680f67c8875ad5c67e6dcad03df47ba0430d836baae2a0831340a87ed8d4cb6bf9c2916004457db1
7
+ data.tar.gz: 91a538ab8d8e491ab2359e4e91c0e0cbc88ac0aa512098b177a23ea07f4d760dc00c82f87243c8a4a1b6ba66a2b6d26fe5fada7107db3ecbac7c7748f47aa4f3
@@ -4,36 +4,41 @@ module Decidim
4
4
  module Verifications
5
5
  # A command to confirm a previous partial authorization.
6
6
  class ConfirmUserAuthorization < Decidim::Command
7
- # Number of failed confirmation attempts before throttling.
8
- MAX_FAILED_ATTEMPTS = 2
9
-
10
7
  # Public: Initializes the command.
11
8
  #
12
9
  # authorization - An Authorization to be confirmed.
13
10
  # form - A form object with the verification data to confirm it.
14
- def initialize(authorization, form, session)
11
+ def initialize(authorization, form)
15
12
  @authorization = authorization
16
13
  @form = form
17
- @session = session
18
14
  end
19
15
 
20
16
  # Executes the command. Broadcasts these events:
21
17
  #
22
18
  # - :ok when everything is valid.
23
19
  # - :invalid if the handler was not valid and we could not proceed.
20
+ # - :locked if too many failed attempts and the authorization is locked.
21
+ # - :expired if the verification code has expired.
24
22
  #
25
23
  # Returns nothing.
26
24
  def call
27
25
  return already_confirmed! if authorization.granted?
28
26
 
29
- return invalid! unless form.valid?
27
+ Decidim::Authorization.transaction do
28
+ authorization.lock!
29
+ authorization.clear_expired_lock!
30
+
31
+ return locked! if authorization.locked_for_confirmation?
32
+
33
+ return invalid! unless form.valid?
30
34
 
31
- throttle! if too_many_failed_attempts?
35
+ return expired! if code_expired?
32
36
 
33
- if confirmation_successful?
34
- valid!
35
- else
36
- invalid!
37
+ if confirmation_successful?
38
+ valid!
39
+ else
40
+ invalid!
41
+ end
37
42
  end
38
43
  rescue StandardError => e
39
44
  invalid!(e.message)
@@ -51,41 +56,39 @@ module Decidim
51
56
 
52
57
  def valid!
53
58
  authorization.grant!
54
- reset_failed_attempts!
59
+ authorization.reset_failed_attempts!
55
60
  broadcast(:ok)
56
61
  end
57
62
 
58
63
  def invalid!(message = nil)
59
- record_failed_attempt!
64
+ authorization.record_failed_attempt!
60
65
  broadcast(:invalid, message)
61
66
  end
62
67
 
63
68
  def already_confirmed!
64
- reset_failed_attempts!
69
+ authorization.reset_failed_attempts!
65
70
  broadcast(:already_confirmed)
66
71
  end
67
72
 
68
- def too_many_failed_attempts?
69
- failed_attempts > MAX_FAILED_ATTEMPTS
73
+ def locked!
74
+ broadcast(:locked)
70
75
  end
71
76
 
72
- def failed_attempts
73
- session[:failed_attempts] ||= 0
74
- end
75
-
76
- def reset_failed_attempts!
77
- session[:failed_attempts] = 0
78
- end
77
+ def code_expired?
78
+ sent_at = authorization.verification_metadata["code_sent_at"]
79
+ return false unless sent_at
79
80
 
80
- def record_failed_attempt!
81
- session[:failed_attempts] = failed_attempts + 1
81
+ sent_at = Time.zone.parse(sent_at.to_s) if sent_at.is_a?(String)
82
+ sent_at < Decidim.verification_code_expiry_minutes.minutes.ago
82
83
  end
83
84
 
84
- def throttle!
85
- sleep rand * failed_attempts
85
+ def expired!
86
+ authorization.update!(verification_metadata: {})
87
+ authorization.reset_failed_attempts!
88
+ broadcast(:expired)
86
89
  end
87
90
 
88
- attr_reader :authorization, :form, :session
91
+ attr_reader :authorization, :form
89
92
  end
90
93
  end
91
94
  end
@@ -7,11 +7,20 @@ module Decidim
7
7
  def call
8
8
  return broadcast(:invalid) unless form.valid?
9
9
 
10
- if confirmation_successful?
11
- authorization.grant!
12
- broadcast(:ok)
13
- else
14
- broadcast(:invalid)
10
+ Decidim::Authorization.transaction do
11
+ authorization.lock!
12
+ authorization.clear_expired_lock!
13
+
14
+ return broadcast(:locked) if authorization.locked_for_confirmation?
15
+
16
+ if confirmation_successful?
17
+ authorization.grant!
18
+ authorization.reset_failed_attempts!
19
+ broadcast(:ok)
20
+ else
21
+ authorization.record_failed_attempt!
22
+ broadcast(:invalid)
23
+ end
15
24
  end
16
25
  end
17
26
  end
@@ -34,7 +34,9 @@ module Decidim
34
34
  unique_id: handler.unique_id,
35
35
  metadata: handler.metadata,
36
36
  verification_metadata: handler.verification_metadata,
37
- verification_attachment: handler.verification_attachment
37
+ verification_attachment: handler.verification_attachment,
38
+ failed_attempts: 0,
39
+ locked_at: nil
38
40
  }
39
41
 
40
42
  authorization.save!
@@ -9,6 +9,8 @@ module Decidim
9
9
  extend ActiveSupport::Concern
10
10
 
11
11
  included do
12
+ protected
13
+
12
14
  def load_pending_authorization!(name, pending_authorization_id)
13
15
  Authorizations.new(organization: current_organization, name:, granted: false)
14
16
  .query
@@ -10,6 +10,8 @@ module Decidim
10
10
 
11
11
  before_action :confirmed_user, only: [:new, :create, :renew]
12
12
 
13
+ protected
14
+
13
15
  def new
14
16
  raise NotImplementedError
15
17
  end
@@ -21,11 +21,17 @@ module Decidim
21
21
 
22
22
  layout "layouts/decidim/authorizations", except: [:index, :onboarding_pending]
23
23
 
24
- def new; end
24
+ def new
25
+ enforce_permission_to :read, :authorization
26
+ end
25
27
 
26
- def index; end
28
+ def index
29
+ enforce_permission_to :read, :authorization
30
+ end
27
31
 
28
32
  def onboarding_pending
33
+ enforce_permission_to :read, :authorization
34
+
29
35
  return redirect_back_or_to(authorizations_path) unless onboarding_manager.valid?
30
36
 
31
37
  authorizations = action_authorized_to(onboarding_manager.action, **onboarding_manager.action_authorized_resources)
@@ -56,6 +62,8 @@ module Decidim
56
62
  end
57
63
 
58
64
  def create
65
+ enforce_permission_to(:create, :authorization, authorization:)
66
+
59
67
  AuthorizeUser.call(handler, current_organization) do
60
68
  on(:ok) do
61
69
  flash[:notice] = t("authorizations.create.success", scope: "decidim.verifications")
@@ -93,12 +101,16 @@ module Decidim
93
101
  end
94
102
 
95
103
  def renew_onboarding_data
104
+ enforce_permission_to :read, :authorization
105
+
96
106
  store_onboarding_cookie_data!(current_user)
97
107
 
98
108
  redirect_to onboarding_pending_authorizations_path
99
109
  end
100
110
 
101
111
  def clear_onboarding_data
112
+ enforce_permission_to :read, :authorization
113
+
102
114
  clear_onboarding_data!(current_user)
103
115
  end
104
116
 
@@ -187,7 +199,7 @@ module Decidim
187
199
  private
188
200
 
189
201
  def authorization
190
- @authorization ||= Decidim::Authorization.find_by(
202
+ @authorization ||= Decidim::Authorization.find_or_initialize_by(
191
203
  user: current_user,
192
204
  name: handler_name
193
205
  )
@@ -96,7 +96,7 @@ module Decidim
96
96
 
97
97
  return { icon: nil, text: t(".no_user"), last_sign_in: nil } unless user
98
98
 
99
- authorized = Decidim::Authorization.where(name: "csv_census", user:)
99
+ authorized = Decidim::Authorization.where(name: "csv_census", user:) # rubocop:disable Decidim/OrganizationScopedFinder -- user is already scoped to current_organization (line 95)
100
100
  .where.not(granted_at: nil)
101
101
  .exists?
102
102
 
@@ -11,14 +11,19 @@ module Decidim
11
11
  before_action :load_authorization
12
12
 
13
13
  def new
14
+ enforce_permission_to :create, :authorization, authorization: @authorization
15
+
14
16
  @form = CensusForm.from_params(user: current_user)
15
- ConfirmCensusAuthorization.call(@authorization, @form, session) do
17
+ ConfirmCensusAuthorization.call(@authorization, @form) do
16
18
  on(:ok) do
17
19
  flash[:notice] = t("authorizations.new.success", scope: "decidim.verifications.csv_census")
18
20
  end
19
21
  on(:invalid) do
20
22
  flash[:alert] = t("authorizations.new.error", scope: "decidim.verifications.csv_census")
21
23
  end
24
+ on(:locked) do
25
+ flash[:alert] = t("authorizations.new.locked", scope: "decidim.verifications.csv_census")
26
+ end
22
27
  redirect_to decidim_verifications.authorizations_path
23
28
  end
24
29
  end
@@ -28,7 +28,7 @@ module Decidim
28
28
 
29
29
  @form = InformationForm.from_params(params)
30
30
 
31
- ConfirmUserAuthorization.call(@pending_authorization, @form, session) do
31
+ ConfirmUserAuthorization.call(@pending_authorization, @form) do
32
32
  on(:ok) do
33
33
  flash[:notice] = t("confirmations.create.success", scope: "decidim.verifications.id_documents.admin")
34
34
  redirect_to pending_authorizations_path
@@ -38,6 +38,11 @@ module Decidim
38
38
  flash.now[:alert] = t("confirmations.create.error", scope: "decidim.verifications.id_documents.admin")
39
39
  render action: :new, status: :unprocessable_content
40
40
  end
41
+
42
+ on(:locked) do
43
+ flash.now[:alert] = t("confirmations.create.locked", scope: "decidim.verifications.id_documents.admin")
44
+ render action: :new, status: :too_many_requests
45
+ end
41
46
  end
42
47
  end
43
48
 
@@ -14,6 +14,8 @@ module Decidim
14
14
  before_action :load_authorization
15
15
 
16
16
  def choose
17
+ enforce_permission_to :create, :authorization, authorization: @authorization
18
+
17
19
  url_params = { redirect_url: }.compact
18
20
 
19
21
  return redirect_to(action: :new, **url_params.merge(using: verification_type)) if available_methods.count == 1
@@ -45,7 +45,7 @@ module Decidim
45
45
 
46
46
  @form = ConfirmationForm.from_params(params)
47
47
 
48
- ConfirmUserAuthorization.call(@authorization, @form, session) do
48
+ ConfirmUserAuthorization.call(@authorization, @form) do
49
49
  on(:ok) do
50
50
  flash[:notice] = t("authorizations.update.success", scope: "decidim.verifications.postal_letter")
51
51
  redirect_to decidim_verifications.authorizations_path
@@ -55,6 +55,11 @@ module Decidim
55
55
  flash.now[:alert] = t("authorizations.update.error", scope: "decidim.verifications.postal_letter")
56
56
  render :edit, status: :unprocessable_content
57
57
  end
58
+
59
+ on(:locked) do
60
+ flash.now[:alert] = t("authorizations.update.locked", scope: "decidim.verifications.postal_letter")
61
+ render :edit, status: :too_many_requests
62
+ end
58
63
  end
59
64
  end
60
65
 
@@ -43,7 +43,7 @@ module Decidim
43
43
 
44
44
  @form = ConfirmationForm.from_params(params)
45
45
 
46
- ConfirmUserAuthorization.call(authorization, @form, session) do
46
+ ConfirmUserAuthorization.call(authorization, @form) do
47
47
  on(:ok) do
48
48
  flash[:notice] = t("authorizations.update.success", scope: "decidim.verifications.sms")
49
49
 
@@ -54,6 +54,16 @@ module Decidim
54
54
  flash.now[:alert] = t("authorizations.update.error", scope: "decidim.verifications.sms")
55
55
  render :edit, status: :unprocessable_content
56
56
  end
57
+
58
+ on(:locked) do
59
+ flash.now[:alert] = t("authorizations.update.locked", scope: "decidim.verifications.sms")
60
+ render :edit, status: :too_many_requests
61
+ end
62
+
63
+ on(:expired) do
64
+ flash[:alert] = t("authorizations.update.expired", scope: "decidim.verifications.sms")
65
+ redirect_to redirect_url || decidim_verifications.authorizations_path
66
+ end
57
67
  end
58
68
  end
59
69
 
@@ -228,6 +228,7 @@ ca-IT:
228
228
  authorizations:
229
229
  new:
230
230
  error: No hem pogut verificar el teu compte o no estàs al cens de l'organització.
231
+ locked: Massa intents fallits. Si us plau, torna a provar-ho més tard.
231
232
  success: El teu compte s'ha verificat correctament.
232
233
  dummy_authorization:
233
234
  extra_explanation:
@@ -253,6 +254,7 @@ ca-IT:
253
254
  confirmations:
254
255
  create:
255
256
  error: La verificació no coincideix. Si us plau, torna-ho a provar o rebutja la verificació perquè la participant pugui modificar-la.
257
+ locked: Massa intents fallits. Si us plau, torna a provar-ho més tard.
256
258
  success: Participant convidada correctament.
257
259
  new:
258
260
  reject: Rebutjar
@@ -329,6 +331,7 @@ ca-IT:
329
331
  title: Sol·licita el teu codi de verificació
330
332
  update:
331
333
  error: El teu codi de verificació no coincideix amb el nostre. Si us plau, revisa la carta que t'hem enviat.
334
+ locked: Massa intents fallits. Si us plau, torna a provar-ho més tard.
332
335
  success: Felicitats. T'has verificat correctament.
333
336
  sms:
334
337
  authorizations:
@@ -348,6 +351,8 @@ ca-IT:
348
351
  title: Sol·licita el teu codi de verificació
349
352
  update:
350
353
  error: El codi de verificació que has introduït no coincideix amb el nostre. Si us plau, torna a revisar l'SMS que t'hem enviat.
354
+ expired: El codi de verificació ha caducat. Si us plau, demana'n un de nou.
355
+ locked: Massa intents fallits. Si us plau, torna a provar-ho més tard o demana un nou codi de verificació.
351
356
  success: Felicitats. T'has verificat correctament.
352
357
  errors:
353
358
  messages:
@@ -228,6 +228,7 @@ ca:
228
228
  authorizations:
229
229
  new:
230
230
  error: No hem pogut verificar el teu compte o no estàs al cens de l'organització.
231
+ locked: Massa intents fallits. Si us plau, torna a provar-ho més tard.
231
232
  success: El teu compte s'ha verificat correctament.
232
233
  dummy_authorization:
233
234
  extra_explanation:
@@ -253,6 +254,7 @@ ca:
253
254
  confirmations:
254
255
  create:
255
256
  error: La verificació no coincideix. Si us plau, torna-ho a provar o rebutja la verificació perquè la participant pugui modificar-la.
257
+ locked: Massa intents fallits. Si us plau, torna a provar-ho més tard.
256
258
  success: Participant convidada correctament.
257
259
  new:
258
260
  reject: Rebutjar
@@ -329,6 +331,7 @@ ca:
329
331
  title: Sol·licita el teu codi de verificació
330
332
  update:
331
333
  error: El teu codi de verificació no coincideix amb el nostre. Si us plau, revisa la carta que t'hem enviat.
334
+ locked: Massa intents fallits. Si us plau, torna a provar-ho més tard.
332
335
  success: Felicitats. T'has verificat correctament.
333
336
  sms:
334
337
  authorizations:
@@ -348,6 +351,8 @@ ca:
348
351
  title: Sol·licita el teu codi de verificació
349
352
  update:
350
353
  error: El codi de verificació que has introduït no coincideix amb el nostre. Si us plau, torna a revisar l'SMS que t'hem enviat.
354
+ expired: El codi de verificació ha caducat. Si us plau, demana'n un de nou.
355
+ locked: Massa intents fallits. Si us plau, torna a provar-ho més tard o demana un nou codi de verificació.
351
356
  success: Felicitats. T'has verificat correctament.
352
357
  errors:
353
358
  messages:
@@ -49,6 +49,7 @@ de:
49
49
  confirm: Das Entziehen aller Berechtigungen vor einem Datum kann nicht rückgängig gemacht werden. Sind Sie sicher, dass Sie fortfahren möchten?
50
50
  confirm_all: Das Entziehen aller Berechtigungen nicht rückgängig gemacht werden. Sind Sie sicher, dass Sie fortfahren möchten?
51
51
  destroy_nok: Beim Entziehen der Berechtigungen ist ein Fehler aufgetreten.
52
+ destroy_ok: Der Widerruf der Verifizierungen läuft. Dies kann einige Minuten in Anspruch nehmen.
52
53
  info: Es gibt insgesamt %{count} verifizierte Teilnehmer.
53
54
  no_data: Keine verifizierten Teilnehmer.
54
55
  title: Berechtigungen widerrufen
@@ -151,7 +152,7 @@ de:
151
152
  new:
152
153
  authorize: Senden
153
154
  authorize_with: Bestätigen Sie mit %{authorizer}
154
- tos_agreement: Durch die Überprüfung Ihrer Identität akzeptieren Sie %{link}.
155
+ tos_agreement: Durch die Überprüfung Ihrer Identität erklären Sie sich einverstanden mit den %{link}.
155
156
  onboarding_pending:
156
157
  completed_verifications: Sie wurden erfolgreich autorisiert, jetzt können Sie %{action} auf %{resource_name}
157
158
  granted_verifications: Verifizierung erfolgeich
@@ -164,8 +165,8 @@ de:
164
165
  continue: Weiter
165
166
  info_renew: Wenn Sie die Daten aktualisieren möchten, fahren Sie mit der Erneuerung fort.
166
167
  title: Verifizierung erneuern
167
- skip_verification: Sie können dies für jetzt und %{link}überspringen
168
- start_exploring: Fang an zu erforschen
168
+ skip_verification: Sie können dies vorübergehend überspringen und %{link}
169
+ start_exploring: mit der Erkundung beginnen
169
170
  csv_census:
170
171
  admin:
171
172
  actions:
@@ -183,6 +184,10 @@ de:
183
184
  empty: Es gibt keine Volkszählungsdaten. Verwenden Sie %{import_csv} um eine CSV-Datei zu importieren.
184
185
  no_sign_in: Nie angemeldet
185
186
  no_user: Kein Mitglied gefunden
187
+ title: Aktuelle Zählungsdaten
188
+ instructions:
189
+ body: Öffnen Sie dazu die Systemverwaltung und fügen Sie der Organisation die Verifizierung "csv_census" hinzu
190
+ title: Sie müssen die CSV-Zählung für diese Organisation aktivieren
186
191
  last_login:
187
192
  no_sign_in: Nie angemeldet
188
193
  no_user: Kein Mitglied
@@ -251,6 +256,7 @@ de:
251
256
  success: Teilnehmer erfolgreich überprüft.
252
257
  new:
253
258
  reject: Ablehnen
259
+ title: Geben Sie die Daten aus dem Bild ein
254
260
  verify: Überprüfen
255
261
  offline_confirmations:
256
262
  create:
@@ -258,6 +264,7 @@ de:
258
264
  success: Benutzer erfolgreich überprüft.
259
265
  new:
260
266
  cancel: Abbrechen
267
+ title: Geben Sie die E-Mail-Adresse der teilnehmenden Person sowie die Dokumentdaten ein
261
268
  verify: Überprüfen
262
269
  pending_authorizations:
263
270
  index:
@@ -298,6 +305,7 @@ de:
298
305
  pending_authorizations:
299
306
  index:
300
307
  address: Adresse
308
+ already_sent: Der Brief wurde bereits versendet und kann nicht erneut als versendet markiert werden.
301
309
  letter_sent_at: Brief an gesendet
302
310
  mark_as_sent: Als gesendet markieren
303
311
  not_yet_sent: Noch nicht gesendet
@@ -228,6 +228,7 @@ en:
228
228
  authorizations:
229
229
  new:
230
230
  error: We could not verify your account or you are not in the organization's census.
231
+ locked: Too many failed attempts. Please try again later.
231
232
  success: Your account has been successfully verified.
232
233
  dummy_authorization:
233
234
  extra_explanation:
@@ -253,6 +254,7 @@ en:
253
254
  confirmations:
254
255
  create:
255
256
  error: Verification does not match. Please try again or reject the verification so the participant can amend it.
257
+ locked: Too many failed attempts. Please try again later.
256
258
  success: Participant successfully verified.
257
259
  new:
258
260
  reject: Reject
@@ -329,6 +331,7 @@ en:
329
331
  title: Request your verification code
330
332
  update:
331
333
  error: Your verification code does not match ours. Please double-check the letter we sent to you.
334
+ locked: Too many failed attempts. Please try again later.
332
335
  success: Congratulations. You have been successfully verified.
333
336
  sms:
334
337
  authorizations:
@@ -348,6 +351,8 @@ en:
348
351
  title: Request your verification code
349
352
  update:
350
353
  error: Your verification code does not match ours. Please double-check the SMS we sent you.
354
+ expired: The verification code has expired. Please request a new one.
355
+ locked: Too many failed attempts. Please try again later or request a new code.
351
356
  success: Congratulations. You have been successfully verified.
352
357
  errors:
353
358
  messages:
@@ -228,6 +228,7 @@ es-MX:
228
228
  authorizations:
229
229
  new:
230
230
  error: No pudimos verificar su cuenta o usted no está en el censo de la organización.
231
+ locked: Demasiados intentos fallidos. Por favor, inténtalo de nuevo más tarde.
231
232
  success: Su cuenta ha sido verificada con éxito.
232
233
  dummy_authorization:
233
234
  extra_explanation:
@@ -253,6 +254,7 @@ es-MX:
253
254
  confirmations:
254
255
  create:
255
256
  error: La verificación no coincide. Por favor inténtalo de nuevo o rechaza la verificación para que la participante pueda modificarla.
257
+ locked: Demasiados intentos fallidos. Por favor, inténtalo de nuevo más tarde.
256
258
  success: Participante verificada correctamente.
257
259
  new:
258
260
  reject: Rechazar
@@ -329,6 +331,7 @@ es-MX:
329
331
  title: Solicita tu código de verificación
330
332
  update:
331
333
  error: Tu código de verificación no coincide con el nuestro. Por favor, revisa la carta que te enviamos.
334
+ locked: Demasiados intentos fallidos. Por favor, inténtalo de nuevo más tarde.
332
335
  success: Felicidades. Te has verificado con éxito.
333
336
  sms:
334
337
  authorizations:
@@ -348,6 +351,8 @@ es-MX:
348
351
  title: Solicita tu código de verificación
349
352
  update:
350
353
  error: El código de verificación no coincide con el nuestro. Por favor, vuelve a revisar el SMS que te enviamos.
354
+ expired: El código de verificación ha caducado. Por favor, pide uno nuevo.
355
+ locked: Demasiados intentos fallidos. Inténtalo de nuevo más tarde o pide un código de verificación nuevo.
351
356
  success: Felicidades. Te has verificado con éxito.
352
357
  errors:
353
358
  messages:
@@ -228,6 +228,7 @@ es-PY:
228
228
  authorizations:
229
229
  new:
230
230
  error: No pudimos verificar su cuenta o usted no está en el censo de la organización.
231
+ locked: Demasiados intentos fallidos. Por favor, inténtalo de nuevo más tarde.
231
232
  success: Su cuenta ha sido verificada con éxito.
232
233
  dummy_authorization:
233
234
  extra_explanation:
@@ -253,6 +254,7 @@ es-PY:
253
254
  confirmations:
254
255
  create:
255
256
  error: La verificación no coincide. Por favor inténtalo de nuevo o rechaza la verificación para que la participante pueda modificarla.
257
+ locked: Demasiados intentos fallidos. Por favor, inténtalo de nuevo más tarde.
256
258
  success: Participante verificada correctamente.
257
259
  new:
258
260
  reject: Rechazar
@@ -329,6 +331,7 @@ es-PY:
329
331
  title: Solicita tu código de verificación
330
332
  update:
331
333
  error: Tu código de verificación no coincide con el nuestro. Por favor, revisa la carta que te enviamos.
334
+ locked: Demasiados intentos fallidos. Por favor, inténtalo de nuevo más tarde.
332
335
  success: Felicidades. Te has verificado con éxito.
333
336
  sms:
334
337
  authorizations:
@@ -348,6 +351,8 @@ es-PY:
348
351
  title: Solicita tu código de verificación
349
352
  update:
350
353
  error: El código de verificación no coincide con el nuestro. Por favor, vuelve a revisar el SMS que te enviamos.
354
+ expired: El código de verificación ha caducado. Por favor, pide uno nuevo.
355
+ locked: Demasiados intentos fallidos. Inténtalo de nuevo más tarde o pide un código de verificación nuevo.
351
356
  success: Felicidades. Te has verificado con éxito.
352
357
  errors:
353
358
  messages:
@@ -228,6 +228,7 @@ es:
228
228
  authorizations:
229
229
  new:
230
230
  error: No pudimos verificar tu cuenta o no estás en el censo de la organización.
231
+ locked: Demasiados intentos fallidos. Por favor, inténtalo de nuevo más tarde.
231
232
  success: Tu cuenta se ha verificado correctamente.
232
233
  dummy_authorization:
233
234
  extra_explanation:
@@ -253,6 +254,7 @@ es:
253
254
  confirmations:
254
255
  create:
255
256
  error: La verificación no coincide. Por favor inténtalo de nuevo o rechaza la verificación para que la participante pueda modificarla.
257
+ locked: Demasiados intentos fallidos. Por favor, inténtalo de nuevo más tarde.
256
258
  success: Participante verificada correctamente.
257
259
  new:
258
260
  reject: Rechazar
@@ -329,6 +331,7 @@ es:
329
331
  title: Solicita tu código de verificación
330
332
  update:
331
333
  error: Tu código de verificación no coincide con el nuestro. Por favor, revisa la carta que te enviamos.
334
+ locked: Demasiados intentos fallidos. Por favor, inténtalo de nuevo más tarde.
332
335
  success: Felicidades. Te has verificado con éxito.
333
336
  sms:
334
337
  authorizations:
@@ -348,6 +351,8 @@ es:
348
351
  title: Solicita tu código de verificación
349
352
  update:
350
353
  error: El código de verificación no coincide con el nuestro. Por favor, vuelve a revisar el SMS que te enviamos.
354
+ expired: El código de verificación ha caducado. Por favor, pide uno nuevo.
355
+ locked: Demasiados intentos fallidos. Inténtalo de nuevo más tarde o pide un código de verificación nuevo.
351
356
  success: Felicidades. Te has verificado con éxito.
352
357
  errors:
353
358
  messages: