action_auth 0.1.1 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 45ce58405d5a45e6c9bf204378b2d187b468285401d889fe9e8323ce9649e345
4
- data.tar.gz: 1e94b9b8e23d211d93ce96f8ff1e4ea1f6b816ca0ed9de8144b72a03273a7de7
3
+ metadata.gz: 3745646b8654c9678ab57b1539e7190f3c002f3352dda31cf06a884604f2dfdd
4
+ data.tar.gz: 92f62b3fd0607982f545408db8196f6b24ba43b63df5b166f0262daa77a00013
5
5
  SHA512:
6
- metadata.gz: 889f0be20c9e05507bfa12035ce2c06254b751161191bf3e1ae99eaba39643bbbb7b995a94b74dc4ba6453350e8201ae5265f938caaf50a85a149eae975e9a30
7
- data.tar.gz: caecc465fce527d29225ab23ef7cc33c6cd992496864e5a224ab426a3a81378c2290a020b83dff6053c2f159d4bf9d8c579b9033ab48db8990b4796bacd024ab
6
+ metadata.gz: f422203f6efa8a50d9de3140b0f97ad6eabe7a2d17bf79d36d352e41a08a20fe0bd23ab3f4587563655a2fb52ffc0800d5d1a783f97161a5b773d1df4647c751
7
+ data.tar.gz: 618b27e2c259afcd7018595087fa10cb828d38dee863b3d76f67dfff2f2e37e086bc6c240494769990265130831cd839c46c6edaf43a0c6051c4f58b2f852d4f
data/README.md CHANGED
@@ -8,6 +8,13 @@ Add this line to your application's Gemfile:
8
8
  bundle add action_auth
9
9
  bin/rails action_auth:install:migrations
