simple_login 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,6 @@
1
+ ************************************************
2
+ simple_login is Rails 3 login generator
3
+ ************************************************
4
+
5
+ Example:
6
+ rails g simple_login
@@ -0,0 +1,53 @@
1
+ module SimpleLogin
2
+ module Generators
3
+ class SimpleLoginGenerator < Rails::Generators::Base
4
+ source_root File.expand_path('../templates', __FILE__)
5
+
6
+ def generate_user
7
+ # Copy the controllers for user, sessions and password_reset
8
+ directory "controllers", "app/controllers/"
9
+ directory "mailers", "app/mailers/"
10
+ directory "models", "app/models/"
11
+ directory "views", "app/views/"
12
+ end
13
+
14
+ def insert_general_methods
15
+ inject_into_file "app/controllers/application_controller.rb", after: "protect_from_forgery" do
16
+ a = "\n\n private\n\n def current_user\n"
17
+ b = " @current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]\n"
18
+ c = " end\n"
19
+ d = "\n helper_method :current_user\n\n"
20
+ e = " def authorize\n"
21
+ f = " redirect_to login_url, alert: 'Not authorized. Please login.' if current_user.nil?\n"
22
+ g = " end\n"
23
+ a+b+c+d+e+f+g
24
+ end
25
+ end
26
+
27
+ def insert_routes
28
+ insert_into_file "config/routes.rb", after: "Application.routes.draw do" do
29
+ a = "\n\nmatch 'signup', to: 'users#new', as: 'signup'\n"
30
+ b = "match 'login', to: 'sessions#new', as: 'login'\n"
31
+ c = "match 'logout', to: 'sessions#destroy', as: 'logout'\n"
32
+ d = "resources :users\n"
33
+ e = "resources :sessions\n"
34
+ f = "resources :password_resets\n"
35
+ a+b+c+d+e+f
36
+ end
37
+ end
38
+
39
+ def add_gems
40
+ insert_into_file "Gemfile", after: "gem 'jquery-rails'" do
41
+ a = "\n\ngem 'bcrypt-ruby', '~> 3.0.0'"
42
+ a
43
+ end
44
+ end
45
+
46
+ def create_migration_user
47
+ copy_file "create_users.rb", "db/migrate/00_create_users.rb"
48
+ end
49
+
50
+
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,15 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+
4
+ private #PRIVATE PRIVATE PRIVATE
5
+
6
+ def current_user
7
+ @current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]
8
+ end
9
+
10
+ helper_method :current_user
11
+
12
+ def authorize
13
+ redirect_to login_url, alert: "Not authorized. Please login." if current_user.nil?
14
+ end
15
+ end
@@ -0,0 +1,25 @@
1
+ class PasswordResetsController < ApplicationController
2
+ def new
3
+ end
4
+
5
+ def create
6
+ user = User.find_by_email(params[:email])
7
+ user.send_password_reset if user
8
+ redirect_to root_url, :notice => "Email sent with password reset instructions."
9
+ end
10
+
11
+ def edit
12
+ @user = User.find_by_password_reset_token!(params[:id])
13
+ end
14
+
15
+ def update
16
+ @user = User.find_by_password_reset_token!(params[:id])
17
+ if @user.password_reset_sent_at < 2.hours.ago
18
+ redirect_to new_password_reset_path, :alert => "Password reset has expired."
19
+ elsif @user.update_attributes(params[:user])
20
+ redirect_to root_url, :notice => "Password has been reset!"
21
+ else
22
+ render :edit
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ class SessionsController < ApplicationController
2
+ def new
3
+ end
4
+
5
+ def create
6
+ user = User.find_by_email(params[:email])
7
+ if user && user.authenticate(params[:password])
8
+ if params[:remember_me]
9
+ cookies.permanent[:auth_token] = user.auth_token
10
+ else
11
+ cookies[:auth_token] = user.auth_token
12
+ end
13
+ redirect_to root_url, :notice => "Logged in!"
14
+ else
15
+ flash.now.alert = "Invalid email or password"
16
+ render "new"
17
+ end
18
+ end
19
+
20
+ def destroy
21
+ cookies.delete(:auth_token)
22
+ redirect_to root_url, :notice => "Logged out!"
23
+ end
24
+
25
+ end
@@ -0,0 +1,17 @@
1
+ class UsersController < ApplicationController
2
+
3
+ def new
4
+ @user = User.new
5
+ end
6
+
7
+ def create
8
+ @user = User.new(params[:user])
9
+ if @user.save
10
+ cookies[:auth_token] = @user.auth_token
11
+ redirect_to root_url
12
+ else
13
+ render "new"
14
+ end
15
+ end
16
+
17
+ end
@@ -0,0 +1,13 @@
1
+ class CreateUsers < ActiveRecord::Migration
2
+ def change
3
+ create_table :users do |t|
4
+ t.string :email
5
+ t.string :password_digest
6
+ t.string :auth_token
7
+ t.string :password_reset_token
8
+ t.datetime :password_reset_sent_at
9
+
10
+ t.timestamps
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,18 @@
1
+ class UserMailer < ActionMailer::Base
2
+ default from: "your_email@example.com"
3
+
4
+ # Subject can be set in your I18n file at config/locales/en.yml
5
+ # with the following lookup:
6
+ #
7
+ # en.user_mailer.password_reset.subject
8
+ #
9
+ def password_reset(user)
10
+ @user = user
11
+ mail to: user.email, subject: "Password Reset"
12
+ end
13
+
14
+ def account_confirmation(user)
15
+ @user = user
16
+ mail to: @user.email, subject: "Welcome!"
17
+ end
18
+ end
@@ -0,0 +1,32 @@
1
+ class User < ActiveRecord::Base
2
+
3
+ has_secure_password
4
+
5
+ attr_accessible :email, :password, :password_confirmation
6
+
7
+ has_many :posts
8
+
9
+ validates_uniqueness_of :email
10
+ validates_presence_of :email
11
+
12
+ before_create { generate_token(:auth_token) }
13
+ after_create { send_account_confirmation }
14
+
15
+ def send_password_reset
16
+ generate_token(:password_reset_token)
17
+ self.password_reset_sent_at = Time.zone.now
18
+ save!
19
+ UserMailer.password_reset(self).deliver
20
+ end
21
+
22
+ def send_account_confirmation
23
+ UserMailer.account_confirmation(self).deliver
24
+ end
25
+
26
+ def generate_token(column)
27
+ begin
28
+ self[column] = SecureRandom.urlsafe_base64
29
+ end while User.exists?(column => self[column])
30
+ end
31
+
32
+ end
@@ -0,0 +1,35 @@
1
+ <!-- Edit password Non Modal -->
2
+ <div class="container">
3
+ <div class="row center">
4
+ <h1 style="margin-bottom: 20px;">Change Password</h1>
5
+ </div>
6
+ <div class="row">
7
+ <div class="span4 offset4 well">
8
+ <%= form_for @user, :url => password_reset_path(params[:id]), html: {class: "form"} do |f| %>
9
+ <% if @user.errors.any? %>
10
+ <div class="alert alert-error">
11
+ <h2>Form is invalid</h2>
12
+ <ul>
13
+ <% for message in @user.errors.full_messages %>
14
+ <li><%= message %></li>
15
+ <% end %>
16
+ </ul>
17
+ </div>
18
+ <% end %>
19
+ <fieldset>
20
+ <legend>Change Password</legend>
21
+ <div class="control-group">
22
+ <%= f.label :password, nil ,class: "control-label" %>
23
+ <div class="controls"><%= f.password_field :password %></div>
24
+ </div>
25
+ <div class="control-group">
26
+ <%= f.label :password_confirmation, nil ,class: "control-label" %>
27
+ <div class="controls"><%= f.password_field :password_confirmation %></div>
28
+ </div>
29
+ <div class="actions"><%= f.submit "Update Password", class: "btn btn-large btn-primary" %></div>
30
+ </fieldset>
31
+ <% end %>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ <!-- End of Edit Password Non Modal -->
@@ -0,0 +1,20 @@
1
+ <!-- Reset Non Modal -->
2
+
3
+ <div class="container">
4
+ <div class="row">
5
+ <div class="span4 offset4 well">
6
+ <%= form_tag password_resets_path, :method => :post do %>
7
+ <fieldset>
8
+ <legend>Reset Password</legend>
9
+ <div class="control-group">
10
+ <%= label_tag :email, nil, class: "control-label" %>
11
+ <div class="controls"><%= text_field_tag :email, params[:email] %></div>
12
+ </div>
13
+ <div class="actions"><%= submit_tag t("user.reset_password", default: "Reset password"), class: "btn btn-large btn-primary" %></div>
14
+ </fieldset>
15
+ <% end %>
16
+ </div>
17
+ </div>
18
+ </div>
19
+
20
+ <!-- End of Reset Non Modal -->
@@ -0,0 +1,31 @@
1
+ <!-- Login Non Modal -->
2
+
3
+ <div class="container">
4
+ <div class="row">
5
+ <div class="span4 offset4 well">
6
+ <%= form_tag (sessions_path), class: "form" do %>
7
+ <fieldset>
8
+ <legend>Login</legend>
9
+ <div class="control-group">
10
+ <%= label_tag :email, nil ,class: "control-label" %>
11
+ <div class="controls"><%= text_field_tag :email, params[:email], class: "input-xlarge" %></div>
12
+ </div>
13
+ <div class="control-group">
14
+ <%= label_tag :password, nil, class: "control-label" %>
15
+ <div class="controls"><%= password_field_tag (:password), nil ,class: "input-xlarge" %></div>
16
+ </div>
17
+ <div class="control-group">
18
+ <%= label_tag :remember_me, nil, class: "control-label" %>
19
+ <%= check_box_tag :remember_me, 1, params[:remember_me] %>
20
+ </div>
21
+ <div class="actions"><%= submit_tag t("user.log_in", default: "Log in"), class: "btn btn-large btn-primary" %></div>
22
+ </fieldset>
23
+ <% end %>
24
+ <%= link_to t("user.forgotten_password", default: "Forgotten password?"), new_password_reset_path %> - <%= link_to t("user.sign_up", default: "Sign Up"), new_user_path %>
25
+
26
+
27
+ </div>
28
+ </div>
29
+ </div>
30
+
31
+ <!-- End of Login Non Modal -->
@@ -0,0 +1,5 @@
1
+ <%= @user.email %>, Welcome !
2
+
3
+ Thanks for joining us.
4
+
5
+
@@ -0,0 +1,5 @@
1
+ To reset your password, click the URL below.
2
+
3
+ <%= edit_password_reset_url(@user.password_reset_token) %>
4
+
5
+ If you did not request your password to be reset, just ignore this email and your password will continue to stay the same.
@@ -0,0 +1,40 @@
1
+ <!-- Sign UP Non Modal -->
2
+ <div class="container">
3
+ <div class="row center">
4
+ <h1 style="margin-bottom: 20px;">Sign Up</h1>
5
+ </div>
6
+ <div class="row">
7
+ <div class="span4 offset4 well">
8
+ <%= form_for @user, html: {class: "form"} do |f| %>
9
+ <% if @user.errors.any? %>
10
+ <div class="alert alert-error">
11
+ <h2>Form is invalid</h2>
12
+ <ul>
13
+ <% @user.errors.full_messages.each do |message| %>
14
+ <li><%= message %></li>
15
+ <% end %>
16
+ </ul>
17
+ </div>
18
+ <% end %>
19
+ <fieldset>
20
+ <legend>Sign Up</legend>
21
+ <div class="control-group">
22
+ <%= f.label :email, nil ,class: "control-label" %>
23
+ <div class="controls"><%= f.text_field :email, class: "input-xlarge" %></div>
24
+ </div>
25
+ <div class="control-group">
26
+ <%= f.label :password, nil ,class: "control-label" %>
27
+ <div class="controls"><%= f.password_field :password, class: "input-xlarge" %></div>
28
+ </div>
29
+ <div class="control-group">
30
+ <%= f.label :password_confirmation, nil ,class: "control-label" %>
31
+ <div class="controls"><%= f.password_field :password_confirmation, class: "input-xlarge" %></div>
32
+ </div>
33
+
34
+ <div class="actions"><%= f.submit t("user.sign_up", default: "Sign Up"), class: "btn btn-large btn-primary" %></div>
35
+ </fieldset>
36
+ <% end %>
37
+ </div>
38
+ </div>
39
+ </div>
40
+ <!-- End of Sing UP Non Modal -->
@@ -0,0 +1,3 @@
1
+ module SimpleLogin
2
+ VERSION = "0.0.4"
3
+ end
@@ -0,0 +1,56 @@
1
+ require "simple_login/version"
2
+ require 'rails/generators/base'
3
+
4
+ module SimpleLogin
5
+ module Generators
6
+ class SimpleLoginGenerator < Rails::Generators::Base
7
+ source_root File.expand_path('../templates', __FILE__)
8
+
9
+ def generate_user
10
+ # Copy the controllers for user, sessions and password_reset
11
+ directory "controllers", "app/controllers/"
12
+ directory "mailers", "app/mailers/"
13
+ directory "models", "app/models/"
14
+ directory "views", "app/views/"
15
+ end
16
+
17
+ def insert_general_methods
18
+ inject_into_file "app/controllers/application_controller.rb", after: "protect_from_forgery" do
19
+ a = "\n\n private\n\n def current_user\n"
20
+ b = " @current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]\n"
21
+ c = " end\n"
22
+ d = "\n helper_method :current_user\n\n"
23
+ e = " def authorize\n"
24
+ f = " redirect_to login_url, alert: 'Not authorized. Please login.' if current_user.nil?\n"
25
+ g = " end\n"
26
+ a+b+c+d+e+f+g
27
+ end
28
+ end
29
+
30
+ def insert_routes
31
+ insert_into_file "config/routes.rb", after: "Application.routes.draw do" do
32
+ a = "\n\nmatch 'signup', to: 'users#new', as: 'signup'\n"
33
+ b = "match 'login', to: 'sessions#new', as: 'login'\n"
34
+ c = "match 'logout', to: 'sessions#destroy', as: 'logout'\n"
35
+ d = "resources :users\n"
36
+ e = "resources :sessions\n"
37
+ f = "resources :password_resets\n"
38
+ a+b+c+d+e+f
39
+ end
40
+ end
41
+
42
+ def add_gems
43
+ insert_into_file "Gemfile", after: "gem 'jquery-rails'" do
44
+ a = "\n\ngem 'bcrypt-ruby', '~> 3.0.0'"
45
+ a
46
+ end
47
+ end
48
+
49
+ def create_migration_user
50
+ copy_file "create_users.rb", "db/migrate/00_create_users.rb"
51
+ end
52
+
53
+
54
+ end
55
+ end
56
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_login
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -19,6 +19,23 @@ executables: []
19
19
  extensions: []
