king_tokens 2.0.0 → 2.0.1
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.
- data/{README.rdoc → README.md} +49 -28
- data/king_tokens.gemspec +6 -6
- data/lib/king_tokens/token_code.rb +3 -1
- data/lib/king_tokens/version.rb +1 -1
- metadata +105 -106
data/{README.rdoc → README.md}
RENAMED
@@ -1,16 +1,16 @@
|
|
1
|
-
|
1
|
+
# KingTokens
|
2
2
|
|
3
3
|
Tokens are a usefull way to give users access to an application. This can be for a limited time or just once.
|
4
|
-
Just think of password resets, changing email, protected rss feed urls, timed out private links, .. KingTokens are your easy way out in such cases
|
4
|
+
Just think of password resets, changing email, protected rss feed urls, timed out private links, .. KingTokens are your easy way out in such cases
|
5
5
|
|
6
6
|
This plugin consists of two parts:
|
7
7
|
|
8
|
-
* an ActiveRecord model class TokenCode, which maps to the token table in the db
|
8
|
+
* an ActiveRecord model class TokenCode, which maps to the token table in the db
|
9
9
|
* a module Tokenizer mixed into ActiveRecord::Base, providing your models with the possibility to define tokens
|
10
10
|
|
11
11
|
KingTokens map polymorphic to other objects, through the can_has_tokens :a_tokens_name call
|
12
12
|
|
13
|
-
|
13
|
+
## Install
|
14
14
|
|
15
15
|
Get it as gem (hosted on gemcutter.org)
|
16
16
|
gem install king_tokens
|
@@ -19,17 +19,21 @@ Or download it from github and use it as rails plugin
|
|
19
19
|
|
20
20
|
setup your token db like defined in the test schema => test/schema.rb
|
21
21
|
|
22
|
-
|
22
|
+
## Example
|
23
23
|
|
24
24
|
Define a token on a model
|
25
|
+
```ruby
|
25
26
|
class User
|
26
27
|
can_has_tokens :forgot_password
|
27
28
|
end
|
29
|
+
```
|
28
30
|
|
29
31
|
Set and get a user by token in a controller
|
32
|
+
|
33
|
+
```ruby
|
30
34
|
class UsersController
|
31
35
|
# form with email so user can send himself a password reset link
|
32
|
-
def lost_password
|
36
|
+
def lost_password
|
33
37
|
if request.post?
|
34
38
|
#create users forgot_password_token
|
35
39
|
@user.set_forgot_password_token
|
@@ -47,41 +51,58 @@ Set and get a user by token in a controller
|
|
47
51
|
...
|
48
52
|
end
|
49
53
|
end
|
50
|
-
|
51
|
-
|
54
|
+
```
|
55
|
+
## Docs
|
52
56
|
|
53
57
|
To get a full understanding of the usage also read the tests. For QM you might check the coverage report in coverage/index.html
|
54
58
|
|
55
|
-
|
59
|
+
### Token definition inside an ActiveRecord object:
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
class User
|
56
63
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
64
|
+
# Adds token named forgot_pasword to an object.
|
65
|
+
can_has_tokens :forgot_password
|
66
|
+
|
67
|
+
# Token named change email valid for 3 days
|
68
|
+
can_has_tokens :change_email, {:days_valid => 3}
|
69
|
+
end
|
70
|
+
```
|
61
71
|
|
62
|
-
|
63
|
-
|
72
|
+
### Instance methods added to the ActiveRecord object:
|
73
|
+
|
74
|
+
```ruby
|
75
|
+
user = User.new
|
76
|
+
# Set a new token and removing any existing one
|
64
77
|
user.set_forgot_password_token
|
65
|
-
|
78
|
+
|
79
|
+
#Get the token string
|
66
80
|
user.forgot_password_token
|
67
|
-
|
81
|
+
|
82
|
+
# Check if the user has such a token, returns boolean true
|
68
83
|
user.forgot_password_token?
|
69
|
-
|
84
|
+
|
85
|
+
# Get the token object
|
70
86
|
user.get_forgot_password_token
|
71
|
-
Get the token object by name
|
72
|
-
user.token(:forgot_password)
|
73
|
-
Low level function to create a token with special options, overriding the ones set in the class definition
|
74
|
-
user.create_token(:token_name, :valid => 2.days.from_now)
|
75
87
|
|
88
|
+
# Get the token object by name
|
89
|
+
user.token(:forgot_password)
|
90
|
+
|
91
|
+
# Low level function to create a token with special options,
|
92
|
+
# overriding the ones set in the class definition
|
93
|
+
user.create_token(:token_name, :valid => 2.days.from_now)
|
94
|
+
```
|
76
95
|
|
77
|
-
|
96
|
+
### Class methods
|
78
97
|
|
79
|
-
|
98
|
+
```ruby
|
99
|
+
# Find user by specific token which must be valid
|
80
100
|
User.find_by_valid_token(:token_name, 'a token string')
|
81
|
-
|
101
|
+
|
102
|
+
# Find user by specific token, without validation check
|
82
103
|
User.find_by_token(:forgot_password, 'a token string')
|
83
|
-
|
84
|
-
User.find_token
|
85
104
|
|
105
|
+
User.find_token
|
106
|
+
```
|
86
107
|
|
87
|
-
Copyright (c) 2008-
|
108
|
+
Copyright (c) 2008-2013 Michael Bumann, Georg Leciejewski released under the MIT license
|
data/king_tokens.gemspec
CHANGED
@@ -8,14 +8,14 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.description = %q{Tokens are a usefull way to give users access to an application. This can be for a limited time or just once. Just think of password resets, changing email, protected rss feed urls, timed out private links}
|
9
9
|
s.version = KingTokens::VERSION
|
10
10
|
|
11
|
-
s.required_rubygems_version = Gem::Requirement.new(
|
12
|
-
s.authors = [
|
13
|
-
s.date = %q{
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
|
12
|
+
s.authors = ['Georg Leciejewski', 'Michael Bumann']
|
13
|
+
s.date = %q{2013-03-05}
|
14
14
|
s.email = %q{gl@salesking.eu}
|
15
15
|
s.homepage = %q{http://github.com/schorsch/king_tokens}
|
16
16
|
|
17
|
-
s.extra_rdoc_files =
|
18
|
-
s.require_paths =
|
17
|
+
s.extra_rdoc_files = %w(README.md)
|
18
|
+
s.require_paths = %w(lib)
|
19
19
|
|
20
20
|
s.rubygems_version = %q{1.6.2}
|
21
21
|
|
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.files = `git ls-files`.split("\n")
|
24
24
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
25
25
|
|
26
|
-
s.require_paths =
|
26
|
+
s.require_paths = %w(lib)
|
27
27
|
|
28
28
|
s.add_development_dependency 'test-unit'
|
29
29
|
s.add_development_dependency 'activerecord'
|
@@ -4,6 +4,8 @@ require "digest/sha1"
|
|
4
4
|
# Class to handle polymorphic tokens
|
5
5
|
class TokenCode < ActiveRecord::Base
|
6
6
|
|
7
|
+
attr_accessible :name, :valid_until
|
8
|
+
|
7
9
|
belongs_to :object, :polymorphic => true
|
8
10
|
before_create :set_token
|
9
11
|
|
@@ -76,4 +78,4 @@ class TokenCode < ActiveRecord::Base
|
|
76
78
|
self.token = generate_token { |token| TokenCode.find_by_token(token).nil? }
|
77
79
|
end
|
78
80
|
|
79
|
-
end
|
81
|
+
end
|
data/lib/king_tokens/version.rb
CHANGED
metadata
CHANGED
@@ -1,120 +1,126 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: king_tokens
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.0.1
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 2
|
8
|
-
- 0
|
9
|
-
- 0
|
10
|
-
version: 2.0.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Georg Leciejewski
|
14
9
|
- Michael Bumann
|
15
10
|
autorequire:
|
16
11
|
bindir: bin
|
17
12
|
cert_chain: []
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
- !ruby/object:Gem::Dependency
|
13
|
+
date: 2013-03-05 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
22
16
|
name: test-unit
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
25
18
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
version: "0"
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
33
23
|
type: :development
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: activerecord
|
37
24
|
prerelease: false
|
38
|
-
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
26
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: activerecord
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
47
39
|
type: :development
|
48
|
-
version_requirements: *id002
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: activesupport
|
51
40
|
prerelease: false
|
52
|
-
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
42
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: activesupport
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
61
55
|
type: :development
|
62
|
-
version_requirements: *id003
|
63
|
-
- !ruby/object:Gem::Dependency
|
64
|
-
name: rake
|
65
56
|
prerelease: false
|
66
|
-
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: rake
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
67
66
|
none: false
|
68
|
-
requirements:
|
69
|
-
- -
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
|
72
|
-
segments:
|
73
|
-
- 0
|
74
|
-
version: "0"
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
75
71
|
type: :development
|
76
|
-
version_requirements: *id004
|
77
|
-
- !ruby/object:Gem::Dependency
|
78
|
-
name: rdoc
|
79
72
|
prerelease: false
|
80
|
-
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: rdoc
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
81
82
|
none: false
|
82
|
-
requirements:
|
83
|
-
- -
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
|
86
|
-
segments:
|
87
|
-
- 0
|
88
|
-
version: "0"
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
89
87
|
type: :development
|
90
|
-
version_requirements: *id005
|
91
|
-
- !ruby/object:Gem::Dependency
|
92
|
-
name: sqlite3
|
93
88
|
prerelease: false
|
94
|
-
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
90
|
none: false
|
96
|
-
requirements:
|
97
|
-
- -
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: sqlite3
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
103
|
type: :development
|
104
|
-
|
105
|
-
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: Tokens are a usefull way to give users access to an application. This
|
112
|
+
can be for a limited time or just once. Just think of password resets, changing
|
113
|
+
email, protected rss feed urls, timed out private links
|
106
114
|
email: gl@salesking.eu
|
107
115
|
executables: []
|
108
|
-
|
109
116
|
extensions: []
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
files:
|
117
|
+
extra_rdoc_files:
|
118
|
+
- README.md
|
119
|
+
files:
|
114
120
|
- .gitignore
|
115
121
|
- Gemfile
|
116
122
|
- MIT-LICENSE
|
117
|
-
- README.
|
123
|
+
- README.md
|
118
124
|
- Rakefile
|
119
125
|
- king_tokens.gemspec
|
120
126
|
- lib/king_tokens.rb
|
@@ -127,36 +133,29 @@ files:
|
|
127
133
|
- test/tokenizer_test.rb
|
128
134
|
homepage: http://github.com/schorsch/king_tokens
|
129
135
|
licenses: []
|
130
|
-
|
131
136
|
post_install_message:
|
132
137
|
rdoc_options: []
|
133
|
-
|
134
|
-
require_paths:
|
138
|
+
require_paths:
|
135
139
|
- lib
|
136
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
137
141
|
none: false
|
138
|
-
requirements:
|
139
|
-
- -
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
|
142
|
-
segments:
|
142
|
+
requirements:
|
143
|
+
- - ! '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
segments:
|
143
147
|
- 0
|
144
|
-
|
145
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
|
+
hash: -2455597393221619131
|
149
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
150
|
none: false
|
147
|
-
requirements:
|
148
|
-
- -
|
149
|
-
- !ruby/object:Gem::Version
|
150
|
-
|
151
|
-
segments:
|
152
|
-
- 0
|
153
|
-
version: "0"
|
151
|
+
requirements:
|
152
|
+
- - ! '>='
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: '0'
|
154
155
|
requirements: []
|
155
|
-
|
156
156
|
rubyforge_project:
|
157
|
-
rubygems_version: 1.8.
|
157
|
+
rubygems_version: 1.8.24
|
158
158
|
signing_key:
|
159
159
|
specification_version: 3
|
160
160
|
summary: Access tokens for any active record object
|
161
161
|
test_files: []
|
162
|
-
|