Commit 559e83d30004e0c41a30f4ce3463f695eb7e26a1
1 parent
a6cfb54c
Exists in
master
and in
4 other branches
Add LDAP support to /api/session
Showing
3 changed files
with
24 additions
and
21 deletions
Show diff stats
lib/api/session.rb
... | ... | @@ -3,18 +3,19 @@ module API |
3 | 3 | class Session < Grape::API |
4 | 4 | # Login to get token |
5 | 5 | # |
6 | + # Parameters: | |
7 | + # login (*required) - user login | |
8 | + # email (*required) - user email | |
9 | + # password (required) - user password | |
10 | + # | |
6 | 11 | # Example Request: |
7 | 12 | # POST /session |
8 | 13 | post "/session" do |
9 | - resource = User.find_for_database_authentication(email: params[:email]) | |
10 | - | |
11 | - return unauthorized! unless resource | |
14 | + auth = Gitlab::Auth.new | |
15 | + user = auth.find(params[:email] || params[:login], params[:password]) | |
12 | 16 | |
13 | - if resource.valid_password?(params[:password]) | |
14 | - present resource, with: Entities::UserLogin | |
15 | - else | |
16 | - unauthorized! | |
17 | - end | |
17 | + return unauthorized! unless user | |
18 | + present user, with: Entities::UserLogin | |
18 | 19 | end |
19 | 20 | end |
20 | 21 | end | ... | ... |
lib/gitlab/auth.rb
1 | 1 | module Gitlab |
2 | 2 | class Auth |
3 | + def find(login, password) | |
4 | + user = User.find_by_email(login) || User.find_by_username(login) | |
5 | + | |
6 | + if user.nil? || user.ldap_user? | |
7 | + # Second chance - try LDAP authentication | |
8 | + return nil unless ldap_conf.enabled | |
9 | + | |
10 | + ldap_auth(login, password) | |
11 | + else | |
12 | + user if user.valid_password?(password) | |
13 | + end | |
14 | + end | |
15 | + | |
3 | 16 | def find_for_ldap_auth(auth, signed_in_resource = nil) |
4 | 17 | uid = auth.info.uid |
5 | 18 | provider = auth.provider | ... | ... |
lib/gitlab/backend/grack_auth.rb
... | ... | @@ -64,19 +64,8 @@ module Grack |
64 | 64 | end |
65 | 65 | |
66 | 66 | def authenticate_user(login, password) |
67 | - user = User.find_by_email(login) || User.find_by_username(login) | |
68 | - | |
69 | - # If the provided login was not a known email or username | |
70 | - # then user is nil | |
71 | - if user.nil? || user.ldap_user? | |
72 | - # Second chance - try LDAP authentication | |
73 | - return nil unless ldap_conf.enabled | |
74 | - | |
75 | - auth = Gitlab::Auth.new | |
76 | - auth.ldap_auth(login, password) | |
77 | - else | |
78 | - return user if user.valid_password?(password) | |
79 | - end | |
67 | + auth = Gitlab::Auth.new | |
68 | + auth.find(login, password) | |
80 | 69 | end |
81 | 70 | |
82 | 71 | def authorize_request(service) | ... | ... |