Skip to content

Commit

Permalink
Devise initialization.
Browse files Browse the repository at this point in the history
  • Loading branch information
xhagrg committed Apr 13, 2017
1 parent 8c3c9ba commit 027226f
Show file tree
Hide file tree
Showing 16 changed files with 722 additions and 0 deletions.
10 changes: 10 additions & 0 deletions app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_filter :reload_assets
before_filter :authenticate_user!
before_action :configure_permitted_parameters, if: :devise_controller?

protected

def configure_permitted_parameters
added_attrs = [:nick_name, :first_name, :last_name, :email, :password, :password_confirmation, :remember_me]
devise_parameter_sanitizer.permit :sign_up, keys: added_attrs
devise_parameter_sanitizer.permit :account_update, keys: added_attrs
end

private

Expand Down
90 changes: 90 additions & 0 deletions app/models/user.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
class User
include Mongoid::Document
include Mongoid::Timestamps
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable

attr_accessor :login
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
authentication_keys: [:login]

## Database authenticatable
field :email, type: String, default: ""
field :encrypted_password, type: String, default: ""

## Recoverable
field :reset_password_token, type: String
field :reset_password_sent_at, type: Time

## Rememberable
field :remember_created_at, type: Time

## Trackable
field :sign_in_count, type: Integer, default: 0
field :current_sign_in_at, type: Time
field :last_sign_in_at, type: Time
field :current_sign_in_ip, type: String
field :last_sign_in_ip, type: String
field :first_name, type: String
field :last_name, type: String
field :admin, type: Boolean, default: false
field :nick_name, type: String
field :friend_id, type: BSON::ObjectId

validates :nick_name,
presence: true,
uniqueness: {
case_sensitive: false
}

validate :validate_nickname

has_many :playlists
has_many :sent_invitations, inverse_of: :sender, class_name: 'Invitation'
has_many :received_invitations, inverse_of: :receiver, class_name: 'Invitation'

has_many :friends, inverse_of: :friend, class_name: 'User'

## Confirmable
# field :confirmation_token, type: String
# field :confirmed_at, type: Time
# field :confirmation_sent_at, type: Time
# field :unconfirmed_email, type: String # Only if using reconfirmable

## Lockable
# field :failed_attempts, type: Integer, default: 0 # Only if lock strategy is :failed_attempts
# field :unlock_token, type: String # Only if unlock strategy is :email or :both
# field :locked_at, type: Time

def login=(login)
@login = login
end

def login
@login || self.nick_name || self.email
end

def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
self.search(query).first
else
super
end
end

