Merge branch 'oauth_errors' into 'master'
Oauth errors page
This commit is contained in:
commit
5eb734905c
11 changed files with 62 additions and 24 deletions
|
@ -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 {
|
||||||
|
|
14
app/assets/stylesheets/sections/errors.scss
Normal file
14
app/assets/stylesheets/sections/errors.scss
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
|
|
|
@ -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"}
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
12
app/views/errors/omniauth_error.html.haml
Normal file
12
app/views/errors/omniauth_error.html.haml
Normal 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.
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
#
|
#
|
||||||
|
|
|
@ -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?
|
||||||
|
|
Loading…
Reference in a new issue