diff options
author | Robin Bobbitt <ryehle@us.ibm.com> | 2017-02-15 20:44:36 -0500 |
---|---|---|
committer | Robin Bobbitt <ryehle@us.ibm.com> | 2017-04-18 14:55:32 -0400 |
commit | ddf7e6ae78cc87314d081427f00d54f203cfd60a (patch) | |
tree | a11222bc23c25204a4c5dbf91eda698ee0243e0e /lib | |
parent | 22c4050058cd941b3e2d1d38cd370a5a3cb99cb4 (diff) | |
download | gitlab-ce-ddf7e6ae78cc87314d081427f00d54f203cfd60a.tar.gz |
Implement search by extern_uid in Users API
Diffstat (limited to 'lib')
-rw-r--r-- | lib/api/users.rb | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/lib/api/users.rb b/lib/api/users.rb index eedc59f8636..d474467c8e9 100644 --- a/lib/api/users.rb +++ b/lib/api/users.rb @@ -39,10 +39,13 @@ module API params do # CE optional :username, type: String, desc: 'Get a single user with a specific username' + optional :extern_uid, type: String, desc: 'Get a single user with a specific external authentication provider UID' + optional :provider, type: String, desc: 'The external provider' optional :search, type: String, desc: 'Search for a username' optional :active, type: Boolean, default: false, desc: 'Filters only active users' optional :external, type: Boolean, default: false, desc: 'Filters only external users' optional :blocked, type: Boolean, default: false, desc: 'Filters only blocked users' + all_or_none_of :extern_uid, :provider use :pagination end @@ -51,14 +54,17 @@ module API render_api_error!("Not authorized.", 403) end - if params[:username].present? - users = User.where(username: params[:username]) - else - users = User.all - users = users.active if params[:active] - users = users.search(params[:search]) if params[:search].present? - users = users.blocked if params[:blocked] - users = users.external if params[:external] && current_user.admin? + authenticated_as_admin! if params[:external].present? || (params[:extern_uid].present? && params[:provider].present?) + + users = User.all + users = User.where(username: params[:username]) if params[:username] + users = users.active if params[:active] + users = users.search(params[:search]) if params[:search].present? + users = users.blocked if params[:blocked] + + if current_user.admin? + users = users.joins(:identities).merge(Identity.with_extern_uid(params[:provider], params[:extern_uid])) if params[:extern_uid] && params[:provider] + users = users.external if params[:external] end entity = current_user.admin? ? Entities::UserPublic : Entities::UserBasic |