janus 0.6.0 → 0.7.0

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.
Files changed (41) hide show
  1. data/README.rdoc +77 -154
  2. data/lib/generators/janus/install_generator.rb +19 -0
  3. data/lib/generators/janus/resource_generator.rb +64 -0
  4. data/lib/generators/templates/confirmations/new.html.erb +16 -0
  5. data/lib/generators/templates/confirmations_controller.erb +3 -0
  6. data/lib/generators/templates/janus.en.yml +62 -0
  7. data/lib/generators/templates/janus.rb +25 -0
  8. data/lib/generators/templates/model.erb +8 -0
  9. data/lib/generators/templates/passwords/edit.html.erb +21 -0
  10. data/lib/generators/templates/passwords/new.html.erb +16 -0
  11. data/lib/generators/templates/passwords_controller.erb +3 -0
  12. data/lib/generators/templates/registrations/edit.html.erb +31 -0
  13. data/lib/generators/templates/registrations/new.html.erb +26 -0
  14. data/lib/generators/templates/registrations_controller.erb +17 -0
  15. data/lib/generators/templates/sessions/new.html.erb +30 -0
  16. data/lib/generators/templates/sessions_controller.erb +11 -0
  17. data/lib/janus.rb +1 -0
  18. data/lib/janus/config.rb +10 -4
  19. data/lib/janus/controllers/confirmations_controller.rb +6 -6
  20. data/lib/janus/controllers/helpers.rb +4 -4
  21. data/lib/janus/controllers/passwords_controller.rb +3 -3
  22. data/lib/janus/controllers/registrations_controller.rb +12 -9
  23. data/lib/janus/controllers/sessions_controller.rb +15 -7
  24. data/lib/janus/helper.rb +1 -1
  25. data/lib/janus/hooks.rb +6 -6
  26. data/lib/janus/hooks/rememberable.rb +2 -2
  27. data/lib/janus/hooks/remote_authenticatable.rb +1 -1
  28. data/lib/janus/manager.rb +5 -5
  29. data/lib/janus/models/base.rb +2 -2
  30. data/lib/janus/models/confirmable.rb +7 -4
  31. data/lib/janus/models/database_authenticatable.rb +26 -16
  32. data/lib/janus/models/rememberable.rb +12 -9
  33. data/lib/janus/models/remote_authenticatable.rb +21 -18
  34. data/lib/janus/models/trackable.rb +11 -8
  35. data/lib/janus/routes.rb +22 -22
  36. data/lib/janus/strategies.rb +3 -3
  37. data/lib/janus/strategies/database_authenticatable.rb +1 -1
  38. data/lib/janus/strategies/rememberable.rb +1 -1
  39. data/lib/janus/strategies/remote_authenticatable.rb +1 -1
  40. data/lib/janus/test_helper.rb +6 -2
  41. metadata +19 -36
