api_authentication_gem 0.1.3 → 0.4.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.
@@ -0,0 +1,23 @@
1
+ module ApiAuthenticationGem
2
+ class PasswordReset < ::ActiveRecord::Base
3
+ self.table_name = "api_auth_password_resets"
4
+
5
+ validates :identifier, :token, :expires_at, presence: true
6
+ validates :token, uniqueness: true
7
+
8
+ # Only tokens that haven't been used and haven't expired
9
+ scope :active, -> { where(used_at: nil).where("expires_at > ?", Time.now) }
10
+
11
+ def expired?
12
+ expires_at <= Time.now
13
+ end
14
+
15
+ def used?
16
+ !used_at.nil?
17
+ end
18
+
19
+ def consume!
20
+ update!(used_at: Time.now)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,18 @@
1
+ module ApiAuthenticationGem
2
+ class RefreshToken < ::ActiveRecord::Base
3
+ self.table_name = "api_auth_refresh_tokens"
4
+
5
+ validates :user_id, :token, :expires_at, presence: true
6
+ validates :token, uniqueness: true
7
+
8
+ scope :active, -> { where(revoked_at: nil).where("expires_at > ?", Time.now) }
9
+
10
+ def active?
11
+ revoked_at.nil? && expires_at > Time.now
12
+ end
13
+
14
+ def revoke!
15
+ update!(revoked_at: Time.now)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,19 @@
1
+ module ApiAuthenticationGem
2
+ class RevokedToken < ::ActiveRecord::Base
3
+ self.table_name = "api_auth_revoked_tokens"
4
+
5
+ validates :jti, :expires_at, presence: true
6
+ validates :jti, uniqueness: true
7
+
8
+ def self.revoked?(jti)
9
+ return false if jti.nil?
10
+
11
+ where(jti: jti).exists?
12
+ end
13
+
14
+ # Prune entries whose tokens have already expired — safe to call from a cron job.
15
+ def self.cleanup!
16
+ where("expires_at < ?", Time.now).delete_all
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,3 @@
1
+ module ApiAuthenticationGem
2
+ VERSION = "0.4.0".freeze
3
+ end
@@ -1,36 +1,27 @@
1
- require "jwt"
2
- require "bcrypt"
1
+ require "active_record"
2
+ require "api_authentication_gem/version"
3
+ require "api_authentication_gem/errors"
4
+ require "api_authentication_gem/configuration"
5
+ require "api_authentication_gem/models/refresh_token"
6
+ require "api_authentication_gem/models/revoked_token"
7
+ require "api_authentication_gem/models/password_reset"
8
+ require "api_authentication_gem/models/lockout"
9
+ require "api_authentication_gem/models/magic_link"
10
+ require "api_authentication_gem/models/auth_session"
11
+ require "api_authentication_gem/auth"
12
+ require "api_authentication_gem/concerns/authenticatable"
3
13
 
4
14
  module ApiAuthenticationGem
5
- class Auth
6
- SECRET_KEY = "your$ecretK3y"
7
-
8
- def self.signup(email:, password:, user_class:)
9
- return { error: "Email is required" } unless email
10
- return { error: "Password must be at least 5 characters long" } if password.nil? || password.length < 5
11
-
12
- return { error: "Email already exists" } if user_class.find_by(email: email)
13
-
14
- password_digest = BCrypt::Password.create(password)
15
- user = user_class.create(email: email, password_digest: password_digest)
16
-
17
- { message: "User created", user: user }
18
- end
19
-
20
- def self.login(email:, password:, user_class:)
21
- user = user_class.find_by(email: email)
22
-
23
- return { error: "Invalid email or password" } unless user
24
- return { error: "Invalid email or password" } unless BCrypt::Password.new(user.password_digest) == password
15
+ def self.configuration
16
+ @configuration ||= Configuration.new
17
+ end
25
18
 
26
- token = JWT.encode({ user_id: user.id, exp: Time.now.to_i + 3600 }, SECRET_KEY, 'HS256')
27
- { token: token }
28
- end
19
+ def self.configure
20
+ yield(configuration)
21
+ configuration.validate!
22
+ end
29
23
 
30
- def self.decode_token(token)
31
- JWT.decode(token, SECRET_KEY, true, { algorithm: 'HS256' })[0]
32
- rescue
33
- nil
34
- end
24
+ def self.reset_configuration!
25
+ @configuration = nil
35
26
  end