20
20
  extra_rdoc_files: []
21
21
  files:
22
+ - lib/rails/generators/simple_login/simple_login_generator.rb
23
+ - lib/rails/generators/simple_login/templates/application_controller.rb
24
+ - lib/rails/generators/simple_login/templates/controllers/password_resets_controller.rb
25
+ - lib/rails/generators/simple_login/templates/controllers/sessions_controller.rb
26
+ - lib/rails/generators/simple_login/templates/controllers/users_controller.rb
27
+ - lib/rails/generators/simple_login/templates/create_users.rb
28
+ - lib/rails/generators/simple_login/templates/mailers/user_mailer.rb
29
+ - lib/rails/generators/simple_login/templates/models/user.rb
30
+ - lib/rails/generators/simple_login/templates/views/password_resets/edit.html.erb
31
+ - lib/rails/generators/simple_login/templates/views/password_resets/new.html.erb
32
+ - lib/rails/generators/simple_login/templates/views/sessions/new.html.erb
33
+ - lib/rails/generators/simple_login/templates/views/user_mailer/account_confirmation.text.erb
34
+ - lib/rails/generators/simple_login/templates/views/user_mailer/password_reset.text.erb
35
+ - lib/rails/generators/simple_login/templates/views/users/new.html.erb
36
+ - lib/rails/generators/simple_login/USAGE
37
+ - lib/simple_login/version.rb
38
+ - lib/simple_login.rb
22
39
  - Gemfile
23
40
  - LICENSE
24
41
  - Rakefile