simple_login 0.0.3 → 0.0.4

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.
@@ -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