trek 0.1.23 → 0.1.24
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/Gemfile.lock +4 -4
- data/app/components/trek/form/actions_component/actions_component.css +2 -2
- data/app/controllers/concerns/trek/authentication.rb +1 -1
- data/app/controllers/concerns/trek/localization.rb +1 -1
- data/app/helpers/trek/theme_helper.rb +2 -2
- data/app/models/concerns/trek/users/invitable.rb +2 -3
- data/config/locales/trek.en.yml +9 -6
- data/config/locales/trek.fr.yml +8 -5
- data/docs/.vitepress/config.mjs +5 -0
- data/lib/generators/trek/install/admin/user_password_resets_generator.rb +0 -4
- data/lib/generators/trek/install/admin/user_sessions_generator.rb +0 -7
- data/lib/generators/trek/install/admin/users_generator.rb +5 -1
- data/lib/generators/trek/install/authentication_generator.rb +62 -1
- data/lib/generators/trek/install/locales_generator.rb +10 -7
- data/lib/generators/trek/install/mailer_generator.rb +14 -9
- data/lib/generators/trek/install/user_generator.rb +27 -1
- data/lib/generators/trek/install_generator.rb +4 -4
- data/lib/generators/trek/templates/controllers/admin/base_controller.rb +1 -0
- data/lib/generators/trek/templates/controllers/admin/user_password_resets_controller.rb +23 -27
- data/lib/generators/trek/templates/controllers/admin/user_sessions_controller.rb +13 -20
- data/lib/generators/trek/templates/controllers/admin/users_controller.rb +6 -0
- data/lib/generators/trek/templates/controllers/concerns/trek/authentication.rb +62 -0
- data/lib/generators/trek/templates/layouts/admin.html.slim +1 -1
- data/lib/generators/trek/templates/mailers/admin/passwords_mailer.rb +13 -0
- data/lib/generators/trek/templates/mailers/admin_mailer.rb +10 -0
- data/lib/generators/trek/templates/migrations/create_users.rb.erb +11 -0
- data/lib/generators/trek/templates/migrations/user_sessions.rb.erb +11 -0
- data/lib/generators/trek/templates/migrations/users.rb.erb +2 -0
- data/lib/generators/trek/templates/models/current.rb +3 -0
- data/lib/generators/trek/templates/models/user.rb +2 -0
- data/lib/generators/trek/templates/models/user_session.rb +3 -0
- data/lib/generators/trek/templates/views/admin/pages/_form.html.slim +0 -14
- data/lib/generators/trek/templates/views/admin/passwords_mailer/reset.en.html.slim +10 -0
- data/lib/generators/trek/templates/views/{user_mailer/reset_password_email.en.text.erb → admin/passwords_mailer/reset.en.text.erb} +3 -1
- data/lib/generators/trek/templates/views/admin/passwords_mailer/reset.fr.html.slim +10 -0
- data/lib/generators/trek/templates/views/{user_mailer/reset_password_email.fr.text.erb → admin/passwords_mailer/reset.fr.text.erb} +4 -2
- data/lib/generators/trek/templates/views/admin/user_password_resets/edit.html.slim +7 -7
- data/lib/generators/trek/templates/views/admin/user_password_resets/new.html.slim +5 -2
- data/lib/generators/trek/templates/views/admin/user_sessions/new.html.slim +12 -3
- data/lib/generators/trek/templates/views/admin/users/show.html.slim +1 -1
- data/lib/generators/trek/templates/views/admin_mailer/invite.en.html.slim +8 -0
- data/lib/generators/trek/templates/views/{user_mailer/invite_email.en.text.erb → admin_mailer/invite.en.text.erb} +1 -1
- data/lib/generators/trek/templates/views/admin_mailer/invite.fr.html.slim +8 -0
- data/lib/generators/trek/templates/views/{user_mailer/invite_email.fr.text.erb → admin_mailer/invite.fr.text.erb} +1 -1
- data/lib/trek/version.rb +1 -1
- data/package.json +3 -2
- data/yarn.lock +1807 -2486
- metadata +17 -12
- data/app/models/trek/user_password_reset.rb +0 -12
- data/lib/generators/trek/templates/mailers/user_mailer.rb +0 -21
- data/lib/generators/trek/templates/views/user_mailer/invite_email.en.html.slim +0 -29
- data/lib/generators/trek/templates/views/user_mailer/invite_email.fr.html.slim +0 -29
- data/lib/generators/trek/templates/views/user_mailer/reset_password_email.en.html.slim +0 -7
- data/lib/generators/trek/templates/views/user_mailer/reset_password_email.fr.html.slim +0 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ac23b0f2968a03be59d307c19c62632c761cde58846a324dddd3f745a2bc5e8d
|
|
4
|
+
data.tar.gz: 30b95227f9369edb137c5208e1b1a390e9fd56efaf6e75143020af418007b7b3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d5572d3b2d99a149ae840b7b04643e10bece86e6664f6595349a596b116dc33f07cb988f197d6c8ffc0c47aff9511fcacb328224d7ec9b7590d8a7f9490ee9a5
|
|
7
|
+
data.tar.gz: 2ac6db32ec1818397cbfd1e321164861d4e1bd0078296a7d37fe71f1a54e92d20793c0c435818eafdbbb489240ec812c4e22dd8e41d201614587a8b08164ac32
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
trek (0.1.
|
|
4
|
+
trek (0.1.24)
|
|
5
5
|
action_policy (~> 0.6)
|
|
6
6
|
actioncable
|
|
7
7
|
acts_as_list (~> 1.1)
|
|
@@ -158,7 +158,7 @@ GEM
|
|
|
158
158
|
activerecord (>= 7.2.0)
|
|
159
159
|
with_advisory_lock (>= 7.0.0)
|
|
160
160
|
zeitwerk (~> 2.7)
|
|
161
|
-
concurrent-ruby (1.3.
|
|
161
|
+
concurrent-ruby (1.3.7)
|
|
162
162
|
connection_pool (3.0.2)
|
|
163
163
|
content_disposition (1.0.0)
|
|
164
164
|
crass (1.0.6)
|
|
@@ -298,9 +298,9 @@ GEM
|
|
|
298
298
|
net-smtp (0.5.1)
|
|
299
299
|
net-protocol
|
|
300
300
|
nio4r (2.7.5)
|
|
301
|
-
nokogiri (1.19.
|
|
301
|
+
nokogiri (1.19.4-arm64-darwin)
|
|
302
302
|
racc (~> 1.4)
|
|
303
|
-
nokogiri (1.19.
|
|
303
|
+
nokogiri (1.19.4-x86_64-darwin)
|
|
304
304
|
racc (~> 1.4)
|
|
305
305
|
parallel (1.27.0)
|
|
306
306
|
parser (3.3.10.0)
|
|
@@ -4,7 +4,7 @@ module Trek
|
|
|
4
4
|
extend ActiveSupport::Concern
|
|
5
5
|
|
|
6
6
|
included do
|
|
7
|
-
|
|
7
|
+
attribute :send_invite, :boolean
|
|
8
8
|
|
|
9
9
|
after_create :send_invite_email, if: :send_invite
|
|
10
10
|
end
|
|
@@ -12,8 +12,7 @@ module Trek
|
|
|
12
12
|
private
|
|
13
13
|
|
|
14
14
|
def send_invite_email
|
|
15
|
-
|
|
16
|
-
UserMailer.invite_email(self).deliver_later
|
|
15
|
+
AdminMailer.invite(self).deliver_later
|
|
17
16
|
end
|
|
18
17
|
end
|
|
19
18
|
end
|
data/config/locales/trek.en.yml
CHANGED
|
@@ -149,17 +149,20 @@ en:
|
|
|
149
149
|
success: Action added
|
|
150
150
|
form:
|
|
151
151
|
title: Action
|
|
152
|
+
passwords_mailer:
|
|
153
|
+
reset:
|
|
154
|
+
subject: Reset your password
|
|
152
155
|
search_component:
|
|
153
156
|
search: Search
|
|
154
157
|
search_user: Search for a user with an email
|
|
155
158
|
seo: SEO
|
|
156
159
|
settings: Settings
|
|
157
160
|
user_password_resets:
|
|
161
|
+
not_found: Invalid or expired password reset link.
|
|
158
162
|
create:
|
|
159
163
|
success: A password recovery email has been sent to you
|
|
160
164
|
new:
|
|
161
165
|
remembered_password: I found my password!
|
|
162
|
-
title: Reset password
|
|
163
166
|
update:
|
|
164
167
|
success: Your password has been changed
|
|
165
168
|
user_sessions:
|
|
@@ -170,7 +173,6 @@ en:
|
|
|
170
173
|
success: You are now logged out
|
|
171
174
|
new:
|
|
172
175
|
forgot_password: I forgot my password
|
|
173
|
-
title: Log in
|
|
174
176
|
users:
|
|
175
177
|
create:
|
|
176
178
|
success: User added
|
|
@@ -248,8 +250,9 @@ en:
|
|
|
248
250
|
auto: auto
|
|
249
251
|
dark: dark
|
|
250
252
|
light: light
|
|
251
|
-
|
|
252
|
-
|
|
253
|
+
admin_mailer:
|
|
254
|
+
invite:
|
|
253
255
|
subject: Your invitation
|
|
254
|
-
|
|
255
|
-
|
|
256
|
+
notices:
|
|
257
|
+
authentication_needed: Please log in
|
|
258
|
+
rate_limited: Too many attempts, please try again later
|
data/config/locales/trek.fr.yml
CHANGED
|
@@ -157,11 +157,11 @@ fr:
|
|
|
157
157
|
seo: SEO
|
|
158
158
|
settings: Paramètres
|
|
159
159
|
user_password_resets:
|
|
160
|
+
not_found: Lien de réinitialisation de mot de passe invalide ou expiré.
|
|
160
161
|
create:
|
|
161
162
|
success: Un e-mail de récupération de mot de passe vous a été envoyé
|
|
162
163
|
new:
|
|
163
164
|
remembered_password: J'ai retrouvé mon mot de passe !
|
|
164
|
-
title: Mot de passe oublié
|
|
165
165
|
update:
|
|
166
166
|
success: Votre mot de passe a été modifié
|
|
167
167
|
user_sessions:
|
|
@@ -172,7 +172,6 @@ fr:
|
|
|
172
172
|
success: Vous êtes maintenant déconnecté·e
|
|
173
173
|
new:
|
|
174
174
|
forgot_password: J'ai oublié mon mot de passe
|
|
175
|
-
title: Connexion
|
|
176
175
|
users:
|
|
177
176
|
create:
|
|
178
177
|
success: Utilisateur ajouté
|
|
@@ -250,8 +249,12 @@ fr:
|
|
|
250
249
|
auto: auto
|
|
251
250
|
dark: sombre
|
|
252
251
|
light: clair
|
|
253
|
-
|
|
254
|
-
|
|
252
|
+
admin_mailer:
|
|
253
|
+
invite:
|
|
255
254
|
subject: Votre invitation
|
|
256
|
-
|
|
255
|
+
passwords_mailer:
|
|
256
|
+
reset:
|
|
257
257
|
subject: Nouveau mot de passe
|
|
258
|
+
notices:
|
|
259
|
+
authentication_needed: Veuillez vous connecter
|
|
260
|
+
rate_limited: Trop de tentatives, veuillez réessayer plus tard
|
data/docs/.vitepress/config.mjs
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { defineConfig } from 'vitepress'
|
|
2
|
+
import llmstxt from 'vitepress-plugin-llms'
|
|
3
|
+
|
|
2
4
|
|
|
3
5
|
// https://vitepress.dev/reference/site-config
|
|
4
6
|
export default defineConfig({
|
|
7
|
+
vite: {
|
|
8
|
+
plugins: [llmstxt()],
|
|
9
|
+
},
|
|
5
10
|
title: "Trek",
|
|
6
11
|
description: "A modern content management & back-office system for Ruby on Rails",
|
|
7
12
|
lang: 'en-US',
|
|
@@ -12,10 +12,6 @@ module Trek
|
|
|
12
12
|
|
|
13
13
|
source_root File.expand_path("../../templates", __dir__)
|
|
14
14
|
|
|
15
|
-
def add_routes
|
|
16
|
-
route "resources :user_password_resets, only: %i[new create edit update]", namespace: :admin
|
|
17
|
-
end
|
|
18
|
-
|
|
19
15
|
def copy_controller
|
|
20
16
|
template "controllers/admin/user_password_resets_controller.rb",
|
|
21
17
|
"app/controllers/admin/user_password_resets_controller.rb"
|
|
@@ -12,13 +12,6 @@ module Trek
|
|
|
12
12
|
|
|
13
13
|
source_root File.expand_path("../../templates", __dir__)
|
|
14
14
|
|
|
15
|
-
def add_routes
|
|
16
|
-
route "resources :user_sessions, only: %i[new create destroy]", namespace: :admin
|
|
17
|
-
|
|
18
|
-
route 'get :login, to: "user_sessions#new", as: :login', namespace: :admin
|
|
19
|
-
route 'delete :logout, to: "user_sessions#destroy", as: :logout', namespace: :admin
|
|
20
|
-
end
|
|
21
|
-
|
|
22
15
|
def copy_controller
|
|
23
16
|
template "controllers/admin/user_sessions_controller.rb",
|
|
24
17
|
"app/controllers/admin/user_sessions_controller.rb"
|
|
@@ -13,7 +13,11 @@ module Trek
|
|
|
13
13
|
source_root File.expand_path("../../templates", __dir__)
|
|
14
14
|
|
|
15
15
|
def add_routes
|
|
16
|
-
route
|
|
16
|
+
route <<~RUBY, namespace: :admin
|
|
17
|
+
resources :users do
|
|
18
|
+
patch :theme, on: :collection
|
|
19
|
+
end
|
|
20
|
+
RUBY
|
|
17
21
|
end
|
|
18
22
|
|
|
19
23
|
def copy_controller
|
|
@@ -6,13 +6,74 @@ module Trek
|
|
|
6
6
|
module Generators
|
|
7
7
|
module Install
|
|
8
8
|
class AuthenticationGenerator < Rails::Generators::Base
|
|
9
|
+
USER_MODEL_CLASS_NAME = "User".freeze
|
|
10
|
+
|
|
11
|
+
include Rails::Generators::Migration
|
|
9
12
|
include Trek::Generators::Helpers
|
|
10
13
|
|
|
11
14
|
desc "Setup authentication."
|
|
12
15
|
|
|
13
16
|
source_root File.expand_path("../templates", __dir__)
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
def add_bcrypt_gem
|
|
19
|
+
gem "bcrypt", "~> 3.1.7" unless in_gemfile?("bcrypt")
|
|
20
|
+
run "bundle install --quiet", abort_on_failure: true
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def copy_admin_authentication_concern
|
|
24
|
+
template "controllers/concerns/trek/authentication.rb",
|
|
25
|
+
"app/controllers/concerns/trek/authentication.rb"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def copy_user_session_model
|
|
29
|
+
template "models/user_session.rb",
|
|
30
|
+
"app/models/user_session.rb"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def copy_user_sessions_migration
|
|
34
|
+
return unless defined?(ActiveRecord)
|
|
35
|
+
|
|
36
|
+
migration_template("migrations/user_sessions.rb.erb",
|
|
37
|
+
"db/migrate/trek_user_sessions.rb",
|
|
38
|
+
migration_class_name:)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def inject_authentication_into_user_model
|
|
42
|
+
inject_into_class user_model_path,
|
|
43
|
+
USER_MODEL_CLASS_NAME,
|
|
44
|
+
user_model_injection
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def add_admin_auth_routes
|
|
48
|
+
route "resource :user_session, only: %i[new create destroy]", namespace: :admin
|
|
49
|
+
route "resources :user_password_resets, param: :token, only: %i[new create edit update]", namespace: :admin
|
|
50
|
+
route 'get :login, to: "user_sessions#new", as: :login', namespace: :admin
|
|
51
|
+
route 'delete :logout, to: "user_sessions#destroy", as: :logout', namespace: :admin
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def autocorrect_user_model
|
|
55
|
+
run "rubocop --autocorrect #{user_model_path}"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
|
|
60
|
+
def user_model_path
|
|
61
|
+
@user_model_path ||= File.join("app", "models", "#{USER_MODEL_CLASS_NAME.underscore}.rb")
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def user_model_injection
|
|
65
|
+
<<-RUBY
|
|
66
|
+
has_secure_password
|
|
67
|
+
has_many :user_sessions, dependent: :destroy
|
|
68
|
+
|
|
69
|
+
generates_token_for :password_reset, expires_in: 15.minutes do
|
|
70
|
+
password_salt&.last(10)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
scope :privileged, -> { where(role: Trek::Users::Roles::PRIVILEGED_ROLES) }
|
|
74
|
+
|
|
75
|
+
RUBY
|
|
76
|
+
end
|
|
16
77
|
end
|
|
17
78
|
end
|
|
18
79
|
end
|
|
@@ -12,16 +12,19 @@ module Trek
|
|
|
12
12
|
|
|
13
13
|
source_root File.expand_path("../templates", __dir__)
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
@locales = ENV["TREK_LOCALES"] || ask("What locales do you want to use? (e.g. en, fr)")
|
|
15
|
+
class_option :locales, type: :string,
|
|
16
|
+
desc: "Comma-separated locales to enable, e.g. en,fr (default: en)"
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
def set_locales
|
|
19
|
+
raw = options[:locales] || ENV["TREK_LOCALES"] || "en"
|
|
20
|
+
@locales = raw.split(",").map(&:strip)
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
invalid = @locales.reject { |locale| valid_locales?(locale) }
|
|
23
|
+
return if invalid.empty?
|
|
23
24
|
|
|
24
|
-
|
|
25
|
+
say "Ignoring unavailable locales: #{invalid.join(", ")}", :yellow
|
|
26
|
+
@locales -= invalid
|
|
27
|
+
@locales = ["en"] if @locales.empty?
|
|
25
28
|
end
|
|
26
29
|
|
|
27
30
|
def create_locales_initializer
|
|
@@ -19,25 +19,30 @@ module Trek
|
|
|
19
19
|
"app/views/layouts/mailer.html.slim"
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
def
|
|
23
|
-
template "mailers/
|
|
24
|
-
"app/mailers/
|
|
22
|
+
def admin_mailer
|
|
23
|
+
template "mailers/admin_mailer.rb",
|
|
24
|
+
"app/mailers/admin_mailer.rb"
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
def
|
|
27
|
+
def passwords_mailer
|
|
28
|
+
template "mailers/admin/passwords_mailer.rb",
|
|
29
|
+
"app/mailers/admin/passwords_mailer.rb"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def copy_views_admin_mailer_invite
|
|
28
33
|
extensions.each do |extension|
|
|
29
34
|
locales.each do |lang|
|
|
30
|
-
template "views/
|
|
31
|
-
"app/views/
|
|
35
|
+
template "views/admin_mailer/invite.#{lang}#{extension}",
|
|
36
|
+
"app/views/admin_mailer/invite.#{lang}#{extension}"
|
|
32
37
|
end
|
|
33
38
|
end
|
|
34
39
|
end
|
|
35
40
|
|
|
36
|
-
def
|
|
41
|
+
def copy_views_passwords_mailer_reset
|
|
37
42
|
extensions.each do |extension|
|
|
38
43
|
locales.each do |lang|
|
|
39
|
-
template "views/
|
|
40
|
-
"app/views/
|
|
44
|
+
template "views/admin/passwords_mailer/reset.#{lang}#{extension}",
|
|
45
|
+
"app/views/admin/passwords_mailer/reset.#{lang}#{extension}"
|
|
41
46
|
end
|
|
42
47
|
end
|
|
43
48
|
end
|
|
@@ -15,11 +15,25 @@ module Trek
|
|
|
15
15
|
|
|
16
16
|
source_root File.expand_path("../templates", __dir__)
|
|
17
17
|
|
|
18
|
+
def create_user_model
|
|
19
|
+
return if user_model_existed?
|
|
20
|
+
|
|
21
|
+
template "models/user.rb", user_model_path
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def create_users_migration
|
|
25
|
+
return unless defined?(ActiveRecord)
|
|
26
|
+
return if user_model_existed?
|
|
27
|
+
|
|
28
|
+
migration_template("migrations/create_users.rb.erb",
|
|
29
|
+
"db/migrate/trek_create_users.rb",
|
|
30
|
+
migration_class_name:)
|
|
31
|
+
end
|
|
32
|
+
|
|
18
33
|
def inject_trek_to_user_model
|
|
19
34
|
inject_into_class user_model_path,
|
|
20
35
|
USER_MODEL_CLASS_NAME,
|
|
21
36
|
user_model_injection
|
|
22
|
-
run "rubocop --autocorrect #{user_model_path}", abort_on_failure: true
|
|
23
37
|
end
|
|
24
38
|
|
|
25
39
|
def copy_migration_files
|
|
@@ -30,12 +44,24 @@ module Trek
|
|
|
30
44
|
migration_class_name:)
|
|
31
45
|
end
|
|
32
46
|
|
|
47
|
+
def autocorrect_user_model
|
|
48
|
+
run "rubocop --autocorrect #{user_model_path}"
|
|
49
|
+
end
|
|
50
|
+
|
|
33
51
|
private
|
|
34
52
|
|
|
35
53
|
def tableized_model_class
|
|
36
54
|
USER_MODEL_CLASS_NAME.gsub("::", "").tableize
|
|
37
55
|
end
|
|
38
56
|
|
|
57
|
+
# Memoizes whether the User model existed *before* this generator ran, so the
|
|
58
|
+
# value stays stable after `create_user_model` writes the file.
|
|
59
|
+
def user_model_existed?
|
|
60
|
+
return @user_model_existed unless @user_model_existed.nil?
|
|
61
|
+
|
|
62
|
+
@user_model_existed = File.exist?(user_model_path)
|
|
63
|
+
end
|
|
64
|
+
|
|
39
65
|
def user_model_path
|
|
40
66
|
@user_model_path ||= File.join("app", "models", "#{user_file_path}.rb")
|
|
41
67
|
end
|
|
@@ -72,6 +72,10 @@ module Trek
|
|
|
72
72
|
generate "trek:install:mailer"
|
|
73
73
|
end
|
|
74
74
|
|
|
75
|
+
def install_user
|
|
76
|
+
generate "trek:install:user"
|
|
77
|
+
end
|
|
78
|
+
|
|
75
79
|
def install_authentication
|
|
76
80
|
generate "trek:install:authentication"
|
|
77
81
|
end
|
|
@@ -84,10 +88,6 @@ module Trek
|
|
|
84
88
|
generate "trek:install:healthcheck"
|
|
85
89
|
end
|
|
86
90
|
|
|
87
|
-
def install_user
|
|
88
|
-
generate "trek:install:user"
|
|
89
|
-
end
|
|
90
|
-
|
|
91
91
|
def install_translations
|
|
92
92
|
generate "trek:install:translations"
|
|
93
93
|
end
|
|
@@ -2,9 +2,10 @@ module Admin
|
|
|
2
2
|
class UserPasswordResetsController < ApplicationController
|
|
3
3
|
include Trek::Authentication
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
before_action :
|
|
7
|
-
before_action :
|
|
5
|
+
allow_unauthenticated_access
|
|
6
|
+
before_action :set_token, only: %i[edit update]
|
|
7
|
+
before_action :set_user_by_token, only: %i[edit update]
|
|
8
|
+
rate_limit to: 5, within: 3.minutes, only: :create, with: -> { redirect_to new_admin_user_session_path, alert: t("notices.rate_limited") }
|
|
8
9
|
|
|
9
10
|
helper Trek::I18nHelper
|
|
10
11
|
helper Trek::ThemeHelper
|
|
@@ -14,44 +15,39 @@ module Admin
|
|
|
14
15
|
default_form_builder Trek::FormBuilder
|
|
15
16
|
|
|
16
17
|
def new
|
|
17
|
-
@user_password_reset = Trek::UserPasswordReset.new
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def edit
|
|
21
18
|
end
|
|
22
19
|
|
|
23
20
|
def create
|
|
24
|
-
|
|
21
|
+
if user = User.privileged.find_by(email: params[:email])
|
|
22
|
+
Admin::PasswordsMailer.reset(user).deliver_later
|
|
23
|
+
end
|
|
25
24
|
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
redirect_to new_admin_user_session_path, notice: t(".success")
|
|
26
|
+
end
|
|
28
27
|
|
|
29
|
-
|
|
28
|
+
def edit
|
|
30
29
|
end
|
|
31
30
|
|
|
32
31
|
def update
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
@user.update!(params.permit(:password))
|
|
33
|
+
@user.user_sessions.destroy_all
|
|
34
|
+
redirect_to new_admin_user_session_path, notice: t(".success")
|
|
35
|
+
rescue ActiveRecord::RecordInvalid
|
|
36
|
+
redirect_to edit_admin_user_password_reset_path(@token), alert: @user.errors.full_messages.join(", ")
|
|
38
37
|
end
|
|
39
38
|
|
|
40
39
|
private
|
|
41
40
|
|
|
42
|
-
def
|
|
43
|
-
@token = params[:
|
|
44
|
-
@user = User.load_from_reset_password_token(params[:id])
|
|
45
|
-
|
|
46
|
-
not_authenticated if @user.blank?
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def user_password_reset_params
|
|
50
|
-
params.require(:user_password_reset).permit(:email)
|
|
41
|
+
def set_token
|
|
42
|
+
@token = params[:token]
|
|
51
43
|
end
|
|
52
44
|
|
|
53
|
-
def
|
|
54
|
-
|
|
45
|
+
def set_user_by_token
|
|
46
|
+
@user = User.privileged.find_by_token_for!(:password_reset, @token)
|
|
47
|
+
rescue ActiveRecord::RecordNotFound
|
|
48
|
+
redirect_to new_admin_user_session_path, alert: t("admin.user_password_resets.not_found")
|
|
49
|
+
rescue ActiveSupport::MessageVerifier::InvalidSignature
|
|
50
|
+
redirect_to new_admin_user_password_reset_path, alert: t("admin.user_password_resets.not_found")
|
|
55
51
|
end
|
|
56
52
|
end
|
|
57
53
|
end
|
|
@@ -2,8 +2,8 @@ module Admin
|
|
|
2
2
|
class UserSessionsController < ApplicationController
|
|
3
3
|
include Trek::Authentication
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
allow_unauthenticated_access only: %i[new create]
|
|
6
|
+
rate_limit to: 5, within: 3.minutes, only: :create, with: -> { redirect_to new_admin_user_session_path, alert: t("notices.rate_limited") }
|
|
7
7
|
|
|
8
8
|
helper Trek::I18nHelper
|
|
9
9
|
helper Trek::ThemeHelper
|
|
@@ -13,36 +13,29 @@ module Admin
|
|
|
13
13
|
default_form_builder Trek::FormBuilder
|
|
14
14
|
|
|
15
15
|
def new
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
return redirect_to after_authentication_url if authenticated?
|
|
17
|
+
|
|
18
|
+
@email = params[:email].presence
|
|
18
19
|
end
|
|
19
20
|
|
|
20
21
|
def create
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if @user&.privileged?
|
|
25
|
-
@user.remember_me!
|
|
26
|
-
redirect_back_or_to %i[admin root], notice: t(".success")
|
|
22
|
+
if user = User.privileged.authenticate_by(session_params)
|
|
23
|
+
start_new_session_for user
|
|
24
|
+
redirect_to after_authentication_url, notice: t(".success")
|
|
27
25
|
else
|
|
28
|
-
|
|
29
|
-
redirect_back_or_to %i[admin login], alert: t(".failure")
|
|
26
|
+
redirect_to new_admin_user_session_path, alert: t(".failure")
|
|
30
27
|
end
|
|
31
28
|
end
|
|
32
29
|
|
|
33
30
|
def destroy
|
|
34
|
-
|
|
35
|
-
redirect_to
|
|
31
|
+
terminate_session
|
|
32
|
+
redirect_to new_admin_user_session_path, notice: t(".success"), status: :see_other
|
|
36
33
|
end
|
|
37
34
|
|
|
38
35
|
private
|
|
39
36
|
|
|
40
|
-
def
|
|
41
|
-
params.
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def redirect_if_logged_in
|
|
45
|
-
redirect_to %i[admin root] if logged_in?
|
|
37
|
+
def session_params
|
|
38
|
+
params.permit(:email, :password)
|
|
46
39
|
end
|
|
47
40
|
end
|
|
48
41
|
end
|