dangerzone 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +151 -0
- data/dangerzone.gemspec +18 -0
- data/lib/.DS_Store +0 -0
- data/lib/dangerzone/.DS_Store +0 -0
- data/lib/dangerzone/dangerzone_generator.rb +122 -0
- data/lib/dangerzone/templates/.DS_Store +0 -0
- data/lib/dangerzone/templates/controllers/application_controller.rb +11 -0
- data/lib/dangerzone/templates/controllers/create_accounts_controller.rb +42 -0
- data/lib/dangerzone/templates/controllers/reset_passwords_controller.rb +43 -0
- data/lib/dangerzone/templates/controllers/sessions_controller.rb +30 -0
- data/lib/dangerzone/templates/mailers/dangerzone_mailer.rb +14 -0
- data/lib/dangerzone/templates/migration.rb +24 -0
- data/lib/dangerzone/templates/models/user.rb +25 -0
- data/lib/dangerzone/templates/routes.rb +18 -0
- data/lib/dangerzone/templates/views/.DS_Store +0 -0
- data/lib/dangerzone/templates/views/create_accounts/check_your_email.html.erb +11 -0
- data/lib/dangerzone/templates/views/create_accounts/dangerzone.html.erb +20 -0
- data/lib/dangerzone/templates/views/create_accounts/new.html.erb +11 -0
- data/lib/dangerzone/templates/views/dangerzone_mailer/account_confirmation_email.html.erb +5 -0
- data/lib/dangerzone/templates/views/dangerzone_mailer/account_confirmation_email.text.erb +6 -0
- data/lib/dangerzone/templates/views/dangerzone_mailer/reset_password_email.html.erb +5 -0
- data/lib/dangerzone/templates/views/dangerzone_mailer/reset_password_email.text.erb +5 -0
- data/lib/dangerzone/templates/views/nav.html.erb +10 -0
- data/lib/dangerzone/templates/views/reset_passwords/new.html.erb +10 -0
- data/lib/dangerzone/templates/views/reset_passwords/reset_password_form.html.erb +10 -0
- data/lib/dangerzone/templates/views/sessions/new.html.erb +12 -0
- data/lib/dangerzone.rb +1 -0
- metadata +122 -0
data/README.md
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
# Dangerzone
|
2
|
+
|
3
|
+
## About
|
4
|
+
Dangerzone handles sign-in, sign-out, creating new accounts, confirmation emails, reset password emails,
|
5
|
+
and user authentification stuff that pretty much every web app needs.
|
6
|
+
|
7
|
+
It's pretty much a really stripped down Devise. While Devise is designed for people with a lot of experience,
|
8
|
+
Dangerzone is more for beginners. All of the files it generates and logic it appends are easy to find and
|
9
|
+
explore (hopefully, anyway), so if you're new to Rails you can use Dangerzone to learn (also hopefully).
|
10
|
+
|
11
|
+
It's also for people who maybe have more experience and don't want to spend time writing all of this stuff
|
12
|
+
out by hand but don't want to use Devise for whatever reason (ie those with some experience but still
|
13
|
+
don't understand Devise)
|
14
|
+
|
15
|
+
## Dependencies
|
16
|
+
You'll need these gems (and the gems that they depend on) to use Dangerzone:
|
17
|
+
|
18
|
+
* Rails 3.2
|
19
|
+
* Bcrypt-ruby 3.0
|
20
|
+
* Thor
|
21
|
+
|
22
|
+
## How to install
|
23
|
+
You can do one of these in your command line (if you have the RubyGems command line stuff installed):
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
gem install dangerzone
|
27
|
+
```
|
28
|
+
|
29
|
+
Alternatively, you can just add this to your app's GemFile:
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
gem 'dangerzone'
|
33
|
+
```
|
34
|
+
|
35
|
+
And then bundle or bundle install.
|
36
|
+
|
37
|
+
## How to use
|
38
|
+
|
39
|
+
First, add this to your Gemfile:
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
gem 'dangerzone'
|
43
|
+
```
|
44
|
+
|
45
|
+
Then bundle or bundle install.
|
46
|
+
|
47
|
+
Then run this command from your app's root directory:
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
rails generate dangerzone
|
51
|
+
```
|
52
|
+
|
53
|
+
You can also put '```g```'' instead of '```generate```' if you're really in a hurry. Anyway, you should see something that
|
54
|
+
looks like this:
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
remove public/index.html
|
58
|
+
create app/views/layouts/_dangerzone_nav.html.erb
|
59
|
+
create app/models/user.rb
|
60
|
+
create app/controllers/create_accounts_controller.rb
|
61
|
+
create app/controllers/reset_passwords_controller.rb
|
62
|
+
create app/controllers/sessions_controller.rb
|
63
|
+
create app/mailers/dangerzone_mailer.rb
|
64
|
+
create app/views/create_accounts
|
65
|
+
[etc...]
|
66
|
+
```
|
67
|
+
|
68
|
+
Now, if you're in a fresh app, all you really have to do is ```rake db:migrate```
|
69
|
+
|
70
|
+
Note: If you're adding Dangerzone to an existing app then things can be a bit more tricky. For instance,
|
71
|
+
if you've changed your code in certain places Dangerzone may not edit the files correctly. It may
|
72
|
+
also overwrite some existing files if they have the same as the files Dangerzone tries to create.
|
73
|
+
Check out the 'Things to keep in mind' section below for more information.
|
74
|
+
|
75
|
+
Once you've added some pages you only want registered users to see (ie a my account page), all you have to do
|
76
|
+
is add this to the controllers that you only want registered/authorized users to see:
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
before_filter :authorize_user
|
80
|
+
```
|
81
|
+
|
82
|
+
That's it. Well if you only want specific actions on a given controller to be for registered users only, just use:
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
before_filter :authorize_user, :only => [ :different, :controller, :actions ]
|
86
|
+
```
|
87
|
+
|
88
|
+
or
|
89
|
+
|
90
|
+
```ruby
|
91
|
+
before_filter :authorize_user, :except => [ :various, :controller, :actions ]
|
92
|
+
```
|
93
|
+
|
94
|
+
Now that's it.
|
95
|
+
|
96
|
+
## Things to keep in mind
|
97
|
+
|
98
|
+
* Dangerzone generates a migration file that creates a users table, so if you already have a users table
|
99
|
+
or call your users something else, then you'll have to write your own migration that adds the appropriate
|
100
|
+
columns and default values to your model.
|
101
|
+
* If you already have a user.rb file in your models it may be overwritten. Check the list below for all of the
|
102
|
+
files Dangerzone generates and my overwrite.
|
103
|
+
* Dangerzone edits certain files (for instance, it uncomments bcrypt in your GemFile), so if you've changed
|
104
|
+
some code in those files in a certain way, Dagerzone may not edit them properly. Consult the list below
|
105
|
+
for all of the files it edits and how it edits them.
|
106
|
+
* Dangerzone sets a root\_url that you'll probably want to change.
|
107
|
+
* Dangerzone uses action mailer and sets action mailer's default to 'localhost:3000' in your development.rb file.
|
108
|
+
So if you want to use a different mailer or use Dangerzone in test or production environments, you'll have to figure
|
109
|
+
out how to configure it for those situations yourself.
|
110
|
+
* Dangerzone gives you a current\_user method that you can call in any of your controllers. It returns @current\_user
|
111
|
+
in addition to setting the @current\_user instance variable. The instance variable will already be set for any action
|
112
|
+
has authorize\_user run in the before filter.
|
113
|
+
* Dangerzone deletes index.html from your app's public folder.
|
114
|
+
* The pages and emails that Dangerzone generates for you are pretty bare bones, so you'll probably want to style them
|
115
|
+
* If you actually use Dangerzone code in production, remember that the email address validation is basic so
|
116
|
+
every once in a while you should probably destroy all of the accounts that are reasonably old and are unconfirmed.
|
117
|
+
Or set up an automated task that does that.
|
118
|
+
|
119
|
+
### Files Dangerzone Edits
|
120
|
+
* app/controllers/application\_controller.rb - adds authorize\_user and current\_user methods (so every controller
|
121
|
+
can add them to before\_filters)
|
122
|
+
* app/view/layouts/application.html.erb - adds render
|
123
|
+
* config/environments/development.rb - sets action mailer's default url to localhost:3000
|
124
|
+
* config/routes.rb - adds routes and sets root\_url
|
125
|
+
* GemFile - uncomments bcrypt
|
126
|
+
|
127
|
+
### Directories Dangerzone Creates
|
128
|
+
* app/mailers/dangerzone\_mailer.rb
|
129
|
+
* app/views/create\_accounts
|
130
|
+
* app/views/dangerzone\_mailer
|
131
|
+
* app/views/reset\_passwords
|
132
|
+
* app/views/sessions
|
133
|
+
|
134
|
+
### Files Dangerzone Creates
|
135
|
+
* app/views/layouts/\_dangerzone_nav.html.erb
|
136
|
+
* app/models/user.rb
|
137
|
+
* app/controllers/create\_accounts\_controller.rb
|
138
|
+
* app/controllers/reset\_passwords\_controller.rb
|
139
|
+
* app/controllers/sessions\_controller.rb
|
140
|
+
* app/views/create\_accounts/check\_your\_email.html.erb
|
141
|
+
* app/views/create\_accounts/new.html.erb
|
142
|
+
* app/views/create\_accounts/dangerzone.html.erb
|
143
|
+
* app/views/dangerzone\_mailer/account\_confirmation\_email.html.erb
|
144
|
+
* app/views/dangerzone\_mailer/account\_confirmation\_email.text.erb
|
145
|
+
* app/views/dangerzone\_mailer/reset\_password\_email.html.erb
|
146
|
+
* app/views/dangerzone\_mailer/reset\_password\_email.text.erb
|
147
|
+
* app/views/layouts/\_dangerzone\_nav.html.erb
|
148
|
+
* app/views/reset\_passwords/new.html.erb
|
149
|
+
* app/views/reset\_passwords/reset\_password\_form.html.erb
|
150
|
+
* app/views/sessions/new.html.erb
|
151
|
+
* db/migrate/[some timestamp]\_create\_users\_table\_via\_dangerzone.rb
|
data/dangerzone.gemspec
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "dangerzone"
|
3
|
+
s.version = '0.0.0'
|
4
|
+
s.date = '2013-03-30'
|
5
|
+
s.license = "MIT"
|
6
|
+
s.summary = "Takes care of creating accounts, login, logout, forgot password, etc. in Rails"
|
7
|
+
s.email = "michael.crismali@gmail.com"
|
8
|
+
s.homepage = "https://github.com/michaelcrismali/dangerzone"
|
9
|
+
s.authors = ['Michael Crismali']
|
10
|
+
s.description = "Generates a sign-in, sign-out, create account, forgot password, account confirmation systems for Rails apps. It's Devise for beginners."
|
11
|
+
|
12
|
+
s.files = `git ls-files`.split("\n")
|
13
|
+
s.require_paths = ["lib"]
|
14
|
+
|
15
|
+
s.add_dependency("bcrypt-ruby", "~> 3.0")
|
16
|
+
s.add_dependency("rails", "~> 3.2")
|
17
|
+
s.add_dependency("thor")
|
18
|
+
end
|
data/lib/.DS_Store
ADDED
Binary file
|
Binary file
|
@@ -0,0 +1,122 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
class DangerzoneGenerator < Rails::Generators::Base
|
3
|
+
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
|
+
|
6
|
+
def edit_the_routes_file
|
7
|
+
routes = IO.read(get_directory + '/templates/routes.rb')
|
8
|
+
line = "::Application.routes.draw do"
|
9
|
+
gsub_file 'config/routes.rb', /.+(#{Regexp.escape(line)})/mi do |match|
|
10
|
+
"#{match}\n\n#{routes}\n"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def get_rid_of_rails_default_index_page_in_index
|
15
|
+
remove_file "public/index.html"
|
16
|
+
end
|
17
|
+
|
18
|
+
def generate_the_nav_partial
|
19
|
+
copy_file "views/nav.html.erb", "app/views/layouts/_dangerzone_nav.html.erb"
|
20
|
+
end
|
21
|
+
|
22
|
+
def add_nav_partial_and_notice_to_application_html_erb
|
23
|
+
nav = "<%= render 'layouts/dangerzone_nav' %>\n\n<%= notice %>"
|
24
|
+
line = "<body>"
|
25
|
+
gsub_file 'app/views/layouts/application.html.erb', /(#{Regexp.escape(line)})/mi do |match|
|
26
|
+
"#{match}\n#{nav}\n"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def generate_user_model_file
|
31
|
+
copy_file "models/user.rb", "app/models/user.rb"
|
32
|
+
end
|
33
|
+
|
34
|
+
def generate_the_controllers
|
35
|
+
copy_file "controllers/create_accounts_controller.rb", "app/controllers/create_accounts_controller.rb"
|
36
|
+
copy_file "controllers/reset_passwords_controller.rb", "app/controllers/reset_passwords_controller.rb"
|
37
|
+
copy_file "controllers/sessions_controller.rb", "app/controllers/sessions_controller.rb"
|
38
|
+
end
|
39
|
+
|
40
|
+
def add_methods_to_application_controller
|
41
|
+
app_controller_methods = IO.read(get_directory + '/templates/controllers/application_controller.rb')
|
42
|
+
line = "protect_from_forgery"
|
43
|
+
gsub_file 'app/controllers/application_controller.rb', /.+(#{Regexp.escape(line)})/mi do |match|
|
44
|
+
"#{match}\n\n#{app_controller_methods}\n"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def generate_mailer
|
49
|
+
copy_file "mailers/dangerzone_mailer.rb", "app/mailers/dangerzone_mailer.rb"
|
50
|
+
end
|
51
|
+
|
52
|
+
def add_mailer_config_to_development
|
53
|
+
comment = "# Via dangerzone: configures actionmailer to use localhost:3000 as its default url"
|
54
|
+
config_stuff = "config.action_mailer.default_url_options = { :host => 'localhost:3000' }"
|
55
|
+
line = "config.assets.debug = true"
|
56
|
+
gsub_file 'config/environments/development.rb', /.+(#{Regexp.escape(line)})/mi do |match|
|
57
|
+
"#{match}\n\n #{comment}\n #{config_stuff}\n\n"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def uncomment_bcrypt_in_gemfile
|
62
|
+
uncommented = "gem 'bcrypt-ruby'"
|
63
|
+
line = "# gem 'bcrypt-ruby'"
|
64
|
+
gsub_file 'Gemfile', /(#{Regexp.escape(line)})/mi do |match|
|
65
|
+
"#{uncommented}"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def generate_view_directories
|
70
|
+
empty_directory "app/views/create_accounts"
|
71
|
+
empty_directory "app/views/dangerzone_mailer"
|
72
|
+
empty_directory "app/views/reset_passwords"
|
73
|
+
empty_directory "app/views/sessions"
|
74
|
+
end
|
75
|
+
|
76
|
+
def fill_view_directories
|
77
|
+
copy_file "views/create_accounts/check_your_email.html.erb", "app/views/create_accounts/check_your_email.html.erb"
|
78
|
+
copy_file "views/create_accounts/new.html.erb", "app/views/create_accounts/new.html.erb"
|
79
|
+
copy_file "views/create_accounts/dangerzone.html.erb", "app/views/create_accounts/dangerzone.html.erb"
|
80
|
+
|
81
|
+
copy_file "views/dangerzone_mailer/account_confirmation_email.html.erb", "app/views/dangerzone_mailer/account_confirmation_email.html.erb"
|
82
|
+
copy_file "views/dangerzone_mailer/account_confirmation_email.text.erb", "app/views/dangerzone_mailer/account_confirmation_email.text.erb"
|
83
|
+
copy_file "views/dangerzone_mailer/reset_password_email.html.erb", "app/views/dangerzone_mailer/reset_password_email.html.erb"
|
84
|
+
copy_file "views/dangerzone_mailer/reset_password_email.text.erb", "app/views/dangerzone_mailer/reset_password_email.text.erb"
|
85
|
+
|
86
|
+
copy_file "views/reset_passwords/new.html.erb", "app/views/reset_passwords/new.html.erb"
|
87
|
+
copy_file "views/reset_passwords/reset_password_form.html.erb", "app/views/reset_passwords/reset_password_form.html.erb"
|
88
|
+
|
89
|
+
copy_file "views/sessions/new.html.erb", "app/views/sessions/new.html.erb"
|
90
|
+
end
|
91
|
+
|
92
|
+
include Rails::Generators::Migration
|
93
|
+
desc "add the migrations"
|
94
|
+
|
95
|
+
def self.next_migration_number(path)
|
96
|
+
unless @prev_migration_nr
|
97
|
+
@prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
|
98
|
+
else
|
99
|
+
@prev_migration_nr += 1
|
100
|
+
end
|
101
|
+
@prev_migration_nr.to_s
|
102
|
+
end
|
103
|
+
|
104
|
+
def generate_the_users_migration_file
|
105
|
+
migration_template "migration.rb", "db/migrate/create_users_table_via_dangerzone.rb"
|
106
|
+
end
|
107
|
+
|
108
|
+
private
|
109
|
+
|
110
|
+
def gsub_file(relative_destination, regexp, *args, &block)
|
111
|
+
path = relative_destination
|
112
|
+
content = File.read(path).gsub(regexp, *args, &block)
|
113
|
+
File.open(path, 'wb') { |file| file.write(content) }
|
114
|
+
end
|
115
|
+
|
116
|
+
def get_directory
|
117
|
+
directory = __FILE__.split('/')
|
118
|
+
directory.pop
|
119
|
+
directory.join('/')
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
Binary file
|
@@ -0,0 +1,11 @@
|
|
1
|
+
def current_user
|
2
|
+
@current_user = User.find_by_remember_token(cookies[:remember_token])
|
3
|
+
@current_user ||= User.find_by_id(session[:user_id])
|
4
|
+
@current_user = nil if @current_user && request.remote_ip != @current_user.sign_in_ip
|
5
|
+
@current_user
|
6
|
+
end
|
7
|
+
|
8
|
+
def authorize_user
|
9
|
+
redirect_to sign_in_url if current_user.nil?
|
10
|
+
end
|
11
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
class CreateAccountsController < ApplicationController
|
2
|
+
|
3
|
+
def create
|
4
|
+
session[:email] = params[:user][:email]
|
5
|
+
@user = User.new(params[:user])
|
6
|
+
@user.email = @user.email.downcase
|
7
|
+
@user.remember_token = SecureRandom.urlsafe_base64
|
8
|
+
if @user.update_reset_password_credentials
|
9
|
+
DangerzoneMailer.account_confirmation_email(@user).deliver
|
10
|
+
redirect_to check_your_email_url, notice: "Registration successful."
|
11
|
+
else
|
12
|
+
redirect_to sign_up_url, notice: "Registration unsuccessful"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def resend_confirmation_email
|
17
|
+
@user = User.find_by_email(params[:email].downcase)
|
18
|
+
if @user && !@user.confirmed
|
19
|
+
@user.update_reset_password_credentials
|
20
|
+
DangerzoneMailer.account_confirmation_email(@user).deliver
|
21
|
+
redirect_to check_your_email_url, notice: "Resent confirmation email."
|
22
|
+
else
|
23
|
+
redirect_to check_your_email_url, notice: "Something went wrong."
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def confirm
|
28
|
+
@user = User.find_by_id(params[:id])
|
29
|
+
if @user && (Time.now - @user.reset_password_sent_at) < 60.minutes && @user.reset_password_token == params[:reset_password_token]
|
30
|
+
reset_session
|
31
|
+
@user.confirm(request.remote_ip)
|
32
|
+
session[:user_id] = @user.id
|
33
|
+
redirect_to root_url, notice: "User confirmation successful."
|
34
|
+
else
|
35
|
+
redirect_to sign_up_url, notice: "User confirmation unsuccessful."
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def new
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class ResetPasswordsController < ApplicationController
|
2
|
+
|
3
|
+
def send_reset_password
|
4
|
+
@user = User.find_by_email(params[:email].downcase)
|
5
|
+
if @user.update_reset_password_credentials
|
6
|
+
DangerzoneMailer.reset_password_email(@user).deliver
|
7
|
+
redirect_to forgot_password_url, notice: "Reset password email successfully sent."
|
8
|
+
else
|
9
|
+
redirect_to forgot_password_url, notice: "Reset password email failed to send."
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def reset_password_form
|
14
|
+
@user = User.find_by_id(params[:id])
|
15
|
+
if @user && (Time.now - @user.reset_password_sent_at) < 60.minutes && @user.reset_password_token == params[:reset_password_token]
|
16
|
+
session[:reset_password_user_id] = @user.id
|
17
|
+
else
|
18
|
+
redirect_to forgot_password_url, notice: "There was a problem, try having the email resent to you."
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def update_password
|
23
|
+
@user = User.find_by_id(session[:reset_password_user_id])
|
24
|
+
if @user && (Time.now - @user.reset_password_sent_at) < 60.minutes
|
25
|
+
@user.password = params[:password]
|
26
|
+
@user.password_confirmation = params[:password_confirmation]
|
27
|
+
@user.reset_password_token = SecureRandom.urlsafe_base64
|
28
|
+
if @user.save
|
29
|
+
reset_session
|
30
|
+
session[:user_id] = @user.id
|
31
|
+
redirect_to root_url, notice: "Password successfully updated."
|
32
|
+
else
|
33
|
+
redirect_to send_reset_password_url, notice: "Update password unsuccessful."
|
34
|
+
end
|
35
|
+
else
|
36
|
+
redirect_to send_reset_password_url, notice: "Update password unsuccessful."
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def new
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class SessionsController < ApplicationController
|
2
|
+
|
3
|
+
def create
|
4
|
+
@user = User.find_by_email(params[:email].downcase)
|
5
|
+
if @user && @user.authenticate(params[:password]) && @user.confirmed
|
6
|
+
@user.sign_in_ip = request.remote_ip
|
7
|
+
@user.sign_in_count = @user.sign_in_count + 1
|
8
|
+
if params[:remember_me] == '1'
|
9
|
+
@user.remember_token = SecureRandom.urlsafe_base64
|
10
|
+
cookies.permanent[:remember_token] = @user.remember_token
|
11
|
+
else
|
12
|
+
session[:user_id] = @user.id
|
13
|
+
end
|
14
|
+
@user.save
|
15
|
+
redirect_to root_url, :notice => "Sign-in successful."
|
16
|
+
else
|
17
|
+
redirect_to sign_in_url, :notice => "Sign-in unsuccessful."
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def destroy
|
22
|
+
cookies.delete(:remember_token)
|
23
|
+
reset_session
|
24
|
+
redirect_to sign_in_url, :notice => "Sign-out successful."
|
25
|
+
end
|
26
|
+
|
27
|
+
def new
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class DangerzoneMailer < ActionMailer::Base
|
2
|
+
default from: "YOUR SITE"
|
3
|
+
|
4
|
+
def account_confirmation_email(user)
|
5
|
+
@user = user
|
6
|
+
mail to: @user.email, subject: "Confirm your account"
|
7
|
+
end
|
8
|
+
|
9
|
+
def reset_password_email(user)
|
10
|
+
@user = user
|
11
|
+
mail to: @user.email, subject: "Reset your password"
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class CreateUsersTableViaDangerzone < ActiveRecord::Migration
|
2
|
+
|
3
|
+
def up
|
4
|
+
create_table :users do |t|
|
5
|
+
t.string :email
|
6
|
+
t.string :password
|
7
|
+
t.string :password_confirmation
|
8
|
+
t.string :password_digest
|
9
|
+
t.string :sign_in_ip
|
10
|
+
t.string :remember_token
|
11
|
+
t.string :reset_password_token
|
12
|
+
t.datetime :reset_password_sent_at
|
13
|
+
t.boolean :confirmed, :default => false
|
14
|
+
t.integer :sign_in_count, :default => 1
|
15
|
+
|
16
|
+
t.timestamps
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def down
|
21
|
+
drop_table :users
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class User < ActiveRecord::Base
|
2
|
+
|
3
|
+
has_secure_password
|
4
|
+
|
5
|
+
attr_accessible :email, :password, :password_confirmation
|
6
|
+
|
7
|
+
validates_presence_of :email
|
8
|
+
validates_uniqueness_of :email
|
9
|
+
validates_format_of :email, :with => /.+@.+\..+/i
|
10
|
+
|
11
|
+
def update_reset_password_credentials
|
12
|
+
self.reset_password_sent_at = Time.now
|
13
|
+
self.reset_password_token = SecureRandom.urlsafe_base64
|
14
|
+
self.save
|
15
|
+
end
|
16
|
+
|
17
|
+
def confirm(request_remote_ip)
|
18
|
+
self.confirmed = true
|
19
|
+
self.reset_password_sent_at = nil
|
20
|
+
self.reset_password_token = nil
|
21
|
+
self.sign_in_ip = request_remote_ip
|
22
|
+
self.save
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
root to: 'create_accounts#dangerzone'
|
2
|
+
|
3
|
+
get '/dangerzone' => 'create_accounts#dangerzone', as: 'dangerzone'
|
4
|
+
|
5
|
+
post '/sessions' => 'sessions#create', as: 'sessions'
|
6
|
+
get '/sign-in' => 'sessions#new', as: 'sign_in'
|
7
|
+
delete '/sign-out' => 'sessions#destroy', as: 'sign_out'
|
8
|
+
|
9
|
+
post '/create_accounts' => 'create_accounts#create', as: 'create_accounts'
|
10
|
+
get '/sign-up' => 'create_accounts#new', as: 'sign_up'
|
11
|
+
get '/sign-up/:id/:reset_password_token' => 'create_accounts#confirm', as: 'confirm'
|
12
|
+
get '/check_your_email' => 'create_accounts#check_your_email', as: 'check_your_email'
|
13
|
+
put '/resend_confirmation_email' => 'create_accounts#resend_confirmation_email', as: 'resend_confirmation_email'
|
14
|
+
|
15
|
+
get '/forgot_password' => 'reset_passwords#new', as: 'forgot_password'
|
16
|
+
put '/reset_password' => 'reset_passwords#send_reset_password', as: 'send_reset_password'
|
17
|
+
get '/reset_password/:id/:reset_password_token' => 'reset_passwords#reset_password_form', as: 'reset_password_form'
|
18
|
+
put '/update_password' => 'reset_passwords#update_password', as: 'update_password'
|
Binary file
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<div>
|
2
|
+
Check your inbox for a confirmation email.
|
3
|
+
<br />
|
4
|
+
(Didn't get one? Enter your email address and we'll send you a fresh one.)
|
5
|
+
<br />
|
6
|
+
<%= form_tag(resend_confirmation_email_url, method: 'put') do %>
|
7
|
+
<%= label_tag :email %>
|
8
|
+
<%= email_field_tag :email, nil, placeholder: 'Email' %>
|
9
|
+
<%= submit_tag 'Resend Email' %>
|
10
|
+
<% end -%>
|
11
|
+
</div>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<h5>Lana.... Lana.... LANA!!!</h5>
|
2
|
+
|
3
|
+
<h3>Dangerzone!</h3>
|
4
|
+
|
5
|
+
<p>This page is just a placeholder until you set up your root_url, so...</p>
|
6
|
+
|
7
|
+
<ul>
|
8
|
+
<li>In your /config/routes.rb change the root_url to a different controller#action
|
9
|
+
(or get rid of the 'root to:' altogether and change the controllers dangerzone
|
10
|
+
generated for you so you don't get a NoMethodError). While you're there
|
11
|
+
also get rid of the "/dangerzone" route.</li>
|
12
|
+
<li>Once you've done that, delete this page
|
13
|
+
(it's in app/views/create_accounts as dangerzone.html.erb),
|
14
|
+
unless you want to hold on to it for nostalgia's sake.</li>
|
15
|
+
<li>Don't forget to add 'before_filter :authorize_user'
|
16
|
+
to the controllers that have actions you only want registered
|
17
|
+
users to be able to use. </li>
|
18
|
+
<li>For more help or information regarding dangerzone, check out the dangerzone
|
19
|
+
readme on <%= link_to 'Github', 'https://github.com/michaelcrismali/dangerzone' %></li>
|
20
|
+
</ul>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<div>
|
2
|
+
<%= form_for(User.new, :url => create_accounts_url, :method => :post) do |f| %>
|
3
|
+
<%= label_tag :email %>
|
4
|
+
<%= f.email_field :email, :placeholder => "Email", value: session[:email] %>
|
5
|
+
<%= label_tag :password %>
|
6
|
+
<%= f.password_field :password, :placeholder => "Password" %>
|
7
|
+
<%= label_tag :password_confirmation %>
|
8
|
+
<%= f.password_field :password_confirmation, :placeholder => "Confirm Password" %>
|
9
|
+
<%= f.submit "Sign Up" %>
|
10
|
+
<% end %>
|
11
|
+
</div>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<div>
|
2
|
+
<h3>Forgot your password? Just enter your email address below and click submit for an
|
3
|
+
email that will help you reset your password.</h3>
|
4
|
+
<br />
|
5
|
+
<%= form_tag(send_reset_password_url, method: 'put') do %>
|
6
|
+
<%= label_tag :email %>
|
7
|
+
<%= email_field_tag :email, nil, placeholder: 'Email' %>
|
8
|
+
<%= submit_tag 'Submit' %>
|
9
|
+
<% end -%>
|
10
|
+
</div>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<h1>Reset your password below:</h1>
|
2
|
+
<div>
|
3
|
+
<%= form_tag( update_password_url, method: 'put') do %>
|
4
|
+
<%= label_tag :password %>
|
5
|
+
<%= password_field_tag :password, nil, placeholder: 'Password' %>
|
6
|
+
<%= label_tag :password_confirmation %>
|
7
|
+
<%= password_field_tag :password_confirmation, nil, placeholder: 'Password Confirmation' %>
|
8
|
+
<%= submit_tag 'Update' %>
|
9
|
+
<% end -%>
|
10
|
+
</div>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<div>
|
2
|
+
<%= form_tag(sessions_url, :method => :post) do %>
|
3
|
+
<%= label_tag :email %>
|
4
|
+
<%= email_field_tag :email, nil, :placeholder => "Email" %>
|
5
|
+
<%= label_tag :password %>
|
6
|
+
<%= password_field_tag :password, nil, :placeholder => "Password" %>
|
7
|
+
<%= label_tag :remember_me %>
|
8
|
+
<%= check_box_tag :remember_me %>
|
9
|
+
<%= submit_tag "Sign in" %>
|
10
|
+
<% end %>
|
11
|
+
<%= link_to 'Forgot password?', forgot_password_url %>
|
12
|
+
</div>
|
data/lib/dangerzone.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'dangerzone/dangerzone_generator'
|
metadata
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dangerzone
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Michael Crismali
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-03-30 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bcrypt-ruby
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '3.0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rails
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '3.2'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '3.2'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: thor
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
description: Generates a sign-in, sign-out, create account, forgot password, account
|
63
|
+
confirmation systems for Rails apps. It's Devise for beginners.
|
64
|
+
email: michael.crismali@gmail.com
|
65
|
+
executables: []
|
66
|
+
extensions: []
|
67
|
+
extra_rdoc_files: []
|
68
|
+
files:
|
69
|
+
- README.md
|
70
|
+
- dangerzone.gemspec
|
71
|
+
- lib/.DS_Store
|
72
|
+
- lib/dangerzone.rb
|
73
|
+
- lib/dangerzone/.DS_Store
|
74
|
+
- lib/dangerzone/dangerzone_generator.rb
|
75
|
+
- lib/dangerzone/templates/.DS_Store
|
76
|
+
- lib/dangerzone/templates/controllers/application_controller.rb
|
77
|
+
- lib/dangerzone/templates/controllers/create_accounts_controller.rb
|
78
|
+
- lib/dangerzone/templates/controllers/reset_passwords_controller.rb
|
79
|
+
- lib/dangerzone/templates/controllers/sessions_controller.rb
|
80
|
+
- lib/dangerzone/templates/mailers/dangerzone_mailer.rb
|
81
|
+
- lib/dangerzone/templates/migration.rb
|
82
|
+
- lib/dangerzone/templates/models/user.rb
|
83
|
+
- lib/dangerzone/templates/routes.rb
|
84
|
+
- lib/dangerzone/templates/views/.DS_Store
|
85
|
+
- lib/dangerzone/templates/views/create_accounts/check_your_email.html.erb
|
86
|
+
- lib/dangerzone/templates/views/create_accounts/dangerzone.html.erb
|
87
|
+
- lib/dangerzone/templates/views/create_accounts/new.html.erb
|
88
|
+
- lib/dangerzone/templates/views/dangerzone_mailer/account_confirmation_email.html.erb
|
89
|
+
- lib/dangerzone/templates/views/dangerzone_mailer/account_confirmation_email.text.erb
|
90
|
+
- lib/dangerzone/templates/views/dangerzone_mailer/reset_password_email.html.erb
|
91
|
+
- lib/dangerzone/templates/views/dangerzone_mailer/reset_password_email.text.erb
|
92
|
+
- lib/dangerzone/templates/views/nav.html.erb
|
93
|
+
- lib/dangerzone/templates/views/reset_passwords/new.html.erb
|
94
|
+
- lib/dangerzone/templates/views/reset_passwords/reset_password_form.html.erb
|
95
|
+
- lib/dangerzone/templates/views/sessions/new.html.erb
|
96
|
+
homepage: https://github.com/michaelcrismali/dangerzone
|
97
|
+
licenses:
|
98
|
+
- MIT
|
99
|
+
post_install_message:
|
100
|
+
rdoc_options: []
|
101
|
+
require_paths:
|
102
|
+
- lib
|
103
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
105
|
+
requirements:
|
106
|
+
- - ! '>='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
+
none: false
|
111
|
+
requirements:
|
112
|
+
- - ! '>='
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
requirements: []
|
116
|
+
rubyforge_project:
|
117
|
+
rubygems_version: 1.8.24
|
118
|
+
signing_key:
|
119
|
+
specification_version: 3
|
120
|
+
summary: Takes care of creating accounts, login, logout, forgot password, etc. in
|
121
|
+
Rails
|
122
|
+
test_files: []
|