def self.search(query)
self.any_of(
{ nick_name: /^#{Regexp.escape(query)}$/i },
{ email: /^#{Regexp.escape(query)}$/i }
)
end

private
def validate_nickname
if User.where(email: self.nick_name).exists?
errors.add(:nick_name, :invalid)
end
end
end
23 changes: 23 additions & 0 deletions app/views/devise/confirmations/new.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<div class="row">
<div class="col-sm-4 col-sm-offset-4">
<h2 class="text-center">Resend confirmation instructions</h2>

<%= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f| %>
<%= devise_error_messages! %>

<div class="form-group">
<%= f.label :nick_name %><br />
<%= f.text_field :nick_name, autofocus: true, class: 'form-control', value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email) %>
</div>

<div class="actions">
<%= f.submit "Resend confirmation instructions", class: 'btn btn-primary btn-lg btn-block' %>
</div>
<% end %>

<div class="text-center">
<%= render "devise/shared/links" %>
</div>

</div>
</div>
5 changes: 5 additions & 0 deletions app/views/devise/mailer/confirmation_instructions.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<p>Welcome <%= @email %>!</p>

<p>You can confirm your account email through the link below:</p>

<p><%= link_to 'Confirm my account', confirmation_url(@resource, confirmation_token: @token) %></p>
3 changes: 3 additions & 0 deletions app/views/devise/mailer/password_change.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<p>Hello <%= @resource.email %>!</p>

<p>We're contacting you to notify you that your password has been changed.</p>
8 changes: 8 additions & 0 deletions app/views/devise/mailer/reset_password_instructions.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<p>Hello <%= @resource.email %>!</p>

<p>Someone has requested a link to change your password. You can do this through the link below.</p>

<p><%= link_to 'Change my password', edit_password_url(@resource, reset_password_token: @token) %></p>

<p>If you didn't request this, please ignore this email.</p>
<p>Your password won't change until you access the link above and create a new one.</p>
7 changes: 7 additions & 0 deletions app/views/devise/mailer/unlock_instructions.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<p>Hello <%= @resource.email %>!</p>

<p>Your account has been locked due to an excessive number of unsuccessful sign in attempts.</p>

<p>Click the link below to unlock your account:</p>

<p><%= link_to 'Unlock my account', unlock_url(@resource, unlock_token: @token) %></p>
32 changes: 32 additions & 0 deletions app/views/devise/passwords/edit.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<div class="row">
<div class="col-sm-4 col-sm-offset-4">
<h2 class="text-center">Change your password</h2>

<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %>
<%= devise_error_messages! %>
<%= f.hidden_field :reset_password_token %>

<div class="form-group">
<%= f.label :password, "New password" %><br />
<% if @minimum_password_length %>
<em>(<%= @minimum_password_length %> characters minimum)</em><br />
<% end %>
<%= f.password_field :password, autofocus: true, autocomplete: "off", class: 'form-control' %>
</div>

<div class="form-group">
<%= f.label :password_confirmation, "Confirm new password" %><br />
<%= f.password_field :password_confirmation, autocomplete: "off", class: 'form-control' %>
</div>

<div class="form-group">
<%= f.submit "Change my password", class: 'btn btn-primary btn-block btn-lg' %>
</div>
<% end %>

<div class="text-center">
<%= render "devise/shared/links" %>
</div>

</div>
</div>
21 changes: 21 additions & 0 deletions app/views/devise/passwords/new.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<div class="row">
<div class="col-sm-4 col-sm-offset-4">
<h2 class="text-center">Forgot your password?</h2>

<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f| %>
<%= devise_error_messages! %>
<br>
<p class="text-left">Please enter your email address and we will send you a link to reset your password.</p>
<div class="form-group">
<%= f.text_field :nick_name, autofocus: true, placeholder: 'Nick Name', class: 'form-control' %>
</div>

<div class="form-group">
<%= f.submit "Send me reset password instructions", class: 'btn btn-primary btn-block btn-lg' %>
</div>
<% end %>
<div class="text-center">
<%= render "devise/shared/links" %>
</div>
</div>
</div>
59 changes: 59 additions & 0 deletions app/views/devise/registrations/edit.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<div class="row">
<div class="col-sm-4 col-sm-offset-4">
<h1>Edit <%= resource_name.to_s.humanize %></h1>
<hr>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
<%= devise_error_messages! %>
<div class="form-group">
<%= f.label :first_name %><br />
<%= f.text_field :first_name, autofocus: false, class: 'form-control' %>
</div>

<div class="form-group">
<%= f.label :last_name %><br />
<%= f.text_field :last_name, autofocus: false, class: 'form-control' %>
</div>

<div class="form-group">
<%= f.label :email %><br />
<%= f.email_field :email, class: 'form-control' %>
</div>

<div class="form-group">
<%= f.label :nick_name %><br />
<%= f.text_field :nick_name, autofocus: false, class: 'form-control' %>
</div>

<% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
<div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div>
<% end %>

<div class="form-group">
<%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br />
<%= f.password_field :password, autocomplete: "off", class: 'form-control' %>
</div>

<div class="form-group">
<%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation, autocomplete: "off", class: 'form-control' %>
</div>

<div class="form-group">
<%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
<%= f.password_field :current_password, autocomplete: "off", class: 'form-control' %>
</div>

<div class="form-group">
<%= f.submit "Update", class: 'btn btn-lg btn-block btn-primary' %>
</div>
<% end %>
<hr>

<h2>Cancel my account</h2>

<p>Unhappy? <%= button_to "Cancel my account", registration_path(resource_name), class: "btn btn-danger", data: { confirm: "Are you sure? You cannot undo this." }, method: :delete %></p>

<%= link_to "Back", :back %>
<hr>
</div>
</div>
49 changes: 49 additions & 0 deletions app/views/devise/registrations/new.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<div class="row">
<div class="col-sm-4 col-sm-offset-4">

<h1 class="text-center">Sign Up</h1>
<hr>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div class="form-group">
<%= f.label :first_name %><br />
<%= f.text_field :first_name, autofocus: false, class: 'form-control' %>
</div>

<div class="form-group">
<%= f.label :last_name %><br />
<%= f.text_field :last_name, autofocus: false, class: 'form-control' %>
</div>

<div class="form-group">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: false, class: 'form-control' %>
</div>

<div class="form-group">
<%= f.label :nick_name %><br />
<%= f.text_field :nick_name, autofocus: false, class: 'form-control' %>
</div>

<div class="form-group">
<%= f.label :password %>
<% if @minimum_password_length %>
<em>(<%= @minimum_password_length %> characters minimum)</em>
<% end %><br />
<%= f.password_field :password, autocomplete: "off", class: 'form-control' %>
</div>

<div class="form-group">
<%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation, autocomplete: "off", class: 'form-control' %>
</div>

<div class="form-group">
<%= f.submit "Sign up", class: "btn btn-primary btn-block btn-lg" %>
</div>
<% end %>
<div class="text-center">
<%= render "devise/shared/links" %>
</div>
</div>
</div>
29 changes: 29 additions & 0 deletions app/views/devise/sessions/new.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<div class="row">
<div class="col-sm-4 col-sm-offset-4">
<h1 class="text-center">Log in</h1>
<hr>
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
<div class="form-group">
<%= f.text_field :login, autofocus: true, placeholder: 'Nick Name or Email', class: 'form-control' %>
</div>

<div class="form-group">
<%= f.password_field :password, autocomplete: "off", placeholder: 'Password', class: 'form-control' %>
</div>

<% if devise_mapping.rememberable? -%>
<div class="form-group">
<%= f.check_box :remember_me %>
<%= f.label :remember_me %>
</div>
<% end -%>

<div class="form-group">
<%= f.submit "Log in", class: "btn btn-primary btn-block btn-lg" %>
</div>
<% end %>
<div class="text-center">
<%= render "devise/shared/links" %>
</div>
</div>
</div>
25 changes: 25 additions & 0 deletions app/views/devise/shared/_links.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<%- if controller_name != 'sessions' %>
<%= link_to "Log in", new_session_path(resource_name) %><br />
<% end -%>

<%- if devise_mapping.registerable? && controller_name != 'registrations' %>
<%= link_to "Sign up", new_registration_path(resource_name) %><br />
<% end -%>

<%- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations' %>
<%= link_to "Forgot your password?", new_password_path(resource_name) %><br />
<% end -%>

<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
<%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %><br />
<% end -%>

<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
<%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %><br />
<% end -%>

<%- if devise_mapping.omniauthable? %>
<%- resource_class.omniauth_providers.each do |provider| %>
<%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider) %><br />
<% end -%>
<% end -%>
16 changes: 16 additions & 0 deletions app/views/devise/unlocks/new.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<h2>Resend unlock instructions</h2>

<%= form_for(resource, as: resource_name, url: unlock_path(resource_name), html: { method: :post }) do |f| %>
<%= devise_error_messages! %>

<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true %>
</div>

<div class="actions">
<%= f.submit "Resend unlock instructions" %>
</div>
<% end %>

<%= render "devise/shared/links" %>
Loading

0 comments on commit 027226f

Please sign in to comment.