From 6fff92e984c8977bb1b8d5424e8b81796e2ccb07 Mon Sep 17 00:00:00 2001
From: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Date: Wed, 9 Oct 2013 15:26:30 +0300
Subject: [PATCH] Enable confirmable and reconfirmable modules for User

Now when you want to signup or change existing email you will be forced
to confirm that you really own this email. You get email with link to
follow in order to confirm your email address

Conflicts:
	app/models/user.rb
---
 app/models/user.rb                                |  4 ++--
 config/initializers/devise.rb                     |  2 ++
 .../20131009115346_add_confirmable_to_users.rb    | 15 +++++++++++++++
 db/schema.rb                                      |  7 ++++++-
 4 files changed, 25 insertions(+), 3 deletions(-)
 create mode 100644 db/migrate/20131009115346_add_confirmable_to_users.rb

diff --git a/app/models/user.rb b/app/models/user.rb
index 29c53b88331..22292de40a6 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -43,7 +43,7 @@ require 'file_size_validator'
 
 class User < ActiveRecord::Base
   devise :database_authenticatable, :token_authenticatable, :lockable, :async,
-         :recoverable, :rememberable, :trackable, :validatable, :omniauthable, :registerable
+         :recoverable, :rememberable, :trackable, :validatable, :omniauthable, :confirmable, :registerable
 
   attr_accessible :email, :password, :password_confirmation, :remember_me, :bio, :name, :username,
                   :skype, :linkedin, :twitter, :color_scheme_id, :theme_id, :force_random_password,
@@ -398,4 +398,4 @@ class User < ActiveRecord::Base
 
     self
   end
-end
\ No newline at end of file
+end
diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb
index 39c1b7c235b..b7cb808d2e5 100644
--- a/config/initializers/devise.rb
+++ b/config/initializers/devise.rb
@@ -54,6 +54,8 @@ Devise.setup do |config|
   # The realm used in Http Basic Authentication. "Application" by default.
   # config.http_authentication_realm = "Application"
 
+  config.reconfirmable = true
+
   # It will change confirmation, password recovery and other workflows
   # to behave the same regardless if the e-mail provided was right or wrong.
   # Does not affect registerable.
diff --git a/db/migrate/20131009115346_add_confirmable_to_users.rb b/db/migrate/20131009115346_add_confirmable_to_users.rb
new file mode 100644
index 00000000000..249cbe704ed
--- /dev/null
+++ b/db/migrate/20131009115346_add_confirmable_to_users.rb
@@ -0,0 +1,15 @@
+class AddConfirmableToUsers < ActiveRecord::Migration
+  def self.up
+    add_column :users, :confirmation_token, :string
+    add_column :users, :confirmed_at, :datetime
+    add_column :users, :confirmation_sent_at, :datetime
+    add_column :users, :unconfirmed_email, :string
+    add_index :users, :confirmation_token, unique: true
+    User.update_all(confirmed_at: Time.now)
+  end
+
+  def self.down
+    remove_column :users, :confirmation_token, :confirmed_at, :confirmation_sent_at
+    remove_column :users, :unconfirmed_email
+  end
+end
diff --git a/db/schema.rb b/db/schema.rb
index b3bc31c76dd..d6acb2f90e9 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
 #
 # It's strongly recommended to check this file into your version control system.
 
-ActiveRecord::Schema.define(:version => 20131005191208) do
+ActiveRecord::Schema.define(:version => 20131009115346) do
 
   create_table "deploy_keys_projects", :force => true do |t|
     t.integer  "deploy_key_id", :null => false
@@ -284,10 +284,15 @@ ActiveRecord::Schema.define(:version => 20131005191208) do
     t.datetime "password_expires_at"
     t.integer  "created_by_id"
     t.string   "avatar"
+    t.string   "confirmation_token"
+    t.datetime "confirmed_at"
+    t.datetime "confirmation_sent_at"
+    t.string   "unconfirmed_email"
   end
 
   add_index "users", ["admin"], :name => "index_users_on_admin"
   add_index "users", ["authentication_token"], :name => "index_users_on_authentication_token", :unique => true
+  add_index "users", ["confirmation_token"], :name => "index_users_on_confirmation_token", :unique => true
   add_index "users", ["email"], :name => "index_users_on_email", :unique => true
   add_index "users", ["extern_uid", "provider"], :name => "index_users_on_extern_uid_and_provider", :unique => true
   add_index "users", ["name"], :name => "index_users_on_name"
-- 
2.30.9