10
10
  ```
11
+
12
+ Modify config/routes.rb to include the following:
13
+
14
+ ```ruby
15
+ mount ActionAuth::Engine => 'action_auth'
16
+ ```
17
+
11
18
  ## Usage
12
19
 
13
20
  ### Routes
@@ -0,0 +1,29 @@
1
+ module ActionAuth
2
+ module Identity
3
+ class EmailVerificationsController < ApplicationController
4
+ before_action :set_user, only: :show
5
+
6
+ def show
7
+ @user.update! verified: true
8
+ redirect_to main_app.root_path, notice: "Thank you for verifying your email address"
9
+ end
10
+
11
+ def create
12
+ send_email_verification
13
+ redirect_to main_app.root_path, notice: "We sent a verification email to your email address"
14
+ end
15
+
16
+ private
17
+
18
+ def set_user
19
+ @user = ActionAuth::User.find_by_token_for!(:email_verification, params[:sid])
20
+ rescue StandardError
21
+ redirect_to edit_identity_email_path, alert: "That email verification link is invalid"
22
+ end
23
+
24
+ def send_email_verification
25
+ UserMailer.with(user: Current.user).email_verification.deliver_later
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,41 @@
1
+ module ActionAuth
2
+ module Identity
3
+ class EmailsController < ApplicationController
4
+ before_action :set_user
5
+
6
+ def edit
7
+ end
8
+
9
+ def update
10
+ if @user.update(user_params)
11
+ redirect_to_root
12
+ else
13
+ render :edit, status: :unprocessable_entity
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def set_user
20
+ @user = Current.user
21
+ end
22
+
23
+ def user_params
24
+ params.permit(:email, :password_challenge).with_defaults(password_challenge: "")
25
+ end
26
+
27
+ def redirect_to_root
28
+ if @user.email_previously_changed?
29
+ resend_email_verification
30
+ redirect_to main_app.root_path, notice: "Your email has been changed"
31
+ else
32
+ redirect_to main_app.root_path
33
+ end
34
+ end
35
+
36
+ def resend_email_verification
37
+ UserMailer.with(user: @user).email_verification.deliver_later
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,46 @@
1
+ module ActionAuth
2
+ module Identity
3
+ class PasswordResetsController < ApplicationController
4
+ before_action :set_user, only: %i[ edit update ]
5
+
6
+ def new
7
+ end
8
+
9
+ def edit
10
+ end
11
+
12
+ def create
13
+ if @user = ActionAuth::User.find_by(email: params[:email], verified: true)
14
+ send_password_reset_email
15
+ redirect_to sign_in_path, notice: "Check your email for reset instructions"
16
+ else
17
+ redirect_to new_identity_password_reset_path, alert: "You can't reset your password until you verify your email"
18
+ end
19
+ end
20
+
21
+ def update
22
+ if @user.update(user_params)
23
+ redirect_to sign_in_path, notice: "Your password was reset successfully. Please sign in"
24
+ else
25
+ render :edit, status: :unprocessable_entity
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def set_user
32
+ @user = ActionAuth::User.find_by_token_for!(:password_reset, params[:sid])
33
+ rescue StandardError
34
+ redirect_to new_identity_password_reset_path, alert: "That password reset link is invalid"
35
+ end
36
+
37
+ def user_params
38
+ params.permit(:password, :password_confirmation)
39
+ end
40
+
41
+ def send_password_reset_email
42
+ UserMailer.with(user: @user).password_reset.deliver_later
43
+ end
44
+ end
45
+ end
46
+ end
@@ -7,7 +7,7 @@ module ActionAuth
7
7
 
8
8
  def update
9
9
  if @user.update(user_params)
10
- redirect_to root_path, notice: "Your password has been changed"
10
+ redirect_to main_app.root_path, notice: "Your password has been changed"
11
11
  else
12
12
  render :edit, status: :unprocessable_entity
13
13
  end
@@ -7,7 +7,7 @@ module ActionAuth
7
7
  def create
8
8
  @user = User.new(user_params)
9
9
 
10
- if @user.save!
10
+ if @user.save
11
11
  session_record = @user.action_auth_sessions.create!
12
12
  cookies.signed.permanent[:session_token] = { value: session_record.id, httponly: true }
13
13
 
@@ -1,6 +1,7 @@
1
1
  module ActionAuth
2
2
  class SessionsController < ApplicationController
3
3
  before_action :set_current_request_details
4
+
4
5
  def index
5
6
  @sessions = Current.user.action_auth_sessions.order(created_at: :desc)
6
7
  end
@@ -0,0 +1,43 @@
1
+ <p style="color: red"><%= alert %></p>
2
+
3
+ <% if ActionAuth::Current.user.verified? %>
4
+ <h1>Change your email</h1>
5
+ <% else %>
6
+ <h1>Verify your email</h1>
7
+ <p>We sent a verification email to the address below. Check that email and follow those instructions to confirm it's your email address.</p>
8
+ <p><%= button_to "Re-send verification email", identity_email_verification_path %></p>
9
+ <% end %>
10
+
11
+ <%= form_with(url: identity_email_path, method: :patch) do |form| %>
12
+ <% if @user.errors.any? %>
13
+ <div style="color: red">
14
+ <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
15
+
16
+ <ul>
17
+ <% @user.errors.each do |error| %>
18
+ <li><%= error.full_message %></li>
19
+ <% end %>
20
+ </ul>
21
+ </div>
22
+ <% end %>
23
+
24
+ <div>
25
+ <%= form.label :email, "New email", style: "display: block" %>
26
+ <%= form.email_field :email, required: true, autofocus: true %>
27
+ </div>
28
+
29
+ <div>
30
+ <%= form.label :password_challenge, style: "display: block" %>
31
+ <%= form.password_field :password_challenge, required: true, autocomplete: "current-password" %>
32
+ </div>
33
+
34
+ <div>
35
+ <%= form.submit "Save changes" %>
36
+ </div>
37
+ <% end %>
38
+
39
+ <br>
40
+
41
+ <div>
42
+ <%= link_to "Back", main_app.root_path %>
43
+ </div>
@@ -0,0 +1,32 @@
1
+ <h1>Reset your password</h1>
2
+
3
+ <%= form_with(url: identity_password_reset_path, method: :patch) do |form| %>
4
+ <% if @user.errors.any? %>
5
+ <div style="color: red">
6
+ <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
7
+
8
+ <ul>
9
+ <% @user.errors.each do |error| %>
10
+ <li><%= error.full_message %></li>
11
+ <% end %>
12
+ </ul>
13
+ </div>
14
+ <% end %>
15
+
16
+ <%= form.hidden_field :sid, value: params[:sid] %>
17
+
18
+ <div>
19
+ <%= form.label :password, "New password", style: "display: block" %>
20
+ <%= form.password_field :password, required: true, autofocus: true, autocomplete: "new-password" %>
21
+ <div>12 characters minimum.</div>
22
+ </div>
23
+
24
+ <div>
25
+ <%= form.label :password_confirmation, "Confirm new password", style: "display: block" %>
26
+ <%= form.password_field :password_confirmation, required: true, autocomplete: "new-password" %>
27
+ </div>
28
+
29
+ <div>
30
+ <%= form.submit "Save changes" %>
31
+ </div>
32
+ <% end %>
@@ -0,0 +1,14 @@
1
+ <p style="color: red"><%= alert %></p>
2
+
3
+ <h1>Forgot your password?</h1>
4
+
5
+ <%= form_with(url: identity_password_reset_path) do |form| %>
6
+ <div>
7
+ <%= form.label :email, style: "display: block" %>
8
+ <%= form.email_field :email, required: true, autofocus: true %>
9
+ </div>
10
+
11
+ <div>
12
+ <%= form.submit "Send password reset email" %>
13
+ </div>
14
+ <% end %>
@@ -39,5 +39,5 @@
39
39
  <br>
40
40
 
41
41
  <div>
42
- <%= link_to "Back", root_path %>
42
+ <%= link_to "Back", main_app.root_path %>
43
43
  </div>
data/config/routes.rb CHANGED
@@ -5,4 +5,9 @@ ActionAuth::Engine.routes.draw do
5
5
  post "sign_up", to: "registrations#create"
6
6
  resources :sessions, only: [:index, :show, :destroy]
7
7
  resource :password, only: [:edit, :update]
8
+ namespace :identity do
9
+ resource :email, only: [:edit, :update]
10
+ resource :email_verification, only: [:show, :create]
11
+ resource :password_reset, only: [:new, :edit, :create, :update]
12
+ end
8
13
  end
@@ -14,7 +14,6 @@ module ActionAuth
14
14
 
15
15
  def user_signed_in?; Current.user.present?; end
16
16
  helper_method :user_signed_in?
17
-
18
17
  end
19
18
 
20
19
  private
@@ -14,6 +14,7 @@ module ActionAuth
14
14
  ActiveSupport.on_load :action_controller_base do
15
15
  helper_method :user_sessions_path, :user_session_path, :new_user_session_path
16
16
  helper_method :new_user_registration_path
17
+ helper_method :edit_user_password_path
17
18
  end
18
19
  end
19
20
  end
@@ -16,6 +16,14 @@ module ActionAuth
16
16
  def new_user_registration_path
17
17
  action_auth.sign_up_path
18
18
  end
19
+
20
+ def edit_password_path
21
+ action_auth.edit_password_path
22
+ end
23
+
24
+ def password_path
25
+ action_auth.password_path
26
+ end
19
27
  end
20
28
  end
21
29
  end
@@ -1,3 +1,3 @@
1
1
  module ActionAuth
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: action_auth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Kimura
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-08 00:00:00.000000000 Z
11
+ date: 2023-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -52,6 +52,9 @@ files:
52
52
  - app/assets/config/action_auth_manifest.js
53
53
  - app/assets/stylesheets/action_auth/application.css
54
54
  - app/controllers/action_auth/application_controller.rb
55
+ - app/controllers/action_auth/identity/email_verifications_controller.rb
56
+ - app/controllers/action_auth/identity/emails_controller.rb
57
+ - app/controllers/action_auth/identity/password_resets_controller.rb
55
58
  - app/controllers/action_auth/passwords_controller.rb
56
59
  - app/controllers/action_auth/registrations_controller.rb
57
60
  - app/controllers/action_auth/sessions_controller.rb
@@ -63,6 +66,9 @@ files:
63
66
  - app/models/action_auth/current.rb
64
67
  - app/models/action_auth/session.rb
65
68
  - app/models/action_auth/user.rb
69
+ - app/views/action_auth/identity/emails/edit.html.erb
70
+ - app/views/action_auth/identity/password_resets/edit.html.erb
71
+ - app/views/action_auth/identity/password_resets/new.html.erb
66
72
  - app/views/action_auth/passwords/edit.html.erb
67
73
  - app/views/action_auth/registrations/new.html.erb
68
74
  - app/views/action_auth/sessions/index.html.erb