janus 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +2 -0
  3. data.tar.gz.sig +3 -0
  4. data/.gitignore +4 -0
  5. data/.travis.yml +18 -0
  6. data/LICENSE +20 -0
  7. data/README.rdoc +4 -5
  8. data/Rakefile +22 -0
  9. data/VERSION +1 -0
  10. data/certs/ysbaddaden.pem +21 -0
  11. data/janus.gemspec +28 -0
  12. data/lib/generators/janus/resource_generator.rb +17 -1
  13. data/lib/generators/templates/janus.rb +9 -5
  14. data/lib/generators/templates/mailer.rb +3 -0
  15. data/lib/generators/templates/mailer/confirmation_instructions.html.erb +7 -0
  16. data/lib/generators/templates/mailer/confirmation_instructions.text.erb +7 -0
  17. data/lib/generators/templates/mailer/reset_password_instructions.html.erb +9 -0
  18. data/lib/generators/templates/mailer/reset_password_instructions.text.erb +7 -0
  19. data/lib/janus.rb +3 -0
  20. data/lib/janus/config.rb +9 -3
  21. data/lib/janus/controllers/confirmations_controller.rb +1 -1
  22. data/lib/janus/controllers/internal_helpers.rb +8 -1
  23. data/lib/janus/controllers/passwords_controller.rb +1 -1
  24. data/lib/janus/controllers/registrations_controller.rb +1 -1
  25. data/lib/janus/controllers/sessions_controller.rb +6 -5
  26. data/lib/janus/models/confirmable.rb +2 -0
  27. data/lib/janus/models/database_authenticatable.rb +4 -2
  28. data/lib/janus/models/rememberable.rb +2 -0
  29. data/lib/janus/models/remote_authenticatable.rb +2 -0
  30. data/lib/janus/models/remote_token.rb +6 -5
  31. data/lib/janus/models/token_authenticatable.rb +79 -0
  32. data/lib/janus/models/trackable.rb +2 -0
  33. data/lib/janus/strategies.rb +1 -1
  34. data/lib/janus/strategies/token_authenticatable.rb +22 -0
  35. data/lib/janus/version.rb +10 -0
  36. data/test/fixtures/admins.yml +5 -0
  37. data/test/fixtures/users.yml +10 -0
  38. data/test/functional/admins/sessions_controller_test.rb +13 -0
  39. data/test/functional/home_controller_test.rb +8 -0
  40. data/test/functional/janus/mailer_test.rb +14 -0
  41. data/test/functional/janus/manager_test.rb +94 -0
  42. data/test/functional/users/confirmations_controller_test.rb +68 -0
  43. data/test/functional/users/passwords_controller_test.rb +131 -0
  44. data/test/functional/users/registrations_controller_test.rb +112 -0
  45. data/test/functional/users/sessions_controller_test.rb +100 -0
  46. data/test/functional/users_controller_test.rb +29 -0
  47. data/test/generators/install_generator_test.rb +16 -0
  48. data/test/generators/resource_generator_test.rb +80 -0
  49. data/test/integration/users/rememberable_test.rb +32 -0
  50. data/test/integration/users/remote_test.rb +72 -0
  51. data/test/integration/users/sessions_test.rb +18 -0
  52. data/test/integration/users/token_authenticatable_test.rb +42 -0
  53. data/test/integration/users/trackable_test.rb +22 -0
  54. data/test/rails_app/.gitignore +4 -0
  55. data/test/rails_app/Rakefile +7 -0
  56. data/test/rails_app/app/controllers/admins/sessions_controller.rb +11 -0
  57. data/test/rails_app/app/controllers/application_controller.rb +9 -0
  58. data/test/rails_app/app/controllers/blogs_controller.rb +6 -0
  59. data/test/rails_app/app/controllers/home_controller.rb +4 -0
  60. data/test/rails_app/app/controllers/users/confirmations_controller.rb +3 -0
  61. data/test/rails_app/app/controllers/users/passwords_controller.rb +3 -0
  62. data/test/rails_app/app/controllers/users/registrations_controller.rb +17 -0
  63. data/test/rails_app/app/controllers/users/sessions_controller.rb +11 -0
  64. data/test/rails_app/app/controllers/users_controller.rb +9 -0
  65. data/test/rails_app/app/helpers/application_helper.rb +2 -0
  66. data/test/rails_app/app/mailers/user_mailer.rb +3 -0
  67. data/test/rails_app/app/models/admin.rb +3 -0
  68. data/test/rails_app/app/models/remote_token.rb +6 -0
  69. data/test/rails_app/app/models/user.rb +8 -0
  70. data/test/rails_app/app/views/admins/sessions/new.html.erb +30 -0
  71. data/test/rails_app/app/views/blogs/show.html.erb +2 -0
  72. data/test/rails_app/app/views/home/index.html.erb +2 -0
  73. data/test/rails_app/app/views/layouts/application.html.erb +28 -0
  74. data/test/rails_app/app/views/user_mailer/confirmation_instructions.html.erb +7 -0
  75. data/test/rails_app/app/views/user_mailer/confirmation_instructions.text.erb +7 -0
  76. data/test/rails_app/app/views/user_mailer/reset_password_instructions.html.erb +9 -0
  77. data/test/rails_app/app/views/user_mailer/reset_password_instructions.text.erb +7 -0
  78. data/test/rails_app/app/views/users/confirmations/new.html.erb +16 -0
  79. data/test/rails_app/app/views/users/passwords/edit.html.erb +21 -0
  80. data/test/rails_app/app/views/users/passwords/new.html.erb +16 -0
  81. data/test/rails_app/app/views/users/registrations/edit.html.erb +31 -0
  82. data/test/rails_app/app/views/users/registrations/new.html.erb +26 -0
  83. data/test/rails_app/app/views/users/sessions/new.html.erb +30 -0
  84. data/test/rails_app/app/views/users/show.html.erb +2 -0
  85. data/test/rails_app/config.ru +4 -0
  86. data/test/rails_app/config/application.rb +43 -0
  87. data/test/rails_app/config/boot.rb +6 -0
  88. data/test/rails_app/config/database.yml +22 -0
  89. data/test/rails_app/config/environment.rb +5 -0
  90. data/test/rails_app/config/environments/development.rb +23 -0
  91. data/test/rails_app/config/environments/production.rb +50 -0
  92. data/test/rails_app/config/environments/test.rb +34 -0
  93. data/test/rails_app/config/initializers/janus.rb +25 -0
  94. data/test/rails_app/config/initializers/secret_token.rb +8 -0
  95. data/test/rails_app/config/initializers/session_store.rb +8 -0
  96. data/test/rails_app/config/locales/janus.en.yml +65 -0
  97. data/test/rails_app/config/routes.rb +13 -0
  98. data/test/rails_app/db/migrate/20110323153820_create_users.rb +40 -0
  99. data/test/rails_app/db/migrate/20110331153546_create_remote_tokens.rb +15 -0
  100. data/test/rails_app/db/migrate/20130412104138_create_admins.rb +10 -0
  101. data/test/rails_app/db/schema.rb +58 -0
  102. data/test/rails_app/db/seeds.rb +7 -0
  103. data/test/rails_app/lib/tasks/.gitkeep +0 -0
  104. data/test/rails_app/public/404.html +26 -0
  105. data/test/rails_app/public/422.html +26 -0
  106. data/test/rails_app/public/500.html +26 -0
  107. data/test/rails_app/script/rails +6 -0
  108. data/test/test_helper.rb +121 -0
  109. data/test/unit/confirmable_test.rb +36 -0
  110. data/test/unit/janus_test.rb +27 -0
  111. data/test/unit/rememberable_test.rb +47 -0
  112. data/test/unit/remote_authenticatable_test.rb +37 -0
  113. data/test/unit/remote_token_test.rb +9 -0
  114. data/test/unit/reset_password_test.rb +45 -0
  115. data/test/unit/token_authenticatable_test.rb +41 -0
  116. data/test/unit/trackable_test.rb +21 -0
  117. data/test/unit/user_test.rb +68 -0
  118. metadata +303 -21
  119. metadata.gz.sig +0 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: db69af223011b34004ed7c3b3d3b0b94d1c143ae
