dangerzone 0.0.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.
- 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: []
|