entrance 0.2.0 → 0.2.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.md CHANGED
@@ -19,6 +19,7 @@ Entrance.configure do |config|
19
19
  config.password_attr = 'password_hash' # make sure you map the right attribute name
20
20
  config.access_denied_message_key = 'messages.access_denied'
21
21
  config.remember_for = 1.month
22
+ config.cookie_secure = Rails.env.production?
22
23
  end
23
24
 
24
25
  # in your controller
@@ -52,30 +53,31 @@ class SessionsController < ApplicationController
52
53
  end
53
54
 
54
55
  def create
55
- if user = authenticate_and_login(params[:email], params[:password], params[:remember_me])
56
+ if user = authenticate_and_login(params[:email], params[:password], params[:remember_me] == 'on')
56
57
  redirect_to '/app'
57
58
  else
58
- redirect_to :new, :notice => "Invalid credentials."
59
+ redirect_to '/login', :notice => "Invalid credentials."
59
60
  end
60
61
  end
61
62
 
62
63
  end
63
64
  ```
64
65
 
65
- If you need more control, you can call directly the model's `.authenticate` method.
66
+ If you need more control, -- like checking a users state before letting him in -- you can call directly the model's `.authenticate` method, and then call the `login!` method once you're ready.
66
67
 
67
68
  ``` rb
68
69
  def create
69
70
  if user = User.authenticate(params[:email], params[:password]) and user.active?
70
- remember = params[:remember_me] == '1'
71
- login!(user, remember)
71
+ login!(user, params[:remember_me] == '1')
72
72
  redirect_to '/app'
73
73
  else
74
- redirect_to :new, :notice => "Invalid credentials."
74
+ redirect_to '/login', :notice => "Invalid credentials."
75
75
  end
76
76
  end
77
77
  ```
78
78
 
79
+ As you can see, Entrance comes with out-of-box support for the "remember me" option. It also supports the usual 'reset password' token/email logic, but that's it. That's as far as Entrance goes -- we want to keep things simple and lean.
80
+
79
81
  ## Entrance::Config
80
82
 
81
83
  All available options, along with their defaults.
@@ -83,7 +85,7 @@ All available options, along with their defaults.
83
85
  ``` rb
84
86
  Entrance.configure do |config|
85
87
  config.model = 'User'
86
- config.cipher = Ciphers::BCrypt
88
+ config.cipher = Entrance::Ciphers::BCrypt # can also be Entrance::Ciphers::SHA1
87
89
  config.secret = nil
88
90
  config.stretches = 10
89
91
  config.salt_attr = nil
@@ -129,6 +131,11 @@ Provides:
129
131
  - #remember_me! and #forget_me!
130
132
  - #password and #password=(value)
131
133
  - #request_password_reset!
134
+
135
+ Examples
136
+ ========
137
+
138
+ Thought you might ask. There's a full example Rails app in the examples folder. Check it out.
132
139
 
133
140
  Author
134
141
  ======
@@ -138,5 +145,4 @@ Written by Tomás Pollak.
138
145
  Copyright
139
146
  =========
140
147
 
141
- (c) Fork, Ltd. MIT Licensed.
142
-
148
+ (c) Fork, Ltd. MIT Licensed.
data/entrance.gemspec CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
15
15
  s.rubyforge_project = "entrance"
16
16
 
17
17
  s.add_runtime_dependency "bcrypt", "~> 3.0"
18
- s.add_runtime_dependency "activesupport", "> 3.0"
18
+ s.add_runtime_dependency "activesupport", ">= 3.0"
19
19
 
20
20
  s.files = `git ls-files`.split("\n")
21
21
  s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: ./../../
3
3
  specs:
4
- entrance (0.1.1)
5
- activesupport (> 3.0)
4
+ entrance (0.2.0)
5
+ activesupport (>= 3.0)
6
6
  bcrypt (~> 3.0)
7
7
 
8
8
  GEM
@@ -1,28 +1,9 @@
1
- == README
1
+ == Example Rails App with Entrance
2
2
 
3
- This README would normally document whatever steps are necessary to get the
4
- application up and running.
3
+ git clone https://github.com/tomas/entrance
4
+ cd entrance/examples/rails-app
5
+ bundle install
6
+ bin/rake db:migrate
7
+ bin/rails s
5
8
 
6
- Things you may want to cover:
7
-
8
- * Ruby version
9
-
10
- * System dependencies
11
-
12
- * Configuration
13
-
14
- * Database creation
15
-
16
- * Database initialization
17
-
18
- * How to run the test suite
19
-
20
- * Services (job queues, cache servers, search engines, etc.)
21
-
22
- * Deployment instructions
23
-
24
- * ...
25
-
26
-
27
- Please feel free to use a different markup language if you do not plan to run
28
- <tt>rake doc:app</tt>.
9
+ And ready-o. Then point your browser to localhost:3000 and sign up, then sign in using your credentials.
@@ -7,8 +7,8 @@ class SessionsController < ApplicationController
7
7
  end
8
8
 
9
9
  def create