@@ -0,0 +1,8 @@
1
+ class <%= class_name %> < ActiveRecord::Base
2
+ include Janus::Models::Base
3
+ include Janus::Models::DatabaseAuthenticatable
4
+ include Janus::Models::Confirmable
5
+ include Janus::Models::Rememberable
6
+ # include Janus::Models::RemoteAuthenticatable
7
+ # include Janus::Models::Trackable
8
+ end
@@ -0,0 +1,21 @@
1
+ <h1><%%= t 'janus.passwords.edit.change_password' %></h1>
2
+
3
+ <%%= form_for @<%= singular_name %>, :url => <%= singular_name %>_password_path, :method => :put do |f| %>
4
+ <%%= janus_error_messages %>
5
+
6
+ <%%= f.hidden_field :reset_password_token %>
7
+
8
+ <div class="field">
9
+ <%%= f.label :password %>
10
+ <%%= f.password_field :password %>
11
+ </div>
12
+
13
+ <div class="field">
14
+ <%%= f.label :password_confirmation %>
15
+ <%%= f.password_field :password_confirmation %>
16
+ </div>
17
+
18
+ <div class="actions">
19
+ <%%= f.submit t('janus.passwords.edit.change_password_btn') %>
20
+ </div>
21
+ <%% end %>
@@ -0,0 +1,16 @@
1
+ <h1><%%= t 'janus.passwords.new.forgot_password' %></h1>
2
+
3
+ <%%= form_for @<%= singular_name %>, :url => <%= singular_name %>_password_path, :method => :post do |f| %>
4
+ <%%= janus_error_messages %>
5
+
6
+ <%% <%= class_name %>.authentication_keys.each do |key| %>
7
+ <div class="field">
8
+ <%%= f.label key %>
9
+ <%%= f.text_field key %>
10
+ </div>
11
+ <%% end %>
12
+
13
+ <div class="actions">
14
+ <%%= f.submit t('janus.passwords.new.send_instructions_btn') %>
15
+ </div>
16
+ <%% end %>
@@ -0,0 +1,3 @@
1
+ class <%= class_name.pluralize %>::PasswordsController < Janus::PasswordsController
2
+ respond_to :html
3
+ end
@@ -0,0 +1,31 @@
1
+ <h1><%%= t 'janus.registrations.edit.my_account' %></h1>
2
+
3
+ <%%= form_for @<%= singular_name %>, :url => <%= singular_name %>_registration_path, :method => :put do |f| %>
4
+ <%%= janus_error_messages %>
5
+
6
+ <%% <%= class_name %>.authentication_keys.each do |key| %>
7
+ <div class="field">
8
+ <%%= f.label key %>
9
+ <%%= f.text_field key %>
10
+ </div>
11
+ <%% end %>
12
+
13
+ <div class="field">
14
+ <%%= f.label :current_password %>
15
+ <%%= f.password_field :current_password %>
16
+ </div>
17
+
18
+ <div class="field">
19
+ <%%= f.label :password %>
20
+ <%%= f.password_field :password %>
21
+ </div>
22
+
23
+ <div class="field">
24
+ <%%= f.label :password_confirmation %>
25
+ <%%= f.password_field :password_confirmation %>
26
+ </div>
27
+
28
+ <div class="actions">
29
+ <%%= f.submit t('janus.registrations.edit.save_changes_btn') %>
30
+ </div>
31
+ <%% end %>
@@ -0,0 +1,26 @@
1
+ <h1><%%= t 'janus.registrations.new.sign_up' %></h1>
2
+
3
+ <%%= form_for @<%= singular_name %>, :url => <%= singular_name %>_registration_path do |f| %>
4
+ <%%= janus_error_messages %>
5
+
6
+ <%% <%= class_name %>.authentication_keys.each do |key| %>
7
+ <div class="field">
8
+ <%%= f.label key %>
9
+ <%%= f.text_field key %>
10
+ </div>
11
+ <%% end %>
12
+
13
+ <div class="field">
14
+ <%%= f.label :password %>
15
+ <%%= f.password_field :password %>
16
+ </div>
17
+
18
+ <div class="field">
19
+ <%%= f.label :password_confirmation %>
20
+ <%%= f.password_field :password_confirmation %>
21
+ </div>
22
+
23
+ <div class="actions">
24
+ <%%= f.submit t('janus.registrations.new.sign_up_btn') %>
25
+ </div>
26
+ <%% end %>
@@ -0,0 +1,17 @@
1
+ class <%= class_name.pluralize %>::RegistrationsController < Janus::RegistrationsController
2
+ respond_to :html
3
+
4
+ # def after_sign_up_url(<%= singular_name %>)
5
+ # profile_url(<%= singular_name %>)
6
+ # end
7
+
8
+ def <%= singular_name %>_params
9
+ if params.respond_to?(:permit)
10
+ # Rails 4 (or Rails 3 + strong_parameters)
11
+ params.require(:<%= singular_name %>).permit(:email, :current_password, :password, :password_confirmation)
12
+ else
13
+ # Rails 3
14
+ params[:<%= singular_name %>].slice(:email, :current_password, :password, :password_confirmation)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,30 @@
1
+ <h1><%%= t 'janus.sessions.new.sign_in' %></h1>
2
+
3
+ <%%= form_for @<%= singular_name %>, :url => <%= singular_name %>_session_path, :method => :post do |f| %>
4
+ <%%= hidden_field_tag :return_to, params[:return_to] if params[:return_to] %>
5
+
6
+ <%%= janus_error_messages %>
7
+
8
+ <%% <%= class_name %>.authentication_keys.each do |key| %>
9
+ <div class="field">
10
+ <%%= f.label key %>
11
+ <%%= f.text_field key %>
12
+ </div>
13
+ <%% end %>
14
+
15
+ <div class="field">
16
+ <%%= f.label :password %>
17
+ <%%= f.password_field :password %>
18
+ </div>
19
+
20
+ <%% if @<%= singular_name %>.respond_to?(:remember_me!) %>
21
+ <div class="field">
22
+ <%%= check_box_tag :remember_me, '1' %>
23
+ <%%= label_tag :remember_me, <%= class_name %>.human_attribute_name(:remember_me) %>
24
+ </div>
25
+ <%% end %>
26
+
27
+ <div class="actions">
28
+ <%%= f.submit t('janus.sessions.new.sign_in_btn') %>
29
+ </div>
30
+ <%% end %>
@@ -0,0 +1,11 @@
1
+ class <%= class_name.pluralize %>::SessionsController < Janus::SessionsController
2
+ respond_to :html
3
+
4
+ # def after_sign_in_url(<%= singular_name %>)
5
+ # profile_url(<%= singular_name %>)
6
+ # end
7
+
8
+ # def valid_remote_host?(host)
9
+ # ['www.example.com', 'test.host'].include?(host)
10
+ # end
11
+ end
@@ -3,6 +3,7 @@ require 'janus/config'
3
3
  require 'janus/hooks'
