safeguard-devise 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.vagrant/machines/default/virtualbox/action_provision +1 -0
- data/.vagrant/machines/default/virtualbox/action_set_name +1 -0
- data/.vagrant/machines/default/virtualbox/id +1 -0
- data/Gemfile +25 -0
- data/Gemfile.lock +186 -0
- data/Rakefile +51 -0
- data/VERSION +1 -0
- data/Vagrantfile +128 -0
- data/app/controllers/devise/devise_safeguard_controller.rb +56 -0
- data/app/views/devise/verify_safeguard.html.erb +9 -0
- data/app/views/devise/verify_safeguard.html.haml +7 -0
- data/config/locales/pt-BR.yml +5 -0
- data/lib/devise-safeguard/controllers/helpers.rb +54 -0
- data/lib/devise-safeguard/hooks/safeguard_authenticatable.rb +7 -0
- data/lib/devise-safeguard/models/safeguard_authenticatable.rb +18 -0
- data/lib/devise-safeguard/rails.rb +7 -0
- data/lib/devise-safeguard/routes.rb +17 -0
- data/lib/generators/active_record/devise_safeguard_generator.rb +13 -0
- data/lib/generators/active_record/templates/migration.rb +15 -0
- data/lib/generators/devise_safeguard/devise_safeguard_generator.rb +30 -0
- data/lib/generators/devise_safeguard/install_generator.rb +44 -0
- data/lib/safeguard-devise.rb +24 -0
- data/puppet/manifests/default.pp +66 -0
- data/puppet/modules/elasticsearch/CHANGELOG +62 -0
- data/puppet/modules/elasticsearch/CONTRIBUTORS +20 -0
- data/puppet/modules/elasticsearch/LICENSE +13 -0
- data/puppet/modules/elasticsearch/Modulefile +9 -0
- data/puppet/modules/elasticsearch/README.md +147 -0
- data/puppet/modules/elasticsearch/Rakefile +5 -0
- data/puppet/modules/elasticsearch/manifests/config.pp +64 -0
- data/puppet/modules/elasticsearch/manifests/init.pp +208 -0
- data/puppet/modules/elasticsearch/manifests/java.pp +50 -0
- data/puppet/modules/elasticsearch/manifests/package.pp +84 -0
- data/puppet/modules/elasticsearch/manifests/params.pp +103 -0
- data/puppet/modules/elasticsearch/manifests/plugin.pp +97 -0
- data/puppet/modules/elasticsearch/manifests/python.pp +34 -0
- data/puppet/modules/elasticsearch/manifests/service.pp +114 -0
- data/puppet/modules/elasticsearch/manifests/template.pp +118 -0
- data/puppet/modules/elasticsearch/metadata.json +41 -0
- data/puppet/modules/elasticsearch/spec/classes/elasticsearch_init_spec.rb +596 -0
- data/puppet/modules/elasticsearch/spec/defines/template_spec.rb +66 -0
- data/puppet/modules/elasticsearch/spec/spec_helper.rb +2 -0
- data/puppet/modules/elasticsearch/templates/etc/default/elasticsearch.erb +5 -0
- data/puppet/modules/elasticsearch/templates/etc/elasticsearch/elasticsearch.yml.erb +93 -0
- data/puppet/modules/memcached/.gitignore +2 -0
- data/puppet/modules/memcached/Modulefile +8 -0
- data/puppet/modules/memcached/README.md +29 -0
- data/puppet/modules/memcached/manifests/init.pp +33 -0
- data/puppet/modules/memcached/manifests/params.pp +21 -0
- data/puppet/modules/memcached/templates/memcached.conf.erb +46 -0
- data/puppet/modules/memcached/templates/memcached_sysconfig.erb +5 -0
- data/puppet/modules/mysql/.fixtures.yml +3 -0
- data/puppet/modules/mysql/.gemfile +5 -0
- data/puppet/modules/mysql/LICENSE +201 -0
- data/puppet/modules/mysql/Modulefile +8 -0
- data/puppet/modules/mysql/README.md +124 -0
- data/puppet/modules/mysql/files/mysqltuner.pl +966 -0
- data/puppet/modules/mysql/lib/puppet/parser/functions/mysql_password.rb +15 -0
- data/puppet/modules/mysql/lib/puppet/provider/database/mysql.rb +42 -0
- data/puppet/modules/mysql/lib/puppet/provider/database_grant/mysql.rb +177 -0
- data/puppet/modules/mysql/lib/puppet/provider/database_user/mysql.rb +42 -0
- data/puppet/modules/mysql/lib/puppet/type/database.rb +17 -0
- data/puppet/modules/mysql/lib/puppet/type/database_grant.rb +75 -0
- data/puppet/modules/mysql/lib/puppet/type/database_user.rb +25 -0
- data/puppet/modules/mysql/manifests/backup.pp +68 -0
- data/puppet/modules/mysql/manifests/config.pp +122 -0
- data/puppet/modules/mysql/manifests/db.pp +77 -0
- data/puppet/modules/mysql/manifests/init.pp +24 -0
- data/puppet/modules/mysql/manifests/java.pp +24 -0
- data/puppet/modules/mysql/manifests/params.pp +91 -0
- data/puppet/modules/mysql/manifests/python.pp +26 -0
- data/puppet/modules/mysql/manifests/ruby.pp +28 -0
- data/puppet/modules/mysql/manifests/server/account_security.pp +13 -0
- data/puppet/modules/mysql/manifests/server/monitor.pp +19 -0
- data/puppet/modules/mysql/manifests/server/mysqltuner.pp +22 -0
- data/puppet/modules/mysql/manifests/server.pp +52 -0
- data/puppet/modules/mysql/templates/my.cnf.erb +42 -0
- data/puppet/modules/mysql/templates/my.cnf.pass.erb +6 -0
- data/puppet/modules/mysql/templates/mysqlbackup.sh.erb +23 -0
- data/puppet/modules/postgresql/GPL-3 +674 -0
- data/puppet/modules/postgresql/Modulefile +13 -0
- data/puppet/modules/postgresql/README.md +156 -0
- data/puppet/modules/postgresql/lib/puppet/provider/pg_database/debian_postgresql.rb +30 -0
- data/puppet/modules/postgresql/lib/puppet/provider/pg_database/default.rb +17 -0
- data/puppet/modules/postgresql/lib/puppet/provider/pg_user/debian_postgresql.rb +63 -0
- data/puppet/modules/postgresql/lib/puppet/provider/pg_user/default.rb +17 -0
- data/puppet/modules/postgresql/lib/puppet/type/pg_database.rb +29 -0
- data/puppet/modules/postgresql/lib/puppet/type/pg_user.rb +45 -0
- data/puppet/modules/postgresql/manifests/db.pp +20 -0
- data/puppet/modules/postgresql/manifests/init.pp +12 -0
- data/puppet/modules/postgresql/manifests/params.pp +15 -0
- data/puppet/modules/postgresql/manifests/server.pp +47 -0
- data/puppet/modules/postgresql/templates/pg_hba.conf.erb +105 -0
- data/puppet/modules/postgresql/templates/postgresql.conf.erb +559 -0
- data/puppet/modules/redis/CHANGELOG +41 -0
- data/puppet/modules/redis/Gemfile +7 -0
- data/puppet/modules/redis/Gemfile.lock +18 -0
- data/puppet/modules/redis/Modulefile +10 -0
- data/puppet/modules/redis/README.md +34 -0
- data/puppet/modules/redis/Rakefile +6 -0
- data/puppet/modules/redis/manifests/init.pp +153 -0
- data/puppet/modules/redis/manifests/params.pp +39 -0
- data/puppet/modules/redis/metadata.json +31 -0
- data/puppet/modules/redis/spec/spec_helper.rb +17 -0
- data/puppet/modules/redis/templates/redis.debian.conf.erb +217 -0
- data/puppet/modules/redis/templates/redis.logrotate.erb +9 -0
- data/puppet/modules/redis/templates/redis.rhel.conf.erb +547 -0
- data/puppet/modules/redis/tests/init.pp +8 -0
- data/puppet/upgrade-puppet.sh +16 -0
- data/safeguard-devise.gemspec +249 -0
- data/spec/controllers/safeguard_devise_controller_spec.rb +67 -0
- data/spec/devise/safeguard_authenticatable_spec.rb +71 -0
- data/spec/orm/active_record.rb +4 -0
- data/spec/routing/routes_spec.rb +13 -0
- data/spec/safeguard-devise-test-app/.gitignore +16 -0
- data/spec/safeguard-devise-test-app/Gemfile +14 -0
- data/spec/safeguard-devise-test-app/Gemfile.lock +119 -0
- data/spec/safeguard-devise-test-app/README.rdoc +28 -0
- data/spec/safeguard-devise-test-app/Rakefile +6 -0
- data/spec/safeguard-devise-test-app/app/assets/images/.keep +0 -0
- data/spec/safeguard-devise-test-app/app/assets/javascripts/application.js +13 -0
- data/spec/safeguard-devise-test-app/app/assets/stylesheets/application.css +13 -0
- data/spec/safeguard-devise-test-app/app/controllers/application_controller.rb +5 -0
- data/spec/safeguard-devise-test-app/app/controllers/concerns/.keep +0 -0
- data/spec/safeguard-devise-test-app/app/controllers/home_controller.rb +6 -0
- data/spec/safeguard-devise-test-app/app/helpers/application_helper.rb +2 -0
- data/spec/safeguard-devise-test-app/app/mailers/.keep +0 -0
- data/spec/safeguard-devise-test-app/app/models/.keep +0 -0
- data/spec/safeguard-devise-test-app/app/models/concerns/.keep +0 -0
- data/spec/safeguard-devise-test-app/app/models/user.rb +6 -0
- data/spec/safeguard-devise-test-app/app/views/devise/devise_safeguard/verify_safeguard.html.erb +9 -0
- data/spec/safeguard-devise-test-app/app/views/devise/devise_safeguard/verify_safeguard.html.haml +6 -0
- data/spec/safeguard-devise-test-app/app/views/home/index.html.erb +1 -0
- data/spec/safeguard-devise-test-app/app/views/layouts/application.html.erb +14 -0
- data/spec/safeguard-devise-test-app/bin/bundle +3 -0
- data/spec/safeguard-devise-test-app/bin/rails +4 -0
- data/spec/safeguard-devise-test-app/bin/rake +4 -0
- data/spec/safeguard-devise-test-app/config/application.rb +31 -0
- data/spec/safeguard-devise-test-app/config/boot.rb +4 -0
- data/spec/safeguard-devise-test-app/config/database.yml +25 -0
- data/spec/safeguard-devise-test-app/config/environment.rb +5 -0
- data/spec/safeguard-devise-test-app/config/environments/development.rb +29 -0
- data/spec/safeguard-devise-test-app/config/environments/production.rb +80 -0
- data/spec/safeguard-devise-test-app/config/environments/test.rb +36 -0
- data/spec/safeguard-devise-test-app/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/safeguard-devise-test-app/config/initializers/devise.rb +259 -0
- data/spec/safeguard-devise-test-app/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/safeguard-devise-test-app/config/initializers/inflections.rb +16 -0
- data/spec/safeguard-devise-test-app/config/initializers/mime_types.rb +5 -0
- data/spec/safeguard-devise-test-app/config/initializers/secret_token.rb +12 -0
- data/spec/safeguard-devise-test-app/config/initializers/session_store.rb +3 -0
- data/spec/safeguard-devise-test-app/config/initializers/wrap_parameters.rb +14 -0
- data/spec/safeguard-devise-test-app/config/locales/devise.en.yml +59 -0
- data/spec/safeguard-devise-test-app/config/locales/devise.safeguard.pt-BR.yml +5 -0
- data/spec/safeguard-devise-test-app/config/locales/en.yml +23 -0
- data/spec/safeguard-devise-test-app/config/routes.rb +59 -0
- data/spec/safeguard-devise-test-app/config.ru +4 -0
- data/spec/safeguard-devise-test-app/db/migrate/20140220191103_create_users.rb +9 -0
- data/spec/safeguard-devise-test-app/db/migrate/20140220191247_add_devise_to_users.rb +49 -0
- data/spec/safeguard-devise-test-app/db/migrate/20140220191522_devise_safeguard_add_to_users.rb +15 -0
- data/spec/safeguard-devise-test-app/db/schema.rb +37 -0
- data/spec/safeguard-devise-test-app/db/seeds.rb +7 -0
- data/spec/safeguard-devise-test-app/lib/assets/.keep +0 -0
- data/spec/safeguard-devise-test-app/lib/tasks/.keep +0 -0
- data/spec/safeguard-devise-test-app/log/.keep +0 -0
- data/spec/safeguard-devise-test-app/public/404.html +58 -0
- data/spec/safeguard-devise-test-app/public/422.html +58 -0
- data/spec/safeguard-devise-test-app/public/500.html +57 -0
- data/spec/safeguard-devise-test-app/public/favicon.ico +0 -0
- data/spec/safeguard-devise-test-app/public/robots.txt +5 -0
- data/spec/safeguard-devise-test-app/test/controllers/.keep +0 -0
- data/spec/safeguard-devise-test-app/test/fixtures/.keep +0 -0
- data/spec/safeguard-devise-test-app/test/fixtures/users.yml +9 -0
- data/spec/safeguard-devise-test-app/test/helpers/.keep +0 -0
- data/spec/safeguard-devise-test-app/test/integration/.keep +0 -0
- data/spec/safeguard-devise-test-app/test/mailers/.keep +0 -0
- data/spec/safeguard-devise-test-app/test/models/.keep +0 -0
- data/spec/safeguard-devise-test-app/test/models/user_test.rb +7 -0
- data/spec/safeguard-devise-test-app/test/test_helper.rb +15 -0
- data/spec/safeguard-devise-test-app/vendor/assets/javascripts/.keep +0 -0
- data/spec/safeguard-devise-test-app/vendor/assets/stylesheets/.keep +0 -0
- data/spec/spec_helper.rb +31 -0
- data/spec/tests_helper/helpers.rb +34 -0
- metadata +381 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
NDZkMTc5ZTViMmQ3Mzk3ODgzMjgyNWM1MTc3N2MwODFkYjk5YmZlZA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MmZkZDliOWYzZGQ3N2Q2MzYxYTM5ZTFlMjc3NDRkZjI0MDc1YWIwYQ==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NGEzNTBkNGUxNTYyZjU5YmVmOTBlYWIyYTg4NjY3NmMyNDI2MDc5YTVhMWMw
|
10
|
+
MGVjN2VlNGY1OTllMWUwNmVmZDZkMTgxMDk3NDI2NDNjMWZlOTMwMzJhZTFj
|
11
|
+
N2M5OTk4MjQ3OWMxMGUzYWY4MmM2NjZjYTE2YTk3ZDMxZTQ4ODE=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MWNhZTk3MjFhN2JmYTliZTBiYjkwMDQ3Yjk4NjFiOTA5MTQxMjI2YzM3NGE2
|
14
|
+
NmU1NjY4NDBlYTYwMGM3ZDgxNTY4ZWZkZTIzN2ExYjcyOTVmYmVkYWFhYjAz
|
15
|
+
NTAwOGUwYzY5MmNiMTllYjBiY2ZmNmRkNTgzNjUwMjM4NGI5MmI=
|
@@ -0,0 +1 @@
|
|
1
|
+
1392821468
|
@@ -0,0 +1 @@
|
|
1
|
+
1392821436
|
@@ -0,0 +1 @@
|
|
1
|
+
27ebf715-ba1c-4328-8272-055d4474ba94
|
data/Gemfile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
gem "devise"
|
4
|
+
gem 'safeguard-api'
|
5
|
+
|
6
|
+
group :development do
|
7
|
+
gem "rspec"
|
8
|
+
gem "yard"
|
9
|
+
gem "rdoc"
|
10
|
+
gem "bundler"
|
11
|
+
gem "jeweler"
|
12
|
+
gem "simplecov"
|
13
|
+
gem "sass-rails"
|
14
|
+
gem "jquery-rails"
|
15
|
+
gem "pry"
|
16
|
+
end
|
17
|
+
|
18
|
+
group :test do
|
19
|
+
gem "rails"
|
20
|
+
gem "sqlite3"
|
21
|
+
gem 'rspec-rails'
|
22
|
+
gem 'database_cleaner'
|
23
|
+
gem 'capybara'
|
24
|
+
end
|
25
|
+
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
GEM
|
2
|
+
remote: https://rubygems.org/
|
3
|
+
specs:
|
4
|
+
actionmailer (0.6.1)
|
5
|
+
actionpack (>= 0.9.5)
|
6
|
+
actionpack (4.0.3)
|
7
|
+
activesupport (= 4.0.3)
|
8
|
+
builder (~> 3.1.0)
|
9
|
+
erubis (~> 2.7.0)
|
10
|
+
rack (~> 1.5.2)
|
11
|
+
rack-test (~> 0.6.2)
|
12
|
+
activemodel (4.0.3)
|
13
|
+
activesupport (= 4.0.3)
|
14
|
+
builder (~> 3.1.0)
|
15
|
+
activerecord (4.0.3)
|
16
|
+
activemodel (= 4.0.3)
|
17
|
+
activerecord-deprecated_finders (~> 1.0.2)
|
18
|
+
activesupport (= 4.0.3)
|
19
|
+
arel (~> 4.0.0)
|
20
|
+
activerecord-deprecated_finders (1.0.3)
|
21
|
+
activesupport (4.0.3)
|
22
|
+
i18n (~> 0.6, >= 0.6.4)
|
23
|
+
minitest (~> 4.2)
|
24
|
+
multi_json (~> 1.3)
|
25
|
+
thread_safe (~> 0.1)
|
26
|
+
tzinfo (~> 0.3.37)
|
27
|
+
addressable (2.3.5)
|
28
|
+
arel (4.0.2)
|
29
|
+
atomic (1.1.14)
|
30
|
+
bcrypt-ruby (3.1.2)
|
31
|
+
builder (3.1.4)
|
32
|
+
capybara (2.2.1)
|
33
|
+
mime-types (>= 1.16)
|
34
|
+
nokogiri (>= 1.3.3)
|
35
|
+
rack (>= 1.0.0)
|
36
|
+
rack-test (>= 0.5.4)
|
37
|
+
xpath (~> 2.0)
|
38
|
+
coderay (1.1.0)
|
39
|
+
database_cleaner (1.2.0)
|
40
|
+
descendants_tracker (0.0.3)
|
41
|
+
devise (3.2.3)
|
42
|
+
bcrypt-ruby (~> 3.0)
|
43
|
+
orm_adapter (~> 0.1)
|
44
|
+
railties (>= 3.2.6, < 5)
|
45
|
+
thread_safe (~> 0.1)
|
46
|
+
warden (~> 1.2.3)
|
47
|
+
diff-lcs (1.2.5)
|
48
|
+
docile (1.1.3)
|
49
|
+
erubis (2.7.0)
|
50
|
+
faraday (0.9.0)
|
51
|
+
multipart-post (>= 1.2, < 3)
|
52
|
+
git (1.2.6)
|
53
|
+
github_api (0.11.2)
|
54
|
+
addressable (~> 2.3)
|
55
|
+
descendants_tracker (~> 0.0.1)
|
56
|
+
faraday (~> 0.8, < 0.10)
|
57
|
+
hashie (>= 1.2)
|
58
|
+
multi_json (>= 1.7.5, < 2.0)
|
59
|
+
nokogiri (~> 1.6.0)
|
60
|
+
oauth2
|
61
|
+
hashie (2.0.5)
|
62
|
+
highline (1.6.20)
|
63
|
+
hike (1.2.3)
|
64
|
+
httpclient (2.3.4.1)
|
65
|
+
i18n (0.6.9)
|
66
|
+
jeweler (2.0.1)
|
67
|
+
builder
|
68
|
+
bundler (>= 1.0)
|
69
|
+
git (>= 1.2.5)
|
70
|
+
github_api
|
71
|
+
highline (>= 1.6.15)
|
72
|
+
nokogiri (>= 1.5.10)
|
73
|
+
rake
|
74
|
+
rdoc
|
75
|
+
jquery-rails (3.1.0)
|
76
|
+
railties (>= 3.0, < 5.0)
|
77
|
+
thor (>= 0.14, < 2.0)
|
78
|
+
json (1.8.1)
|
79
|
+
jwt (0.1.11)
|
80
|
+
multi_json (>= 1.5)
|
81
|
+
method_source (0.8.2)
|
82
|
+
mime-types (2.1)
|
83
|
+
mini_portile (0.5.2)
|
84
|
+
minitest (4.7.5)
|
85
|
+
multi_json (1.8.4)
|
86
|
+
multi_xml (0.5.5)
|
87
|
+
multipart-post (2.0.0)
|
88
|
+
nokogiri (1.6.1)
|
89
|
+
mini_portile (~> 0.5.0)
|
90
|
+
oauth2 (0.9.3)
|
91
|
+
faraday (>= 0.8, < 0.10)
|
92
|
+
jwt (~> 0.1.8)
|
93
|
+
multi_json (~> 1.3)
|
94
|
+
multi_xml (~> 0.5)
|
95
|
+
rack (~> 1.2)
|
96
|
+
orm_adapter (0.5.0)
|
97
|
+
pry (0.9.12.6)
|
98
|
+
coderay (~> 1.0)
|
99
|
+
method_source (~> 0.8)
|
100
|
+
slop (~> 3.4)
|
101
|
+
rack (1.5.2)
|
102
|
+
rack-test (0.6.2)
|
103
|
+
rack (>= 1.0)
|
104
|
+
rails (0.9.5)
|
105
|
+
actionmailer (>= 0.6.1)
|
106
|
+
actionpack (>= 1.4.0)
|
107
|
+
activerecord (>= 1.6.0)
|
108
|
+
rake (>= 0.4.15)
|
109
|
+
railties (4.0.3)
|
110
|
+
actionpack (= 4.0.3)
|
111
|
+
activesupport (= 4.0.3)
|
112
|
+
rake (>= 0.8.7)
|
113
|
+
thor (>= 0.18.1, < 2.0)
|
114
|
+
rake (10.1.1)
|
115
|
+
rdoc (4.1.1)
|
116
|
+
json (~> 1.4)
|
117
|
+
rspec (2.14.1)
|
118
|
+
rspec-core (~> 2.14.0)
|
119
|
+
rspec-expectations (~> 2.14.0)
|
120
|
+
rspec-mocks (~> 2.14.0)
|
121
|
+
rspec-core (2.14.7)
|
122
|
+
rspec-expectations (2.14.5)
|
123
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
124
|
+
rspec-mocks (2.14.5)
|
125
|
+
rspec-rails (2.14.1)
|
126
|
+
actionpack (>= 3.0)
|
127
|
+
activemodel (>= 3.0)
|
128
|
+
activesupport (>= 3.0)
|
129
|
+
railties (>= 3.0)
|
130
|
+
rspec-core (~> 2.14.0)
|
131
|
+
rspec-expectations (~> 2.14.0)
|
132
|
+
rspec-mocks (~> 2.14.0)
|
133
|
+
safeguard-api (0.2.0)
|
134
|
+
httpclient (>= 2.3.4)
|
135
|
+
sass (3.2.14)
|
136
|
+
sass-rails (4.0.1)
|
137
|
+
railties (>= 4.0.0, < 5.0)
|
138
|
+
sass (>= 3.1.10)
|
139
|
+
sprockets-rails (~> 2.0.0)
|
140
|
+
simplecov (0.8.2)
|
141
|
+
docile (~> 1.1.0)
|
142
|
+
multi_json
|
143
|
+
simplecov-html (~> 0.8.0)
|
144
|
+
simplecov-html (0.8.0)
|
145
|
+
slop (3.4.7)
|
146
|
+
sprockets (2.11.0)
|
147
|
+
hike (~> 1.2)
|
148
|
+
multi_json (~> 1.0)
|
149
|
+
rack (~> 1.0)
|
150
|
+
tilt (~> 1.1, != 1.3.0)
|
151
|
+
sprockets-rails (2.0.1)
|
152
|
+
actionpack (>= 3.0)
|
153
|
+
activesupport (>= 3.0)
|
154
|
+
sprockets (~> 2.8)
|
155
|
+
sqlite3 (1.3.8)
|
156
|
+
thor (0.18.1)
|
157
|
+
thread_safe (0.1.3)
|
158
|
+
atomic
|
159
|
+
tilt (1.4.1)
|
160
|
+
tzinfo (0.3.38)
|
161
|
+
warden (1.2.3)
|
162
|
+
rack (>= 1.0)
|
163
|
+
xpath (2.0.0)
|
164
|
+
nokogiri (~> 1.3)
|
165
|
+
yard (0.8.7.3)
|
166
|
+
|
167
|
+
PLATFORMS
|
168
|
+
ruby
|
169
|
+
|
170
|
+
DEPENDENCIES
|
171
|
+
bundler
|
172
|
+
capybara
|
173
|
+
database_cleaner
|
174
|
+
devise
|
175
|
+
jeweler
|
176
|
+
jquery-rails
|
177
|
+
pry
|
178
|
+
rails
|
179
|
+
rdoc
|
180
|
+
rspec
|
181
|
+
rspec-rails
|
182
|
+
safeguard-api
|
183
|
+
sass-rails
|
184
|
+
simplecov
|
185
|
+
sqlite3
|
186
|
+
yard
|
data/Rakefile
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
require 'jeweler'
|
15
|
+
Jeweler::Tasks.new do |gem|
|
16
|
+
# gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
|
17
|
+
gem.name = "safeguard-devise"
|
18
|
+
gem.homepage = "http://github.com/diegonakamashi/safeguard-devise"
|
19
|
+
gem.license = "MIT"
|
20
|
+
gem.summary = %Q{TODO: one-line summary of your gem}
|
21
|
+
gem.description = %Q{TODO: longer description of your gem}
|
22
|
+
gem.email = "diegonakamashi@gmail.com"
|
23
|
+
gem.authors = ["diegonakamashi"]
|
24
|
+
# dependencies defined in Gemfile
|
25
|
+
end
|
26
|
+
Jeweler::RubygemsDotOrgTasks.new
|
27
|
+
|
28
|
+
require 'rake/testtask'
|
29
|
+
Rake::TestTask.new(:test) do |test|
|
30
|
+
test.libs << 'lib' << 'test'
|
31
|
+
test.pattern = 'test/**/test_*.rb'
|
32
|
+
test.verbose = true
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "Code coverage detail"
|
36
|
+
task :simplecov do
|
37
|
+
ENV['COVERAGE'] = "true"
|
38
|
+
Rake::Task['test'].execute
|
39
|
+
end
|
40
|
+
|
41
|
+
task :default => :test
|
42
|
+
|
43
|
+
require 'rdoc/task'
|
44
|
+
Rake::RDocTask.new do |rdoc|
|
45
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
46
|
+
|
47
|
+
rdoc.rdoc_dir = 'rdoc'
|
48
|
+
rdoc.title = "safeguard-devise #{version}"
|
49
|
+
rdoc.rdoc_files.include('README*')
|
50
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
51
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.0
|
data/Vagrantfile
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
# -*- mode: ruby -*-
|
2
|
+
# vi: set ft=ruby :
|
3
|
+
|
4
|
+
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
|
5
|
+
VAGRANTFILE_API_VERSION = "2"
|
6
|
+
|
7
|
+
|
8
|
+
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
9
|
+
# All Vagrant configuration is done here. The most common configuration
|
10
|
+
# options are documented and commented below. For a complete reference,
|
11
|
+
# please see the online documentation at vagrantup.com.
|
12
|
+
|
13
|
+
# Every Vagrant virtual environment requires a box to build off of.
|
14
|
+
config.vm.box = "precise32"
|
15
|
+
|
16
|
+
# The url from where the 'config.vm.box' box will be fetched if it
|
17
|
+
# doesn't already exist on the user's system.
|
18
|
+
config.vm.box_url = "http://files.vagrantup.com/precise32.box"
|
19
|
+
config.vm.hostname = 'vizir-dev-box'
|
20
|
+
|
21
|
+
# Create a forwarded port mapping which allows access to a specific port
|
22
|
+
# within the machine from a port on the host machine. In the example below,
|
23
|
+
# accessing "localhost:8080" will access port 80 on the guest machine.
|
24
|
+
# config.vm.network :forwarded_port, guest: 80, host: 8080
|
25
|
+
|
26
|
+
# Create a private network, which allows host-only access to the machine
|
27
|
+
# using a specific IP.
|
28
|
+
config.vm.network :private_network, ip: "192.168.33.20"
|
29
|
+
|
30
|
+
config.vm.network :forwarded_port, guest: 3000, host: 3333
|
31
|
+
# Create a public network, which generally matched to bridged network.
|
32
|
+
# Bridged networks make the machine appear as another physical device on
|
33
|
+
# your network.
|
34
|
+
# config.vm.network :public_network
|
35
|
+
|
36
|
+
# If true, then any SSH connections made will enable agent forwarding.
|
37
|
+
# Default value: false
|
38
|
+
# config.ssh.forward_agent = true
|
39
|
+
|
40
|
+
# Share an additional folder to the guest VM. The first argument is
|
41
|
+
# the path on the host to the actual folder. The second argument is
|
42
|
+
# the path on the guest to mount the folder. And the optional third
|
43
|
+
# argument is a set of non-required options.
|
44
|
+
config.vm.synced_folder ".", "/vagrant"
|
45
|
+
|
46
|
+
# Provider-specific configuration so you can fine-tune various
|
47
|
+
# backing providers for Vagrant. These expose provider-specific options.
|
48
|
+
# Example for VirtualBox:
|
49
|
+
#
|
50
|
+
config.vm.provider :virtualbox do |vb|
|
51
|
+
# Don't boot with headless mode
|
52
|
+
# vb.gui = true
|
53
|
+
|
54
|
+
# Use VBoxManage to customize the VM. For example to change memory:
|
55
|
+
vb.customize ["modifyvm", :id, "--memory", "1024"]
|
56
|
+
vb.customize ["modifyvm", :id, "--ioapic", "on"]
|
57
|
+
end
|
58
|
+
#
|
59
|
+
# View the documentation for the provider you're using for more
|
60
|
+
# information on available options.
|
61
|
+
|
62
|
+
# Enable provisioning with Puppet stand alone. Puppet manifests
|
63
|
+
# are contained in a directory path relative to this Vagrantfile.
|
64
|
+
# You will need to create the manifests directory and a manifest in
|
65
|
+
# the file base.pp in the manifests_path directory.
|
66
|
+
#
|
67
|
+
# An example Puppet manifest to provision the message of the day:
|
68
|
+
#
|
69
|
+
# # group { "puppet":
|
70
|
+
# # ensure => "present",
|
71
|
+
# # }
|
72
|
+
# #
|
73
|
+
# # File { owner => 0, group => 0, mode => 0644 }
|
74
|
+
# #
|
75
|
+
# # file { '/etc/motd':
|
76
|
+
# # content => "Welcome to your Vagrant-built virtual machine!
|
77
|
+
# # Managed by Puppet.\n"
|
78
|
+
# # }
|
79
|
+
#
|
80
|
+
# config.vm.provision :puppet do |puppet|
|
81
|
+
# puppet.manifests_path = "manifests"
|
82
|
+
# puppet.manifest_file = "site.pp"
|
83
|
+
# end
|
84
|
+
|
85
|
+
# config.vm.provision :shell, :path => "puppet/upgrade-puppet.sh"
|
86
|
+
config.vm.provision :puppet do |puppet|
|
87
|
+
puppet.manifests_path = 'puppet/manifests'
|
88
|
+
puppet.module_path = 'puppet/modules'
|
89
|
+
end
|
90
|
+
|
91
|
+
# Enable provisioning with chef solo, specifying a cookbooks path, roles
|
92
|
+
# path, and data_bags path (all relative to this Vagrantfile), and adding
|
93
|
+
# some recipes and/or roles.
|
94
|
+
#
|
95
|
+
# config.vm.provision :chef_solo do |chef|
|
96
|
+
# chef.cookbooks_path = "../my-recipes/cookbooks"
|
97
|
+
# chef.roles_path = "../my-recipes/roles"
|
98
|
+
# chef.data_bags_path = "../my-recipes/data_bags"
|
99
|
+
# chef.add_recipe "mysql"
|
100
|
+
# chef.add_role "web"
|
101
|
+
#
|
102
|
+
# # You may also specify custom JSON attributes:
|
103
|
+
# chef.json = { :mysql_password => "foo" }
|
104
|
+
# end
|
105
|
+
|
106
|
+
# Enable provisioning with chef server, specifying the chef server URL,
|
107
|
+
# and the path to the validation key (relative to this Vagrantfile).
|
108
|
+
#
|
109
|
+
# The Opscode Platform uses HTTPS. Substitute your organization for
|
110
|
+
# ORGNAME in the URL and validation key.
|
111
|
+
#
|
112
|
+
# If you have your own Chef Server, use the appropriate URL, which may be
|
113
|
+
# HTTP instead of HTTPS depending on your configuration. Also change the
|
114
|
+
# validation key to validation.pem.
|
115
|
+
#
|
116
|
+
# config.vm.provision :chef_client do |chef|
|
117
|
+
# chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME"
|
118
|
+
# chef.validation_key_path = "ORGNAME-validator.pem"
|
119
|
+
# end
|
120
|
+
#
|
121
|
+
# If you're using the Opscode platform, your validator client is
|
122
|
+
# ORGNAME-validator, replacing ORGNAME with your organization name.
|
123
|
+
#
|
124
|
+
# If you have your own Chef Server, the default validation client name is
|
125
|
+
# chef-validator, unless you changed the configuration.
|
126
|
+
#
|
127
|
+
# chef.validation_client_name = "ORGNAME-validator"
|
128
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
class Devise::DeviseSafeguardController < DeviseController
|
2
|
+
include Devise::Controllers::Helpers
|
3
|
+
|
4
|
+
before_filter :find_resource_and_require_password_checked
|
5
|
+
|
6
|
+
def GET_verify_safeguard
|
7
|
+
render 'verify_safeguard'
|
8
|
+
end
|
9
|
+
|
10
|
+
def POST_verify_safeguard
|
11
|
+
if token_ok?
|
12
|
+
@resource.update_attribute(:last_sign_in_with_safeguard, DateTime.now)
|
13
|
+
|
14
|
+
#remember_device if params[:remember_device].to_i == 1
|
15
|
+
if session.delete("#{resource_name}_remember_me") == true && @resource.respond_to?(:remember_me=)
|
16
|
+
@resource.remember_me = true
|
17
|
+
end
|
18
|
+
sign_in(resource_name, @resource)
|
19
|
+
|
20
|
+
set_flash_message(:notice, :signed_in) if is_navigational_format?
|
21
|
+
respond_with resource, :location => after_sign_in_path_for(@resource)
|
22
|
+
else
|
23
|
+
set_flash_message(:error, :invalid_token)
|
24
|
+
render :verify_safeguard
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def token_ok?
|
29
|
+
resp = Safeguard::API.is_valid?({
|
30
|
+
:email => @resource.email,
|
31
|
+
:token => params[:safeguard_token]
|
32
|
+
})
|
33
|
+
resp
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def find_resource
|
38
|
+
@resource = send("current_#{resource_name}")
|
39
|
+
|
40
|
+
if @resource.nil?
|
41
|
+
@resource = resource_class.find_by_id(session["#{resource_name}_id"])
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def find_resource_and_require_password_checked
|
46
|
+
find_resource
|
47
|
+
|
48
|
+
if @resource.nil? || session[:"#{resource_name}_password_checked"].to_s != "true"
|
49
|
+
redirect_to invalid_resource_path
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def invalid_resource_path
|
54
|
+
root_path
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<%= stylesheet_link_tag "devise_safeguard", :media => "all" %>
|
2
|
+
<div id="safeguard-form-token">
|
3
|
+
<%= form_tag([resource_name, :verify_safeguard], :id => 'devise_safeguard', :class => 'safeguard-form', :method => :post) do %>
|
4
|
+
<%= hidden_field_tag(:"#{resource_name}_id", @resource.email) %>
|
5
|
+
<%= label_tag :safeguard_token %>
|
6
|
+
<%= text_field_tag :safeguard_token, "", :autocomplete => :off, :id => 'safeguard-token' %>
|
7
|
+
<%= submit_tag I18n.t('safeguard_token_button', {:scope => 'devise'}), :class => 'button' %>
|
8
|
+
<% end %>
|
9
|
+
</div>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
= stylesheet_link_tag "devise_safeguard", :media => "all"
|
2
|
+
#safeguard-form-token
|
3
|
+
= form_tag([resource_name, :verify_safeguard], :id => 'devise_safeguard', :class => 'safeguard-form', :method => :post) do
|
4
|
+
= hidden_field_tag(:"#{resource_name}_id", @resource.email)
|
5
|
+
= label_tag :safeguard_token
|
6
|
+
= text_field_tag :safeguard_token, "", :autocomplete => :off, :id => 'safeguard-token'
|
7
|
+
= submit_tag I18n.t('safeguard_token_button', {:scope => 'devise'}), :class => 'button'
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module DeviseSafeguard
|
2
|
+
module Controllers
|
3
|
+
module Helpers
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
included do
|
6
|
+
before_filter :is_safeguard_token_needed?, :if => :is_signing_in?
|
7
|
+
end
|
8
|
+
|
9
|
+
def is_signing_in?
|
10
|
+
if devise_controller? && signed_in?(resource_name) &&
|
11
|
+
self.class == Devise::SessionsController || self.class.ancestors.include?(Devise::SessionsController) &&
|
12
|
+
self.action_name == "create"
|
13
|
+
return true
|
14
|
+
end
|
15
|
+
|
16
|
+
return false
|
17
|
+
end
|
18
|
+
|
19
|
+
def require_token?
|
20
|
+
return false if !signed_in?(resource_name)
|
21
|
+
return false if !warden.session(resource_name)[:with_safeguard_authentication]
|
22
|
+
return true
|
23
|
+
end
|
24
|
+
|
25
|
+
def is_safeguard_token_needed?
|
26
|
+
if require_token?
|
27
|
+
# login with 2fa
|
28
|
+
id = warden.session(resource_name)[:id]
|
29
|
+
|
30
|
+
remember_me = (params.fetch(resource_name, {})[:remember_me].to_s == "1")
|
31
|
+
return_to = session["#{resource_name}_return_to"]
|
32
|
+
warden.logout
|
33
|
+
warden.reset_session! # make sure the session resetted
|
34
|
+
|
35
|
+
session["#{resource_name}_id"] = id
|
36
|
+
# this is safe to put in the session because the cookie is signed
|
37
|
+
session["#{resource_name}_password_checked"] = true
|
38
|
+
session["#{resource_name}_remember_me"] = remember_me
|
39
|
+
session["#{resource_name}_return_to"] = return_to if return_to
|
40
|
+
|
41
|
+
redirect_to verify_safeguard_path_for(resource_name)
|
42
|
+
return
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def verify_safeguard_path_for(resource_or_scope = nil)
|
47
|
+
scope = Devise::Mapping.find_scope!(resource_or_scope)
|
48
|
+
send("#{scope}_verify_safeguard_path")
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
@@ -0,0 +1,7 @@
|
|
1
|
+
Warden::Manager.after_authentication do |user, auth, options|
|
2
|
+
if user.respond_to?(:with_safeguard_authentication?)
|
3
|
+
if auth.session(options[:scope])[:with_safeguard_authentication] = user.with_safeguard_authentication?(auth.request)
|
4
|
+
auth.session(options[:scope])[:id] = user.id
|
5
|
+
end
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'devise-safeguard/hooks/safeguard_authenticatable'
|
2
|
+
module Devise
|
3
|
+
module Models
|
4
|
+
module SafeguardAuthenticatable
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
def with_safeguard_authentication?(request)
|
8
|
+
return true if self.safeguard_enabled
|
9
|
+
false
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
Devise::Models.config(self, :safeguard_remember_device)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module ActionDispatch::Routing
|
2
|
+
class Mapper
|
3
|
+
protected
|
4
|
+
|
5
|
+
def devise_safeguard(mapping, controllers)
|
6
|
+
match "/#{mapping.path_names[:verify_safeguard]}", :controller => controllers[:devise_safeguard], :action => :GET_verify_safeguard, :as => :verify_safeguard, :via => :get
|
7
|
+
match "/#{mapping.path_names[:verify_safeguard]}", :controller => controllers[:devise_safeguard], :action => :POST_verify_safeguard, :as => nil, :via => :post
|
8
|
+
|
9
|
+
# match "/#{mapping.path_names[:enable_safeguard]}", :controller => controllers[:devise_safeguard], :action => :GET_enable_safeguard, :as => :enable_safeguard, :via => :get
|
10
|
+
# match "/#{mapping.path_names[:enable_safeguard]}", :controller => controllers[:devise_safeguard], :action => :POST_enable_safeguard, :as => nil, :via => :post
|
11
|
+
|
12
|
+
# match "/#{mapping.path_names[:verify_safeguard_installation]}", :controller => controllers[:devise_safeguard], :action => :GET_verify_safeguard_installation, :as => :verify_safeguard_installation, :via => :get
|
13
|
+
# match "/#{mapping.path_names[:verify_safeguard_installation]}", :controller => controllers[:devise_safeguard], :action => :POST_verify_safeguard_installation, :as => nil, :via => :post
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rails/generators/active_record'
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module Generators
|
5
|
+
class DeviseSafeguardGenerator < ActiveRecord::Generators::Base
|
6
|
+
source_root File.expand_path("../templates", __FILE__)
|
7
|
+
|
8
|
+
def copy_devise_migration
|
9
|
+
migration_template "migration.rb", "db/migrate/devise_safeguard_add_to_#{table_name}"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class DeviseSafeguardAddTo<%= table_name.camelize %> < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
change_table :<%= table_name %> do |t|
|
4
|
+
t.datetime :last_sign_in_with_safeguard
|
5
|
+
t.boolean :safeguard_enabled, :default => false
|
6
|
+
end
|
7
|
+
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.down
|
11
|
+
change_table :<%= table_name %> do |t|
|
12
|
+
t.remove :last_sign_in_with_safeguard, :safeguard_enabled
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module DeviseSafeguard
|
2
|
+
module Generators
|
3
|
+
class DeviseSafeguardGenerator < Rails::Generators::NamedBase
|
4
|
+
|
5
|
+
namespace "devise_safeguard"
|
6
|
+
|
7
|
+
desc "Add :safeguard_authenticatable directive in the given model, plus accessors. Also generate migration for ActiveRecord"
|
8
|
+
|
9
|
+
def inject_devise_safeguard_content
|
10
|
+
path = File.join("app","models","#{file_path}.rb")
|
11
|
+
if File.exists?(path) &&
|
12
|
+
!File.read(path).include?("safeguard_authenticatable")
|
13
|
+
inject_into_file(path,
|
14
|
+
"safeguard_authenticatable, :",
|
15
|
+
:after => "devise :")
|
16
|
+
end
|
17
|
+
|
18
|
+
if File.exists?(path) &&
|
19
|
+
!File.read(path).include?(":last_sign_in_with_safeguard")
|
20
|
+
inject_into_file(path,
|
21
|
+
":last_sign_in_with_safeguard, ",
|
22
|
+
:after => "attr_accessible ")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
hook_for :orm
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|