simple-login 0.0.7

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/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in simple_login.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Chim Kan
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,48 @@
1
+ # SimpleLogin
2
+
3
+ simple_login creates a basic and simple login system for Rails 3 apps. It is based on Railscasts Authentication from Scratch videos.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'simple_login'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install simple_login
18
+
19
+ ## Usage
20
+
21
+ Once you've added the gem into your Gemfile, you only need to run the following command:
22
+
23
+ rails g simple_login
24
+
25
+ Rails will generate the login and view files.
26
+
27
+ Then run:
28
+
29
+ rake db:migrate
30
+
31
+ The user table will be created.
32
+
33
+ I also recommend activating the root_path.
34
+
35
+ To add the links to your app just add the following paths:
36
+
37
+ signup_path
38
+ login_path
39
+ logout_path
40
+ password_reset_path
41
+
42
+ ## Contributing
43
+
44
+ 1. Fork it
45
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
46
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
47
+ 4. Push to the branch (`git push origin my-new-feature`)
48
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -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,49 @@
1
+ module SimpleLogin
2
+ module Generators
3
+ class SimpleLoginGenerator < Rails::Generators::Base
4
+ source_root File.expand_path('../templates', __FILE__)
5
+
6
+
7
+ def generate_user
8
+ # Copy the controllers for user, sessions and password_reset
9
+ directory "controllers", "app/controllers/"
10
+ directory "mailers", "app/mailers/"
11
+ directory "models", "app/models/"
12
+ directory "views", "app/views/"
13
+ end
14
+
15
+ def insert_general_methods
16
+ inject_into_file "app/controllers/application_controller.rb", after: "protect_from_forgery" do
17
+ a = "\n\n private\n\n def current_user\n"
18
+ b = " @current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token]\n"
19
+ c = " end\n"
20
+ d = "\n helper_method :current_user\n\n"
21
+ e = " def authorize\n"
22
+ f = " redirect_to login_url, alert: 'Not authorized. Please login.' if current_user.nil?\n"
23
+ g = " end\n"
24
+ a+b+c+d+e+f+g
25
+ end
26
+ end
27
+
28
+ def insert_routes
29
+ route("match 'signup', to: 'users#new', as: 'signup'")
30
+ route("match 'login', to: 'sessions#new', as: 'login'")
31
+ route("match 'logout', to: 'sessions#destroy', as: 'logout'")
32
+ route("resources :users")
33
+ route("resources :sessions")
34
+ route("resources :password_resets")
35
+ end
36
+
37
+ def create_user
38
+ generate("model", "users email:string password_digest:string auth_token:string password_reset_token:string password_reset_sent_at:datetime")
39
+ rake("db:migrate")
40
+ end
41
+
42
+ def add_gems
43
+ gem("bcrypt-ruby")
44
+ end
45
+
46
+
47
+ end
48
+ end
49
+ 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,6 @@
1
+ require "simple_login/version"
2
+ require 'rails/generators/base'
3
+
4
+ module SimpleLogin
5
+ # Your code goes here...
6
+ end
@@ -0,0 +1,3 @@
1
+ module SimpleLogin
2
+ VERSION = "0.0.7"
3
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simple-login
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.7
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Chim Kan
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-03 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: simple_login creates a basic and simple login system for Rails 3 apps.
15
+ It is based on Railscasts Authentication from Scratch videos.
16
+ email:
17
+ - designium@gmail.com
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
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
39
+ - Gemfile
40
+ - LICENSE
41
+ - Rakefile
42
+ - README.md
43
+ homepage: ''
44
+ licenses: []
45
+ post_install_message:
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ requirements: []
62
+ rubyforge_project:
63
+ rubygems_version: 1.8.11
64
+ signing_key:
65
+ specification_version: 3
66
+ summary: simple_login can be used easily by adding the gem into your Gemfile and type
67
+ the following command 'rails g simple_login'.
68
+ test_files: []