4
4
  require 'janus/strategies'
5
5
  require 'janus/manager'
6
+ require 'janus/rails' if defined?(Rails)
6
7
 
7
8
  autoload :JanusHelper, 'janus/helper'
8
9
 
@@ -3,26 +3,32 @@ require 'active_support/time'
3
3
  module Janus
4
4
  module Config
5
5
  mattr_accessor :contact_email
6
-
6
+
7
7
  # DatabaseAuthenticatable
8
8
  mattr_accessor :authentication_keys, :encryptor, :stretches, :pepper, :scrypt_options
9
9
  self.authentication_keys = [ :email ]
10
+
10
11
  self.encryptor = :bcrypt
12
+ # self.encryptor = :scrypt
13
+
14
+ # bcrypt config
11
15
  self.stretches = 10
12
16
  self.pepper = nil
17
+
18
+ # scrypt config
13
19
  self.scrypt_options = { :max_time => 0.25 }
14
-
20
+
15
21
  # Confirmable
16
22
  mattr_accessor :confirmation_key #,reconfirmable
17
23
  self.confirmation_key = :confirm_token
18
24
  # self.reconfirmable = true
19
-
25
+
20
26
  # Rememberable
21
27
  mattr_accessor :remember_for, :extend_remember_period #, :remember_across_browsers
22
28
  self.remember_for = 1.year
23
29
  self.extend_remember_period = false
24
30
  # self.remember_across_browsers = false
25
-
31
+
26
32
  # RemoteAuthenticatable
27
33
  mattr_accessor :remote_authentication_key
28
34
  self.remote_authentication_key = :remote_token
@@ -7,10 +7,10 @@ class Janus::ConfirmationsController < ApplicationController
7
7
 
8
8
  def show
9
9
  self.resource = resource_class.find_for_confirmation(params[resource_class.confirmation_key])
10
-
10
+
11
11
  if resource
12
12
  resource.confirm!
13
-
13
+
14
14
  respond_to do |format|
15
15
  format.html { redirect_to root_url, :notice => t('flash.janus.confirmations.edit.confirmed') }
16
16
  format.any { head :ok }
@@ -22,7 +22,7 @@ class Janus::ConfirmationsController < ApplicationController
22
22
  resource.errors.add(:base, :invalid_token)
23
23
  render 'new'
24
24
  end
25
-
25
+
26
26
  format.any { head :bad_request }
27
27
  end
28
28
  end
