Merge branch 'oauth_errors' into 'master'

Oauth errors page
This commit is contained in:
Dmitriy Zaporozhets 2014-06-24 14:08:28 +00:00
commit 5eb734905c
11 changed files with 62 additions and 24 deletions

View file

@ -257,13 +257,6 @@ li.note {
} }
} }
h1.http_status_code {
font-size: 56px;
line-height: 100px;
font-weight: normal;
color: #456;
}
.control-group { .control-group {
.controls { .controls {
span { span {

View file

@ -0,0 +1,14 @@
.error-page {
max-width: 400px;
margin: 0 auto;
h1, h2, h3 {
text-align: center;
}
h1 {
font-size: 56px;
line-height: 100px;
font-weight: 300;
}
}

View file

@ -31,6 +31,12 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
end end
end end
def omniauth_error
@provider = params[:provider]
@error = params[:error]
render 'errors/omniauth_error', layout: "errors", status: 422
end
private private
def handle_omniauth def handle_omniauth
@ -45,14 +51,19 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
# Create user if does not exist # Create user if does not exist
# and allow_single_sign_on is true # and allow_single_sign_on is true
if Gitlab.config.omniauth['allow_single_sign_on'] if Gitlab.config.omniauth['allow_single_sign_on'] && !@user
@user ||= Gitlab::OAuth::User.create(oauth) @user, errors = Gitlab::OAuth::User.create(oauth)
end end
if @user if @user && !errors
sign_in_and_redirect(@user) sign_in_and_redirect(@user)
else
if errors
error_message = errors.map{ |attribute, message| "#{attribute} #{message}" }.join(", ")
redirect_to omniauth_error_path(oauth['provider'], error: error_message) and return
else else
flash[:notice] = "There's no such user!" flash[:notice] = "There's no such user!"
end
redirect_to new_user_session_path redirect_to new_user_session_path
end end
end end

View file

@ -1,5 +1,5 @@
%h1.http_status_code 403 %h1 403
%h3.page-title Access Denied %h3 Access Denied
%hr %hr
%p You are not allowed to access this page. %p You are not allowed to access this page.
%p Read more about project permissions #{link_to "here", help_page_path("permissions", "permissions"), class: "vlink"} %p Read more about project permissions #{link_to "here", help_page_path("permissions", "permissions"), class: "vlink"}

View file

@ -1,4 +1,4 @@
%h1.http_status_code 500 %h1 500
%h3.page-title Encoding Error %h3 Encoding Error
%hr %hr
%p Page can't be loaded because of an encoding error. %p Page can't be loaded because of an encoding error.

View file

@ -1,5 +1,5 @@
%h1.http_status_code 404 %h1 404
%h3.page-title Git Resource Not found %h3 Git Resource Not found
%hr %hr
%p %p
Application can't get access to some branch or commit in your repository. It Application can't get access to some branch or commit in your repository. It

View file

@ -1,4 +1,4 @@
%h1.http_status_code 404 %h1 404
%h3.page-title The resource you were looking for doesn't exist. %h3 The resource you were looking for doesn't exist.
%hr %hr
%p You may have mistyped the address or the page may have moved. %p You may have mistyped the address or the page may have moved.

View file

@ -0,0 +1,12 @@
%h1 422
%h3 Sign-in using #{@provider} auth failed
%hr
%p Sign-in failed because #{@error}.
%p There are couple of steps you can take:
%ul
%li Try logging in using your email
%li Try logging in using your username
%li If you have forgotten your password, try recovering it using #{ link_to "Password recovery", new_password_path(resource_name) }
%p If none of the options work, try contacting the GitLab administrator.

View file

@ -4,7 +4,6 @@
%body{class: "#{app_theme} application"} %body{class: "#{app_theme} application"}
= render "layouts/head_panel", title: "" if current_user = render "layouts/head_panel", title: "" if current_user
= render "layouts/flash" = render "layouts/flash"
.container .container.navless-container
.content .error-page
.center.padded.prepend-top-20
= yield = yield

View file

@ -160,6 +160,9 @@ Gitlab::Application.routes.draw do
devise_for :users, controllers: { omniauth_callbacks: :omniauth_callbacks, registrations: :registrations , passwords: :passwords, sessions: :users_sessions } devise_for :users, controllers: { omniauth_callbacks: :omniauth_callbacks, registrations: :registrations , passwords: :passwords, sessions: :users_sessions }
devise_scope :user do
get "/users/auth/:provider/omniauth_error" => "omniauth_callbacks#omniauth_error", as: :omniauth_error
end
# #
# Project Area # Project Area
# #

View file

@ -44,7 +44,13 @@ module Gitlab
user.username = email_username.gsub("'", "") user.username = email_username.gsub("'", "")
end end
begin
user.save! user.save!
rescue ActiveRecord::RecordInvalid => e
log.info "(OAuth) Email #{e.record.errors[:email]}. Username #{e.record.errors[:username]}"
return nil, e.record.errors
end
log.info "(OAuth) Creating user #{email} from login with extern_uid => #{uid}" log.info "(OAuth) Creating user #{email} from login with extern_uid => #{uid}"
if Gitlab.config.omniauth['block_auto_created_users'] && !ldap? if Gitlab.config.omniauth['block_auto_created_users'] && !ldap?