devise_token_auth 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/devise_token_auth/application_controller.rb +2 -2
  3. data/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb +25 -3
  4. data/app/controllers/devise_token_auth/passwords_controller.rb +31 -13
  5. data/app/controllers/devise_token_auth/registrations_controller.rb +1 -1
  6. data/config/locales/da-DK.yml +2 -0
  7. data/config/locales/de.yml +2 -0
  8. data/config/locales/en.yml +2 -0
  9. data/config/locales/es.yml +2 -0
  10. data/config/locales/fr.yml +2 -0
  11. data/config/locales/he.yml +2 -0
  12. data/config/locales/it.yml +2 -0
  13. data/config/locales/ja.yml +2 -0
  14. data/config/locales/nl.yml +2 -0
  15. data/config/locales/pl.yml +2 -0
  16. data/config/locales/pt-BR.yml +2 -0
  17. data/config/locales/pt.yml +2 -0
  18. data/config/locales/ro.yml +2 -0
  19. data/config/locales/ru.yml +2 -0
  20. data/config/locales/sq.yml +2 -0
  21. data/config/locales/sv.yml +2 -0
  22. data/config/locales/uk.yml +2 -0
  23. data/config/locales/vi.yml +2 -0
  24. data/config/locales/zh-CN.yml +2 -0
  25. data/config/locales/zh-HK.yml +2 -0
  26. data/config/locales/zh-TW.yml +2 -0
  27. data/lib/devise_token_auth/engine.rb +3 -1
  28. data/lib/devise_token_auth/version.rb +1 -1
  29. data/test/controllers/devise_token_auth/omniauth_callbacks_controller_test.rb +107 -42
  30. data/test/controllers/devise_token_auth/passwords_controller_test.rb +112 -8
  31. data/test/controllers/devise_token_auth/registrations_controller_test.rb +3 -3
  32. data/test/dummy/tmp/generators/app/models/mang.rb +7 -0
  33. data/test/dummy/tmp/generators/app/models/user.rb +7 -0
  34. data/test/dummy/tmp/generators/config/initializers/devise_token_auth.rb +48 -0
  35. data/test/dummy/tmp/generators/config/routes.rb +9 -0
  36. data/test/dummy/tmp/generators/db/migrate/20170630171909_devise_token_auth_create_mangs.rb +54 -0
  37. data/test/dummy/tmp/generators/db/migrate/20170630171909_devise_token_auth_create_users.rb +54 -0
  38. data/test/factories/users.rb +1 -1
  39. metadata +15 -8
  40. data/test/dummy/tmp/generators/app/views/devise/mailer/confirmation_instructions.html.erb +0 -5
  41. data/test/dummy/tmp/generators/app/views/devise/mailer/reset_password_instructions.html.erb +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7423b09a92407f6bdbdd24ec3cccd376f4f8f4ac63f388490be4d8328d947b69
4
- data.tar.gz: cea3c75c98bb97bb3cc73b5d3529b046ce6a8ccffbe40ed2a0a32768caeafd94
3
+ metadata.gz: 9481d98d2610adb862b38d97afadba1d1a58594eab37606522fc0a0700e403b1
4
+ data.tar.gz: c9f1900cbabbffebc8fb84091ec35dda733c18f16537b562962f4274c464d680
5
5
  SHA512:
6
- metadata.gz: 50f757b7ab47c3299833e01c1e9bce37d37ea4224e95e427e9d021e4e3b66288a7e7a43371abba312d1bcf457ec17f76ef34de967326a9fbe102e17a68bc9859
7
- data.tar.gz: e2265972b5f973688801e369f4af27be3896e351cb5b7ed21cd38ab8b4f441d2042cbeef70831f675512a6e8698cdb094c6ac883d31af7f8999bb23da3837b96
6
+ metadata.gz: ea77bdbf1b588b53dfdea504ed37967f3c8dacb7c492a5a741444057de29e2e0443e535a98be60862e2139e6c768389627e438a27838afe2904c77f80c6c31dc
7
+ data.tar.gz: 533ee038f53fb8f63f521522468bbf966577d3ab941c3b689c948d45cb1f11524f8738f1bdcc0e48179a11008f123eea5831f1429d4426e847abddf9b5bbcec7
@@ -16,8 +16,8 @@ module DeviseTokenAuth
16
16
 
17
17
  protected
18
18
 
19
- def blacklisted_redirect_url?
20
- DeviseTokenAuth.redirect_whitelist && !DeviseTokenAuth::Url.whitelisted?(@redirect_url)
19
+ def blacklisted_redirect_url?(redirect_url)
20
+ DeviseTokenAuth.redirect_whitelist && !DeviseTokenAuth::Url.whitelisted?(redirect_url)
21
21
  end
22
22
 
23
23
  def build_redirect_headers(access_token, client, redirect_header_options = {})
@@ -3,6 +3,9 @@
3
3
  module DeviseTokenAuth
4
4
  class OmniauthCallbacksController < DeviseTokenAuth::ApplicationController
5
5
  attr_reader :auth_params
6
+
7
+ before_action :validate_auth_origin_url_param
8
+
6
9
  skip_before_action :set_user_by_token, raise: false
7
10
  skip_after_action :update_auth_header
8
11
 
@@ -75,6 +78,11 @@ module DeviseTokenAuth
75
78
  render_data_or_redirect('authFailure', error: @error)
76
79
  end
77
80
 
81
+ def validate_auth_origin_url_param
82
+ return render_error_not_allowed_auth_origin_url if auth_origin_url && blacklisted_redirect_url?(auth_origin_url)
83
+ end
84
+
85
+
78
86
  protected
79
87
 
80
88
  # this will be determined differently depending on the action that calls
@@ -137,10 +145,18 @@ module DeviseTokenAuth
137
145
  omniauth_params['omniauth_window_type']
138
146
  end
139
147
 
140
- def auth_origin_url
148
+ def unsafe_auth_origin_url
141
149
  omniauth_params['auth_origin_url'] || omniauth_params['origin']
142
150
  end
143
151
 
152
+
153
+ def auth_origin_url
154
+ if unsafe_auth_origin_url && blacklisted_redirect_url?(unsafe_auth_origin_url)
155
+ return nil
156
+ end
157
+ return unsafe_auth_origin_url
158
+ end
159
+
144
160
  # in the success case, omniauth_window_type is in the omniauth_params.