@@ -35,10 +35,10 @@ class Janus::ConfirmationsController < ApplicationController
35
35
 
36
36
  def create
37
37
  self.resource = resource_class.find_for_database_authentication(params[resource_name])
38
-
38
+
39
39
  if resource
40
40
  JanusMailer.confirmation_instructions(resource).deliver
41
-
41
+
42
42
  respond_to do |format|
43
43
  format.html { redirect_to root_url, :notice => t('flash.janus.confirmations.create.email_sent') }
44
44
  format.any { head :ok }
@@ -50,7 +50,7 @@ class Janus::ConfirmationsController < ApplicationController
50
50
  resource.errors.add(:base, :not_found)
51
51
  render 'new'
52
52
  end
53
-
53
+
54
54
  format.any { head :not_found }
55
55
  end
56
56
  end
@@ -47,19 +47,19 @@ module Janus
47
47
  scopes.each do |scope|
48
48
  class_eval <<-EOV
49
49
  helper_method :#{scope}_signed_in?, :current_#{scope}, :#{scope}_session
50
-
50
+
51
51
  def authenticate_#{scope}!
52
52
  janus.authenticate!(:#{scope})
53
53
  end
54
-
54
+
55
55
  def current_#{scope}
56
56
  @current_#{scope} ||= janus.authenticate(:#{scope})
57
57
  end
58
-
58
+
59
59
  def #{scope}_signed_in?
60
60
  janus.authenticate?(:#{scope})
61
61
  end
62
-
62
+
63
63
  def #{scope}_session
64
64
  janus.session(:#{scope}) if #{scope}_signed_in?
65
65
  end
@@ -12,11 +12,11 @@ class Janus::PasswordsController < ApplicationController
12
12
 
13
13
  def create
14
14
  self.resource = resource_class.find_for_database_authentication(params[resource_name])
15
-
15
+
16
16
  if resource
17
17
  resource.generate_reset_password_token!
18
18
  JanusMailer.reset_password_instructions(resource).deliver
19
-
19
+
20
20
  respond_to do |format|
21
21
  format.html { redirect_to root_url, :notice => t('flash.janus.passwords.create.email_sent') }
22
22
  format.any { head :ok }
@@ -40,7 +40,7 @@ class Janus::PasswordsController < ApplicationController
40
40
 
41
41
  def update
42
42
  self.resource = resource_class.find_for_password_reset(params[resource_name][:reset_password_token])
43
-
43
+
44
44
  if resource
45
45
  if resource.reset_password!(params[resource_name])
46
46
  respond_to do |format|
@@ -17,33 +17,29 @@ class Janus::RegistrationsController < ApplicationController
17
17
  end
18
18
 
19
19
  def create
20
- self.resource = resource_class.new(params[resource_name])
21
-
20
+ self.resource = resource_class.new(send("#{janus_scope}_params"))
21
+
22
22
  if resource.save
23
23
  janus.login(resource, :scope => janus_scope, :rememberable => true)
24
24
  JanusMailer.confirmation_instructions(resource).deliver if resource.respond_to?(:confirm!)
25
25
  else
26
26
  resource.clean_up_passwords
27
27
  end
28
-
28
+
29
29
  respond_with(resource, :location => after_sign_up_url(resource))
30
30
  end
31
31
 
32
32
  def update
33
- params[resource_name].each do |key, value|
34
- params[resource_name].delete(key) if value.blank? && [:password, :password_confirmation].include?(key.to_sym)
35
- end
36
-
37
33
  self.resource = send("current_#{janus_scope}")
38
34
  resource.current_password = ""
39
- resource.clean_up_passwords unless resource.update_attributes(params[resource_name])
35
+ resource.clean_up_passwords unless resource.update_attributes(resource_params)
40
36
  respond_with(resource, :location => after_sign_up_url(resource))
41
37
  end
42
38
 
43
39
  def destroy
44
40
  self.resource = send("current_#{janus_scope}")
45
41
  janus.unset_user(janus_scope) if resource.destroy
46
-
42
+
47
43
  respond_with(resource) do |format|
48
44
  format.html { redirect_to root_url }
49
45
  end
@@ -52,4 +48,11 @@ class Janus::RegistrationsController < ApplicationController
52
48
  def after_sign_up_url(user)
53
49
  user
54
50
  end
51
+
52
+ def resource_params
53
+ keys = %w{current_password password password_confirmation}
54
+ send("#{janus_scope}_params").reject do |key, value|
55
+ value.blank? and keys.include?(key)
56
+ end
57
+ end
55
58
  end
@@ -17,7 +17,7 @@ class Janus::SessionsController < ApplicationController
17
17
 
18
18
  def new
19
19
  params[:return_to] ||= request.env["HTTP_REFERER"]
20
-
20
+
21
21
  if signed_in?(janus_scope)
22
22
  redirect_after_sign_in(send("current_#{janus_scope}"))
23
23
  else
@@ -28,10 +28,10 @@ class Janus::SessionsController < ApplicationController
28
28
 
29
29
  def create
30
30
  self.resource = resource_class.find_for_database_authentication(params[resource_name])
31
-
31
+
32
32
  if resource && resource.valid_password?(params[resource_name][:password])
33
33
  janus.login(resource, :scope => janus_scope, :rememberable => params[:remember_me])
34
-
34
+
35
35
  respond_to do |format|
36
36
  format.html { redirect_after_sign_in(resource) }
37
37
  format.any { head :ok }
@@ -39,7 +39,7 @@ class Janus::SessionsController < ApplicationController
39
39
  else
40
40
  respond_to do |format|
41
41
  format.html do
42
- self.resource ||= resource_class.new(params[resource_name])
42
+ self.resource ||= resource_class.new(resource_params)
43
43
  resource.clean_up_passwords
44
44
  resource.errors.add(:base, :not_found)
45
45
  render "new", :status => :unauthorized
@@ -51,7 +51,7 @@ class Janus::SessionsController < ApplicationController
51
51
 
52
52
  def destroy
53
53
  janus.logout(janus_scope)
54
-
54
+
55
55
  respond_to do |format|
56
56
  format.html { redirect_to after_sign_out_url(janus_scope) }
57
57
  format.any { head :ok }
@@ -119,13 +119,21 @@ class Janus::SessionsController < ApplicationController
119
119
  query = return_to.query_values || {}
120
120
  return_to.query_values = query.merge(user.class.remote_authentication_key => user.generate_remote_token!)
121
121
  end
122
-
122
+
123
123
  redirect_to return_to.to_s
124
124
  return
125
125
  end
126
126
  end
127
127
  end
128
-
128
+
129
129
  redirect_to after_sign_in_url(user)
130
130
  end
131
+
132
+ def resource_params
133
+ if params.respond_to?(:permit)
134
+ params.require(janus_scope).permit(*resource_class.authentication_keys)
135
+ else
136
+ params[janus_scope].slice(*resource_class.authentication_keys)
137
+ end
138
+ end
131
139
  end
@@ -1,7 +1,7 @@
1
1
  module JanusHelper
2
2
  def janus_error_messages
3
3
  return "" if resource.errors.empty?
4
-
4
+
5
5
  content_tag :div, :id => 'error_explanation' do
6
6
  content_tag :ul do
7
7
  resource.errors.full_messages.map { |message| content_tag :li, message }.join.html_safe
@@ -5,19 +5,19 @@ module Janus
5
5
  # Hooks allow you the react at the different steps of a user session.
6
6
  # All callbacks will receive the same arguments: +user+, +manager+ and
7
7
  # +options+.
8
- #
8
+ #
9
9
  # Example:
10
- #
10
+ #
11
11
  # Janus::Manager.after_login do |user, manager, options|
12
12
  # session = manager.session(options[:scope])
13
- #
13
+ #
14
14
  # # write some great code here
15
15
  # end
16
- #
16
+ #
17
17
  # Options:
18
- #
18
+ #
19
19
  # - +:scope+
20
- #
20
+ #
21
21
  module ClassMethods
22
22
  # Executed after a strategy succeeds to authenticate a user.
23
23
  def after_authenticate(&block)