10
- remember = ['on', 'true'].include?(params[:remember_me])
11
- puts "Should remember: #{remember}"
10
+ # boolean flag that determines whether we'll log the user automatically if the browser is closed
11
+ remember = ['on', 'true', '1'].include?(params[:remember_me])
12
12
  if user = authenticate_and_login(params[:email], params[:password], remember)
13
13
  redirect_to :root
14
14
  else
@@ -22,4 +22,4 @@ class SessionsController < ApplicationController
22
22
  redirect_to :login, :notice => 'Logged out! See you soon.'
23
23
  end
24
24
 
25
- end
25
+ end
@@ -1,9 +1,5 @@
1
- puts 'Initializing Entrance...'
2
-
3
1
  Entrance.configure do |config|
4
2
  config.remember_for = 1.month
5
- config.cipher = Entrance::Ciphers::SHA1
6
- config.secret = 'somethingveryveryveryveryverysecret'
7
3
  config.access_denied_redirect_to = '/login'
8
4
  config.cookie_secure = Rails.env.production?
9
5
  end
@@ -77,7 +77,9 @@ module Entrance
77
77
  end
78
78
 
79
79
  def login_from_session
80
- self.current_user = Entrance.model.where(session[:user_id]).first if session[:user_id]
80
+ query = {}
81
+ query[Entrance.config.unique_key] = session[:user_id]
82
+ self.current_user = Entrance.model.where(query).first if session[:user_id]
81
83
  end
82
84
 
83
85
  def login_from_cookie
@@ -108,7 +110,7 @@ module Entrance
108
110
 
109
111
  def set_remember_cookie
110
112
  values = {
111
- :expires => Entrance.config.remember_for.from_now,
113
+ :expires => Entrance.config.remember_for.to_i.from_now,
112
114
  :httponly => Entrance.config.cookie_httponly,
113
115
  :path => Entrance.config.cookie_path,
114
116
  :secure => Entrance.config.cookie_secure,
@@ -30,12 +30,21 @@ module Entrance
30
30
 
31
31
  %w(remember reset).each do |what|
32
32
  if field = Entrance.config.send("#{what}_token_attr")
33
+ until_field = Entrance.config.send("#{what}_until_attr")
33
34
 
34
35
  unless fields.include?(field.to_sym)
35
36
  raise "No #{Entrance.config.send("#{what}_token_attr")} field found. \
36
37
  Set the config.#{what}_token_attr option to nil to disable the #{what} option."
37
38
  end
38
39
 
40
+ if until_field
41
+ unless fields.include?(until_field.to_sym)
42
+ raise "Couldn't find a #{Entrance.config.send("#{what}_until_attr")} field. Cannot continue."
43
+ end
44
+ else
45
+ puts "Disabling expiration timestamp for the #{what} option. This is a VERY bad idea."
46
+ end
47
+
39
48
  Entrance.config.can?(what, true)
40
49
  include what.to_sym == :remember ? RememberMethods : ResetMethods
41
50
  end
@@ -94,17 +103,17 @@ module Entrance
94
103
 
95
104
  def remember_me!(until_date = nil)
96
105
  update_attribute(Entrance.config.remember_token_attr, Entrance.generate_token)
97
- update_remember_token_expiration!(until_date)
106
+ update_remember_token_expiration!(until_date) if Entrance.config.remember_until_attr
98
107
  end
99
108
 
100
109
  def update_remember_token_expiration!(until_date = nil)
101
- timestamp = until_date || Entrance.config.remember_for
102
- update_attribute(Entrance.config.remember_until_attr, timestamp.from_now)
110
+ seconds = (until_date || Entrance.config.remember_for).to_i
111
+ update_attribute(Entrance.config.remember_until_attr, seconds.from_now)
103
112
  end
104
113
 
105
114
  def forget_me!
106
115
  update_attribute(Entrance.config.remember_token_attr, nil)
107
- update_attribute(Entrance.config.remember_until_attr, nil)
116
+ update_attribute(Entrance.config.remember_until_attr, nil) if Entrance.config.remember_until_attr
108
117
  end
109
118
 
110
119
  end
@@ -1,7 +1,7 @@
1
1
  module Entrance
2
2
  MAJOR = 0
3
3
  MINOR = 2
4
- PATCH = 0
4
+ PATCH = 1
5
5
 
6
6
  VERSION = [MAJOR, MINOR, PATCH].join('.')
7
7
  end
data/lib/entrance.rb CHANGED
@@ -21,7 +21,9 @@ module Entrance
21
21
  end
22
22
 
23
23
  def self.generate_token(length = 40)
24
- SecureRandom.hex(length/2).encode('UTF-8')
24
+ str = SecureRandom.hex(length/2)
25
+ return str unless str.respond_to?(:encode)
26
+ str.encode('UTF-8')
25
27
  end
26
28
 
27
29
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 0
9
- version: 0.2.0
8
+ - 1
9
+ version: 0.2.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - "Tom\xC3\xA1s Pollak"
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2015-01-07 00:00:00 -03:00
17
+ date: 2015-01-08 00:00:00 -03:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -35,7 +35,7 @@ dependencies:
35
35
  prerelease: false
36
36
  requirement: &id002 !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  segments:
41
41
  - 3