authem 0.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/LICENSE +14 -0
- data/README.markdown +17 -0
- data/Rakefile +11 -0
- data/lib/authem.rb +10 -0
- data/lib/authem/config.rb +13 -0
- data/lib/authem/controller_support.rb +66 -0
- data/lib/authem/model.rb +44 -0
- data/lib/authem/token.rb +7 -0
- data/lib/authem/version.rb +3 -0
- metadata +150 -0
data/LICENSE
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
|
2
|
+
Version 2, December 2004
|
|
3
|
+
|
|
4
|
+
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
|
5
|
+
|
|
6
|
+
Everyone is permitted to copy and distribute verbatim or modified
|
|
7
|
+
copies of this license document, and changing it is allowed as long
|
|
8
|
+
as the name is changed.
|
|
9
|
+
|
|
10
|
+
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
|
11
|
+
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
12
|
+
|
|
13
|
+
0. You just DO WHAT THE FUCK YOU WANT TO.
|
|
14
|
+
|
data/README.markdown
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Authem
|
|
2
|
+
|
|
3
|
+
Authem is an authentication library for Ruby web applications.
|
|
4
|
+
|
|
5
|
+
## Compatibility
|
|
6
|
+
|
|
7
|
+
Authem is tested against Ruby 1.8.7, 1.9.2, 1.9.3, Rubinius, and REE.
|
|
8
|
+
|
|
9
|
+
[](http://travis-ci.org/paulelliott/authem)
|
|
10
|
+
|
|
11
|
+
## Contribute
|
|
12
|
+
|
|
13
|
+
Pull requests are welcome; please provide spec coverage for new code.
|
|
14
|
+
|
|
15
|
+
* `bundle install`
|
|
16
|
+
* `rake`
|
|
17
|
+
|
data/Rakefile
ADDED
data/lib/authem.rb
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
module Authem::ControllerSupport
|
|
2
|
+
extend ActiveSupport::Concern
|
|
3
|
+
|
|
4
|
+
protected
|
|
5
|
+
|
|
6
|
+
def sign_in(email_or_user, password=nil, remember_me=nil)
|
|
7
|
+
if email_or_user.is_a? String
|
|
8
|
+
email_or_user = Authem::Config.user_class.authenticate(email_or_user, password)
|
|
9
|
+
end
|
|
10
|
+
if email_or_user.is_a? Authem::Model
|
|
11
|
+
establish_presence(email_or_user)
|
|
12
|
+
remember_me! if remember_me
|
|
13
|
+
email_or_user
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def sign_out
|
|
18
|
+
clear_session
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def remember_me!
|
|
22
|
+
cookies.permanent.signed[:remember_me] = current_user.id
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def current_user
|
|
26
|
+
@current_user ||= (
|
|
27
|
+
if session[:user_id]
|
|
28
|
+
Authem::Config.user_class.find(session[:user_id])
|
|
29
|
+
elsif cookies[:remember_me].present?
|
|
30
|
+
user = Authem::Config.user_class.find(cookies.signed[:remember_me])
|
|
31
|
+
establish_presence(user) if user
|
|
32
|
+
end
|
|
33
|
+
)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def require_user
|
|
37
|
+
unless current_user
|
|
38
|
+
session[:return_to_url] = request.url
|
|
39
|
+
redirect_to Authem::Config.sign_in_path
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def establish_presence(user)
|
|
44
|
+
return_to_url = session[:return_to_url]
|
|
45
|
+
clear_session
|
|
46
|
+
session[:return_to_url] = return_to_url
|
|
47
|
+
session[:user_id] = user.id
|
|
48
|
+
@current_user = user
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def redirect_back_or_to(url, flash_hash = {})
|
|
52
|
+
url = session[:return_to_url] || url
|
|
53
|
+
session[:return_to_url] = nil
|
|
54
|
+
redirect_to(url, :flash => flash_hash)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def clear_session
|
|
58
|
+
cookies[:remember_me] = nil
|
|
59
|
+
reset_session
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
included do
|
|
63
|
+
helper_method :current_user
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
end
|
data/lib/authem/model.rb
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require 'bcrypt'
|
|
2
|
+
|
|
3
|
+
module Authem::Model
|
|
4
|
+
extend ::ActiveSupport::Concern
|
|
5
|
+
|
|
6
|
+
included do
|
|
7
|
+
Authem::Config.user_class = self
|
|
8
|
+
|
|
9
|
+
attr_accessor :password, :password_confirmation
|
|
10
|
+
|
|
11
|
+
attr_protected :crypted_password, :salt, :reset_password_token
|
|
12
|
+
|
|
13
|
+
validates_confirmation_of :password
|
|
14
|
+
validate :email, :presence => true, :uniqueness => true
|
|
15
|
+
|
|
16
|
+
def self.find_by_email(email)
|
|
17
|
+
where("upper(email) = ?", email.upcase).first
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
before_save :encrypt_password
|
|
21
|
+
|
|
22
|
+
def self.authenticate(email, password)
|
|
23
|
+
user = find_by_email(email)
|
|
24
|
+
user if user && user.crypted_password_matches?(password)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def crypted_password_matches?(password)
|
|
29
|
+
crypted_password.present? && ::BCrypt::Password.new(crypted_password) == [password, salt].join
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def encrypt_password
|
|
33
|
+
if password.present?
|
|
34
|
+
self.salt = ::BCrypt::Engine.generate_salt
|
|
35
|
+
self.crypted_password = ::BCrypt::Password.create([password, salt].join)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def reset_password_token
|
|
40
|
+
update_attribute(:reset_password_token, Authem::Token.generate) if self[:reset_password_token].blank?
|
|
41
|
+
self[:reset_password_token]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
data/lib/authem/token.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: authem
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
prerelease:
|
|
5
|
+
version: 0.0.1
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Paul Elliott
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
|
|
13
|
+
date: 2012-01-17 00:00:00 Z
|
|
14
|
+
dependencies:
|
|
15
|
+
- !ruby/object:Gem::Dependency
|
|
16
|
+
name: activesupport
|
|
17
|
+
prerelease: false
|
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
|
19
|
+
none: false
|
|
20
|
+
requirements:
|
|
21
|
+
- - ">="
|
|
22
|
+
- !ruby/object:Gem::Version
|
|
23
|
+
version: "0"
|
|
24
|
+
type: :runtime
|
|
25
|
+
version_requirements: *id001
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: bcrypt-ruby
|
|
28
|
+
prerelease: false
|
|
29
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
|
30
|
+
none: false
|
|
31
|
+
requirements:
|
|
32
|
+
- - ">="
|
|
33
|
+
- !ruby/object:Gem::Version
|
|
34
|
+
version: "0"
|
|
35
|
+
type: :runtime
|
|
36
|
+
version_requirements: *id002
|
|
37
|
+
- !ruby/object:Gem::Dependency
|
|
38
|
+
name: actionpack
|
|
39
|
+
prerelease: false
|
|
40
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
|
41
|
+
none: false
|
|
42
|
+
requirements:
|
|
43
|
+
- - ">="
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: "0"
|
|
46
|
+
type: :development
|
|
47
|
+
version_requirements: *id003
|
|
48
|
+
- !ruby/object:Gem::Dependency
|
|
49
|
+
name: activerecord
|
|
50
|
+
prerelease: false
|
|
51
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
|
52
|
+
none: false
|
|
53
|
+
requirements:
|
|
54
|
+
- - ">="
|
|
55
|
+
- !ruby/object:Gem::Version
|
|
56
|
+
version: "0"
|
|
57
|
+
type: :development
|
|
58
|
+
version_requirements: *id004
|
|
59
|
+
- !ruby/object:Gem::Dependency
|
|
60
|
+
name: database_cleaner
|
|
61
|
+
prerelease: false
|
|
62
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
|
63
|
+
none: false
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: "0"
|
|
68
|
+
type: :development
|
|
69
|
+
version_requirements: *id005
|
|
70
|
+
- !ruby/object:Gem::Dependency
|
|
71
|
+
name: rake
|
|
72
|
+
prerelease: false
|
|
73
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
|
74
|
+
none: false
|
|
75
|
+
requirements:
|
|
76
|
+
- - ">="
|
|
77
|
+
- !ruby/object:Gem::Version
|
|
78
|
+
version: "0"
|
|
79
|
+
type: :development
|
|
80
|
+
version_requirements: *id006
|
|
81
|
+
- !ruby/object:Gem::Dependency
|
|
82
|
+
name: rspec
|
|
83
|
+
prerelease: false
|
|
84
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
|
85
|
+
none: false
|
|
86
|
+
requirements:
|
|
87
|
+
- - ">="
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: "0"
|
|
90
|
+
type: :development
|
|
91
|
+
version_requirements: *id007
|
|
92
|
+
- !ruby/object:Gem::Dependency
|
|
93
|
+
name: pg
|
|
94
|
+
prerelease: false
|
|
95
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
|
96
|
+
none: false
|
|
97
|
+
requirements:
|
|
98
|
+
- - ">="
|
|
99
|
+
- !ruby/object:Gem::Version
|
|
100
|
+
version: "0"
|
|
101
|
+
type: :development
|
|
102
|
+
version_requirements: *id008
|
|
103
|
+
description: Authem provides a simple solution for email-based authentication.
|
|
104
|
+
email:
|
|
105
|
+
- paul@hashrocket.com
|
|
106
|
+
executables: []
|
|
107
|
+
|
|
108
|
+
extensions: []
|
|
109
|
+
|
|
110
|
+
extra_rdoc_files: []
|
|
111
|
+
|
|
112
|
+
files:
|
|
113
|
+
- lib/authem/config.rb
|
|
114
|
+
- lib/authem/controller_support.rb
|
|
115
|
+
- lib/authem/model.rb
|
|
116
|
+
- lib/authem/token.rb
|
|
117
|
+
- lib/authem/version.rb
|
|
118
|
+
- lib/authem.rb
|
|
119
|
+
- LICENSE
|
|
120
|
+
- README.markdown
|
|
121
|
+
- Rakefile
|
|
122
|
+
homepage: https://github.com/paulelliott/authem
|
|
123
|
+
licenses: []
|
|
124
|
+
|
|
125
|
+
post_install_message:
|
|
126
|
+
rdoc_options: []
|
|
127
|
+
|
|
128
|
+
require_paths:
|
|
129
|
+
- lib
|
|
130
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
|
+
none: false
|
|
132
|
+
requirements:
|
|
133
|
+
- - ">="
|
|
134
|
+
- !ruby/object:Gem::Version
|
|
135
|
+
version: "0"
|
|
136
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
|
+
none: false
|
|
138
|
+
requirements:
|
|
139
|
+
- - ">="
|
|
140
|
+
- !ruby/object:Gem::Version
|
|
141
|
+
version: "0"
|
|
142
|
+
requirements: []
|
|
143
|
+
|
|
144
|
+
rubyforge_project:
|
|
145
|
+
rubygems_version: 1.8.6
|
|
146
|
+
signing_key:
|
|
147
|
+
specification_version: 3
|
|
148
|
+
summary: Authem authenticates them by email
|
|
149
|
+
test_files: []
|
|
150
|
+
|