+ <% if current_user.authentications.exists? %>
+ <%= render active_scaffold: "users/authentications" %>
+
Delete account
diff --git a/app/views/users/registrations/new.html.erb b/app/views/users/registrations/new.html.erb
index c5c53bf..fe96e48 100644
--- a/app/views/users/registrations/new.html.erb
+++ b/app/views/users/registrations/new.html.erb
@@ -1,4 +1,9 @@
-<%= render :partial => "users/shared/links" %>
-
-<%= render 'users/registrations/new' %>
+<%= render 'users/shared/links' %>
+
+
+
+ <%= render 'users/registrations/new' %>
+
+
+
diff --git a/app/views/users/sessions/new.html.erb b/app/views/users/sessions/new.html.erb
index 6f42598..5d2dbd8 100644
--- a/app/views/users/sessions/new.html.erb
+++ b/app/views/users/sessions/new.html.erb
@@ -1,19 +1,36 @@
-<%= render :partial => "users/shared/links" %>
-
-<%= simple_form_for(resource,
- as: resource_name,
- url: session_path(resource_name)
- ) do |f| %>
-
- <%= f.input :email, required: true %>
- <%= f.input :password, required: true %>
- <% if devise_mapping.rememberable? -%>
- <%= f.input :remember_me, as: :boolean %>
- <% end -%>
-
- <%= f.submit "Sign in", class: 'btn btn-primary' %>
-
- or <%= link_to "Sign up", new_registration_path(resource_name) %>
- / <%= link_to 'Forgot your password?', new_password_path(resource_name) %>
-
-<% end %>
+<%= render 'users/shared/links' %>
+
+
+
+
+
+ <%= link_to user_omniauth_authorize_path(:google_apps),
+ class: 'btn btn-block btn-social btn-google-plus',
+ 'data-no-turbolink' => true do %>
+ Sign in with Google
+ <% end %>
+
+
+
Or use the form below
+
+ <%= simple_form_for(resource,
+ as: resource_name,
+ url: session_path(resource_name)
+ ) do |f| %>
+
+ <%= f.input :email, required: true %>
+ <%= f.input :password, required: true %>
+ <% if devise_mapping.rememberable? -%>
+ <%= f.input :remember_me, as: :boolean %>
+ <% end -%>
+
+ <%= f.submit "Sign in", class: 'btn btn-primary' %>
+
+ or <%= link_to "Sign up", new_registration_path(resource_name) %>
+ / <%= link_to 'Forgot password', new_password_path(resource_name) %>
+
+
+ <% end %>
+
+
+
\ No newline at end of file
diff --git a/app/views/users/shared/_links.erb b/app/views/users/shared/_links.erb
index cde93bd..138c19a 100644
--- a/app/views/users/shared/_links.erb
+++ b/app/views/users/shared/_links.erb
@@ -1,10 +1,10 @@
-<% semantic_navigation :devise_nav, html: { class: 'nav nav-tabs' } do |n| %>
+<% semantic_navigation :devise_nav, html: { class: 'nav nav-tabs nav-justified' } do |n| %>
<%= n.item "Sign in", link: new_session_path(resource_name) %>
<%= n.item "Sign up", link: new_registration_path(resource_name) %>
- <%= n.item "Forgot your password?", link: new_password_path(resource_name),
+ <%= n.item "Forgot password", link: new_password_path(resource_name),
highlights_on: [{ controller: 'devise/passwords' }] %>
- <%= n.item "Didn't receive confirmation instructions?", link: new_confirmation_path(resource_name) %>
- <%= n.item "Didn't receive unlock instructions?", link: new_unlock_path(resource_name) %>
+ <%= n.item "Resend confirmation instructions", link: new_confirmation_path(resource_name) %>
+ <%= n.item "Resend unlock instructions", link: new_unlock_path(resource_name) %>
<% end %>
diff --git a/app/views/users/unlocks/new.html.erb b/app/views/users/unlocks/new.html.erb
index f0741b6..3d77f9f 100644
--- a/app/views/users/unlocks/new.html.erb
+++ b/app/views/users/unlocks/new.html.erb
@@ -1,14 +1,20 @@
<%= render :partial => "users/shared/links" %>
-<%= simple_form_for(resource,
- as: resource_name,
- url: unlock_path(resource_name),
- method: :post
- ) do |f| %>
-
- <%= devise_error_messages! %>
-
- <%= f.input :email, required: true %>
-
- <%= f.submit "Resend unlock instructions", class: 'btn btn-primary' %>
-<% end %>
+
+
+
+ <%= simple_form_for(resource,
+ as: resource_name,
+ url: unlock_path(resource_name),
+ method: :post
+ ) do |f| %>
+
+ <%= devise_error_messages! %>
+
+ <%= f.input :email, required: true %>
+
+ <%= f.submit "Resend unlock instructions", class: 'btn btn-primary' %>
+ <% end %>
+
+
+
\ No newline at end of file
diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb
index f306778..aaae2c8 100644
--- a/config/initializers/devise.rb
+++ b/config/initializers/devise.rb
@@ -1,3 +1,5 @@
+require 'openid/store/filesystem'
+
# Use this hook to configure devise mailer, warden hooks and so forth. The first
# four configuration values can also be set straight in your models.
Devise.setup do |config|
@@ -193,6 +195,12 @@ Devise.setup do |config|
# Add a new OmniAuth provider. Check the wiki for more information on setting
# up on your models and hooks.
# config.omniauth :github, 'APP_ID', 'APP_SECRET', :scope => 'user,public_repo'
+ # config.omniauth :open_id, name: 'user',
+ # identifier: 'https://www.google.com/accounts/o8/site-xrds?hd=' + Settings.domain,
+ # store: OpenID::Store::Filesystem.new('/tmp')
+ config.omniauth :google_apps,
+ store: OpenID::Store::Filesystem.new('/tmp'),
+ domain: 'gmail.com'
# ==> Warden configuration
# If you want to use other strategies, that are not supported by Devise, or
diff --git a/config/routes.rb b/config/routes.rb
index e820f17..1352957 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -5,11 +5,16 @@ Entrydns::Application.routes.draw do
devise_for :admins
devise_for :users, controllers: {
- registrations: 'users/registrations'
+ registrations: 'users/registrations',
+ omniauth_callbacks: 'users/omniauth_callbacks'
}
-
+
scope module: 'users' do
+ resources :authentications do
+ as_routes
+ end
+
resources :domains do
as_routes
end
diff --git a/config/settings.sample.yml b/config/settings.sample.yml
index 882aa01..d37a99e 100644
--- a/config/settings.sample.yml
+++ b/config/settings.sample.yml
@@ -1,3 +1,5 @@
+domain: entrydns.net
+
# framework
secret_key_base: 0ce1f02a4b3fc4d1a1c8d22973b21e8589e9314dc338294953f0b985e3f44f12c8af74f2d9ba6f7c7bdb736c4efc5ea3f8135e23b1a036d033cd23331383ac75
diff --git a/db/migrate/20140102165905_create_authentications.rb b/db/migrate/20140102165905_create_authentications.rb
new file mode 100644
index 0000000..e09ad64
--- /dev/null
+++ b/db/migrate/20140102165905_create_authentications.rb
@@ -0,0 +1,14 @@
+class CreateAuthentications < ActiveRecord::Migration
+ def change
+ create_table :authentications do |t|
+ t.references :user, index: true
+ t.string :provider, null: false
+ t.string :uid, null: false
+ t.string :token
+ t.string :secret
+ t.string :name
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 28acc7f..65aaaf8 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20130918144521) do
+ActiveRecord::Schema.define(version: 20140102165905) do
create_table "admins", force: true do |t|
t.string "email", default: "", null: false
@@ -32,6 +32,19 @@ ActiveRecord::Schema.define(version: 20130918144521) do
add_index "admins", ["email"], name: "index_admins_on_email", unique: true, using: :btree
add_index "admins", ["reset_password_token"], name: "index_admins_on_reset_password_token", unique: true, using: :btree
+ create_table "authentications", force: true do |t|
+ t.integer "user_id"
+ t.string "provider", null: false
+ t.string "uid", null: false
+ t.string "token"
+ t.string "secret"
+ t.string "name"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "authentications", ["user_id"], name: "index_authentications_on_user_id", using: :btree
+
create_table "blacklisted_domains", force: true do |t|
t.string "name"
t.datetime "created_at"
diff --git a/spec/routing/users/authentications_routing_spec.rb b/spec/routing/users/authentications_routing_spec.rb
new file mode 100644
index 0000000..a4a5633
--- /dev/null
+++ b/spec/routing/users/authentications_routing_spec.rb
@@ -0,0 +1,15 @@
+require "spec_helper"
+
+describe Users::AuthenticationsController do
+ describe "routing" do
+
+ it "routes to #index" do
+ get("/authentications").should route_to("users/authentications#index")
+ end
+
+ it "routes to #destroy" do
+ delete("/authentications/1").should route_to("users/authentications#destroy", :id => "1")
+ end
+
+ end
+end
diff --git a/vendor/assets/stylesheets/bootstrap-social.css b/vendor/assets/stylesheets/bootstrap-social.css
new file mode 100644
index 0000000..0a59a47
--- /dev/null
+++ b/vendor/assets/stylesheets/bootstrap-social.css
@@ -0,0 +1,57 @@
+/*
+ * Social Buttons for Bootstrap
+ *
+ * Copyright 2013 Panayiotis Lipiridis
+ * Licensed under the MIT License
+ *
+ * https://github.com/lipis/bootstrap-social
+ */
+
+.btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social :first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}
+.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg :first-child{line-height:45px;width:45px;font-size:1.8em}
+.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm :first-child{line-height:28px;width:28px;font-size:1.4em}
+.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs :first-child{line-height:20px;width:20px;font-size:1.2em}
+.btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon :first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}
+.btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg :first-child{line-height:45px;width:45px;font-size:1.8em}
+.btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm :first-child{line-height:28px;width:28px;font-size:1.4em}
+.btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs :first-child{line-height:20px;width:20px;font-size:1.2em}
+.btn-social-icon :first-child{border:none;text-align:center;width:100% !important}
+.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0}
+.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0}
+.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0}
+.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:hover,.btn-bitbucket:focus,.btn-bitbucket:active,.btn-bitbucket.active,.open .dropdown-toggle.btn-bitbucket{color:#fff;background-color:#183c60;border-color:rgba(0,0,0,0.2)}
+.btn-bitbucket:active,.btn-bitbucket.active,.open .dropdown-toggle.btn-bitbucket{background-image:none}
+.btn-bitbucket.disabled,.btn-bitbucket[disabled],fieldset[disabled] .btn-bitbucket,.btn-bitbucket.disabled:hover,.btn-bitbucket[disabled]:hover,fieldset[disabled] .btn-bitbucket:hover,.btn-bitbucket.disabled:focus,.btn-bitbucket[disabled]:focus,fieldset[disabled] .btn-bitbucket:focus,.btn-bitbucket.disabled:active,.btn-bitbucket[disabled]:active,fieldset[disabled] .btn-bitbucket:active,.btn-bitbucket.disabled.active,.btn-bitbucket[disabled].active,fieldset[disabled] .btn-bitbucket.active{background-color:#205081;border-color:rgba(0,0,0,0.2)}
+.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:hover,.btn-dropbox:focus,.btn-dropbox:active,.btn-dropbox.active,.open .dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d70b7;border-color:rgba(0,0,0,0.2)}
+.btn-dropbox:active,.btn-dropbox.active,.open .dropdown-toggle.btn-dropbox{background-image:none}
+.btn-dropbox.disabled,.btn-dropbox[disabled],fieldset[disabled] .btn-dropbox,.btn-dropbox.disabled:hover,.btn-dropbox[disabled]:hover,fieldset[disabled] .btn-dropbox:hover,.btn-dropbox.disabled:focus,.btn-dropbox[disabled]:focus,fieldset[disabled] .btn-dropbox:focus,.btn-dropbox.disabled:active,.btn-dropbox[disabled]:active,fieldset[disabled] .btn-dropbox:active,.btn-dropbox.disabled.active,.btn-dropbox[disabled].active,fieldset[disabled] .btn-dropbox.active{background-color:#1087dd;border-color:rgba(0,0,0,0.2)}
+.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:hover,.btn-facebook:focus,.btn-facebook:active,.btn-facebook.active,.open .dropdown-toggle.btn-facebook{color:#fff;background-color:#30487b;border-color:rgba(0,0,0,0.2)}
+.btn-facebook:active,.btn-facebook.active,.open .dropdown-toggle.btn-facebook{background-image:none}
+.btn-facebook.disabled,.btn-facebook[disabled],fieldset[disabled] .btn-facebook,.btn-facebook.disabled:hover,.btn-facebook[disabled]:hover,fieldset[disabled] .btn-facebook:hover,.btn-facebook.disabled:focus,.btn-facebook[disabled]:focus,fieldset[disabled] .btn-facebook:focus,.btn-facebook.disabled:active,.btn-facebook[disabled]:active,fieldset[disabled] .btn-facebook:active,.btn-facebook.disabled.active,.btn-facebook[disabled].active,fieldset[disabled] .btn-facebook.active{background-color:#3b5998;border-color:rgba(0,0,0,0.2)}
+.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:hover,.btn-flickr:focus,.btn-flickr:active,.btn-flickr.active,.open .dropdown-toggle.btn-flickr{color:#fff;background-color:#d6006f;border-color:rgba(0,0,0,0.2)}
+.btn-flickr:active,.btn-flickr.active,.open .dropdown-toggle.btn-flickr{background-image:none}
+.btn-flickr.disabled,.btn-flickr[disabled],fieldset[disabled] .btn-flickr,.btn-flickr.disabled:hover,.btn-flickr[disabled]:hover,fieldset[disabled] .btn-flickr:hover,.btn-flickr.disabled:focus,.btn-flickr[disabled]:focus,fieldset[disabled] .btn-flickr:focus,.btn-flickr.disabled:active,.btn-flickr[disabled]:active,fieldset[disabled] .btn-flickr:active,.btn-flickr.disabled.active,.btn-flickr[disabled].active,fieldset[disabled] .btn-flickr.active{background-color:#ff0084;border-color:rgba(0,0,0,0.2)}
+.btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:hover,.btn-github:focus,.btn-github:active,.btn-github.active,.open .dropdown-toggle.btn-github{color:#fff;background-color:#303030;border-color:rgba(0,0,0,0.2)}
+.btn-github:active,.btn-github.active,.open .dropdown-toggle.btn-github{background-image:none}
+.btn-github.disabled,.btn-github[disabled],fieldset[disabled] .btn-github,.btn-github.disabled:hover,.btn-github[disabled]:hover,fieldset[disabled] .btn-github:hover,.btn-github.disabled:focus,.btn-github[disabled]:focus,fieldset[disabled] .btn-github:focus,.btn-github.disabled:active,.btn-github[disabled]:active,fieldset[disabled] .btn-github:active,.btn-github.disabled.active,.btn-github[disabled].active,fieldset[disabled] .btn-github.active{background-color:#444;border-color:rgba(0,0,0,0.2)}
+.btn-google-plus{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google-plus:hover,.btn-google-plus:focus,.btn-google-plus:active,.btn-google-plus.active,.open .dropdown-toggle.btn-google-plus{color:#fff;background-color:#ca3523;border-color:rgba(0,0,0,0.2)}
+.btn-google-plus:active,.btn-google-plus.active,.open .dropdown-toggle.btn-google-plus{background-image:none}
+.btn-google-plus.disabled,.btn-google-plus[disabled],fieldset[disabled] .btn-google-plus,.btn-google-plus.disabled:hover,.btn-google-plus[disabled]:hover,fieldset[disabled] .btn-google-plus:hover,.btn-google-plus.disabled:focus,.btn-google-plus[disabled]:focus,fieldset[disabled] .btn-google-plus:focus,.btn-google-plus.disabled:active,.btn-google-plus[disabled]:active,fieldset[disabled] .btn-google-plus:active,.btn-google-plus.disabled.active,.btn-google-plus[disabled].active,fieldset[disabled] .btn-google-plus.active{background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}
+.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:hover,.btn-instagram:focus,.btn-instagram:active,.btn-instagram.active,.open .dropdown-toggle.btn-instagram{color:#fff;background-color:#335d7e;border-color:rgba(0,0,0,0.2)}
+.btn-instagram:active,.btn-instagram.active,.open .dropdown-toggle.btn-instagram{background-image:none}
+.btn-instagram.disabled,.btn-instagram[disabled],fieldset[disabled] .btn-instagram,.btn-instagram.disabled:hover,.btn-instagram[disabled]:hover,fieldset[disabled] .btn-instagram:hover,.btn-instagram.disabled:focus,.btn-instagram[disabled]:focus,fieldset[disabled] .btn-instagram:focus,.btn-instagram.disabled:active,.btn-instagram[disabled]:active,fieldset[disabled] .btn-instagram:active,.btn-instagram.disabled.active,.btn-instagram[disabled].active,fieldset[disabled] .btn-instagram.active{background-color:#3f729b;border-color:rgba(0,0,0,0.2)}
+.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:hover,.btn-linkedin:focus,.btn-linkedin:active,.btn-linkedin.active,.open .dropdown-toggle.btn-linkedin{color:#fff;background-color:#005f8d;border-color:rgba(0,0,0,0.2)}
+.btn-linkedin:active,.btn-linkedin.active,.open .dropdown-toggle.btn-linkedin{background-image:none}
+.btn-linkedin.disabled,.btn-linkedin[disabled],fieldset[disabled] .btn-linkedin,.btn-linkedin.disabled:hover,.btn-linkedin[disabled]:hover,fieldset[disabled] .btn-linkedin:hover,.btn-linkedin.disabled:focus,.btn-linkedin[disabled]:focus,fieldset[disabled] .btn-linkedin:focus,.btn-linkedin.disabled:active,.btn-linkedin[disabled]:active,fieldset[disabled] .btn-linkedin:active,.btn-linkedin.disabled.active,.btn-linkedin[disabled].active,fieldset[disabled] .btn-linkedin.active{background-color:#007bb6;border-color:rgba(0,0,0,0.2)}
+.btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:hover,.btn-pinterest:focus,.btn-pinterest:active,.btn-pinterest.active,.open .dropdown-toggle.btn-pinterest{color:#fff;background-color:#a81a20;border-color:rgba(0,0,0,0.2)}
+.btn-pinterest:active,.btn-pinterest.active,.open .dropdown-toggle.btn-pinterest{background-image:none}
+.btn-pinterest.disabled,.btn-pinterest[disabled],fieldset[disabled] .btn-pinterest,.btn-pinterest.disabled:hover,.btn-pinterest[disabled]:hover,fieldset[disabled] .btn-pinterest:hover,.btn-pinterest.disabled:focus,.btn-pinterest[disabled]:focus,fieldset[disabled] .btn-pinterest:focus,.btn-pinterest.disabled:active,.btn-pinterest[disabled]:active,fieldset[disabled] .btn-pinterest:active,.btn-pinterest.disabled.active,.btn-pinterest[disabled].active,fieldset[disabled] .btn-pinterest.active{background-color:#cb2027;border-color:rgba(0,0,0,0.2)}
+.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:hover,.btn-tumblr:focus,.btn-tumblr:active,.btn-tumblr.active,.open .dropdown-toggle.btn-tumblr{color:#fff;background-color:#1f3346;border-color:rgba(0,0,0,0.2)}
+.btn-tumblr:active,.btn-tumblr.active,.open .dropdown-toggle.btn-tumblr{background-image:none}
+.btn-tumblr.disabled,.btn-tumblr[disabled],fieldset[disabled] .btn-tumblr,.btn-tumblr.disabled:hover,.btn-tumblr[disabled]:hover,fieldset[disabled] .btn-tumblr:hover,.btn-tumblr.disabled:focus,.btn-tumblr[disabled]:focus,fieldset[disabled] .btn-tumblr:focus,.btn-tumblr.disabled:active,.btn-tumblr[disabled]:active,fieldset[disabled] .btn-tumblr:active,.btn-tumblr.disabled.active,.btn-tumblr[disabled].active,fieldset[disabled] .btn-tumblr.active{background-color:#2c4762;border-color:rgba(0,0,0,0.2)}
+.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:hover,.btn-twitter:focus,.btn-twitter:active,.btn-twitter.active,.open .dropdown-toggle.btn-twitter{color:#fff;background-color:#309aea;border-color:rgba(0,0,0,0.2)}
+.btn-twitter:active,.btn-twitter.active,.open .dropdown-toggle.btn-twitter{background-image:none}
+.btn-twitter.disabled,.btn-twitter[disabled],fieldset[disabled] .btn-twitter,.btn-twitter.disabled:hover,.btn-twitter[disabled]:hover,fieldset[disabled] .btn-twitter:hover,.btn-twitter.disabled:focus,.btn-twitter[disabled]:focus,fieldset[disabled] .btn-twitter:focus,.btn-twitter.disabled:active,.btn-twitter[disabled]:active,fieldset[disabled] .btn-twitter:active,.btn-twitter.disabled.active,.btn-twitter[disabled].active,fieldset[disabled] .btn-twitter.active{background-color:#55acee;border-color:rgba(0,0,0,0.2)}
+.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:hover,.btn-vk:focus,.btn-vk:active,.btn-vk.active,.open .dropdown-toggle.btn-vk{color:#fff;background-color:#4a6a89;border-color:rgba(0,0,0,0.2)}
+.btn-vk:active,.btn-vk.active,.open .dropdown-toggle.btn-vk{background-image:none}
+.btn-vk.disabled,.btn-vk[disabled],fieldset[disabled] .btn-vk,.btn-vk.disabled:hover,.btn-vk[disabled]:hover,fieldset[disabled] .btn-vk:hover,.btn-vk.disabled:focus,.btn-vk[disabled]:focus,fieldset[disabled] .btn-vk:focus,.btn-vk.disabled:active,.btn-vk[disabled]:active,fieldset[disabled] .btn-vk:active,.btn-vk.disabled.active,.btn-vk[disabled].active,fieldset[disabled] .btn-vk.active{background-color:#587ea3;border-color:rgba(0,0,0,0.2)}