active_authentication 0.1.0

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 (44) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +120 -0
  3. data/Rakefile +8 -0
  4. data/app/controllers/active_authentication/confirmations_controller.rb +29 -0
  5. data/app/controllers/active_authentication/passwords_controller.rb +37 -0
  6. data/app/controllers/active_authentication/registrations_controller.rb +42 -0
  7. data/app/controllers/active_authentication/sessions_controller.rb +36 -0
  8. data/app/controllers/active_authentication/unlocks_controller.rb +29 -0
  9. data/app/mailers/active_authentication/mailer.rb +21 -0
  10. data/app/views/active_authentication/confirmations/new.html.erb +14 -0
  11. data/app/views/active_authentication/mailer/email_confirmation_instructions.html.erb +5 -0
  12. data/app/views/active_authentication/mailer/password_reset_instructions.html.erb +5 -0
  13. data/app/views/active_authentication/mailer/unlock_instructions.html.erb +5 -0
  14. data/app/views/active_authentication/passwords/edit.html.erb +28 -0
  15. data/app/views/active_authentication/passwords/new.html.erb +14 -0
  16. data/app/views/active_authentication/registrations/edit.html.erb +42 -0
  17. data/app/views/active_authentication/registrations/new.html.erb +35 -0
  18. data/app/views/active_authentication/sessions/new.html.erb +19 -0
  19. data/app/views/active_authentication/shared/_links.html.erb +19 -0
  20. data/app/views/active_authentication/unlocks/new.html.erb +14 -0
  21. data/config/i18n-tasks.yml +159 -0
  22. data/config/locales/en.yml +90 -0
  23. data/config/locales/es.yml +90 -0
  24. data/lib/active_authentication/controller/lockable.rb +31 -0
  25. data/lib/active_authentication/controller/trackable.rb +17 -0
  26. data/lib/active_authentication/controller.rb +48 -0
  27. data/lib/active_authentication/current.rb +5 -0
  28. data/lib/active_authentication/engine.rb +16 -0
  29. data/lib/active_authentication/model/authenticatable.rb +16 -0
  30. data/lib/active_authentication/model/confirmable.rb +54 -0
  31. data/lib/active_authentication/model/lockable.rb +42 -0
  32. data/lib/active_authentication/model/recoverable.rb +16 -0
  33. data/lib/active_authentication/model/registerable.rb +7 -0
  34. data/lib/active_authentication/model/trackable.rb +23 -0
  35. data/lib/active_authentication/model.rb +21 -0
  36. data/lib/active_authentication/routes.rb +34 -0
  37. data/lib/active_authentication/test/helpers.rb +13 -0
  38. data/lib/active_authentication/version.rb +3 -0
  39. data/lib/active_authentication.rb +42 -0
  40. data/lib/generators/active_authentication/install/install_generator.rb +53 -0
  41. data/lib/generators/active_authentication/install/templates/initializer.rb +14 -0
  42. data/lib/generators/active_authentication/install/templates/migration.rb +26 -0
  43. data/lib/generators/active_authentication/views/views_generator.rb +17 -0
  44. metadata +116 -0