4
+ data.tar.gz: 4648e6814dc5578a272ca63d93d021e7d6753e8c
5
+ SHA512:
6
+ metadata.gz: 0ab6bbc22c50eff38c2162aecad2ce3db7a1ba8a21c17cc06a1cb0a96b554bb2322626747176b294a92efd10a0569f7d269244e09a0df6d6a2bbf8ce7dc38d62
7
+ data.tar.gz: 23e1f598b215370df21ae5b3e20e10ababf958c275364a717e060f228fa2192f66abe2a0cab981fc63f60b5778403f954da1841a78a25003547458775bfe0927
checksums.yaml.gz.sig ADDED
@@ -0,0 +1,2 @@
1
+ �����\5�r_�,!<}w�S��@4�\���3��:�u��{�%�.y�!(������
2
+ �� @?�sV�O =M�=; E„�XT��d�Ė��5r��B�]N���cS|�K� �V�0� NZ$�������y;q'r�Q��9�|�b%�/˾ ���mdž��7�cOи�u�o����yFb����m=��N��se�w_|�t�:��𒲰'PE b����a� ��?A�$��#�t5�j�^.WA���[ �
data.tar.gz.sig ADDED
@@ -0,0 +1,3 @@
1
+ ȮA��$ݷ��qQ�F�w�����[�Rtb�巤�a�}\�ښ�bF����m��g�GM����漯nuLɋ�+��WL�qD�ĆW��9�m�*?�
2
+ �� �>��x#��F�30|M���nYi���ϑ�3�/Ӥ#U=�}�*�
3
+ E�ԗ <��B�
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ doc/
2
+ pkg/
3
+ *.swp
4
+ gemfiles/*.lock
data/.travis.yml ADDED
@@ -0,0 +1,18 @@
1
+ language: ruby
2
+ script: bundle exec rake test
3
+
4
+ rvm:
5
+ - 1.9.3
6
+ - 2.0.0
7
+ - 2.1.0
8
+
9
+ gemfile:
10
+ - Gemfile
11
+ - gemfiles/Gemfile.rails-4.0-stable
12
+ - gemfiles/Gemfile.rails-3.2-stable
13
+ - gemfiles/Gemfile.rails-head
14
+
15
+ matrix:
16
+ allow_failures:
17
+ - gemfile: gemfiles/Gemfile.rails-head
18
+
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Julien Portalier
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ this software and associated documentation files (the "Software"), to deal in
7
+ the Software without restriction, including without limitation the rights to
8
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ the Software, and to permit persons to whom the Software is furnished to do so,
10
+ subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc CHANGED
@@ -13,7 +13,7 @@ being sent from the controllers and never from the models.
13
13
 
14
14
  - full auth system with strategies and hooks;
15
15
  - scoped auth for parallel authentications (like +users+, +admin_users+, etc.);
16
- - abstract controllers ready to use;
16
+ - abstract controllers and mailer ready to use;
17
17
  - generators to have everything generated automatically;
18
18
  - use only what you need at anytime.
19
19
 
@@ -23,6 +23,8 @@ As for the strategies and hooks:
23
23
  to auth users with passwords (plus registration and password reset);
24
24
  - {RemoteAuthenticatable}[http://rdoc.info/github/ysbaddaden/janus/Janus/Models/RemoteAuthenticatable]
25
25
  to keep users signed in across top level domains;
26
+ - {TokenAuthenticatable}[http://rdoc.info/github/ysbaddaden/janus/Janus/Models/TokenAuthenticatable]
27
+ to auth users with unique tokens;
26
28
  - {Confirmable}[http://rdoc.info/github/ysbaddaden/janus/Janus/Models/RemoteAuthenticatable]
27
29
  to have users confirm their emails upon registration;
28
30
  - {Rememberable}[http://rdoc.info/github/ysbaddaden/janus/Janus/Models/Rememberable]
@@ -77,14 +79,11 @@ Here is the list of all the current strategies:
77
79
  - +password+ — reset password (using an email exchanged token)
78
80
  - +track+ — track current and previous user's sign in date and IP
79
81
  - +remote+ — keeps users signed in different top level domains
80
-
82
+ - +token+ — get users signed in (with an unique token)
81
83
 
82
84
  == TODO
83
85
 
84
- - Differenciate mailers per resource, by looking for User::Mailer or AdminUser::Mailer classes.
85
86
  - Reconfirmable when email changes.
86
- - Simple configuration to use scrypt instead of bcrypt for password encryption.
87
- - TokenAuthenticatable strategy.
88
87
  - Rememberable across top level domains.
89
88
  - Omniauthable (or shall we let the user do it himself?)
90
89
  - Providing an OAuth 1.0 service whould be cool.
data/Rakefile ADDED
@@ -0,0 +1,22 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rdoc/task'
4
+
5
+ task :default => :test
6
+
7
+ desc 'Test the Janus rack middleware.'
8
+ Rake::TestTask.new(:test) do |t|
9
+ t.libs << 'test'
10
+ #t.pattern = 'test/{unit,functional,integration,generators}/**/*_test.rb'
11
+ t.pattern = 'test/**/*_test.rb'
12
+ t.verbose = true
13
+ end
14
+
15
+ Rake::RDocTask.new do |rdoc|
16
+ rdoc.title = "Janus"
17
+ rdoc.main = "README.rdoc"
18
+ rdoc.rdoc_dir = "doc"
19
+ rdoc.rdoc_files.include("README.rdoc", "lib/**/*.rb")
20
+ rdoc.options << "--charset=utf-8"
21
+ end
22
+
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.8.0
@@ -0,0 +1,21 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBBMQ8wDQYDVQQDDAZqdWxp
3
+ ZW4xGTAXBgoJkiaJk/IsZAEZFglwb3J0YWxpZXIxEzARBgoJkiaJk/IsZAEZFgNj
4
+ b20wHhcNMTQwMTE0MjIzMTQ4WhcNMTUwMTE0MjIzMTQ4WjBBMQ8wDQYDVQQDDAZq
5
+ dWxpZW4xGTAXBgoJkiaJk/IsZAEZFglwb3J0YWxpZXIxEzARBgoJkiaJk/IsZAEZ
6
+ FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDpxWuWRJXEz2+p
7
+ 2EW4NOPzkKloRLWoj+WQnqhQKT46GbH3ToDId8AMELTDIKpTQFiG2ty6D7S4IBFv
8
+ 7ceFKNk/EJc17mSYE1DzrtItor2/eeGC1zeNfvLjyDtyHKyKUZ891C1D0so5coUx
9
+ 2YbDW5npFkJkPaA5GneH7DFaCoIFLrD7ekbzaZAjlH+EH2fhd1XLhSsPEIiE+OnD
10
+ ilWnsPoRJAZwQOiVAtvh7xuc+29uSNndIIm2rU00SxbJnzsAq9ZddwPpMU/UcQpD
11
+ 4gCBCaNGzrLz4+upQdYEOuggM7rR3P934qfhIwb+aRGglqdNunmUrdCuhsGXrxq2
12
+ FvqwDvFZAgMBAAGjezB5MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
13
+ BBQoESDCnNz3LmbpUzOrGeXOpk9sqjAfBgNVHREEGDAWgRRqdWxpZW5AcG9ydGFs
14
+ aWVyLmNvbTAfBgNVHRIEGDAWgRRqdWxpZW5AcG9ydGFsaWVyLmNvbTANBgkqhkiG
15
+ 9w0BAQUFAAOCAQEAML4w0F/VF0gi5JqMqYSO05TakAauG8jQX0hov5H8M0Xhl79G
16
+ BdUllH0QEw0cP6J2g46zAk0FGHIGthx0OKKi5YMYTs/KPqOVIAcJslt2sGIC1Ukm
17
+ wpOWIg1XMe68+JVTktBKcBFAvc0pLtty1TgdSd2wr7KQgfmBU9I8G6AoPYhJOhkG
18
+ SHTTSX3ms2/XePuSnyOfir/AQC7U0NalnKLNdwY9gkEdNwiTf5Ga/lZVDQ607bow
19
+ KVqCN//9bevjMk5OiMi9X3Wu/GtVWDwC6OTWFWKd54KgbuWlakO8LC1SMmStnCIF
20
+ W4qpyMWMZMcB4ZN/0mUVzY5xwrislBtsmQVUSw==
21
+ -----END CERTIFICATE-----
data/janus.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/janus/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Julien Portalier"]
6
+ gem.email = ["julien@portalier.com"]
7
+ gem.description = gem.summary = "Authentication engine for Ruby on Rails"
8
+ gem.homepage = "http://github.com/ysbaddaden/janus"
9
+ gem.license = "MIT"
10
+
11
+ gem.files = `git ls-files | grep -Ev '^(Gemfile|gemfiles|test)'`.split("\n")
12
+ gem.test_files = `git ls-files -- test/*`.split("\n")
13
+ gem.name = "janus"
14
+ gem.require_paths = ["lib"]
15
+ gem.version = Janus::VERSION::STRING
16
+
17
+ gem.cert_chain = ['certs/ysbaddaden.pem']
18
+ gem.signing_key = File.expand_path('~/.ssh/gem-private_key.pem') if $0 =~ /gem\z/
19
+
20
+ gem.add_dependency 'addressable'
21
+
22
+ gem.add_development_dependency 'rails', '>= 3.0.0'
23
+ gem.add_development_dependency 'sqlite3'
24
+ gem.add_development_dependency 'bcrypt-ruby'
25
+ gem.add_development_dependency 'scrypt'
26
+ gem.add_development_dependency 'minitest'
27
+ gem.add_development_dependency 'capybara'
28
+ end
@@ -17,16 +17,17 @@ module Janus
17
17
  attributes += %w{reset_password_token:string:uniq reset_password_sent_at:datetime} if strategies.include?('password')
18
18
  attributes += %w{session_token:string:uniq} if strategies.include?('remote')
19
19
  attributes += %w{sign_in_count:integer last_sign_in_at:datetime last_sign_in_ip:string current_sign_in_at:datetime current_sign_in_ip:string} if strategies.include?('track')
20
+ attributes += %w{authentication_token:string:uniq authentication_token_created_at:datetime} if strategies.include?('token')
20
21
  generate('model', attributes.join(' '))
21
22
 
22
23
  modules = [
23
- " include Janus::Models::Base",
24
24
  " include Janus::Models::DatabaseAuthenticatable",
25
25
  ]
26
26
  modules << " include Janus::Models::Rememberable" if strategies.include?('remember')
27
27
  modules << " include Janus::Models::Confirmable" if strategies.include?('confirmation')
28
28
  modules << " include Janus::Models::Trackable" if strategies.include?('track')
29
29
  modules << " include Janus::Models::RemoteAuthenticatable" if strategies.include?('remote')
30
+ modules << " include Janus::Models::TokenAuthenticatable" if strategies.include?('token')
30
31
  inject_into_class "app/models/#{singular_name}.rb", class_name, modules.join("\n") + "\n"
31
32
  end
32
33
 
@@ -51,6 +52,21 @@ module Janus
51
52
  end
52
53
  end
53
54
 
55
+ def create_mailer
56
+ return unless strategies.include?('registration') or strategies.include?('confirmation') or strategies.include?('password')
57
+ template 'mailer.rb', "app/mailers/#{singular_name}_mailer.rb"
58
+
59
+ if strategies.include?('confirmation')
60
+ template 'mailer/confirmation_instructions.html.erb', "app/views/#{singular_name}_mailer/confirmation_instructions.html.erb"
61
+ template 'mailer/confirmation_instructions.text.erb', "app/views/#{singular_name}_mailer/confirmation_instructions.text.erb"
62
+ end
63
+
64
+ if strategies.include?('password')
65
+ template 'mailer/reset_password_instructions.html.erb', "app/views/#{singular_name}_mailer/reset_password_instructions.html.erb"
66
+ template 'mailer/reset_password_instructions.text.erb', "app/views/#{singular_name}_mailer/reset_password_instructions.text.erb"
67
+ end
68
+ end
69
+
54
70
  def add_janus_route
55
71
  route "janus :#{plural_name}, " + controllers.map { |ctrl| ":#{ctrl} => true" }.join(', ')
56
72
  end
@@ -2,14 +2,14 @@ Janus.config do |config|
2
2
  config.contact_email = "contact@some-example-domain.com"
3
3
 
4
4
  # DatabaseAuthenticatable
5
- config.authentication_keys = [ :email ]
5
+ config.authentication_keys = [:email]
6
6
 
7
- # you may use bcrypt:
7
+ # bcrypt:
8
8
  config.encryptor = :bcrypt
9
- config.stretches = 10
9
+ config.stretches = Rails.env.test? ? 1 : 10
10
10
  config.pepper = <%= SecureRandom.hex(64).inspect %>
11
11
 
12
- # or you prefer scrypt:
12
+ # scrypt:
13
13
  # config.encryptor = :scrypt
14
14
  # config.scrypt_options = { :max_time => 0.25 }
15
15
 
@@ -21,5 +21,9 @@ Janus.config do |config|
21
21
  # config.extend_remember_period = false
22
22
 
23
23
  # RemoteAuthenticatable
24
- # config.remote_authentication_key = :auth_token
24
+ # config.remote_authentication_key = :remote_token
25
+
26
+ # TokenAuthenticatable
27
+ # config.token_authentication_key = :auth_token
28
+ # self.reusable_authentication_token = true
25
29
  end
@@ -0,0 +1,3 @@
1
+ class <%= class_name %>Mailer < Janus::Mailer
2
+ default from: 'me@example.com'
3
+ end
@@ -0,0 +1,7 @@
1
+ <p><%%= t('janus.mailer.hello') %><p>
2
+
3
+ <p><%%= t('janus.mailer.confirmation_instructions.confirm') %></p>
4
+
5
+ <p><%%= link_to t('janus.mailer.confirmation_instructions.confirm_my_account'),
6
+ <%= singular_name %>_confirmation_url(@<%= class_name %>.confirmation_key => @<%= singular_name %>.confirmation_token) %></p>
7
+
@@ -0,0 +1,7 @@
1
+ <%%= t('janus.mailer.hello') %>
2
+
3
+ <%%= t('janus.mailer.confirmation_instructions.confirm') %>
4
+
5
+ <%%= link_to t('janus.mailer.confirmation_instructions.confirm_my_account'),
6
+ <%= singular_name %>_confirmation_url(@<%= class_name %>.confirmation_key => @<%= singular_name %>.confirmation_token) %>
7
+
@@ -0,0 +1,9 @@
1
+ <p><%%= t('janus.mailer.hello') %><p>
2
+
3
+ <p><%%= t('janus.mailer.reset_password_instructions.infos') %></p>
4
+
5
+ <p><%%= link_to t('janus.mailer.reset_password_instructions.change_password_link'),
6
+ edit_<%= singular_name %>_password_url(:token => @<%= singular_name %>.reset_password_token) %></p>
7
+
8
+ <p><%%= t('janus.mailer.reset_password_instructions.please_ignore_your_password_wont_change') %></p>
9
+
@@ -0,0 +1,7 @@
1
+ <%%= t('janus.mailer.hello') %>
2
+
3
+ <%%= t('janus.mailer.reset_password_instructions.infos') %>
4
+ <%%= edit_<%= singular_name %>_password_url(:token => @<%= singular_name %>.reset_password_token) %>
5
+
6
+ <%%= t('janus.mailer.reset_password_instructions.please_ignore_your_password_wont_change') %>
7
+
data/lib/janus.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'active_support/core_ext/class'
2
+ require 'janus/version'
2
3
  require 'janus/config'
3
4
  require 'janus/hooks'
4
5
  require 'janus/strategies'
@@ -25,12 +26,14 @@ module Janus
25
26
  autoload :RemoteAuthenticatable, 'janus/models/remote_authenticatable'
26
27
  autoload :RemoteToken, 'janus/models/remote_token'
27
28
  autoload :Trackable, 'janus/models/trackable'
29
+ autoload :TokenAuthenticatable, 'janus/models/token_authenticatable'
28
30
  end
29
31
 
30
32
  module Strategies
31
33
  autoload :Base, 'janus/strategies/base'
32
34
  autoload :Rememberable, 'janus/strategies/rememberable'
33
35
  autoload :RemoteAuthenticatable, 'janus/strategies/remote_authenticatable'
36
+ autoload :TokenAuthenticatable, 'janus/strategies/token_authenticatable'
34
37
  end
35
38
 
36
39
  def self.scope_for(user_or_scope)
data/lib/janus/config.rb CHANGED
@@ -9,7 +9,7 @@ module Janus
9
9
  self.authentication_keys = [ :email ]
10
10
 
11
11
  self.encryptor = :bcrypt
12
- # self.encryptor = :scrypt
12
+ #self.encryptor = :scrypt
13
13
 
14
14
  # bcrypt config
15
15
  self.stretches = 10
@@ -21,16 +21,22 @@ module Janus
21
21
  # Confirmable
22
22
  mattr_accessor :confirmation_key #,reconfirmable
23
23
  self.confirmation_key = :confirm_token
24
- # self.reconfirmable = true
24
+ #self.reconfirmable = true
25
25
 
26
26
  # Rememberable
27
27
  mattr_accessor :remember_for, :extend_remember_period #, :remember_across_browsers
28
28
  self.remember_for = 1.year
29
29
  self.extend_remember_period = false
30
- # self.remember_across_browsers = false
30
+ #self.remember_across_browsers = false
31
31
 
32
32
  # RemoteAuthenticatable
33
33
  mattr_accessor :remote_authentication_key
34
34
  self.remote_authentication_key = :remote_token
35
+
36
+ # TokenAuthenticatable
37
+ mattr_accessor :token_authentication_key, :token_authentication_valid_for, :reusable_authentication_token
38
+ self.token_authentication_key = :auth_token
39
+ self.token_authentication_valid_for = nil
40
+ self.reusable_authentication_token = true
35
41
  end
36
42
  end
@@ -37,7 +37,7 @@ class Janus::ConfirmationsController < ApplicationController
37
37
  self.resource = resource_class.find_for_database_authentication(params[resource_name])
38
38
 
39
39
  if resource
40
- JanusMailer.confirmation_instructions(resource).deliver
40
+ mailer_class.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') }
@@ -32,7 +32,8 @@ module Janus
32
32
  instance_variable_set(:"@#{janus_scope}", value)
33
33
  end
34
34
 
35
- # Returns the `User` class (or `Admin` or whatever) as detected by janus_scope.
35
+ # Returns the `User` class (or `Admin` or whatever) as detected by
36
+ # janus_scope.
36
37
  def resource_class
37
38
  @resource_class ||= janus_scope.camelize.constantize
38
39
  end
@@ -41,5 +42,11 @@ module Janus
41
42
  def resource_name
42
43
  janus_scope
43
44
  end
45
+
46
+ # Returns the `UserMailer` class (or `AdminMailer` or whatever) as detected
47
+ # by janus_scope.
48
+ def mailer_class
49
+ @mailer_class ||= (janus_scope.camelize + 'Mailer').constantize
50
+ end
44
51
  end
45
52
  end
@@ -15,7 +15,7 @@ class Janus::PasswordsController < ApplicationController
15
15
 
16
16
  if resource
17
17
  resource.generate_reset_password_token!
18
- JanusMailer.reset_password_instructions(resource).deliver
18
+ mailer_class.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') }
@@ -21,7 +21,7 @@ class Janus::RegistrationsController < ApplicationController
21
21
 
22
22
  if resource.save
23
23
  janus.login(resource, :scope => janus_scope, :rememberable => true)
24
- JanusMailer.confirmation_instructions(resource).deliver if resource.respond_to?(:confirm!)
24
+ mailer_class.confirmation_instructions(resource).deliver if resource.respond_to?(:confirm!)
25
25
  else
26
26
  resource.clean_up_passwords
27
27
  end
@@ -93,11 +93,12 @@ class Janus::SessionsController < ApplicationController
93
93
  #
94
94
  def never_return_to(scope)
95
95
  scope = Janus.scope_for(scope)
96
- [
97
- new_session_path(scope),
98
- new_password_path(scope),
99
- edit_password_path(scope)
100
- ]
96
+ list = [new_session_path(scope)]
97
+ begin
98
+ list + [ destroy_session_path(scope), new_password_path(scope), edit_password_path(scope) ]
99
+ rescue NoMethodError
100
+ list
101
+ end
101
102
  end
102
103
 
103
104
  # Either redirects the user to after_sign_in_url or to <tt>params[:return_to]</tt>.
@@ -10,6 +10,8 @@ module Janus
10
10
  extend ActiveSupport::Concern
11
11
 
12
12
  included do
13
+ include Janus::Models::Base unless include?(Janus::Models::Base)
14
+
13
15
  begin
14
16
  attr_protected :confirmation_token, :confirmation_sent_at, :confirmed_at
15
17
  rescue
@@ -1,11 +1,11 @@
1
1
  begin
2
2
  require 'bcrypt'
3
- rescue
3
+ rescue LoadError
4
4
  end
5
5
 
6
6
  begin
7
7
  require 'scrypt'
8
- rescue
8
+ rescue LoadError
9
9
  end
10
10
 
11
11
  module Janus
@@ -31,6 +31,8 @@ module Janus
31
31
  extend ActiveSupport::Concern
32
32
 
33
33
  included do
34
+ include Janus::Models::Base unless include?(Janus::Models::Base)
35
+
34
36
  begin
35
37
  attr_protected :encrypted_password, :reset_password_token, :reset_password_sent_at
36
38
  rescue