145
161
  # in the failure case, it is in a query param. See monkey patch above
146
162
  def omniauth_window_type
@@ -186,8 +202,13 @@ module DeviseTokenAuth
186
202
  @token = @resource.create_token
187
203
  end
188
204
 
205
+ def render_error_not_allowed_auth_origin_url
206
+ message = I18n.t('devise_token_auth.omniauth.not_allowed_redirect_url', redirect_url: unsafe_auth_origin_url)
207
+ render_data_or_redirect('authFailure', error: message)
208
+ end
209
+
189
210
  def render_data(message, data)
190
- @data = data.merge(message: message)
211
+ @data = data.merge(message: ActionController::Base.helpers.sanitize(message))
191
212
  render layout: nil, template: 'devise_token_auth/omniauth_external_window'
192
213
  end
193
214
 
@@ -224,7 +245,7 @@ module DeviseTokenAuth
224
245
  <html>
225
246
  <head></head>
226
247
  <body>
227
- #{text}
248
+ #{ActionController::Base.helpers.sanitize(text)}
228
249
  </body>
229
250
  </html>)
230
251
  end
@@ -261,4 +282,5 @@ module DeviseTokenAuth
261
282
  @resource
262
283
  end
263
284
  end
285
+
264
286
  end
@@ -2,12 +2,10 @@
2
2
 
3
3
  module DeviseTokenAuth
4
4
  class PasswordsController < DeviseTokenAuth::ApplicationController
5
- before_action :set_user_by_token, only: [:update]
6
5
  before_action :validate_redirect_url_param, only: [:create, :edit]
7
6
  skip_after_action :update_auth_header, only: [:create, :edit]
8
7
 
9
- # this action is responsible for generating password reset tokens and
10
- # sending emails
8
+ # this action is responsible for generating password reset tokens and sending emails
11
9
  def create
12
10
  return render_create_error_missing_email unless resource_params[:email]
13
11
 
@@ -39,11 +37,10 @@ module DeviseTokenAuth
39
37
  @resource = resource_class.with_reset_password_token(resource_params[:reset_password_token])
40
38
 
41
39
  if @resource && @resource.reset_password_period_valid?
42
- token = @resource.create_token
40
+ token = @resource.create_token unless require_client_password_reset_token?
43
41
 
44
42
  # ensure that user is confirmed
45
43
  @resource.skip_confirmation! if confirmable_enabled? && !@resource.confirmed_at
46
-
47
44
  # allow user to change password once without current_password
48
45
  @resource.allow_password_change = true if recoverable_enabled?
49
46
 
@@ -51,12 +48,16 @@ module DeviseTokenAuth
51
48
 
52
49
  yield @resource if block_given?
53
50
 
54
- redirect_header_options = { reset_password: true }
55
- redirect_headers = build_redirect_headers(token.token,
56
- token.client,
57
- redirect_header_options)
58
- redirect_to(@resource.build_auth_url(@redirect_url,
59
- redirect_headers))
51
+ if require_client_password_reset_token?
52
+ redirect_to DeviseTokenAuth::Url.generate(@redirect_url, reset_password_token: resource_params[:reset_password_token])
53
+ else
54
+ redirect_header_options = { reset_password: true }
55
+ redirect_headers = build_redirect_headers(token.token,
56
+ token.client,
57
+ redirect_header_options)
58
+ redirect_to(@resource.build_auth_url(@redirect_url,
59
+ redirect_headers))
60
+ end
60
61
  else
61
62
  render_edit_error
62
63
  end
@@ -64,6 +65,15 @@ module DeviseTokenAuth
64
65
 
65
66
  def update
66
67
  # make sure user is authorized
68
+ if require_client_password_reset_token? && resource_params[:reset_password_token]
69
+ @resource = resource_class.with_reset_password_token(resource_params[:reset_password_token])
70
+ return render_update_error_unauthorized unless @resource
71
+
72
+ @token = @resource.create_token
73
+ else
74
+ @resource = set_user_by_token
75
+ end
76
+
67
77
  return render_update_error_unauthorized unless @resource
68
78
 
69
79
  # make sure account doesn't use oauth2 provider
@@ -90,7 +100,7 @@ module DeviseTokenAuth
90
100
  protected
91
101
 
92
102
  def resource_update_method
93
- allow_password_change = recoverable_enabled? && @resource.allow_password_change == true
103
+ allow_password_change = recoverable_enabled? && @resource.allow_password_change == true || require_client_password_reset_token?
94
104
  if DeviseTokenAuth.check_current_password_before_update == false || allow_password_change
95
105
  'update'
96
106
  else
@@ -182,7 +192,15 @@ module DeviseTokenAuth
182
192
  )
183
193
 
184
194
  return render_create_error_missing_redirect_url unless @redirect_url
185
- return render_error_not_allowed_redirect_url if blacklisted_redirect_url?
195
+ return render_error_not_allowed_redirect_url if blacklisted_redirect_url?(@redirect_url)
196
+ end
197
+
198
+ def reset_password_token_as_raw?(recoverable)
199
+ recoverable && recoverable.reset_password_token.present? && !require_client_password_reset_token?
200
+ end
201
+
202
+ def require_client_password_reset_token?
203
+ DeviseTokenAuth.require_client_password_reset_token
186
204
  end
187
205
  end
188
206
  end
@@ -28,7 +28,7 @@ module DeviseTokenAuth
28
28
  end
29
29
 
30
30
  # if whitelist is set, validate redirect_url against whitelist
31
- return render_create_error_redirect_url_not_allowed if blacklisted_redirect_url?
31
+ return render_create_error_redirect_url_not_allowed if blacklisted_redirect_url?(@redirect_url)
32
32
 
33
33
  # override email confirmation, must be sent manually from ctrl
34
34
  callback_name = defined?(ActiveRecord) && resource_class < ActiveRecord::Base ? :commit : :create
@@ -14,6 +14,8 @@ da-DK:
14
14
  account_with_uid_destroyed: "Kontoen med UID '%{uid}' er slettet."
15
15
  account_to_destroy_not_found: "Kan ikke finde kontoen som skal slettes."
16
16
  user_not_found: "Brugeren ikke fundet."
