apiphobic-tokens 1.0.1 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/LICENSE.txt +1 -1
- data/lib/apiphobic/errors/invalid_attribute.rb +1 -1
- data/lib/apiphobic/tokens/configuration.rb +2 -2
- data/lib/apiphobic/tokens/json_web_token.rb +12 -16
- data/lib/apiphobic/tokens/json_web_tokens/null.rb +4 -4
- data/lib/apiphobic/tokens/json_web_tokens/object.rb +21 -0
- data/lib/apiphobic/tokens/json_web_tokens/password_reset.rb +2 -1
- data/lib/apiphobic/tokens/role_predicable.rb +1 -1
- data/lib/apiphobic/tokens/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +41 -29
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cfdcea174929f4bc35d14489cc907975cc52b7bdadde0685d149fe170bcef040
|
4
|
+
data.tar.gz: d9ef964a93b454acb6924d778e77c43b3aa863fdb3e4c99dbc634f85262f01a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d2dfabbb167d21ed16940580db4b6c25ce0d97b96bd80ae9be9dc3b9fd908ac47468f8510ddb6a4784319ebe953164a43088e030a2293e9d71223cdf37472c5
|
7
|
+
data.tar.gz: 07b4557ae1ee5fdd39ee0ead41ac95eb63222d2c14a78fd00029308d3e08f5f736a98ed24f10b750169735e1482a6e7582e3712d91014d59e828129c4c8a1fca
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/LICENSE.txt
CHANGED
@@ -39,7 +39,7 @@ module Tokens
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def default_audience
|
42
|
-
@default_audience || '
|
42
|
+
@default_audience || 'User'
|
43
43
|
end
|
44
44
|
|
45
45
|
def default_availability_leeway_in_seconds
|
@@ -63,7 +63,7 @@ module Tokens
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def default_subject
|
66
|
-
@default_subject ||
|
66
|
+
@default_subject || nil
|
67
67
|
end
|
68
68
|
|
69
69
|
def private_key
|
@@ -10,7 +10,6 @@ require 'apiphobic/tokens/configurable'
|
|
10
10
|
require 'apiphobic/tokens/json_web_tokens/null'
|
11
11
|
require 'apiphobic/tokens/role_predicable'
|
12
12
|
|
13
|
-
# rubocop:disable Metrics/ClassLength
|
14
13
|
module Apiphobic
|
15
14
|
module Tokens
|
16
15
|
class JsonWebToken
|
@@ -47,38 +46,36 @@ class JsonWebToken
|
|
47
46
|
new(data: data, headers: headers)
|
48
47
|
end
|
49
48
|
|
50
|
-
# rubocop:disable Metrics/ParameterLists
|
51
|
-
def self.build(
|
49
|
+
# rubocop:disable Metrics/ParameterLists
|
50
|
+
def self.build(audience_id:,
|
51
|
+
id: SecureRandom.uuid,
|
52
52
|
audience: configuration.default_audience,
|
53
|
-
expiration: Time.now.utc.to_i + (60 * configuration.default_expiration_in_minutes),
|
53
|
+
expiration: Time.now.utc.to_i + (60 * configuration.default_expiration_in_minutes), # rubocop:disable Layout/LineLength
|
54
54
|
issuer: configuration.default_issuer,
|
55
55
|
issued_at: Time.now.utc,
|
56
56
|
not_before: Time.now.utc,
|
57
|
-
owner: nil,
|
58
57
|
roles: configuration.default_roles,
|
59
58
|
subject: configuration.default_subject,
|
60
|
-
subject_id
|
59
|
+
subject_id: nil,
|
61
60
|
token_private_key: configuration.private_key)
|
62
61
|
|
63
|
-
owner ||= subject_id
|
64
|
-
|
65
62
|
new(
|
66
63
|
private_key: token_private_key,
|
67
64
|
data: {
|
65
|
+
'aid' => audience_id,
|
68
66
|
'aud' => audience,
|
69
67
|
'exp' => expiration.to_i,
|
70
68
|
'iat' => issued_at.to_i,
|
71
69
|
'iss' => issuer,
|
72
70
|
'jti' => id,
|
73
71
|
'nbf' => not_before.to_i,
|
74
|
-
'own' => owner,
|
75
72
|
'rol' => roles.join(','),
|
76
73
|
'sid' => subject_id,
|
77
74
|
'sub' => subject,
|
78
75
|
},
|
79
76
|
)
|
80
77
|
end
|
81
|
-
# rubocop:enable Metrics/ParameterLists
|
78
|
+
# rubocop:enable Metrics/ParameterLists
|
82
79
|
|
83
80
|
def available?
|
84
81
|
not_before <= (Time.now.to_i + configuration.default_availability_leeway_in_seconds)
|
@@ -116,7 +113,7 @@ class JsonWebToken
|
|
116
113
|
end
|
117
114
|
|
118
115
|
def valid_id?
|
119
|
-
id =~ /[a-f0-9]{8}
|
116
|
+
id =~ /[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/i
|
120
117
|
end
|
121
118
|
|
122
119
|
def valid_issuer?
|
@@ -151,6 +148,10 @@ class JsonWebToken
|
|
151
148
|
data['aud']
|
152
149
|
end
|
153
150
|
|
151
|
+
def audience_id
|
152
|
+
data['aid']
|
153
|
+
end
|
154
|
+
|
154
155
|
def issued_at
|
155
156
|
data['iat']
|
156
157
|
end
|
@@ -179,10 +180,6 @@ class JsonWebToken
|
|
179
180
|
Time.at(not_before)
|
180
181
|
end
|
181
182
|
|
182
|
-
def owner_id
|
183
|
-
data['own']
|
184
|
-
end
|
185
|
-
|
186
183
|
def subject_id
|
187
184
|
data['sid']
|
188
185
|
end
|
@@ -325,4 +322,3 @@ class JsonWebToken
|
|
325
322
|
end
|
326
323
|
end
|
327
324
|
end
|
328
|
-
# rubocop:enable Metrics/ClassLength
|
@@ -15,6 +15,10 @@ class Null < Tokens::Null
|
|
15
15
|
nil
|
16
16
|
end
|
17
17
|
|
18
|
+
def audience_id
|
19
|
+
nil
|
20
|
+
end
|
21
|
+
|
18
22
|
def issued_at
|
19
23
|
nil
|
20
24
|
end
|
@@ -35,10 +39,6 @@ class Null < Tokens::Null
|
|
35
39
|
nil
|
36
40
|
end
|
37
41
|
|
38
|
-
def owner_id
|
39
|
-
nil
|
40
|
-
end
|
41
|
-
|
42
42
|
def subject_id
|
43
43
|
nil
|
44
44
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'apiphobic/tokens/json_web_token'
|
4
|
+
|
5
|
+
module Apiphobic
|
6
|
+
module Tokens
|
7
|
+
module JsonWebTokens
|
8
|
+
class Object < JsonWebToken
|
9
|
+
def self.build(object:,
|
10
|
+
expiration: Time.now.utc.to_i + (60 * 60 * 24 * 7),
|
11
|
+
**attrs)
|
12
|
+
|
13
|
+
super(subject: object.class.name,
|
14
|
+
subject_id: object.id,
|
15
|
+
expiration: expiration,
|
16
|
+
**attrs)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -8,9 +8,10 @@ module JsonWebTokens
|
|
8
8
|
class PasswordReset < JsonWebToken
|
9
9
|
def self.build(expiration: Time.now.utc.to_i + (30 * 60),
|
10
10
|
roles: %w{password_reset},
|
11
|
+
subject: 'Password',
|
11
12
|
**attrs)
|
12
13
|
|
13
|
-
super(expiration: expiration, roles: roles, **attrs)
|
14
|
+
super(expiration: expiration, roles: roles, subject: subject, **attrs)
|
14
15
|
end
|
15
16
|
end
|
16
17
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apiphobic-tokens
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- thegranddesign
|
@@ -10,28 +10,34 @@ bindir: bin
|
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
13
|
+
MIIEyjCCAzKgAwIBAgIBATANBgkqhkiG9w0BAQsFADBVMSIwIAYDVQQDDBlsb2Nh
|
14
|
+
bGV1bmtub3duODEwX3J1YnlnZW1zMRowGAYKCZImiZPyLGQBGRYKcHJvdG9ubWFp
|
15
|
+
bDETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0yMjA3MDkwNTMxMjJaFw0yMzA3MDkw
|
16
|
+
NTMxMjJaMFUxIjAgBgNVBAMMGWxvY2FsZXVua25vd244MTBfcnVieWdlbXMxGjAY
|
17
|
+
BgoJkiaJk/IsZAEZFgpwcm90b25tYWlsMRMwEQYKCZImiZPyLGQBGRYDY29tMIIB
|
18
|
+
ojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA0otlhSPyU7jLLW1p786Mo/pV
|
19
|
+
5cJ1Ed8D/bJK78PqGFO2h0ZUefupxT5PRMokLYNNGRPopnAAxZ0zVxJ68aOyYCBW
|
20
|
+
Wk3/XFcXCrtk/OcFwLTltgeMjyqCBd/zRRx6CCjY4uOfH0E3n1gQ6Fbmewjg83XJ
|
21
|
+
nOs7Gu/hzj5+feEQ1Exmg6z1oCM/8BTIBtK+p++HvcDK3AhJ7x3fc6P9WS+22w6j
|
22
|
+
7jpi3p9YtoAjrXIzw3lsobiX+bEt+N+T47e8gOATVgapuZ/QmJzNU6LWepehs4V1
|
23
|
+
8J+FUaIMV7nAMKmpkbYL51uHEiGV+HDx1HUdOsCFx8zD4h49KRT2t6AcumJ5P1Cj
|
24
|
+
c7NX2xl85ShHDNNFkozuC2c5cwj6F20EVaVjGwv2OFq0S2tUw9EJXHTN9RpfRUmn
|
25
|
+
IHwS9M4gcJO7IzV39a1YL6+9hrabF4+JTSYDehq8oxTdcOPLYyvH54aJWVqCrnLO
|
26
|
+
KNa/p6hMmwxTWNS5Vz0uxuEGyE9E0tHbtjIs2XX5AgMBAAGjgaQwgaEwCQYDVR0T
|
27
|
+
BAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFAK3RicwO0f6+puFN6lRVMOKMJuu
|
28
|
+
MDMGA1UdEQQsMCqBKGxvY2FsZXVua25vd244MTArcnVieWdlbXNAcHJvdG9ubWFp
|
29
|
+
bC5jb20wMwYDVR0SBCwwKoEobG9jYWxldW5rbm93bjgxMCtydWJ5Z2Vtc0Bwcm90
|
30
|
+
b25tYWlsLmNvbTANBgkqhkiG9w0BAQsFAAOCAYEAQwV6pOp5gm8141pyXeQFI/5E
|
31
|
+
rZYO3MvdyZM8O3HMD51LDS8mtMURceaKZM6WTambe2RVX4A++0qUiEnn9K4Fexm/
|
32
|
+
SEGaC/Gp+Fg9D1SKfkdq9bgdIhOEUwiGqjczgzNC806AtWZ+awI940oydFYZlpo0
|
33
|
+
jMQihPPJEqF1U6JBDMZYV5tX/dJYSGRl9L3s1k2tjoN98q+beNaZQDn21Amml4eK
|
34
|
+
KEkMeTTJ2E4GVzR9eKEETLq2LygdUWWZ5NdWOYTxJMdg1GZp3b6X8hJrwfOiizqt
|
35
|
+
/ANlIEh11/pOnWa6WPUVpGIMpYdquvmJXnF2LX6zxkKK1hbrebt+vAEAGczgw1Ri
|
36
|
+
rkLM6y+BHQdkOTj3VG4MjIU8D4h1Z73Exzxds/VbVKMEz+8JrFjGJ/tYa0PZ8U5p
|
37
|
+
3yXL4G6eW3rdBW/OiLF7GgG2o26d02OMzf4+ubUVS5LQDOcd4vgNPLWzJSBt1YIh
|
38
|
+
TgBsED7Me5YdMVXxtTWYsF1VMzaL9hReD3UXGcxe
|
33
39
|
-----END CERTIFICATE-----
|
34
|
-
date:
|
40
|
+
date: 2022-07-09 00:00:00.000000000 Z
|
35
41
|
dependencies:
|
36
42
|
- !ruby/object:Gem::Dependency
|
37
43
|
name: json-jwt
|
@@ -53,28 +59,28 @@ dependencies:
|
|
53
59
|
requirements:
|
54
60
|
- - "~>"
|
55
61
|
- !ruby/object:Gem::Version
|
56
|
-
version: '
|
62
|
+
version: '4.0'
|
57
63
|
type: :runtime
|
58
64
|
prerelease: false
|
59
65
|
version_requirements: !ruby/object:Gem::Requirement
|
60
66
|
requirements:
|
61
67
|
- - "~>"
|
62
68
|
- !ruby/object:Gem::Version
|
63
|
-
version: '
|
69
|
+
version: '4.0'
|
64
70
|
- !ruby/object:Gem::Dependency
|
65
71
|
name: rspec
|
66
72
|
requirement: !ruby/object:Gem::Requirement
|
67
73
|
requirements:
|
68
74
|
- - "~>"
|
69
75
|
- !ruby/object:Gem::Version
|
70
|
-
version: '3.
|
76
|
+
version: '3.11'
|
71
77
|
type: :development
|
72
78
|
prerelease: false
|
73
79
|
version_requirements: !ruby/object:Gem::Requirement
|
74
80
|
requirements:
|
75
81
|
- - "~>"
|
76
82
|
- !ruby/object:Gem::Version
|
77
|
-
version: '3.
|
83
|
+
version: '3.11'
|
78
84
|
- !ruby/object:Gem::Dependency
|
79
85
|
name: rspeckled
|
80
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,15 +132,22 @@ files:
|
|
126
132
|
- lib/apiphobic/tokens/json_web_token.rb
|
127
133
|
- lib/apiphobic/tokens/json_web_tokens/invalid.rb
|
128
134
|
- lib/apiphobic/tokens/json_web_tokens/null.rb
|
135
|
+
- lib/apiphobic/tokens/json_web_tokens/object.rb
|
129
136
|
- lib/apiphobic/tokens/json_web_tokens/password_reset.rb
|
130
137
|
- lib/apiphobic/tokens/null.rb
|
131
138
|
- lib/apiphobic/tokens/role_predicable.rb
|
132
139
|
- lib/apiphobic/tokens/version.rb
|
133
|
-
homepage:
|
140
|
+
homepage: https://github.com/thekompanee/apiphobic-tokens
|
134
141
|
licenses:
|
135
142
|
- MIT
|
136
143
|
metadata:
|
137
144
|
allowed_push_host: https://rubygems.org
|
145
|
+
bug_tracker_uri: https://github.com/thekompanee/apiphobic-tokens/issues
|
146
|
+
changelog_uri: https://github.com/thekompanee/apiphobic-tokens/blob/master/CHANGELOG.md
|
147
|
+
documentation_uri: https://github.com/thekompanee/apiphobic-tokens/tree/releases/v1.2.0
|
148
|
+
homepage_uri: https://github.com/thekompanee/apiphobic-tokens
|
149
|
+
source_code_uri: https://github.com/thekompanee/apiphobic-tokens
|
150
|
+
wiki_uri: https://github.com/thekompanee/apiphobic-tokens/wiki
|
138
151
|
post_install_message:
|
139
152
|
rdoc_options: []
|
140
153
|
require_paths:
|
@@ -150,8 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
163
|
- !ruby/object:Gem::Version
|
151
164
|
version: '0'
|
152
165
|
requirements: []
|
153
|
-
|
154
|
-
rubygems_version: 2.7.6
|
166
|
+
rubygems_version: 3.3.7
|
155
167
|
signing_key:
|
156
168
|
specification_version: 4
|
157
169
|
summary: API Tokens
|
metadata.gz.sig
CHANGED
Binary file
|