globalid 0.3.7 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of globalid might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +31 -5
- data/lib/global_id.rb +1 -0
- data/lib/global_id/railtie.rb +1 -1
- data/lib/global_id/verifier.rb +15 -0
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 833f7e0950a55c0aa3a0e62176de2d163a395c05
|
4
|
+
data.tar.gz: 86b23bf6f2710971970c3a25a1301028184887f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 497931559ea0b7aa8d21b9ea2dfb4ae219739a8449763e2dad590c5b30f1cb4675b66841837f3f43c7480698dbbd478e4677c6ce43c01cff50a9f1e46e6af864
|
7
|
+
data.tar.gz: b96a45a0e29e90e417b8282cef8bc8b6b23b079c6f25decff10ec9ad8ae5b0d08255820936460f8a58944b3a9847d4f7bb3c7ce59bf963c54319ddb6af01bc43
|
data/README.md
CHANGED
@@ -43,10 +43,10 @@ For added security GlobalIDs can also be signed to ensure that the data hasn't b
|
|
43
43
|
|
44
44
|
```ruby
|
45
45
|
>> person_sgid = Person.find(1).to_signed_global_id
|
46
|
-
=> #<SignedGlobalID:0x007fea1944b410
|
46
|
+
=> #<SignedGlobalID:0x007fea1944b410>
|
47
47
|
|
48
48
|
>> person_sgid = Person.find(1).to_sgid
|
49
|
-
=> #<SignedGlobalID:0x007fea1944b410
|
49
|
+
=> #<SignedGlobalID:0x007fea1944b410>
|
50
50
|
|
51
51
|
>> person_sgid.to_s
|
52
52
|
=> "BAhJIh5naWQ6Ly9pZGluYWlkaS9Vc2VyLzM5NTk5BjoGRVQ=--81d7358dd5ee2ca33189bb404592df5e8d11420e"
|
@@ -66,12 +66,12 @@ In this way evildoers can't reuse a sign-up form's SGID on the login page. For e
|
|
66
66
|
=> #<Person:0x007fae94bf6298 @id="1">
|
67
67
|
```
|
68
68
|
|
69
|
-
You can also have SGIDs that expire some time in the future.
|
69
|
+
You can also have SGIDs that expire some time in the future. Useful if there's a resource,
|
70
70
|
people shouldn't have indefinite access to, like a share link.
|
71
71
|
|
72
72
|
```ruby
|
73
73
|
>> expiring_sgid = Document.find(5).to_sgid(expires_in: 2.hours, for: 'sharing')
|
74
|
-
=> #<SignedGlobalID:0x008fde45df8937
|
74
|
+
=> #<SignedGlobalID:0x008fde45df8937 ...>
|
75
75
|
|
76
76
|
# Within 2 hours...
|
77
77
|
>> GlobalID::Locator.locate_signed(expiring_sgid.to_s, for: 'sharing')
|
@@ -82,11 +82,37 @@ people shouldn't have indefinite access to, like a share link.
|
|
82
82
|
=> nil
|
83
83
|
|
84
84
|
>> explicit_expiring_sgid = SecretAgentMessage.find(5).to_sgid(expires_at: Time.now.advance(hours: 1))
|
85
|
-
=> #<SignedGlobalID:0x008fde45df8937
|
85
|
+
=> #<SignedGlobalID:0x008fde45df8937 ...>
|
86
86
|
|
87
87
|
# 1 hour later...
|
88
88
|
>> GlobalID::Locator.locate_signed explicit_expiring_sgid.to_s
|
89
89
|
=> nil
|
90
|
+
|
91
|
+
# Passing a false value to either expiry option turns off expiration entirely.
|
92
|
+
>> never_expiring_sgid = Document.find(5).to_sgid(expires_in: nil)
|
93
|
+
=> #<SignedGlobalID:0x008fde45df8937 ...>
|
94
|
+
|
95
|
+
# Any time later...
|
96
|
+
>> GlobalID::Locator.locate_signed never_expiring_sgid
|
97
|
+
=> #<Document:0x007fae94bf6298 @id="5">
|
98
|
+
```
|
99
|
+
|
100
|
+
Note that an explicit `:expires_at` takes precedence over a relative `:expires_in`.
|
101
|
+
|
102
|
+
You can assign a default SGID lifetime like so:
|
103
|
+
|
104
|
+
```ruby
|
105
|
+
SignedGlobalID.expires_in = 1.month
|
106
|
+
```
|
107
|
+
|
108
|
+
This way any generated SGID will use that relative expiry.
|
109
|
+
|
110
|
+
In Rails, an auto-expiry of 1 month is set by default. You can alter that deal
|
111
|
+
in an initializer with:
|
112
|
+
|
113
|
+
```ruby
|
114
|
+
# config/initializers/global_id.rb
|
115
|
+
Rails.application.config.global_id.expires_in = 3.months
|
90
116
|
```
|
91
117
|
|
92
118
|
### Custom App Locator
|
data/lib/global_id.rb
CHANGED
data/lib/global_id/railtie.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'active_support/message_verifier'
|
3
|
+
|
4
|
+
class GlobalID
|
5
|
+
class Verifier < ActiveSupport::MessageVerifier
|
6
|
+
private
|
7
|
+
def encode(data)
|
8
|
+
::Base64.urlsafe_encode64(data)
|
9
|
+
end
|
10
|
+
|
11
|
+
def decode(data)
|
12
|
+
::Base64.urlsafe_decode64(data)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: globalid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Heinemeier Hansson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 4.
|
19
|
+
version: 4.2.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 4.
|
26
|
+
version: 4.2.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,6 +53,7 @@ files:
|
|
53
53
|
- lib/global_id/railtie.rb
|
54
54
|
- lib/global_id/signed_global_id.rb
|
55
55
|
- lib/global_id/uri/gid.rb
|
56
|
+
- lib/global_id/verifier.rb
|
56
57
|
- lib/globalid.rb
|
57
58
|
homepage: http://www.rubyonrails.org
|
58
59
|
licenses:
|
@@ -74,7 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
74
75
|
version: '0'
|
75
76
|
requirements: []
|
76
77
|
rubyforge_project:
|
77
|
-
rubygems_version: 2.
|
78
|
+
rubygems_version: 2.6.11
|
78
79
|
signing_key:
|
79
80
|
specification_version: 4
|
80
81
|
summary: 'Refer to any model with a URI: gid://app/class/id'
|