17
+ omniauth:
18
+ not_allowed_redirect_url: "Omdirigering til '%{redirect_url}' er ikke tilladt."
17
19
  passwords:
18
20
  missing_email: "Du skal udfylde email feltet."
19
21
  missing_redirect_url: "Der er ingen omdirigeringsadresse."
@@ -14,6 +14,8 @@ de:
14
14
  account_with_uid_destroyed: "Account mit der uid '%{uid}' wurde gelöscht."
15
15
  account_to_destroy_not_found: "Der zu löschende Account kann nicht gefunden werden."
16
16
  user_not_found: "Benutzer kann nicht gefunden werden."
17
+ omniauth:
18
+ not_allowed_redirect_url: "Weiterleitung zu '%{redirect_url}' ist nicht gestattet."
17
19
  passwords:
18
20
  missing_email: "Sie müssen eine E-Mail-Adresse angeben."
19
21
  missing_redirect_url: "Es fehlt die URL zu Weiterleitung."
@@ -14,6 +14,8 @@ en:
14
14
  account_with_uid_destroyed: "Account with UID '%{uid}' has been destroyed."
15
15
  account_to_destroy_not_found: "Unable to locate account for destruction."
16
16
  user_not_found: "User not found."
17
+ omniauth:
18
+ not_allowed_redirect_url: "Redirect to '%{redirect_url}' not allowed."
17
19
  passwords:
18
20
  missing_email: "You must provide an email address."
19
21
  missing_redirect_url: "Missing redirect URL."
@@ -14,6 +14,8 @@ es:
14
14
  account_with_uid_destroyed: "La cuenta con el identificador '%{uid}' se ha eliminado."
15
15
  account_to_destroy_not_found: "No se puede encontrar la cuenta a borrar."
16
16
  user_not_found: "Usuario no encontrado."
17
+ omniauth:
18
+ not_allowed_redirect_url: "Redirección hacia '%{redirect_url}' no esta permitida."
17
19
  passwords:
18
20
  missing_email: "Debe incluir un correo electrónico."
19
21
  missing_redirect_url: "Falta el Url de redirección."
@@ -14,6 +14,8 @@ fr:
14
14
  account_with_uid_destroyed: "Le compte avec l'identifiant '%{uid}' a été supprimé."
15
15
  account_to_destroy_not_found: "Le compte à supprimer est introuvable."
16
16
  user_not_found: "Utilisateur introuvable."
17
+ omniauth:
18
+ not_allowed_redirect_url: "Redirection vers '%{redirect_url}' n'est pas autorisée."
17
19
  passwords:
18
20
  missing_email: "Vous devez soumettre un e-mail."
19
21
  missing_redirect_url: "URL de redirection manquante."
@@ -14,6 +14,8 @@ he:
14
14
  account_with_uid_destroyed: "חשבון עם UID '%{uid}' הושמד."
15
15
  account_to_destroy_not_found: "לא ניתן לאתר חשבון להשמדה."
16
16
  user_not_found: "המשתמש לא נמצא."
17
+ omniauth:
18
+ not_allowed_redirect_url: "הפניה אל '%{redirect_url}' אינה מותרת."
17
19
  passwords:
18
20
  missing_email: "עליך לספק כתובת דוא\"ל."
19
21
  missing_redirect_url: "כתובת אתר להפניה מחדש חסרה."
@@ -14,6 +14,8 @@ it:
14
14
  account_with_uid_destroyed: "L'account con UID '%{uid}' è stato eliminato."
15
15
  account_to_destroy_not_found: "Impossibile trovare l'account da eliminare."
16
16
  user_not_found: "Utente non trovato."
17
+ omniauth:
18
+ not_allowed_redirect_url: "Redirezione a '%{redirect_url}' non consentita."
17
19
  passwords:
18
20
  missing_email: "Devi fornire un indirizzo email."
19
21
  missing_redirect_url: "Redirect URL mancante."
@@ -14,6 +14,8 @@ ja:
14
14
  account_with_uid_destroyed: "'%{uid}' のアカウントは削除されました。"
15
15
  account_to_destroy_not_found: "削除するアカウントが見つかりません。"
16
16
  user_not_found: "ユーザーが見つかりません。"
17
+ omniauth:
18
+ not_allowed_redirect_url: "'%{redirect_url}' へのリダイレクトは許可されていません。"
17
19
  passwords:
18
20
  missing_email: "メールアドレスが与えられていません。"
19
21
  missing_redirect_url: "リダイレクト URL が与えられていません。"
@@ -14,6 +14,8 @@ nl:
14
14
  account_with_uid_destroyed: "Account met id '%{uid}' is verwijderd."
15
15
  account_to_destroy_not_found: "Te verwijderen account niet gevonden."
16
16
  user_not_found: "Gebruiker niet gevonden."
17
+ omniauth:
18
+ not_allowed_redirect_url: "Redirect naar '%{redirect_url}' niet toegestaan."
17
19
  passwords:
18
20
  missing_email: "Je moet een e-mailadres opgeven."
19
21
  missing_redirect_url: "Redirect URL ontbreekt."
@@ -14,6 +14,8 @@ pl:
14
14
  account_with_uid_destroyed: "Konto z uid '%{uid}' zostało usunięte."
15
15
  account_to_destroy_not_found: "Nie odnaleziono konta do usunięcia."
16
16
  user_not_found: "Użytkownik nie został odnaleziony."
17
+ omniauth:
18
+ not_allowed_redirect_url: "Przekierowanie na adres '%{redirect_url}' nie jest dozwolone."
17
19
  passwords:
18
20
  missing_email: "Musisz wprowadzić adres e-mail."
19
21
  missing_redirect_url: "Brak adresu zwrotnego."
@@ -14,6 +14,8 @@ pt-BR:
14
14
  account_with_uid_destroyed: "A conta com uid '%{uid}' foi excluída."
15
15
  account_to_destroy_not_found: "Não foi possível encontrar a conta para exclusão."
16
16
  user_not_found: "Usuário não encontrado."
17
+ omniauth:
18
+ not_allowed_redirect_url: "Redirecionamento para '%{redirect_url}' não permitido."
17
19
  passwords:
18
20
  missing_email: "Informe o endereço de e-mail."
19
21
  missing_redirect_url: "URL para redirecionamento não informada."