36
27
  end
metadata CHANGED
@@ -1,58 +1,181 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api_authentication_gem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adarsh Mishra
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2025-04-15 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: activerecord
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '6.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '6.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: activesupport
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '6.0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '6.0'
13
40
  - !ruby/object:Gem::Dependency
14
41
  name: bcrypt
15
42
  requirement: !ruby/object:Gem::Requirement
16
43
  requirements:
17
44
  - - ">="
18
45
  - !ruby/object:Gem::Version
19
- version: '0'
46
+ version: '3.1'
20
47
  type: :runtime
21
48
  prerelease: false
22
49
  version_requirements: !ruby/object:Gem::Requirement
23
50
  requirements:
24
51
  - - ">="
25
52
  - !ruby/object:Gem::Version
26
- version: '0'
53
+ version: '3.1'
27
54
  - !ruby/object:Gem::Dependency
28
55
  name: jwt
29
56
  requirement: !ruby/object:Gem::Requirement
30
57
  requirements:
31
58
  - - ">="
32
59
  - !ruby/object:Gem::Version
33
- version: '0'
60
+ version: '2.0'
34
61
  type: :runtime
35
62
  prerelease: false
36
63
  version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '2.0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: rspec
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '3.0'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '3.0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: rspec_junit_formatter
84
+ requirement: !ruby/object:Gem::Requirement
37
85
  requirements:
38
86
  - - ">="
39
87
  - !ruby/object:Gem::Version
40
88
  version: '0'
41
- description: 'Reusable gem for authentication with user-defined models. For detailed
42
- usage, visit: https://github.com/Adarsh-07-Mishra/api_authentication_gem/blob/main/README.md'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: rubocop
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.65'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1.65'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rubocop-performance
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '1.21'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '1.21'
124
+ - !ruby/object:Gem::Dependency
125
+ name: rubocop-rspec
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '3.0'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '3.0'
138
+ - !ruby/object:Gem::Dependency
139
+ name: sqlite3
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ description: Drop-in JWT signup/login for Rails API apps. Configurable user model,
153
+ token expiry, password validation, and a ready-made controller concern. See https://github.com/Adarsh-07-Mishra/api_authentication_gem
154
+ for full docs.
43
155
  email:
44
- - aadimishra24@gmail.com
156
+ - aadimishra277@gmail.com
45
157
  executables: []
46
158
  extensions: []
47
159
  extra_rdoc_files: []
48
160
  files:
161
+ - LICENSE.txt
49
162
  - README.md
50
163
  - lib/api_authentication_gem.rb
164
+ - lib/api_authentication_gem/auth.rb
165
+ - lib/api_authentication_gem/concerns/authenticatable.rb
166
+ - lib/api_authentication_gem/configuration.rb
167
+ - lib/api_authentication_gem/errors.rb
168
+ - lib/api_authentication_gem/models/auth_session.rb
169
+ - lib/api_authentication_gem/models/lockout.rb
170
+ - lib/api_authentication_gem/models/magic_link.rb
171
+ - lib/api_authentication_gem/models/password_reset.rb
172
+ - lib/api_authentication_gem/models/refresh_token.rb
173
+ - lib/api_authentication_gem/models/revoked_token.rb
174
+ - lib/api_authentication_gem/version.rb
51
175
  homepage: https://github.com/Adarsh-07-Mishra/api_authentication_gem
52
176
  licenses:
53
177
  - MIT
54
178
  metadata: {}
55
- post_install_message:
56
179
  rdoc_options: []
57
180
  require_paths:
58
181
  - lib
@@ -60,15 +183,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
60
183
  requirements:
61
184
  - - ">="
62
185
  - !ruby/object:Gem::Version
63
- version: '0'
186
+ version: 3.1.0
64
187
  required_rubygems_version: !ruby/object:Gem::Requirement
65
188
  requirements:
66
189
  - - ">="
67
190
  - !ruby/object:Gem::Version
68
191
  version: '0'
69
192
  requirements: []
70
- rubygems_version: 3.3.3
71
- signing_key:
193
+ rubygems_version: 3.6.7
72
194
  specification_version: 4
73
- summary: Provides JWT-based signup and login for APIs
195
+ summary: Production-ready JWT authentication for Rails APIs
74
196
  test_files: []