@@ -0,0 +1,13 @@
1
+ module ActiveAuthentication
2
+ module Test
3
+ module Helpers
4
+ def sign_in(user, password: "password")
5
+ post session_path, params: {email: user.email, password: password}
6
+ end
7
+
8
+ def sign_out
9
+ delete session_path
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ module ActiveAuthentication
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,42 @@
1
+ require "active_authentication/version"
2
+ require "active_authentication/engine"
3
+ require "active_authentication/routes"
4
+
5
+ module ActiveAuthentication
6
+ include ActiveSupport::Configurable
7
+
8
+ autoload :Controller, "active_authentication/controller"
9
+ autoload :Current, "active_authentication/current"
10
+ autoload :Model, "active_authentication/model"
11
+
12
+ module Controller
13
+ autoload :Lockable, "active_authentication/controller/lockable"
14
+ autoload :Trackable, "active_authentication/controller/trackable"
15
+ end
16
+
17
+ module Model
18
+ autoload :Authenticatable, "active_authentication/model/authenticatable"
19
+ autoload :Confirmable, "active_authentication/model/confirmable"
20
+ autoload :Lockable, "active_authentication/model/lockable"
21
+ autoload :Recoverable, "active_authentication/model/recoverable"
22
+ autoload :Registerable, "active_authentication/model/registerable"
23
+ autoload :Trackable, "active_authentication/model/trackable"
24
+ end
25
+
26
+ module Test
27
+ autoload :Helpers, "active_authentication/test/helpers"
28
+ end
29
+
30
+ # authenticatable
31
+ config_accessor :min_password_length, default: 6
32
+
33
+ # confirmable
34
+ config_accessor :email_confirmation_token_expires_in, default: 24.hours
35
+
36
+ # lockable
37
+ config_accessor :unlock_token_expires_in, default: 24.hours
38
+ config_accessor :max_failed_attempts, default: 10
39
+
40
+ # recoverable
41
+ config_accessor :password_reset_token_expires_in, default: 1.hour
42
+ end
@@ -0,0 +1,53 @@
1
+ class ActiveAuthentication::InstallGenerator < Rails::Generators::Base
2
+ include Rails::Generators::Migration
3
+
4
+ source_root File.expand_path("templates", __dir__)
5
+
6
+ desc "Creates the User model, the active_authentication initializer, and adds the active_authentication route."
7
+
8
+ def self.next_migration_number(dirname)
9
+ ActiveRecord::Migration.new.next_migration_number 0
10
+ end
11
+
12
+ def generate_model
13
+ invoke "active_record:model", %w[User], migration: false, skip_collision_check: true
14
+
15
+ if behavior == :invoke
16
+ inject_into_class "app/models/user.rb", "User", " authenticates_with :confirmable, :lockable, :recoverable, :registerable, :trackable\n"
17
+ end
18
+ end
19
+
20
+ def generate_migration
21
+ migration_template "migration.rb", "db/migrate/create_users.rb", migration_version: migration_version, ip_column: ip_column
22
+ end
23
+
24
+ def add_route
25
+ route "active_authentication"
26
+ end
27
+
28
+ def copy_initializer
29
+ template "initializer.rb", "config/initializers/active_authentication.rb"
30
+ end
31
+
32
+ private
33
+
34
+ def ar_config
35
+ if ActiveRecord::Base.configurations.respond_to?(:configs_for)
36
+ ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: "primary").configuration_hash
37
+ else
38
+ ActiveRecord::Base.configurations[Rails.env]
39
+ end
40
+ end
41
+
42
+ def ip_column
43
+ postgresql? ? "inet" : "string"
44
+ end
45
+
46
+ def migration_version
47
+ "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
48
+ end
49
+
50
+ def postgresql?
51
+ ar_config.present? && ar_config["adapter"] == "postgresql"
52
+ end
53
+ end
@@ -0,0 +1,14 @@
1
+ ActiveAuthentication.configure do |config|
2
+ # configuration for the authenticatable concern
3
+ # config.min_password_length = 6
4
+
5
+ # configuration for the confirmable concern
6
+ # config.email_confirmation_token_expires_in = 24.hours
7
+
8
+ # configuration for the lockable concern
9
+ # config.unlock_token_expires_in = 24.hours
10
+ # config.max_failed_attempts = 10
11
+
12
+ # configuration for the recoverable concern
13
+ # config.password_reset_token_expires_in = 1.hour
14
+ end
@@ -0,0 +1,26 @@
1
+ class CreateUsers < ActiveRecord::Migration<%= migration_version %>
2
+ def change
3
+ create_table :users do |t|
4
+ # authenticatable
5
+ t.string :email, null: false
6
+ t.string :password_digest, null: false
7
+
8
+ # confirmable
9
+ t.string :unconfirmed_email
10
+
11
+ # lockable
12
+ t.integer :failed_attempts, null: false, default: 0
13
+ t.datetime :locked_at
14
+
15
+ # trackable
16
+ t.integer :sign_in_count, null: false, default: 0
17
+ t.datetime :current_sign_in_at
18
+ t.datetime :last_sign_in_at
19
+ t.<%= ip_column %> :current_sign_in_ip
20
+ t.<%= ip_column %> :last_sign_in_ip
21
+
22
+ t.timestamps
23
+ end
24
+ add_index :users, :email, unique: true
25
+ end
26
+ end
@@ -0,0 +1,17 @@
1
+ class ActiveAuthentication::ViewsGenerator < Rails::Generators::Base
2
+ source_root File.expand_path("../../../../", __dir__)
3
+
4
+ desc "Generates active_authentication's views."
5
+
6
+ class_option :views, aliases: "-v", type: :array, desc: "Views to generate (available: confirmations, mailer, passwords, registrations, sessions, shared, unlocks)"
7
+
8
+ def copy_views
9
+ if options[:views]
10
+ options[:views].each do |view|
11
+ directory "app/views/active_authentication/#{view}"
12
+ end
13
+ else
14
+ directory "app/views/active_authentication"
15
+ end
16
+ end
17
+ end
metadata ADDED
@@ -0,0 +1,116 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_authentication
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Patricio Mac Adden
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-04-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '7.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '7.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bcrypt
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.1'
41
+ description: A pure Rails authentication solution. Inspired by devise, but with a
42
+ pure Rails implementation.
43
+ email:
44
+ - patriciomacadden@gmail.com
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - README.md
50
+ - Rakefile
51
+ - app/controllers/active_authentication/confirmations_controller.rb
52
+ - app/controllers/active_authentication/passwords_controller.rb
53
+ - app/controllers/active_authentication/registrations_controller.rb
54
+ - app/controllers/active_authentication/sessions_controller.rb
55
+ - app/controllers/active_authentication/unlocks_controller.rb
56
+ - app/mailers/active_authentication/mailer.rb
57
+ - app/views/active_authentication/confirmations/new.html.erb
58
+ - app/views/active_authentication/mailer/email_confirmation_instructions.html.erb
59
+ - app/views/active_authentication/mailer/password_reset_instructions.html.erb
60
+ - app/views/active_authentication/mailer/unlock_instructions.html.erb
61
+ - app/views/active_authentication/passwords/edit.html.erb
62
+ - app/views/active_authentication/passwords/new.html.erb
63
+ - app/views/active_authentication/registrations/edit.html.erb
64
+ - app/views/active_authentication/registrations/new.html.erb
65
+ - app/views/active_authentication/sessions/new.html.erb
66
+ - app/views/active_authentication/shared/_links.html.erb
67
+ - app/views/active_authentication/unlocks/new.html.erb
68
+ - config/i18n-tasks.yml
69
+ - config/locales/en.yml
70
+ - config/locales/es.yml
71
+ - lib/active_authentication.rb
72
+ - lib/active_authentication/controller.rb
73
+ - lib/active_authentication/controller/lockable.rb
74
+ - lib/active_authentication/controller/trackable.rb
75
+ - lib/active_authentication/current.rb
76
+ - lib/active_authentication/engine.rb
77
+ - lib/active_authentication/model.rb
78
+ - lib/active_authentication/model/authenticatable.rb
79
+ - lib/active_authentication/model/confirmable.rb
80
+ - lib/active_authentication/model/lockable.rb
81
+ - lib/active_authentication/model/recoverable.rb
82
+ - lib/active_authentication/model/registerable.rb
83
+ - lib/active_authentication/model/trackable.rb
84
+ - lib/active_authentication/routes.rb
85
+ - lib/active_authentication/test/helpers.rb
86
+ - lib/active_authentication/version.rb
87
+ - lib/generators/active_authentication/install/install_generator.rb
88
+ - lib/generators/active_authentication/install/templates/initializer.rb
89
+ - lib/generators/active_authentication/install/templates/migration.rb
90
+ - lib/generators/active_authentication/views/views_generator.rb
91
+ homepage: https://github.com/sinaptia/active_authentication
92
+ licenses:
93
+ - MIT
94
+ metadata:
95
+ homepage_uri: https://github.com/sinaptia/active_authentication
96
+ source_code_uri: https://github.com/sinaptia/active_authentication
97
+ post_install_message:
98
+ rdoc_options: []
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubygems_version: 3.0.3.1
113
+ signing_key:
114
+ specification_version: 4
115
+ summary: A pure Rails authentication solution
116
+ test_files: []