@@ -14,6 +14,8 @@ pt:
14
14
  account_with_uid_destroyed: "A conta com uid '%{uid}' foi excluída."
15
15
  account_to_destroy_not_found: "Não foi possível encontrar a conta para exclusão."
16
16
  user_not_found: "Utilizador não encontrado."
17
+ omniauth:
18
+ not_allowed_redirect_url: "Redirecionamento para '%{redirect_url}' não permitido."
17
19
  passwords:
18
20
  missing_email: "Informe o endereço de e-mail."
19
21
  missing_redirect_url: "URL para redirecionamento não informada."
@@ -14,6 +14,8 @@ ro:
14
14
  account_with_uid_destroyed: "Contul cu UID '%{uid}' a fost șters."
15
15
  account_to_destroy_not_found: "Nu se poate localiza contul pentru ștergere."
16
16
  user_not_found: "Utilizatorul nu a fost găsit."
17
+ omniauth:
18
+ not_allowed_redirect_url: "Redirecționarea către '%{redirect_url}' nu este permisă."
17
19
  passwords:
18
20
  missing_email: "Trebuie să introduci o adresă de e-mail."
19
21
  missing_redirect_url: "URL-ul pentru redirecționare lipsește."
@@ -14,6 +14,8 @@ ru:
14
14
  account_with_uid_destroyed: "Учетная запись с uid '%{uid}' удалена."
15
15
  account_to_destroy_not_found: "Не удается найти учетную запись для удаления."
16
16
  user_not_found: "Пользователь не найден."
17
+ omniauth:
18
+ not_allowed_redirect_url: "Переадресация на '%{redirect_url}' не разрешена."
17
19
  passwords:
18
20
  missing_email: "Вы должны указать адрес электронной почты."
19
21
  missing_redirect_url: "Отсутствует адрес переадресации."
@@ -14,6 +14,8 @@ sq:
14
14
  account_with_uid_destroyed: "Llogaria me UID-në '%{uid}' është fshirë."
15
15
  account_to_destroy_not_found: "Nuk u gjet llogaria për fshirje."
16
16
  user_not_found: "Përdoruesi nuk u gjet."
17
+ omniauth:
18
+ not_allowed_redirect_url: "Nuk lejohet shkuarja tek URL-ja '%{redirect_url}'."
17
19
  passwords:
18
20
  missing_email: "Ju duhet të jepni një email adresë."
19
21
  missing_redirect_url: "Mungon URL-ja për ridërgim."
@@ -14,6 +14,8 @@ sv:
14
14
  account_with_uid_destroyed: "Kontot med UID '%{uid}' har tagits bort."
15
15
  account_to_destroy_not_found: "Kunde inte hitta kontot för borttagning."
16
16
  user_not_found: "Användaren hittades ej."
17
+ omniauth:
18
+ not_allowed_redirect_url: "Omdirigering till '%{redirect_url}' ej tillåten."
17
19
  passwords:
18
20
  missing_email: "Du måste ange en emailadress."
19
21
  missing_redirect_url: "Saknar en omdirigerings-URL."
@@ -14,6 +14,8 @@ uk:
14
14
  account_with_uid_destroyed: "Акаунт з UID '%{uid}' було видалено."
15
15
  account_to_destroy_not_found: "Неможливо знайти акаунт для видалення."
16
16
  user_not_found: "Користувача не знайдено"
17
+ omniauth:
18
+ not_allowed_redirect_url: "Перенаправлення до '%{redirect_url}' не дозволено."
17
19
  passwords:
18
20
  missing_email: "Ви маєте ввести email адресу."
19
21
  missing_redirect_url: "Немає URL для перенаправлення."
@@ -14,6 +14,8 @@ vi:
14
14
  account_with_uid_destroyed: "Tài khoản với UID '%{uid}' vừa bị phá hủy."
15
15
  account_to_destroy_not_found: "Không thể xác định tài khoản cho việc phá hủy."
16
16
  user_not_found: "Người dùng không tìm thấy."
17
+ omniauth:
18
+ not_allowed_redirect_url: "Chuyển hướng tới '%{redirect_url}' không được phép."
17
19
  passwords:
18
20
  missing_email: "Bạn cần cung cấp địa chỉ email."
19
21
  missing_redirect_url: "Thiếu đường đẫn URL."
@@ -14,6 +14,8 @@ zh-CN:
14
14
  account_with_uid_destroyed: "账号 '%{uid}' 已被移除。"
15
15
  account_to_destroy_not_found: "无法找到目标帐号。"
16
16
  user_not_found: "找不到帐号。"
17
+ omniauth:
18
+ not_allowed_redirect_url: "不支持转向到 '%{redirect_url}'"
17
19
  passwords:
18
20
  missing_email: "必需提供邮箱。"
19
21
  missing_redirect_url: "欠缺 redirect URL."
@@ -16,6 +16,8 @@ zh-TW:
16
16
  account_with_uid_destroyed: "帳號 '%{uid}' 已被移除。"
17
17
  account_to_destroy_not_found: "無法找到目標帳號。"
18
18
  user_not_found: "找不到帳號。"
19
+ omniauth:
20
+ not_allowed_redirect_url: "不支援轉向到 '%{redirect_url}'"
19
21
  passwords:
20
22
  missing_email: "必需提供電郵。"
21
23
  missing_redirect_url: "欠缺 redirect URL."
@@ -16,6 +16,8 @@ zh-TW:
16
16
  account_with_uid_destroyed: "帳號 '%{uid}' 已被移除。"
17
17
  account_to_destroy_not_found: "無法找到目標帳號。"
18
18
  user_not_found: "找不到帳號。"
19
+ omniauth:
20
+ not_allowed_redirect_url: "不支援轉向到 '%{redirect_url}'"
19
21
  passwords:
20
22
  missing_email: "必需提供電郵。"
21
23
  missing_redirect_url: "欠缺 redirect URL."
@@ -25,7 +25,8 @@ module DeviseTokenAuth
25
25
  :remove_tokens_after_password_reset,
26
26
  :default_callbacks,
27
27
  :headers_names,
28
- :bypass_sign_in
28
+ :bypass_sign_in,
29
+ :require_client_password_reset_token
29
30
 
30
31
  self.change_headers_on_each_request = true
