double_auth_engine 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/.gitignore +7 -0
- data/.rvmrc +1 -0
- data/Gemfile +9 -0
- data/Gemfile.lock +136 -0
- data/MIT-LICENSE +20 -0
- data/README.md +59 -0
- data/Rakefile +25 -0
- data/app/controllers/password_resets_controller.rb +3 -0
- data/app/controllers/user_sessions_controller.rb +3 -0
- data/app/controllers/users_controller.rb +3 -0
- data/app/mailers/notifier.rb +8 -0
- data/app/models/assignment.rb +3 -0
- data/app/models/role.rb +3 -0
- data/app/models/user.rb +3 -0
- data/app/models/user_session.rb +3 -0
- data/app/views/notifier/password_reset_instructions.text.erb +8 -0
- data/app/views/password_resets/edit.html.erb +5 -0
- data/app/views/password_resets/new.html.erb +5 -0
- data/app/views/user_sessions/new.html.erb +17 -0
- data/app/views/users/edit.html.erb +0 -0
- data/app/views/users/index.html.erb +0 -0
- data/app/views/users/new.html.erb +20 -0
- data/app/views/users/show.html.erb +2 -0
- data/config/routes.rb +11 -0
- data/double_auth_engine.gemspec +26 -0
- data/lib/double_auth_engine/controllers/application_controller_mixin.rb +42 -0
- data/lib/double_auth_engine/controllers/password_resets_controller_mixin.rb +49 -0
- data/lib/double_auth_engine/controllers/user_sessions_controller_mixin.rb +34 -0
- data/lib/double_auth_engine/controllers/users_controller_mixin.rb +63 -0
- data/lib/double_auth_engine/generators/double_auth_engine/install_generator.rb +48 -0
- data/lib/double_auth_engine/generators/double_auth_engine/templates/assignment_migration.rb +13 -0
- data/lib/double_auth_engine/generators/double_auth_engine/templates/authorization_rules.rb +19 -0
- data/lib/double_auth_engine/generators/double_auth_engine/templates/role_migration.rb +12 -0
- data/lib/double_auth_engine/generators/double_auth_engine/templates/setup_mail_initializer.rb +7 -0
- data/lib/double_auth_engine/generators/double_auth_engine/templates/user_migration.rb +28 -0
- data/lib/double_auth_engine/models/assignment_mixin.rb +10 -0
- data/lib/double_auth_engine/models/role_mixin.rb +10 -0
- data/lib/double_auth_engine/models/user_mixin.rb +38 -0
- data/lib/double_auth_engine/models/user_session_mixin.rb +15 -0
- data/lib/double_auth_engine/tasks/migrate_seed.rake +9 -0
- data/lib/double_auth_engine/version.rb +3 -0
- data/lib/double_auth_engine.rb +15 -0
- data/lib/engine.rb +23 -0
- data/spec/double_auth_engine_spec.rb +7 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/controllers/application_controller.rb +4 -0
- data/spec/dummy/app/controllers/dashboard_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/dashboard/index.html.erb +0 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config/application.rb +48 -0
- data/spec/dummy/config/authorization_rules.rb +20 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +22 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +29 -0
- data/spec/dummy/config/environments/production.rb +52 -0
- data/spec/dummy/config/environments/test.rb +35 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +10 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/setup_mail.rb +9 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +3 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/migrate/20110408030355_create_users.rb +28 -0
- data/spec/dummy/db/migrate/20110408030356_create_roles.rb +12 -0
- data/spec/dummy/db/migrate/20110408030357_create_assignments.rb +13 -0
- data/spec/dummy/db/schema.rb +51 -0
- data/spec/dummy/db/seeds.rb +3 -0
- data/spec/dummy/lib/development_mail_interceptor.rb +6 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +26 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/javascripts/application.js +2 -0
- data/spec/dummy/public/javascripts/controls.js +965 -0
- data/spec/dummy/public/javascripts/dragdrop.js +974 -0
- data/spec/dummy/public/javascripts/effects.js +1123 -0
- data/spec/dummy/public/javascripts/prototype.js +6001 -0
- data/spec/dummy/public/javascripts/rails.js +175 -0
- data/spec/dummy/public/stylesheets/.gitkeep +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/dummy/spec/authorizations/user_spec.rb +104 -0
- data/spec/dummy/spec/controllers/user_sessions_controller_spec.rb +48 -0
- data/spec/dummy/spec/controllers/users_controller_spec.rb +125 -0
- data/spec/dummy/spec/models/user_spec.rb +65 -0
- data/spec/integration/navigation_spec.rb +9 -0
- data/spec/spec_helper.rb +42 -0
- data/spec/support/user_authentication.rb +14 -0
- data/spec/support/user_authorization.rb +17 -0
- metadata +218 -0
data/.gitignore
ADDED
data/.rvmrc
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
rvm use 1.9.2@double_auth_engine --create
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
GIT
|
|
2
|
+
remote: git://github.com/jeremydurham/authlogic.git
|
|
3
|
+
revision: 8fc34e1d58ea52e5439e7001eacb6d383f2bf0a0
|
|
4
|
+
specs:
|
|
5
|
+
authlogic (2.1.6)
|
|
6
|
+
activesupport
|
|
7
|
+
|
|
8
|
+
PATH
|
|
9
|
+
remote: .
|
|
10
|
+
specs:
|
|
11
|
+
double_auth_engine (0.0.1)
|
|
12
|
+
authlogic
|
|
13
|
+
declarative_authorization
|
|
14
|
+
|
|
15
|
+
GEM
|
|
16
|
+
remote: http://rubygems.org/
|
|
17
|
+
specs:
|
|
18
|
+
abstract (1.0.0)
|
|
19
|
+
actionmailer (3.0.5)
|
|
20
|
+
actionpack (= 3.0.5)
|
|
21
|
+
mail (~> 2.2.15)
|
|
22
|
+
actionpack (3.0.5)
|
|
23
|
+
activemodel (= 3.0.5)
|
|
24
|
+
activesupport (= 3.0.5)
|
|
25
|
+
builder (~> 2.1.2)
|
|
26
|
+
erubis (~> 2.6.6)
|
|
27
|
+
i18n (~> 0.4)
|
|
28
|
+
rack (~> 1.2.1)
|
|
29
|
+
rack-mount (~> 0.6.13)
|
|
30
|
+
rack-test (~> 0.5.7)
|
|
31
|
+
tzinfo (~> 0.3.23)
|
|
32
|
+
activemodel (3.0.5)
|
|
33
|
+
activesupport (= 3.0.5)
|
|
34
|
+
builder (~> 2.1.2)
|
|
35
|
+
i18n (~> 0.4)
|
|
36
|
+
activerecord (3.0.5)
|
|
37
|
+
activemodel (= 3.0.5)
|
|
38
|
+
activesupport (= 3.0.5)
|
|
39
|
+
arel (~> 2.0.2)
|
|
40
|
+
tzinfo (~> 0.3.23)
|
|
41
|
+
activeresource (3.0.5)
|
|
42
|
+
activemodel (= 3.0.5)
|
|
43
|
+
activesupport (= 3.0.5)
|
|
44
|
+
activesupport (3.0.5)
|
|
45
|
+
arel (2.0.9)
|
|
46
|
+
builder (2.1.2)
|
|
47
|
+
capybara (0.4.1.2)
|
|
48
|
+
celerity (>= 0.7.9)
|
|
49
|
+
culerity (>= 0.2.4)
|
|
50
|
+
mime-types (>= 1.16)
|
|
51
|
+
nokogiri (>= 1.3.3)
|
|
52
|
+
rack (>= 1.0.0)
|
|
53
|
+
rack-test (>= 0.5.4)
|
|
54
|
+
selenium-webdriver (>= 0.0.27)
|
|
55
|
+
xpath (~> 0.1.3)
|
|
56
|
+
celerity (0.8.9)
|
|
57
|
+
childprocess (0.1.8)
|
|
58
|
+
ffi (~> 1.0.6)
|
|
59
|
+
culerity (0.2.15)
|
|
60
|
+
declarative_authorization (0.5.2)
|
|
61
|
+
diff-lcs (1.1.2)
|
|
62
|
+
erubis (2.6.6)
|
|
63
|
+
abstract (>= 1.0.0)
|
|
64
|
+
ffaker (1.5.0)
|
|
65
|
+
ffi (1.0.7)
|
|
66
|
+
rake (>= 0.8.7)
|
|
67
|
+
i18n (0.5.0)
|
|
68
|
+
json_pure (1.5.1)
|
|
69
|
+
mail (2.2.15)
|
|
70
|
+
activesupport (>= 2.3.6)
|
|
71
|
+
i18n (>= 0.4.0)
|
|
72
|
+
mime-types (~> 1.16)
|
|
73
|
+
treetop (~> 1.4.8)
|
|
74
|
+
mime-types (1.16)
|
|
75
|
+
nokogiri (1.4.4)
|
|
76
|
+
polyglot (0.3.1)
|
|
77
|
+
rack (1.2.2)
|
|
78
|
+
rack-mount (0.6.14)
|
|
79
|
+
rack (>= 1.0.0)
|
|
80
|
+
rack-test (0.5.7)
|
|
81
|
+
rack (>= 1.0)
|
|
82
|
+
rails (3.0.5)
|
|
83
|
+
actionmailer (= 3.0.5)
|
|
84
|
+
actionpack (= 3.0.5)
|
|
85
|
+
activerecord (= 3.0.5)
|
|
86
|
+
activeresource (= 3.0.5)
|
|
87
|
+
activesupport (= 3.0.5)
|
|
88
|
+
bundler (~> 1.0)
|
|
89
|
+
railties (= 3.0.5)
|
|
90
|
+
railties (3.0.5)
|
|
91
|
+
actionpack (= 3.0.5)
|
|
92
|
+
activesupport (= 3.0.5)
|
|
93
|
+
rake (>= 0.8.7)
|
|
94
|
+
thor (~> 0.14.4)
|
|
95
|
+
rake (0.8.7)
|
|
96
|
+
rspec (2.5.0)
|
|
97
|
+
rspec-core (~> 2.5.0)
|
|
98
|
+
rspec-expectations (~> 2.5.0)
|
|
99
|
+
rspec-mocks (~> 2.5.0)
|
|
100
|
+
rspec-core (2.5.1)
|
|
101
|
+
rspec-expectations (2.5.0)
|
|
102
|
+
diff-lcs (~> 1.1.2)
|
|
103
|
+
rspec-mocks (2.5.0)
|
|
104
|
+
rspec-rails (2.5.0)
|
|
105
|
+
actionpack (~> 3.0)
|
|
106
|
+
activesupport (~> 3.0)
|
|
107
|
+
railties (~> 3.0)
|
|
108
|
+
rspec (~> 2.5.0)
|
|
109
|
+
rubyzip (0.9.4)
|
|
110
|
+
selenium-webdriver (0.1.4)
|
|
111
|
+
childprocess (>= 0.1.7)
|
|
112
|
+
ffi (>= 1.0.7)
|
|
113
|
+
json_pure
|
|
114
|
+
rubyzip
|
|
115
|
+
sqlite3 (1.3.3)
|
|
116
|
+
sqlite3-ruby (1.3.3)
|
|
117
|
+
sqlite3 (>= 1.3.3)
|
|
118
|
+
thor (0.14.6)
|
|
119
|
+
treetop (1.4.9)
|
|
120
|
+
polyglot (>= 0.3.1)
|
|
121
|
+
tzinfo (0.3.25)
|
|
122
|
+
xpath (0.1.3)
|
|
123
|
+
nokogiri (~> 1.3)
|
|
124
|
+
|
|
125
|
+
PLATFORMS
|
|
126
|
+
ruby
|
|
127
|
+
|
|
128
|
+
DEPENDENCIES
|
|
129
|
+
authlogic (= 2.1.6)!
|
|
130
|
+
capybara (>= 0.4.0)
|
|
131
|
+
double_auth_engine!
|
|
132
|
+
ffaker
|
|
133
|
+
mail
|
|
134
|
+
rails (= 3.0.5)
|
|
135
|
+
rspec-rails
|
|
136
|
+
sqlite3-ruby
|
data/MIT-LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright 2011 YOURNAME
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Double Auth Engine
|
|
2
|
+
[Authlogic](https://github.com/binarylogic/authlogic) and [Declarative Authorization](https://github.com/stffn/declarative_authorization) together in one fantastic Rails engine. Bladow!
|
|
3
|
+
|
|
4
|
+
## Usage
|
|
5
|
+
1. Add double_auth_engine to Gemfile
|
|
6
|
+
|
|
7
|
+
gem "double_auth_engine"
|
|
8
|
+
|
|
9
|
+
2. Rebundle
|
|
10
|
+
|
|
11
|
+
bundle install
|
|
12
|
+
|
|
13
|
+
3. Run the DoubleAuthEngine install generator
|
|
14
|
+
|
|
15
|
+
rails g double_auth_engine:install
|
|
16
|
+
|
|
17
|
+
4. Migrate your DB and seed it with default seeds (:user and :admin)
|
|
18
|
+
|
|
19
|
+
rake db:migrate:seed
|
|
20
|
+
|
|
21
|
+
6. Update "default@dummy.com" within setup_mail.rb to the default address for your application. This address is used for the engine's password reset mailer.
|
|
22
|
+
|
|
23
|
+
class ActionMailer::Base
|
|
24
|
+
def from_with_default(input=nil)
|
|
25
|
+
return from_without_default(input) || "default@dummy.com" if input.nil?
|
|
26
|
+
from_without_default(input)
|
|
27
|
+
end
|
|
28
|
+
alias_method_chain :from, :default
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
5. Start app
|
|
32
|
+
|
|
33
|
+
rails s
|
|
34
|
+
|
|
35
|
+
## Readme Driven Development
|
|
36
|
+
|
|
37
|
+
A <del>strike</del> means its done!
|
|
38
|
+
|
|
39
|
+
* <del>Add Authlogic</del>
|
|
40
|
+
* <del>Add Password Reset</del>
|
|
41
|
+
* <del>Update generator with ActionMailer monkey patch</del>
|
|
42
|
+
* <del>Update install generator to add include to ApplicationController</del>
|
|
43
|
+
* <del>Update README for mailer settings</del>
|
|
44
|
+
* <del>Authlogic specs</del>
|
|
45
|
+
* <del>Add Declarative Authorization</del>
|
|
46
|
+
* <del>Declarative Authorization specs</del>
|
|
47
|
+
* Mailer specs
|
|
48
|
+
* Style views
|
|
49
|
+
|
|
50
|
+
## Versioning
|
|
51
|
+
<strong>Version 0.0.1 </strong> - This project uses [Semantic Versioning](http://semver.org/)
|
|
52
|
+
|
|
53
|
+
## Contributors
|
|
54
|
+
All contributions are welcome. Fork repo, make changes, add specs, ensure all specs pass, send a pull request.
|
|
55
|
+
|
|
56
|
+
* [Kyle Bolton](https://github.com/kb) - Creator
|
|
57
|
+
* [Jeremy Durham](https://github.com/jeremydurham)
|
|
58
|
+
|
|
59
|
+
Copyright (c) 2011 Kyle Bolton, released under the MIT license
|
data/Rakefile
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
require 'rubygems'
|
|
3
|
+
begin
|
|
4
|
+
require 'bundler/setup'
|
|
5
|
+
rescue LoadError
|
|
6
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
require 'rake'
|
|
10
|
+
require 'rake/rdoctask'
|
|
11
|
+
|
|
12
|
+
require 'rspec/core'
|
|
13
|
+
require 'rspec/core/rake_task'
|
|
14
|
+
|
|
15
|
+
RSpec::Core::RakeTask.new(:spec)
|
|
16
|
+
|
|
17
|
+
task :default => :spec
|
|
18
|
+
|
|
19
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
|
20
|
+
rdoc.rdoc_dir = 'rdoc'
|
|
21
|
+
rdoc.title = 'DoubleAuthEngine'
|
|
22
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
|
23
|
+
rdoc.rdoc_files.include('README.rdoc')
|
|
24
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
25
|
+
end
|
data/app/models/role.rb
ADDED
data/app/models/user.rb
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
A request to reset your password has been made.
|
|
2
|
+
If you did not make this request, simply ignore this email.
|
|
3
|
+
If you did make this request just click the link below:
|
|
4
|
+
|
|
5
|
+
<%= @edit_password_reset_url %>
|
|
6
|
+
|
|
7
|
+
If the above URL does not work try copying and pasting it into your browser.
|
|
8
|
+
If you continue to have problem please feel free to contact us.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>Login</title>
|
|
5
|
+
<%= csrf_meta_tag %>
|
|
6
|
+
</head>
|
|
7
|
+
<body>
|
|
8
|
+
<%= form_for @user_session do |f| %>
|
|
9
|
+
<%= f.label :email, "Email" %>
|
|
10
|
+
<%= f.text_field :email %>
|
|
11
|
+
<%= f.label :password, "Password" %>
|
|
12
|
+
<%= f.password_field :password %>
|
|
13
|
+
<%= link_to 'Forgot Password?', forgot_password_path %>
|
|
14
|
+
<%= f.submit "Login" %>
|
|
15
|
+
<% end %>
|
|
16
|
+
</body>
|
|
17
|
+
</html>
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>New User</title>
|
|
5
|
+
<%= csrf_meta_tag %>
|
|
6
|
+
</head>
|
|
7
|
+
<body>
|
|
8
|
+
<%= form_for @user do |f| %>
|
|
9
|
+
<%= f.label :name, "Name" %>
|
|
10
|
+
<%= f.text_field :name %>
|
|
11
|
+
<%= f.label :email, "Email" %>
|
|
12
|
+
<%= f.text_field :email %>
|
|
13
|
+
<%= f.label :password, "Password" %>
|
|
14
|
+
<%= f.password_field :password %>
|
|
15
|
+
<%= f.label :password_confirmation, "Re-enter password" %>
|
|
16
|
+
<%= f.password_field :password_confirmation %>
|
|
17
|
+
<%= f.submit %>
|
|
18
|
+
<% end %>
|
|
19
|
+
</body>
|
|
20
|
+
</html>
|
data/config/routes.rb
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Rails.application.routes.draw do
|
|
2
|
+
match 'signup', :to => 'users#new'
|
|
3
|
+
match 'login', :to => 'user_sessions#new'
|
|
4
|
+
match 'logout', :to => 'user_sessions#destroy'
|
|
5
|
+
|
|
6
|
+
resources :users
|
|
7
|
+
resources :user_sessions
|
|
8
|
+
|
|
9
|
+
match '/forgot_password', :controller => 'password_resets', :action => 'new'
|
|
10
|
+
resources :password_resets
|
|
11
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
lib = File.expand_path('../lib/', __FILE__)
|
|
3
|
+
$:.unshift lib unless $:.include?(lib)
|
|
4
|
+
|
|
5
|
+
require "double_auth_engine/version"
|
|
6
|
+
|
|
7
|
+
Gem::Specification.new do |s|
|
|
8
|
+
s.name = "double_auth_engine"
|
|
9
|
+
s.version = DoubleAuthEngine::VERSION
|
|
10
|
+
s.platform = Gem::Platform::RUBY
|
|
11
|
+
s.authors = ["Kyle Bolton"]
|
|
12
|
+
s.email = "kyle.bolton@gmail.com'"
|
|
13
|
+
s.homepage = "https://github.com/kb/double_auth_engine"
|
|
14
|
+
s.license = "MIT"
|
|
15
|
+
s.summary = "Authlogic and Declarative Authorization Engine"
|
|
16
|
+
s.description = "Authlogic and Declarative Authorization Engine for Rails 3"
|
|
17
|
+
|
|
18
|
+
s.required_rubygems_version = ">= 1.3.6"
|
|
19
|
+
|
|
20
|
+
s.add_dependency("kb-authlogic")
|
|
21
|
+
s.add_dependency("declarative_authorization")
|
|
22
|
+
|
|
23
|
+
s.files = `git ls-files`.split("\n")
|
|
24
|
+
s.test_files = `git ls-files spec/*`.split("\n")
|
|
25
|
+
s.require_paths = ["lib"]
|
|
26
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module DoubleAuthEngine
|
|
2
|
+
module ApplicationControllerMixin
|
|
3
|
+
def self.included(base)
|
|
4
|
+
base.class_eval do
|
|
5
|
+
before_filter :require_user
|
|
6
|
+
helper_method :current_user_session, :current_user
|
|
7
|
+
end
|
|
8
|
+
base.send :include, InstanceMethods
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
module InstanceMethods
|
|
12
|
+
protected
|
|
13
|
+
def current_user_session
|
|
14
|
+
return @current_user_session if defined?(@current_user_session)
|
|
15
|
+
@current_user_session = UserSession.find
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def current_user
|
|
19
|
+
return @current_user if defined?(@current_user)
|
|
20
|
+
@current_user = current_user_session && current_user_session.record
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def require_user
|
|
24
|
+
unless current_user
|
|
25
|
+
store_location
|
|
26
|
+
flash[:notice] = "You must be logged in to access this page" unless request.fullpath == root_path
|
|
27
|
+
redirect_to login_url
|
|
28
|
+
false
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def store_location
|
|
33
|
+
session[:return_to] = request.fullpath
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def redirect_back_or_default(default)
|
|
37
|
+
redirect_to(session[:return_to] || default)
|
|
38
|
+
session[:return_to] = nil
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
module DoubleAuthEngine
|
|
2
|
+
module PasswordResetsControllerMixin
|
|
3
|
+
def self.included(base)
|
|
4
|
+
base.class_eval do
|
|
5
|
+
skip_before_filter :require_user
|
|
6
|
+
before_filter :load_user_using_perishable_token, :only => [:edit, :update]
|
|
7
|
+
end
|
|
8
|
+
base.send :include, InstanceMethods
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
module InstanceMethods
|
|
12
|
+
def new
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def create
|
|
16
|
+
@user = User.find_by_email(params[:email])
|
|
17
|
+
if @user
|
|
18
|
+
@user.deliver_password_reset_instructions!
|
|
19
|
+
redirect_to root_url, :notice => 'Instructions to reset your password have been emailed to you. Please check your email.'
|
|
20
|
+
else
|
|
21
|
+
redirect_to new_password_reset_url, :notice => 'No user was found with that email address'
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def edit
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def update
|
|
29
|
+
@user.password = params[:password]
|
|
30
|
+
@user.password_confirmation = params[:password]
|
|
31
|
+
if @user.save
|
|
32
|
+
flash[:success] = "Your password was successfully updated"
|
|
33
|
+
redirect_to root_url
|
|
34
|
+
else
|
|
35
|
+
render :action => :edit
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
def load_user_using_perishable_token
|
|
41
|
+
@user = User.find_using_perishable_token(params[:id])
|
|
42
|
+
unless @user
|
|
43
|
+
flash[:error] = "We're sorry, but we could not locate your account"
|
|
44
|
+
redirect_to root_url
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module DoubleAuthEngine
|
|
2
|
+
module UserSessionsControllerMixin
|
|
3
|
+
def self.included(base)
|
|
4
|
+
base.class_eval do
|
|
5
|
+
skip_before_filter :require_user, :only => [:new, :create]
|
|
6
|
+
respond_to :html, :json, :js
|
|
7
|
+
end
|
|
8
|
+
base.send :include, InstanceMethods
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
module InstanceMethods
|
|
12
|
+
def new
|
|
13
|
+
@user_session = UserSession.new
|
|
14
|
+
render :layout => false
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def create
|
|
18
|
+
@user_session = UserSession.new(params[:user_session])
|
|
19
|
+
if @user_session.save
|
|
20
|
+
redirect_to root_url
|
|
21
|
+
else
|
|
22
|
+
render :action => 'new'
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def destroy
|
|
27
|
+
@user_session = UserSession.find(params[:id])
|
|
28
|
+
@user_session.destroy
|
|
29
|
+
flash[:notice] = 'Successfully logged out'
|
|
30
|
+
redirect_to root_url
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
module DoubleAuthEngine
|
|
2
|
+
module UsersControllerMixin
|
|
3
|
+
def self.included(base)
|
|
4
|
+
base.class_eval do
|
|
5
|
+
skip_before_filter :require_user, :only => [:new, :create]
|
|
6
|
+
filter_access_to [:edit, :update], :attribute_check => true
|
|
7
|
+
respond_to :html, :json, :js
|
|
8
|
+
end
|
|
9
|
+
base.send :include, InstanceMethods
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
module InstanceMethods
|
|
13
|
+
def index
|
|
14
|
+
@users = User.all
|
|
15
|
+
respond_with(@users)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def show
|
|
19
|
+
@user = User.find(params[:id])
|
|
20
|
+
respond_with @user
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def new
|
|
24
|
+
@user = User.new
|
|
25
|
+
respond_with @user
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def create
|
|
29
|
+
@user = User.new(params[:user])
|
|
30
|
+
if @user.save
|
|
31
|
+
flash[:notice] = 'User successfully created'
|
|
32
|
+
respond_with(@user)
|
|
33
|
+
else
|
|
34
|
+
render :action => 'new'
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def edit
|
|
39
|
+
@user = User.find(params[:id])
|
|
40
|
+
respond_with(@user)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def update
|
|
44
|
+
@user = User.find(params[:id])
|
|
45
|
+
if @user.update_attributes(params[:user])
|
|
46
|
+
flash[:notice] = 'User successfully updated'
|
|
47
|
+
respond_with(@user)
|
|
48
|
+
else
|
|
49
|
+
render :action => 'edit'
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def destroy
|
|
54
|
+
@user = User.find(params[:id])
|
|
55
|
+
@user.destroy
|
|
56
|
+
respond_to do |format|
|
|
57
|
+
format.html { redirect_to(users_url) }
|
|
58
|
+
format.xml { head :ok }
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require 'rails/generators'
|
|
2
|
+
|
|
3
|
+
module DoubleAuthEngine
|
|
4
|
+
class InstallGenerator < Rails::Generators::Base
|
|
5
|
+
include Rails::Generators::Migration
|
|
6
|
+
|
|
7
|
+
def self.source_root
|
|
8
|
+
@source_root ||= File.join(File.dirname(__FILE__), 'templates')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.next_migration_number(path)
|
|
12
|
+
unless @prev_migration_nr
|
|
13
|
+
@prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
|
|
14
|
+
else
|
|
15
|
+
@prev_migration_nr += 1
|
|
16
|
+
end
|
|
17
|
+
@prev_migration_nr.to_s
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def create_migration_files
|
|
21
|
+
migration_template "user_migration.rb", "db/migrate/create_users.rb"
|
|
22
|
+
migration_template "role_migration.rb", "db/migrate/create_roles.rb"
|
|
23
|
+
migration_template "assignment_migration.rb", "db/migrate/create_assignments.rb"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def create_initializer_file
|
|
27
|
+
copy_file "setup_mail_initializer.rb", "config/initializers/setup_mail.rb"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def create_authorization_file
|
|
31
|
+
copy_file "authorization_rules.rb", "config/authorization_rules.rb"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def update_application_controller
|
|
35
|
+
insert_into_file "app/controllers/application_controller.rb", :after => "class ApplicationController < ActionController::Base\n" do
|
|
36
|
+
"\tinclude DoubleAuthEngine::ApplicationControllerMixin\n"
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Passing a block to append_to_file would not format nicely,
|
|
41
|
+
# which is why I opted for separate append statements. Don't judge.
|
|
42
|
+
def add_roles
|
|
43
|
+
append_to_file "db/seeds.rb", "if Role.all.empty?\n"
|
|
44
|
+
append_to_file "db/seeds.rb", "\tRole.create(:name => 'admin')\n"
|
|
45
|
+
append_to_file "db/seeds.rb", "end\n"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|