janus 0.7.0 → 0.8.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 (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