31
32
  self.max_number_of_devices = 10
@@ -46,6 +47,7 @@ module DeviseTokenAuth
46
47
  'uid': 'uid',
47
48
  'token-type': 'token-type' }
48
49
  self.bypass_sign_in = true
50
+ self.require_client_password_reset_token = false
49
51
 
50
52
  def self.setup(&block)
51
53
  yield self
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DeviseTokenAuth
4
- VERSION = '1.1.2'.freeze
4
+ VERSION = '1.1.3'.freeze
5
5
  end
@@ -317,60 +317,125 @@ class OmniauthTest < ActionDispatch::IntegrationTest
317
317
  end
318
318
 
319
319
  describe 'Using redirect_whitelist' do
320
- before do
321
- @user_email = 'slemp.diggler@sillybandz.gov'
322
- OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new(
323
- provider: 'facebook',
324
- uid: '123545',
325
- info: {
326
- name: 'chong',
327
- email: @user_email
328
- }
329
- )
330
- @good_redirect_url = Faker::Internet.url
331
- @bad_redirect_url = Faker::Internet.url
332
- DeviseTokenAuth.redirect_whitelist = [@good_redirect_url]
333
- end
334
320
 
335
- teardown do
336
- DeviseTokenAuth.redirect_whitelist = nil
337
- end
321
+ describe "newWindow" do
322
+ before do
323
+ @user_email = 'slemp.diggler@sillybandz.gov'
324
+ OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new(
325
+ provider: 'facebook',
326
+ uid: '123545',
327
+ info: {
328
+ name: 'chong',
329
+ email: @user_email
330
+ }
331
+ )
332
+ @good_redirect_url = Faker::Internet.url
333
+ @bad_redirect_url = Faker::Internet.url
334
+ DeviseTokenAuth.redirect_whitelist = [@good_redirect_url]
335
+ end
338
336
 
339
- test 'request using non-whitelisted redirect fail' do
340
- get '/auth/facebook',
341
- params: { auth_origin_url: @bad_redirect_url,
342
- omniauth_window_type: 'newWindow' }
337
+ teardown do
338
+ DeviseTokenAuth.redirect_whitelist = nil
339
+ end
343
340
 
344
- follow_all_redirects!
341
+ test 'request using non-whitelisted redirect fail' do
342
+ get '/auth/facebook',
343
+ params: { auth_origin_url: @bad_redirect_url,
344
+ omniauth_window_type: 'newWindow' }
345
345
 
346
- data = get_parsed_data_json
347
- assert_equal "Redirect to &#39;#{@bad_redirect_url}&#39; not allowed.",
348
- data['error']
346
+ follow_all_redirects!
347
+
348
+ data = get_parsed_data_json
349
+ assert_equal "Redirect to &#39;#{@bad_redirect_url}&#39; not allowed.",
350
+ data['error']
351
+ end
352
+
353
+ test 'request to whitelisted redirect should succeed' do
354
+ get '/auth/facebook',
355
+ params: {
356
+ auth_origin_url: @good_redirect_url,
357
+ omniauth_window_type: 'newWindow'
358
+ }
359
+
360
+ follow_all_redirects!
361
+
362
+ data = get_parsed_data_json
363
+ assert_equal @user_email, data['email']
364
+ end
365
+
366
+ test 'should support wildcards' do
367
+ DeviseTokenAuth.redirect_whitelist = ["#{@good_redirect_url[0..8]}*"]
368
+ get '/auth/facebook',
369
+ params: { auth_origin_url: @good_redirect_url,
370
+ omniauth_window_type: 'newWindow' }
371
+
372
+ follow_all_redirects!
373
+
374
+ data = get_parsed_data_json
375
+ assert_equal @user_email, data['email']
376
+ end
349
377
  end
350
378
 
