Merge branch 'feature/set-public-email-through-api' into 'master'

Set public email through api

Closes #37675

See merge request gitlab-org/gitlab-ce!21938
This commit is contained in:
Rémy Coutable 2018-10-01 15:13:08 +00:00
commit 051090c804
6 changed files with 79 additions and 22 deletions

View File

@ -55,7 +55,6 @@ module Users
:force_random_password, :force_random_password,
:hide_no_password, :hide_no_password,
:hide_no_ssh_key, :hide_no_ssh_key,
:key_id,
:linkedin, :linkedin,
:name, :name,
:password, :password,
@ -69,7 +68,10 @@ module Users
:twitter, :twitter,
:username, :username,
:website_url, :website_url,
:private_profile :private_profile,
:organization,
:location,
:public_email
] ]
end end

View File

@ -0,0 +1,5 @@
---
title: Add support for setting the public email through the api
merge_request: 21938
author: Alexis Reigel
type: added

View File

@ -0,0 +1,5 @@
---
title: Allow setting user's organization and location attributes through the API by adding them to the list of allowed parameters
merge_request: 21938
author: Alexis Reigel
type: fixed

View File

@ -288,6 +288,7 @@ Parameters:
- `provider` (optional) - External provider name - `provider` (optional) - External provider name
- `bio` (optional) - User's biography - `bio` (optional) - User's biography
- `location` (optional) - User's location - `location` (optional) - User's location
- `public_email` (optional) - The public email of the user
- `admin` (optional) - User is admin - true or false (default) - `admin` (optional) - User is admin - true or false (default)
- `can_create_group` (optional) - User can create groups - true or false - `can_create_group` (optional) - User can create groups - true or false
- `skip_confirmation` (optional) - Skip confirmation - true or false (default) - `skip_confirmation` (optional) - Skip confirmation - true or false (default)
@ -305,26 +306,27 @@ PUT /users/:id
Parameters: Parameters:
- `email` - Email - `email` - Email
- `username` - Username - `username` - Username
- `name` - Name - `name` - Name
- `password` - Password - `password` - Password
- `skype` - Skype ID - `skype` - Skype ID
- `linkedin` - LinkedIn - `linkedin` - LinkedIn
- `twitter` - Twitter account - `twitter` - Twitter account
- `website_url` - Website URL - `website_url` - Website URL
- `organization` - Organization name - `organization` - Organization name
- `projects_limit` - Limit projects each user can create - `projects_limit` - Limit projects each user can create
- `extern_uid` - External UID - `extern_uid` - External UID
- `provider` - External provider name - `provider` - External provider name
- `bio` - User's biography - `bio` - User's biography
- `location` (optional) - User's location - `location` (optional) - User's location
- `admin` (optional) - User is admin - true or false (default) - `public_email` (optional) - The public email of the user
- `can_create_group` (optional) - User can create groups - true or false - `admin` (optional) - User is admin - true or false (default)
- `can_create_group` (optional) - User can create groups - true or false
- `skip_reconfirmation` (optional) - Skip reconfirmation - true or false (default) - `skip_reconfirmation` (optional) - Skip reconfirmation - true or false (default)
- `external` (optional) - Flags the user as external - true or false(default) - `external` (optional) - Flags the user as external - true or false(default)
- `avatar` (optional) - Image file for user's avatar - `avatar` (optional) - Image file for user's avatar
- `private_profile` (optional) - User's profile is private - true or false - `private_profile` (optional) - User's profile is private - true or false
On password update, user will be forced to change it upon next login. On password update, user will be forced to change it upon next login.
Note, at the moment this method does only return a `404` error, Note, at the moment this method does only return a `404` error,

View File

@ -42,12 +42,12 @@ module API
optional :provider, type: String, desc: 'The external provider' optional :provider, type: String, desc: 'The external provider'
optional :bio, type: String, desc: 'The biography of the user' optional :bio, type: String, desc: 'The biography of the user'
optional :location, type: String, desc: 'The location of the user' optional :location, type: String, desc: 'The location of the user'
optional :public_email, type: String, desc: 'The public email of the user'
optional :admin, type: Boolean, desc: 'Flag indicating the user is an administrator' optional :admin, type: Boolean, desc: 'Flag indicating the user is an administrator'
optional :can_create_group, type: Boolean, desc: 'Flag indicating the user can create groups' optional :can_create_group, type: Boolean, desc: 'Flag indicating the user can create groups'
optional :external, type: Boolean, desc: 'Flag indicating the user is an external user' optional :external, type: Boolean, desc: 'Flag indicating the user is an external user'
optional :avatar, type: File, desc: 'Avatar image for user' optional :avatar, type: File, desc: 'Avatar image for user'
optional :private_profile, type: Boolean, desc: 'Flag indicating the user has a private profile' optional :private_profile, type: Boolean, desc: 'Flag indicating the user has a private profile'
optional :min_access_level, type: Integer, values: Gitlab::Access.all_values, desc: 'Limit by minimum access level of authenticated user'
all_or_none_of :extern_uid, :provider all_or_none_of :extern_uid, :provider
end end

View File

@ -14,6 +14,49 @@ describe Users::BuildService do
expect(service.execute).to be_valid expect(service.execute).to be_valid
end end
context 'allowed params' do
let(:params) do
{
access_level: 1,
admin: 1,
avatar: anything,
bio: 1,
can_create_group: 1,
color_scheme_id: 1,
email: 1,
external: 1,
force_random_password: 1,
hide_no_password: 1,
hide_no_ssh_key: 1,
linkedin: 1,
name: 1,
password: 1,
password_automatically_set: 1,
password_expires_at: 1,
projects_limit: 1,
remember_me: 1,
skip_confirmation: 1,
skype: 1,
theme_id: 1,
twitter: 1,
username: 1,
website_url: 1,
private_profile: 1,
organization: 1,
location: 1,
public_email: 1
}
end
it 'sets all allowed attributes' do
admin_user # call first so the admin gets created before setting `expect`
expect(User).to receive(:new).with(hash_including(params)).and_call_original
service.execute
end
end
context 'with "user_default_external" application setting' do context 'with "user_default_external" application setting' do
using RSpec::Parameterized::TableSyntax using RSpec::Parameterized::TableSyntax