constellation-authentication 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/controllers/application_controller.rb +71 -0
- data/app/controllers/password_resets_controller.rb +45 -0
- data/app/controllers/user_sessions_controller.rb +24 -0
- data/app/controllers/users_controller.rb +67 -0
- data/app/mailers/user_mailer.rb +13 -0
- data/app/models/user.rb +13 -0
- data/app/models/user_session.rb +6 -0
- data/app/views/password_resets/edit.html.erb +11 -0
- data/app/views/password_resets/new.html.erb +9 -0
- data/app/views/user_mailer/confirmation.html.erb +7 -0
- data/app/views/user_mailer/confirmation.text.erb +3 -0
- data/app/views/user_mailer/password_reset.html.erb +12 -0
- data/app/views/user_mailer/password_reset.text.erb +5 -0
- data/app/views/user_sessions/new.html.erb +16 -0
- data/app/views/users/edit.html.erb +11 -0
- data/app/views/users/new.html.erb +12 -0
- data/app/views/users/resend_confirmation.html.erb +9 -0
- data/app/views/users/show.html.erb +7 -0
- data/config/locales/en.yml +51 -0
- data/config/routes.rb +18 -0
- data/lib/constellation/authentication.rb +1 -0
- data/lib/constellation/authentication/engine.rb +40 -0
- data/lib/generators/constellation/templates/migration.rb +25 -0
- data/lib/generators/constellation/user_generator.rb +26 -0
- metadata +86 -0
@@ -0,0 +1,71 @@
|
|
1
|
+
class ApplicationController < ActionController::Base
|
2
|
+
|
3
|
+
helper_method :current_user_session, :current_user
|
4
|
+
|
5
|
+
protected
|
6
|
+
|
7
|
+
# Returns the current user session
|
8
|
+
def current_user_session
|
9
|
+
return @current_user_session if defined?(@current_user_session)
|
10
|
+
@current_user_session = UserSession.find
|
11
|
+
end
|
12
|
+
|
13
|
+
# Returns the currently logged in user, or nil if the user is not logged in.
|
14
|
+
def current_user
|
15
|
+
return @current_user if defined?(@current_user)
|
16
|
+
@current_user = current_user_session && current_user_session.user
|
17
|
+
end
|
18
|
+
|
19
|
+
# A class level shortcut to declaritively define a before filter that requires
|
20
|
+
# the current user to be logged in.
|
21
|
+
def self.require_user(options = {})
|
22
|
+
before_filter :require_user, options
|
23
|
+
end
|
24
|
+
|
25
|
+
# A class level shortcut to declaritively define a before filter that requires
|
26
|
+
# the current user to be logged out.
|
27
|
+
def self.require_no_user(options = {})
|
28
|
+
before_filter :require_no_user, options
|
29
|
+
end
|
30
|
+
|
31
|
+
# The instance level method that can be a before filter to require a logged in user.
|
32
|
+
#
|
33
|
+
# config.constellation.authentication.require_user_flash determines the flash key, the default is :notice
|
34
|
+
# config.constellation.authentication.require_user_redirection determines where the user is redirected, the default is user_sessions#new
|
35
|
+
# The locale's constellation.authentication.require_user key is the flash message and can be configured or translated at will
|
36
|
+
def require_user(options = {})
|
37
|
+
unless current_user
|
38
|
+
store_location
|
39
|
+
flash[Rails.application.config.constellation.authentication.require_user_flash] = t('constellation.authentication.require_user')
|
40
|
+
redirect_to Rails.application.config.constellation.authentication.require_user_redirection
|
41
|
+
return false
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# The instance level method that can be a before filter to require a logged out user.
|
46
|
+
#
|
47
|
+
# config.constellation.authentication.require_no_user_flash determines the flash key, the default is :notice
|
48
|
+
# config.constellation.authentication.require_no_user_redirection determines where the user is redirected, the default is '/'
|
49
|
+
# The locale's constellation.authentication.require_no_user key is the flash message and can be configured or translated at will
|
50
|
+
def require_no_user(options = {})
|
51
|
+
if current_user
|
52
|
+
store_location
|
53
|
+
flash[Rails.application.config.constellation.authentication.require_no_user_flash] = t('constellation.authentication.require_no_user')
|
54
|
+
redirect_to Rails.application.config.constellation.authentication.require_no_user_redirection
|
55
|
+
return false
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# A method to store the currently requested URI in the session so that after logging
|
60
|
+
# in the user can be redirected to the page they were previously trying to access.
|
61
|
+
def store_location
|
62
|
+
session[:constellation_stored_location] = request.fullpath
|
63
|
+
end
|
64
|
+
|
65
|
+
# If a previously requested URI was stored, this redirects the user to that page and
|
66
|
+
# clears the session variable; if not the user is redirected to the parameter passed.
|
67
|
+
def redirect_back_or_default(default)
|
68
|
+
redirect_to(session[:constellation_stored_location] || default)
|
69
|
+
session[:constellation_stored_location] = nil
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
class PasswordResetsController < ApplicationController
|
2
|
+
before_filter :load_user_using_perishable_token, :only => [:edit, :update]
|
3
|
+
require_no_user
|
4
|
+
|
5
|
+
def new
|
6
|
+
end
|
7
|
+
|
8
|
+
def create
|
9
|
+
@user = User.find_by_email(params[:email])
|
10
|
+
if @user
|
11
|
+
@user.reset_perishable_token!
|
12
|
+
UserMailer.password_reset(@user).deliver
|
13
|
+
flash[Rails.application.config.constellation.authentication.success_flash] = t("constellation.authentication.password_resets.create.success_flash")
|
14
|
+
redirect_to Rails.application.config.constellation.authentication.password_reset_redirection
|
15
|
+
else
|
16
|
+
flash.now[Rails.application.config.constellation.authentication.failure_flash] = t("constellation.authentication.password_resets.create.failure_flash")
|
17
|
+
render :action => :new
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def edit
|
22
|
+
render
|
23
|
+
end
|
24
|
+
|
25
|
+
def update
|
26
|
+
@user.password = params[:user][:password]
|
27
|
+
@user.password_confirmation = params[:user][:password_confirmation]
|
28
|
+
if @user.save
|
29
|
+
flash[Rails.application.config.constellation.authentication.success_flash] = t("constellation.authentication.password_resets.update.success_flash")
|
30
|
+
redirect_to Rails.application.config.constellation.authentication.signin_redirection
|
31
|
+
else
|
32
|
+
render :action => :edit
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
def load_user_using_perishable_token
|
38
|
+
@user = User.find_using_perishable_token(params[:id])
|
39
|
+
unless @user
|
40
|
+
flash[Rails.application.config.constellation.authentication.failure_flash] = t("constellation.authentication.password_resets.load_user_failure_flash")
|
41
|
+
redirect_to Rails.application.config.constellation.authentication.password_reset_redirection
|
42
|
+
return false
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class UserSessionsController < ApplicationController
|
2
|
+
require_no_user :only => [:new, :create]
|
3
|
+
require_user :only => :destroy
|
4
|
+
|
5
|
+
def new
|
6
|
+
@user_session = UserSession.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def create
|
10
|
+
@user_session = UserSession.new(params[:user_session])
|
11
|
+
if @user_session.save
|
12
|
+
flash[Rails.application.config.constellation.authentication.success_flash] = t("constellation.authentication.user_sessions.create.success_flash")
|
13
|
+
redirect_back_or_default Rails.application.config.constellation.authentication.signin_redirection
|
14
|
+
else
|
15
|
+
render :action => :new
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def destroy
|
20
|
+
current_user_session.destroy
|
21
|
+
flash[Rails.application.config.constellation.authentication.success_flash] = t("constellation.authentication.user_sessions.destroy.success_flash")
|
22
|
+
redirect_to signin_path
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
class UsersController < ApplicationController
|
2
|
+
require_no_user :only => [:new, :create]
|
3
|
+
require_user :only => [:show, :edit, :update]
|
4
|
+
|
5
|
+
def new
|
6
|
+
@user = User.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def create
|
10
|
+
@user = User.new(params[:user])
|
11
|
+
if @user.save
|
12
|
+
UserMailer.confirmation(@user).deliver if Rails.application.config.constellation.authentication.confirm_signup
|
13
|
+
flash[Rails.application.config.constellation.authentication.success_flash] = t("constellation.authentication.users.create.success_flash")
|
14
|
+
redirect_to Rails.application.config.constellation.authentication.signup_redirection
|
15
|
+
else
|
16
|
+
render :action => :new
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def show
|
21
|
+
@user = @current_user
|
22
|
+
end
|
23
|
+
|
24
|
+
def edit
|
25
|
+
@user = @current_user
|
26
|
+
end
|
27
|
+
|
28
|
+
def update
|
29
|
+
@user = @current_user
|
30
|
+
if @user.update_attributes(params[:user])
|
31
|
+
flash[Rails.application.config.constellation.authentication.success_flash] = t("constellation.authentication.users.update.success_flash")
|
32
|
+
redirect_to account_url
|
33
|
+
else
|
34
|
+
render :action => :edit
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
if Rails.application.config.constellation.authentication.confirm_signup
|
39
|
+
def confirm
|
40
|
+
@user = User.find_using_perishable_token params[:token]
|
41
|
+
if @user
|
42
|
+
@user.confirmed_at = Time.now
|
43
|
+
@user.save
|
44
|
+
UserSession.create @user
|
45
|
+
flash[Rails.application.config.constellation.authentication.success_flash] = t("constellation.authentication.users.confirm.success_flash")
|
46
|
+
redirect_to Rails.application.config.constellation.authentication.confirm_redirection
|
47
|
+
else
|
48
|
+
flash.now[Rails.application.config.constellation.authentication.failure_flash] = t("constellation.authentication.users.confirm.failure_flash")
|
49
|
+
redirect_to resend_confirmation_path
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def resend_confirmation
|
54
|
+
if request.post?
|
55
|
+
@user = User.find_by_email params[:email]
|
56
|
+
if @user
|
57
|
+
@user.reset_perishable_token!
|
58
|
+
UserMailer.confirmation(@user).deliver
|
59
|
+
flash.now[Rails.application.config.constellation.authentication.success_flash] = t("constellation.authentication.users.resend_confirmation.success_flash")
|
60
|
+
redirect_to Rails.application.config.constellation.authentication.resend_confirmation_redirection
|
61
|
+
else
|
62
|
+
flash.now[Rails.application.config.constellation.authentication.failure_flash] = t("constellation.authentication.users.resend_confirmation.failure_flash")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class UserMailer < ActionMailer::Base
|
2
|
+
def confirmation(user)
|
3
|
+
@url = confirm_url :token => user.perishable_token
|
4
|
+
mail :to => user.email,
|
5
|
+
:subject => "Please confirm your email address!"
|
6
|
+
end
|
7
|
+
|
8
|
+
def password_reset(user)
|
9
|
+
@url = edit_password_reset_url user.perishable_token
|
10
|
+
mail :to => user.email,
|
11
|
+
:subject => "Please reset your password!"
|
12
|
+
end
|
13
|
+
end
|
data/app/models/user.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
class User < ActiveRecord::Base
|
2
|
+
acts_as_authentic
|
3
|
+
|
4
|
+
attr_accessible :email, :password, :password_confirmation
|
5
|
+
|
6
|
+
if Rails.application.config.constellation.authentication.confirm_signup
|
7
|
+
# This is a magic method that Authlogic uses to determine if the user is confirmed
|
8
|
+
# and should be able to log in.
|
9
|
+
def confirmed?
|
10
|
+
!!confirmed_at
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<h1><%= t("constellation.authentication.password_resets.edit.headline") %></h1>
|
2
|
+
|
3
|
+
<%= semantic_form_for @user, :url => password_reset_path, :method => :put do |form| %>
|
4
|
+
<%= form.inputs do %>
|
5
|
+
<%= form.input :password %>
|
6
|
+
<%= form.input :password_confirmation %>
|
7
|
+
<% end %>
|
8
|
+
<%= form.buttons do %>
|
9
|
+
<%= form.commit_button :label => t("constellation.authentication.password_resets.edit.button_label") %>
|
10
|
+
<% end %>
|
11
|
+
<% end %>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<h1><%= t("constellation.authentication.password_resets.new.headline") %></h1>
|
2
|
+
|
3
|
+
<p><%= t("constellation.authentication.password_resets.new.description") %></p>
|
4
|
+
|
5
|
+
<%= form_tag password_resets_path do %>
|
6
|
+
<%= label_tag :email %>
|
7
|
+
<%= text_field_tag :email, params[:email] %>
|
8
|
+
<br/><%= submit_tag t("constellation.authentication.password_resets.new.button_label") %>
|
9
|
+
<% end %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<p>
|
2
|
+
A request to reset your password has been made. If you did not make this request, simply ignore this email. If you did make this request just click the link below.
|
3
|
+
</p>
|
4
|
+
|
5
|
+
<p>
|
6
|
+
<%= link_to @url, @url %>
|
7
|
+
</p>
|
8
|
+
|
9
|
+
<p>
|
10
|
+
If the above URL does not work try copying and pasting it into your browser. If you continue to have problem please feel free to contact us.
|
11
|
+
</p>
|
12
|
+
|
@@ -0,0 +1,5 @@
|
|
1
|
+
A request to reset your password has been made. If you did not make this request, simply ignore this email. If you did make this request just click the link below.
|
2
|
+
|
3
|
+
<%= @url %>
|
4
|
+
|
5
|
+
If the above URL does not work try copying and pasting it into your browser. If you continue to have problem please feel free to contact us.
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<h1><%= t("constellation.authentication.user_sessions.new.headline")%></h1>
|
2
|
+
|
3
|
+
<%= semantic_form_for @user_session, :url => user_session_path, :method => :post do |form| %>
|
4
|
+
<%= form.semantic_errors %>
|
5
|
+
<%= form.inputs do %>
|
6
|
+
<%= form.input :email %>
|
7
|
+
<%= form.input :password %>
|
8
|
+
<%= form.check_box :remember_me %><%= form.label :remember_me %>
|
9
|
+
<% end %>
|
10
|
+
<%= form.buttons do %>
|
11
|
+
<%= form.commit_button :label => t("constellation.authentication.user_sessions.new.button_label") %>
|
12
|
+
<% end %>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
<%= link_to t("constellation.authentication.users.resend_confirmation.link_text"), resend_confirmation_path %>
|
16
|
+
<%= link_to t("constellation.authentication.password_resets.new.link_text"), new_password_reset_path %>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<h1><%= t("constellation.authentication.users.edit.headline") %></h1>
|
2
|
+
|
3
|
+
<%= semantic_form_for @user do |form| %>
|
4
|
+
<%= form.inputs do %>
|
5
|
+
<%= form.input :password %>
|
6
|
+
<%= form.input :password_confirmation %>
|
7
|
+
<% end %>
|
8
|
+
<%= form.buttons do %>
|
9
|
+
<%= form.commit_button :label => t("constellation.authentication.users.edit.button_label") %>
|
10
|
+
<% end %>
|
11
|
+
<% end %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<h1><%= t("constellation.authentication.users.new.headline") %></h1>
|
2
|
+
|
3
|
+
<%= semantic_form_for @user do |form| %>
|
4
|
+
<%= form.inputs do %>
|
5
|
+
<%= form.input :email %>
|
6
|
+
<%= form.input :password %>
|
7
|
+
<%= form.input :password_confirmation %>
|
8
|
+
<% end %>
|
9
|
+
<%= form.buttons do %>
|
10
|
+
<%= form.commit_button :label => t("constellation.authentication.users.new.button_label") %>
|
11
|
+
<% end %>
|
12
|
+
<% end %>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<h1><%= t("constellation.authentication.users.resend_confirmation.headline") %></h1>
|
2
|
+
|
3
|
+
<p><%= t("constellation.authentication.users.resend_confirmation.description") %></p>
|
4
|
+
|
5
|
+
<% form_tag resend_confirmation_path do %>
|
6
|
+
<%= label_tag :email %>
|
7
|
+
<%= text_field_tag :email, params[:email] %>
|
8
|
+
<br/><%= submit_tag t("constellation.authentication.users.resend_confirmation.button_label") %>
|
9
|
+
<% end %>
|
@@ -0,0 +1,51 @@
|
|
1
|
+
en:
|
2
|
+
constellation:
|
3
|
+
authentication:
|
4
|
+
require_user: "You must be signed in to access this page."
|
5
|
+
require_no_user: "You must be signed out to access this page."
|
6
|
+
users:
|
7
|
+
new:
|
8
|
+
headline: "Sign Up"
|
9
|
+
button_label: "Sign Up"
|
10
|
+
create:
|
11
|
+
success_flash: "Thanks for signing up!"
|
12
|
+
show:
|
13
|
+
headline: "My Account"
|
14
|
+
edit:
|
15
|
+
headline: "Edit My Account"
|
16
|
+
button_label: "Update"
|
17
|
+
link_text: "Edit"
|
18
|
+
update:
|
19
|
+
success_flash: "Account updated!"
|
20
|
+
confirm:
|
21
|
+
success_flash: "Account successfully activated!"
|
22
|
+
failure_flash: "Your account could not be confirmed. This usually happens if you wait too long before clicking on the link in your email."
|
23
|
+
resend_confirmation:
|
24
|
+
headline: "Resend Confirmation Email"
|
25
|
+
description: "Please check your spam folder! But if you don't find it there, enter your email address below and we'll send you a fresh confirmation email."
|
26
|
+
button_label: "Resend Email"
|
27
|
+
link_text: "Never got your confirmation email? Click here to resend it."
|
28
|
+
failure_flash: "We couldn't find that user. Is your email right? Did you sign up properly?"
|
29
|
+
user_sessions:
|
30
|
+
new:
|
31
|
+
headline: "Sign In"
|
32
|
+
button_label: "Sign In"
|
33
|
+
create:
|
34
|
+
success_flash: "Welcome back!"
|
35
|
+
destroy:
|
36
|
+
success_flash: "You have been signed out."
|
37
|
+
password_resets:
|
38
|
+
new:
|
39
|
+
headline: "Reset Password"
|
40
|
+
description: "Fill out the form below and instructions to reset your password will be emailed to you. Please check your spam folder if you don't see it."
|
41
|
+
button_label: "Reset Password"
|
42
|
+
link_text: "Forget your password? Click here to reset it."
|
43
|
+
create:
|
44
|
+
success_flash: "Instructions to reset your password have been emailed to you. Please check your email."
|
45
|
+
failure_flash: "No user was found with that email address."
|
46
|
+
edit:
|
47
|
+
headline: "Change My Password"
|
48
|
+
button_label: "Update my password and log me in"
|
49
|
+
update:
|
50
|
+
success_flash: "Password successfully updated."
|
51
|
+
load_user_failure_flash: "We could not locate your account. If you are having issues try copying and pasting the URL from your email into your browser or restarting the reset password process."
|
data/config/routes.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
if Rails.application.config.constellation.authentication.include_routes
|
2
|
+
Rails::Application.routes.draw do |map|
|
3
|
+
|
4
|
+
resource :user_session
|
5
|
+
resources :users
|
6
|
+
resource :account, :controller => "users"
|
7
|
+
|
8
|
+
match "signout", :to => "user_sessions#destroy", :as => "signout"
|
9
|
+
match "signin", :to => "user_sessions#new", :as => "signin"
|
10
|
+
match "signup", :to => "users#new", :as => "signup"
|
11
|
+
|
12
|
+
match 'confirm/:token', :to => 'users#confirm', :as => 'confirm'
|
13
|
+
match "resend_confirmation", :to => "users#resend_confirmation", :as => "resend_confirmation"
|
14
|
+
|
15
|
+
resources :password_resets
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'constellation/authentication/engine' if defined?(Rails)
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'constellation/authentication'
|
2
|
+
require 'rails'
|
3
|
+
require 'active_record'
|
4
|
+
|
5
|
+
module Constellation
|
6
|
+
module Authentication
|
7
|
+
class Engine < Rails::Engine
|
8
|
+
config.constellation = ActiveSupport::OrderedOptions.new unless config.respond_to? :constellation
|
9
|
+
config.constellation.authentication = ActiveSupport::OrderedOptions.new
|
10
|
+
config.constellation.authentication.root = __FILE__.gsub('/lib/constellation/authentication/engine.rb', '')
|
11
|
+
|
12
|
+
# Flash keys
|
13
|
+
config.constellation.authentication.success_flash = :success
|
14
|
+
config.constellation.authentication.failure_flash = :error
|
15
|
+
|
16
|
+
# Include the engine's routes? Disable if you wish to provide your own.
|
17
|
+
config.constellation.authentication.include_routes = true
|
18
|
+
|
19
|
+
# Settings for checking if the current user is signed in or not
|
20
|
+
config.constellation.authentication.require_user_redirection = { :controller => 'user_sessions', :action => 'new' }
|
21
|
+
config.constellation.authentication.require_no_user_redirection = '/'
|
22
|
+
config.constellation.authentication.require_user_flash = :notice
|
23
|
+
config.constellation.authentication.require_no_user_flash = :notice
|
24
|
+
|
25
|
+
# Signing Up
|
26
|
+
config.constellation.authentication.signup_redirection = "/"
|
27
|
+
|
28
|
+
# Confirming the user's email
|
29
|
+
config.constellation.authentication.confirm_signup = true
|
30
|
+
config.constellation.authentication.confirm_redirection = "/"
|
31
|
+
config.constellation.authentication.resend_confirmation_redirection = "/"
|
32
|
+
|
33
|
+
# Signing In
|
34
|
+
config.constellation.authentication.signin_redirection = "/"
|
35
|
+
|
36
|
+
# Forgot password
|
37
|
+
config.constellation.authentication.password_reset_redirection = "/"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class CreateUsers < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :users do |t|
|
4
|
+
t.string "email", :null => false
|
5
|
+
t.string "crypted_password", :null => false
|
6
|
+
t.string "password_salt", :null => false
|
7
|
+
t.string "persistence_token", :null => false
|
8
|
+
t.string "single_access_token", :null => false
|
9
|
+
t.string "perishable_token", :null => false
|
10
|
+
t.integer "login_count", :default => 0, :null => false
|
11
|
+
t.integer "failed_login_count", :default => 0, :null => false
|
12
|
+
t.datetime "last_request_at"
|
13
|
+
t.datetime "current_login_at"
|
14
|
+
t.datetime "last_login_at"
|
15
|
+
t.string "current_login_ip"
|
16
|
+
t.string "last_login_ip"
|
17
|
+
t.datetime "confirmed_at"
|
18
|
+
t.timestamps
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.down
|
23
|
+
drop_table :users
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/migration'
|
3
|
+
|
4
|
+
module Constellation
|
5
|
+
class UserGenerator < Rails::Generators::Base
|
6
|
+
include Rails::Generators::Migration
|
7
|
+
|
8
|
+
# Implement the required interface for Rails::Generators::Migration.
|
9
|
+
# taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
|
10
|
+
def self.next_migration_number(dirname)
|
11
|
+
if ActiveRecord::Base.timestamped_migrations
|
12
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
13
|
+
else
|
14
|
+
"%.3d" % (current_migration_number(dirname) + 1)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def create_migration_file
|
19
|
+
migration_template 'migration.rb', 'db/migrate/create_users.rb'
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.source_root
|
23
|
+
@source_root ||= File.join(File.dirname(__FILE__), 'templates')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: constellation-authentication
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Ian Terrell
|
13
|
+
- Jeff Bozek
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-05-04 00:00:00 -07:00
|
19
|
+
default_executable:
|
20
|
+
dependencies: []
|
21
|
+
|
22
|
+
description: A full featured authentication solution built around Authlogic.
|
23
|
+
email: ian@constellationsoft.com;jeff@constellationsoft.com
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- lib/constellation/authentication/engine.rb
|
32
|
+
- lib/constellation/authentication.rb
|
33
|
+
- lib/generators/constellation/templates/migration.rb
|
34
|
+
- lib/generators/constellation/user_generator.rb
|
35
|
+
- app/controllers/application_controller.rb
|
36
|
+
- app/controllers/password_resets_controller.rb
|
37
|
+
- app/controllers/user_sessions_controller.rb
|
38
|
+
- app/controllers/users_controller.rb
|
39
|
+
- app/mailers/user_mailer.rb
|
40
|
+
- app/models/user.rb
|
41
|
+
- app/models/user_session.rb
|
42
|
+
- app/views/password_resets/edit.html.erb
|
43
|
+
- app/views/password_resets/new.html.erb
|
44
|
+
- app/views/user_mailer/confirmation.html.erb
|
45
|
+
- app/views/user_mailer/confirmation.text.erb
|
46
|
+
- app/views/user_mailer/password_reset.html.erb
|
47
|
+
- app/views/user_mailer/password_reset.text.erb
|
48
|
+
- app/views/user_sessions/new.html.erb
|
49
|
+
- app/views/users/edit.html.erb
|
50
|
+
- app/views/users/new.html.erb
|
51
|
+
- app/views/users/resend_confirmation.html.erb
|
52
|
+
- app/views/users/show.html.erb
|
53
|
+
- config/locales/en.yml
|
54
|
+
- config/routes.rb
|
55
|
+
has_rdoc: true
|
56
|
+
homepage: http://github.com/constellationsoft/authentication
|
57
|
+
licenses: []
|
58
|
+
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options: []
|
61
|
+
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
segments:
|
69
|
+
- 0
|
70
|
+
version: "0"
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
segments:
|
76
|
+
- 0
|
77
|
+
version: "0"
|
78
|
+
requirements: []
|
79
|
+
|
80
|
+
rubyforge_project:
|
81
|
+
rubygems_version: 1.3.6
|
82
|
+
signing_key:
|
83
|
+
specification_version: 3
|
84
|
+
summary: A full featured authentication solution built around Authlogic.
|
85
|
+
test_files: []
|
86
|
+
|