351
- test 'request to whitelisted redirect should succeed' do
352
- get '/auth/facebook',
353
- params: {
354
- auth_origin_url: @good_redirect_url,
355
- omniauth_window_type: 'newWindow'
379
+ describe "sameWindow" do
380
+ before do
381
+ @user_email = 'slemp.diggler@sillybandz.gov'
382
+ OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new(
383
+ provider: 'facebook',
384
+ uid: '123545',
385
+ info: {
386
+ name: 'chong',
387
+ email: @user_email
356
388
  }
389
+ )
390
+ @good_redirect_url = '/auth_origin'
391
+ @bad_redirect_url = Faker::Internet.url
392
+ DeviseTokenAuth.redirect_whitelist = [@good_redirect_url]
393
+ end
357
394
 
358
- follow_all_redirects!
395
+ teardown do
396
+ DeviseTokenAuth.redirect_whitelist = nil
397
+ end
359
398
 
360
- data = get_parsed_data_json
361
- assert_equal @user_email, data['email']
362
- end
399
+ test 'request using non-whitelisted redirect fail' do
400
+ get '/auth/facebook',
401
+ params: { auth_origin_url: @bad_redirect_url,
402
+ omniauth_window_type: 'sameWindow' }
363
403
 
364
- test 'should support wildcards' do
365
- DeviseTokenAuth.redirect_whitelist = ["#{@good_redirect_url[0..8]}*"]
366
- get '/auth/facebook',
367
- params: { auth_origin_url: @good_redirect_url,
368
- omniauth_window_type: 'newWindow' }
404
+ follow_all_redirects!
405
+
406
+ assert_equal 200, response.status
407
+ assert_equal true, response.body.include?("Redirect to '#{@bad_redirect_url}' not allowed")
408
+ end
409
+
410
+ test 'request to whitelisted redirect should succeed' do
411
+ get '/auth/facebook',
412
+ params: {
413
+ auth_origin_url: '/auth_origin',
414
+ omniauth_window_type: 'sameWindow'
415
+ }
416
+
417
+ follow_all_redirects!
418
+
419
+ assert_equal 200, response.status
420
+ assert_equal false, response.body.include?("Redirect to '#{@good_redirect_url}' not allowed")
421
+ end
422
+
423
+ test 'should support wildcards' do
424
+ DeviseTokenAuth.redirect_whitelist = ["#{@good_redirect_url[0..8]}*"]
425
+ get '/auth/facebook',
426
+ params: {
427
+ auth_origin_url: '/auth_origin',
428
+ omniauth_window_type: 'sameWindow'
429
+ }
430
+
431
+ follow_all_redirects!
432
+
433
+ assert_equal 200, response.status
434
+ assert_equal false, response.body.include?("Redirect to '#{@good_redirect_url}' not allowed")
435
+ end
369
436
 
370
- follow_all_redirects!
371
437
 
372
- data = get_parsed_data_json
373
- assert_equal @user_email, data['email']
374
438
  end
439
+
375
440
  end
376
441
  end
@@ -239,10 +239,10 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
239
239
  end
240
240
  end
241
241
 
242
- describe 'Cheking reset_password_token' do
242
+ describe 'Checking reset_password_token' do
243
243
  before do
244
244
  post :create, params: {
245
- email: @resource.email,
245
+ email: @resource.email,
246
246
  redirect_url: @redirect_url
247
247
  }
248
248
 
@@ -440,6 +440,7 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
440
440
 
441
441
  describe 'success' do
442
442
  before do
443
+ DeviseTokenAuth.require_client_password_reset_token = false
443
444
  @auth_headers = @resource.create_new_auth_token
444
445
  request.headers.merge!(@auth_headers)
445
446
  @new_password = Faker::Internet.password
@@ -504,6 +505,7 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
504
505
 
505
506
  describe 'current password mismatch error' do
506
507
  before do
508
+ DeviseTokenAuth.require_client_password_reset_token = false
507
509
  @auth_headers = @resource.create_new_auth_token
508
510
  request.headers.merge!(@auth_headers)
509
511
  @new_password = Faker::Internet.password
@@ -520,7 +522,35 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
520
522
  end
521
523
 
522
524
  describe 'change password' do
523
- describe 'success' do
525
+ describe 'using reset token' do
526
+ before do
527
+ DeviseTokenAuth.require_client_password_reset_token = true
528
+ @redirect_url = 'http://client-app.dev'
529
+ get_reset_token
530
+ edit_url = CGI.unescape(@mail.body.match(/href=\"(.+)\"/)[1])
531
+ query_parts = Rack::Utils.parse_nested_query(URI.parse(edit_url).query)
532
+ get :edit, params: query_parts
533
+ end
534
+
535
+ test 'request should be redirect' do
536
+ assert_equal 302, response.status
537
+ end
538
+
539
+ test 'request should redirect to correct redirect url' do
540
+ host = URI.parse(response.location).host
541
+ query_parts = Rack::Utils.parse_nested_query(URI.parse(response.location).query)
542
+
543
+ assert_equal 'client-app.dev', host
544
+ assert_equal @mail_reset_token, query_parts['reset_password_token']
545
+ assert_equal 1, query_parts.keys.size
546
+ end
547
+
548
+ teardown do
549
+ DeviseTokenAuth.require_client_password_reset_token = false
550
+ end
551
+ end
552
+
553
+ describe 'with valid headers' do
524
554
  before do
525
555
  @auth_headers = @resource.create_new_auth_token
526
556
  request.headers.merge!(@auth_headers)
@@ -567,19 +597,93 @@ class DeviseTokenAuth::PasswordsControllerTest < ActionController::TestCase
567
597
  end
568
598
  end
569
599
 
570
- describe 'unauthorized user' do
600
+ describe 'without valid headers' do
571
601
  before do
572
- @auth_headers = @resource.create_new_auth_token
573
- @new_password = Faker::Internet.password
602
+ @resource.create_new_auth_token
603
+ new_password = Faker::Internet.password
574
604
 
575
- put :update, params: { password: @new_password,
576
- password_confirmation: @new_password }
605
+ put :update, params: { password: new_password,
606
+ password_confirmation: new_password }
577
607
  end
578
608
 
579
609
  test 'response should fail' do
580
610
  assert_equal 401, response.status
581
611
  end
582
612
  end
613
+
614
+ describe 'with valid reset password token' do
615
+ before do
616
+ reset_password_token = @resource.send_reset_password_instructions
617
+ @new_password = Faker::Internet.password
618
+ @params = { password: @new_password,
619
+ password_confirmation: @new_password,
620
+ reset_password_token: reset_password_token }
621
+ end
622
+
623
+ describe 'with require_client_password_reset_token disabled' do
624
+ before do
625
+ DeviseTokenAuth.require_client_password_reset_token = false
626
+ put :update, params: @params
627
+
628
+ @data = JSON.parse(response.body)
629
+ @resource.reload
630
+ end
631
+
632
+ test 'request should be not be successful' do
633
+ assert_equal 401, response.status
634
+ end
635
+ end
636
+
637
+ describe 'with require_client_password_reset_token enabled' do
638
+ before do
639
+ DeviseTokenAuth.require_client_password_reset_token = true
640
+ put :update, params: @params
641
+
642
+ @data = JSON.parse(response.body)
643
+ @resource.reload
644
+ end
645
+
646
+ test 'request should be successful' do
647
+ assert_equal 200, response.status
648
+ end
649
+
650
+ test 'request should return success message' do
651
+ assert @data['message']
652
+ assert_equal @data['message'],
653
+ I18n.t('devise_token_auth.passwords.successfully_updated')
654
+ end
655
+
656
+ test 'new password should authenticate user' do
657
+ assert @resource.valid_password?(@new_password)
658
+ end
659
+
660
+ teardown do
661
+ DeviseTokenAuth.require_client_password_reset_token = false
662
+ end
663
+ end
664
+ end
665
+
666
+ describe 'with invalid reset password token' do
667
+ before do
668
+ DeviseTokenAuth.require_client_password_reset_token = true
669
+ @resource.update reset_password_token: 'koskoskoskos'
670
+ put :update, params: @params
671
+ @data = JSON.parse(response.body)
672
+ @resource.reload
673
+ end
674
+
675
+ test 'request should fail' do
676
+ assert_equal 401, response.status
677
+ end
678
+
679
+ test 'new password should not authenticate user' do
680
+ assert !@resource.valid_password?(@new_password)
681
+ end
682
+
683
+ teardown do
684
+ DeviseTokenAuth.require_client_password_reset_token = false
685
+ end
686
+ end
583
687
  end
584
688
  end
585
689
 
@@ -492,7 +492,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
492
492
  # test valid update param
493
493
  @resource_class = User
494
494
  @new_operating_thetan = 1_000_000
495
- @email = 'AlternatingCase2@example.com'
495
+ @email = Faker::Internet.safe_email
496
496
  @request_params = {
497
497
  operating_thetan: @new_operating_thetan,
498
498
  email: @email
@@ -599,7 +599,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
599
599
  # test valid update param
600
600
  @resource_class = User
601
601
  @new_operating_thetan = 1_000_000
602
- @email = 'AlternatingCase2@example.com'
602
+ @email = Faker::Internet.safe_email
603
603
  @request_params = {
604
604
  operating_thetan: @new_operating_thetan,
605
605
  email: @email
@@ -650,7 +650,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
650
650
  before do
651
651
  DeviseTokenAuth.check_current_password_before_update = :password
652
652
  @new_operating_thetan = 1_000_000
653
- @email = 'AlternatingCase2@example.com'
653
+ @email = Faker::Internet.safe_email
654
654
  end
655
655
 
656
656
  after do
@@ -0,0 +1,7 @@
1
+ class Mang < ActiveRecord::Base
2
+ # Include default devise modules.
3
+ devise :database_authenticatable, :registerable,
4
+ :recoverable, :rememberable, :trackable, :validatable,
5
+ :confirmable, :omniauthable
6
+ include DeviseTokenAuth::Concerns::User
7
+ end
@@ -0,0 +1,7 @@
1
+ class User < ActiveRecord::Base
2
+ # Include default devise modules.
3
+ devise :database_authenticatable, :registerable,
4
+ :recoverable, :rememberable, :trackable, :validatable,
5
+ :confirmable, :omniauthable
6
+ include DeviseTokenAuth::Concerns::User
7
+ end
@@ -0,0 +1,48 @@
1
+ DeviseTokenAuth.setup do |config|
2
+ # By default the authorization headers will change after each request. The
3
+ # client is responsible for keeping track of the changing tokens. Change
4
+ # this to false to prevent the Authorization header from changing after
5
+ # each request.
6
+ # config.change_headers_on_each_request = true
7
+
8
+ # By default, users will need to re-authenticate after 2 weeks. This setting
9
+ # determines how long tokens will remain valid after they are issued.
10
+ # config.token_lifespan = 2.weeks
11
+
12
+ # Sets the max number of concurrent devices per user, which is 10 by default.
13
+ # After this limit is reached, the oldest tokens will be removed.
14
+ # config.max_number_of_devices = 10
15
+
16
+ # Sometimes it's necessary to make several requests to the API at the same
17
+ # time. In this case, each request in the batch will need to share the same
18
+ # auth token. This setting determines how far apart the requests can be while
19
+ # still using the same auth token.
20
+ # config.batch_request_buffer_throttle = 5.seconds
21
+
22
+ # This route will be the prefix for all oauth2 redirect callbacks. For
23
+ # example, using the default '/omniauth', the github oauth2 provider will
24
+ # redirect successful authentications to '/omniauth/github/callback'
25
+ # config.omniauth_prefix = "/omniauth"
26
+
27
+ # By default sending current password is not needed for the password update.
28
+ # Uncomment to enforce current_password param to be checked before all
29
+ # attribute updates. Set it to :password if you want it to be checked only if
30
+ # password is updated.
31
+ # config.check_current_password_before_update = :attributes
32
+
33
+ # By default we will use callbacks for single omniauth.
34
+ # It depends on fields like email, provider and uid.
35
+ # config.default_callbacks = true
36
+
37
+ # Makes it possible to change the headers names
38
+ # config.headers_names = {:'access-token' => 'access-token',
39
+ # :'client' => 'client',
40
+ # :'expiry' => 'expiry',
41
+ # :'uid' => 'uid',
42
+ # :'token-type' => 'token-type' }
43
+
44
+ # By default, only Bearer Token authentication is implemented out of the box.
45
+ # If, however, you wish to integrate with legacy Devise authentication, you can
46
+ # do so by enabling this flag. NOTE: This feature is highly experimental!
47
+ # config.enable_standard_devise_support = false
48
+ end
@@ -0,0 +1,9 @@
1
+ Rails.application.routes.draw do
2
+ mount_devise_token_auth_for 'User', at: 'auth'
3
+
4
+ mount_devise_token_auth_for 'Mang', at: 'mangs'
5
+ as :mang do
6
+ # Define routes for Mang within this block.
7
+ end
8
+ patch '/chong', to: 'bong#index'
9
+ end
@@ -0,0 +1,54 @@
1
+ class DeviseTokenAuthCreateMangs < ActiveRecord::Migration[4.2]
2
+ def change
3
+ create_table(:mangs) do |t|
4
+ ## Required
5
+ t.string :provider, :null => false, :default => "email"
6
+ t.string :uid, :null => false, :default => ""
7
+
8
+ ## Database authenticatable
9
+ t.string :encrypted_password, :null => false, :default => ""
10
+
11
+ ## Recoverable
12
+ t.string :reset_password_token
13
+ t.datetime :reset_password_sent_at
14
+
15
+ ## Rememberable
16
+ t.datetime :remember_created_at
17
+
18
+ ## Trackable
19
+ t.integer :sign_in_count, :default => 0, :null => false
20
+ t.datetime :current_sign_in_at
21
+ t.datetime :last_sign_in_at
22
+ t.string :current_sign_in_ip
23
+ t.string :last_sign_in_ip
24
+
25
+ ## Confirmable
26
+ t.string :confirmation_token
27
+ t.datetime :confirmed_at
28
+ t.datetime :confirmation_sent_at
29
+ t.string :unconfirmed_email # Only if using reconfirmable
30
+
31
+ ## Lockable
32
+ # t.integer :failed_attempts, :default => 0, :null => false # Only if lock strategy is :failed_attempts
33
+ # t.string :unlock_token # Only if unlock strategy is :email or :both
34
+ # t.datetime :locked_at
35
+
36
+ ## User Info
37
+ t.string :name
38
+ t.string :nickname
39
+ t.string :image
40
+ t.string :email
41
+
42
+ ## Tokens
43
+ t.text :tokens
44
+
45
+ t.timestamps
46
+ end
47
+
48
+ add_index :mangs, :email, unique: true
49
+ add_index :mangs, [:uid, :provider], unique: true
50
+ add_index :mangs, :reset_password_token, unique: true
51
+ add_index :mangs, :confirmation_token, unique: true
52
+ # add_index :mangs, :unlock_token, unique: true
53
+ end
54
+ end
@@ -0,0 +1,54 @@
1
+ class DeviseTokenAuthCreateUsers < ActiveRecord::Migration[4.2]
2
+ def change
3
+ create_table(:users) do |t|
4
+ ## Required
5
+ t.string :provider, :null => false, :default => "email"
6
+ t.string :uid, :null => false, :default => ""
7
+
8
+ ## Database authenticatable
9
+ t.string :encrypted_password, :null => false, :default => ""
10
+
11
+ ## Recoverable
12
+ t.string :reset_password_token
13
+ t.datetime :reset_password_sent_at
14
+
15
+ ## Rememberable
16
+ t.datetime :remember_created_at
17
+
18
+ ## Trackable
19
+ t.integer :sign_in_count, :default => 0, :null => false
20
+ t.datetime :current_sign_in_at
21
+ t.datetime :last_sign_in_at
22
+ t.string :current_sign_in_ip
23
+ t.string :last_sign_in_ip
24
+
25
+ ## Confirmable
26
+ t.string :confirmation_token
27
+ t.datetime :confirmed_at
28
+ t.datetime :confirmation_sent_at
29
+ t.string :unconfirmed_email # Only if using reconfirmable
30
+
31
+ ## Lockable
32
+ # t.integer :failed_attempts, :default => 0, :null => false # Only if lock strategy is :failed_attempts
33
+ # t.string :unlock_token # Only if unlock strategy is :email or :both
34
+ # t.datetime :locked_at
35
+
36
+ ## User Info
37
+ t.string :name
38
+ t.string :nickname
39
+ t.string :image
40
+ t.string :email
41
+
42
+ ## Tokens
43
+ t.text :tokens
44
+
45
+ t.timestamps
46
+ end
47
+
48
+ add_index :users, :email, unique: true
49
+ add_index :users, [:uid, :provider], unique: true
50
+ add_index :users, :reset_password_token, unique: true
51
+ add_index :users, :confirmation_token, unique: true
52
+ # add_index :users, :unlock_token, unique: true
53
+ end
54
+ end
@@ -1,6 +1,6 @@
1
1
  FactoryBot.define do
2
2
  factory :user do
3
- email { Faker::Internet.safe_email }
3
+ email { Faker::Internet.unique.safe_email }
4
4
  password { Faker::Internet.password }
5
5
  provider { 'email' }
6
6
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise_token_auth
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lynn Hurley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-01 00:00:00.000000000 Z
11
+ date: 2019-09-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -315,8 +315,12 @@ files:
315
315
  - test/dummy/db/migrate/20160629184441_devise_token_auth_create_lockable_users.rb
316
316
  - test/dummy/db/schema.rb
317
317
  - test/dummy/lib/migration_database_helper.rb
318
- - test/dummy/tmp/generators/app/views/devise/mailer/confirmation_instructions.html.erb
319
- - test/dummy/tmp/generators/app/views/devise/mailer/reset_password_instructions.html.erb
318
+ - test/dummy/tmp/generators/app/models/mang.rb
319
+ - test/dummy/tmp/generators/app/models/user.rb
320
+ - test/dummy/tmp/generators/config/initializers/devise_token_auth.rb
321
+ - test/dummy/tmp/generators/config/routes.rb
322
+ - test/dummy/tmp/generators/db/migrate/20170630171909_devise_token_auth_create_mangs.rb
323
+ - test/dummy/tmp/generators/db/migrate/20170630171909_devise_token_auth_create_users.rb
320
324
  - test/factories/users.rb
321
325
  - test/lib/devise_token_auth/blacklist_test.rb
322
326
  - test/lib/devise_token_auth/token_factory_test.rb
@@ -349,8 +353,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
349
353
  - !ruby/object:Gem::Version
350
354
  version: '0'
351
355
  requirements: []
352
- rubyforge_project:
353
- rubygems_version: 2.7.9
356
+ rubygems_version: 3.0.3
354
357
  signing_key:
355
358
  specification_version: 4
356
359
  summary: Token based authentication for rails. Uses Devise + OmniAuth.
@@ -422,8 +425,12 @@ test_files:
422
425
  - test/dummy/db/migrate/20160103235141_devise_token_auth_create_scoped_users.rb
423
426
  - test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb
424
427
  - test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb
425
- - test/dummy/tmp/generators/app/views/devise/mailer/confirmation_instructions.html.erb
426
- - test/dummy/tmp/generators/app/views/devise/mailer/reset_password_instructions.html.erb
428
+ - test/dummy/tmp/generators/app/models/mang.rb
429
+ - test/dummy/tmp/generators/app/models/user.rb
430
+ - test/dummy/tmp/generators/config/routes.rb
431
+ - test/dummy/tmp/generators/config/initializers/devise_token_auth.rb
432
+ - test/dummy/tmp/generators/db/migrate/20170630171909_devise_token_auth_create_mangs.rb
433
+ - test/dummy/tmp/generators/db/migrate/20170630171909_devise_token_auth_create_users.rb
427
434
  - test/dummy/README.rdoc
428
435
  - test/models/only_email_user_test.rb
429
436
  - test/models/concerns/mongoid_support_test.rb
@@ -1,5 +0,0 @@
1
- <p><%= t(:welcome).capitalize + ' ' + @email %>!</p>
2
-
3
- <p><%= t '.confirm_link_msg' %> </p>
4
-
5
- <p><%= link_to t('.confirm_account_link'), confirmation_url(@resource, {confirmation_token: @token, config: message['client-config'].to_s, redirect_url: message['redirect-url']}).html_safe %></p>
@@ -1,8 +0,0 @@
1
- <p><%= t(:hello).capitalize %> <%= @resource.email %>!</p>
2
-
3
- <p><%= t '.request_reset_link_msg' %></p>
4
-
5
- <p><%= link_to t('.password_change_link'), edit_password_url(@resource, reset_password_token: @token, config: message['client-config'].to_s, redirect_url: message['redirect-url'].to_s).html_safe %></p>
6
-
7
- <p><%= t '.ignore_mail_msg' %></p>
8
- <p><%= t '.no_changes_msg' %></p>