From 3891b63a1eb52076337885487f251a10580a4a85 Mon Sep 17 00:00:00 2001 From: Frédéric Buclin Date: Wed, 27 Apr 2016 18:50:13 +0200 Subject: Bug 218917 - Allow the login name to be different from the email address Original patch by Gervase Markham r=gerv a=dkl --- Bugzilla/API/1_0/Resource/Bug.pm | 21 ++++++++------------- Bugzilla/API/1_0/Resource/Bugzilla.pm | 4 ++-- Bugzilla/API/1_0/Resource/Group.pm | 10 +++++----- Bugzilla/API/1_0/Resource/Product.pm | 4 ++-- Bugzilla/API/1_0/Resource/User.pm | 34 +++++++++++++++++++++++----------- 5 files changed, 40 insertions(+), 33 deletions(-) (limited to 'Bugzilla/API/1_0/Resource') diff --git a/Bugzilla/API/1_0/Resource/Bug.pm b/Bugzilla/API/1_0/Resource/Bug.pm index 781ac3176..b0182a5e3 100644 --- a/Bugzilla/API/1_0/Resource/Bug.pm +++ b/Bugzilla/API/1_0/Resource/Bug.pm @@ -509,7 +509,7 @@ sub _translate_comment { my $comment_hash = { id => as_int($comment->id), bug_id => as_int($comment->bug_id), - creator => as_email($comment->author->login), + creator => as_login($comment->author->login), time => as_datetime($comment->creation_ts), creation_time => as_datetime($comment->creation_ts), is_private => as_boolean($comment->is_private), @@ -1431,7 +1431,7 @@ sub _bug_to_hash { $item{alias} = as_string_array($bug->alias); } if (filter_wants $params, 'assigned_to') { - $item{'assigned_to'} = as_email($bug->assigned_to->login); + $item{'assigned_to'} = as_login($bug->assigned_to->login); $item{'assigned_to_detail'} = $self->_user_to_hash($bug->assigned_to, $params, undef, 'assigned_to'); } if (filter_wants $params, 'blocks') { @@ -1444,14 +1444,14 @@ sub _bug_to_hash { $item{component} = as_string($bug->component); } if (filter_wants $params, 'cc') { - $item{'cc'} = as_email_array($bug->cc); + $item{'cc'} = as_login_array($bug->cc); $item{'cc_detail'} = [ map { $self->_user_to_hash($_, $params, undef, 'cc') } @{ $bug->cc_users } ]; } if (filter_wants $params, 'creation_time') { $item{'creation_time'} = as_datetime($bug->creation_ts); } if (filter_wants $params, 'creator') { - $item{'creator'} = as_email($bug->reporter->login); + $item{'creator'} = as_login($bug->reporter->login); $item{'creator_detail'} = $self->_user_to_hash($bug->reporter, $params, undef, 'creator'); } if (filter_wants $params, 'depends_on') { @@ -1477,7 +1477,7 @@ sub _bug_to_hash { } if (filter_wants $params, 'qa_contact') { my $qa_login = $bug->qa_contact ? $bug->qa_contact->login : ''; - $item{'qa_contact'} = as_email($qa_login); + $item{'qa_contact'} = as_login($qa_login); if ($bug->qa_contact) { $item{'qa_contact_detail'} = $self->_user_to_hash($bug->qa_contact, $params, undef, 'qa_contact'); } @@ -1546,8 +1546,7 @@ sub _user_to_hash { my $item = filter $filters, { id => as_int($user->id), real_name => as_string($user->name), - name => as_email($user->login), - email => as_email($user->email), + name => as_login($user->login), }, $types, $prefix; return $item; } @@ -1571,7 +1570,7 @@ sub _attachment_to_hash { # creator requires an extra lookup, so we only send them if # the filter wants them. if (filter_wants $filters, 'creator', $types, $prefix) { - $item->{'creator'} = as_email($attach->attacher->login); + $item->{'creator'} = as_login($attach->attacher->login); } if (filter_wants $filters, 'data', $types, $prefix) { @@ -1603,7 +1602,7 @@ sub _flag_to_hash { foreach my $field (qw(setter requestee)) { my $field_id = $field . "_id"; - $item->{$field} = as_email($flag->$field->login) + $item->{$field} = as_login($flag->$field->login) if $flag->$field_id; } @@ -2672,10 +2671,6 @@ C The 'real' name for this user, if any. C The user's Bugzilla login. -=item C - -C The user's email address. Currently this is the same value as the name. - =back =back diff --git a/Bugzilla/API/1_0/Resource/Bugzilla.pm b/Bugzilla/API/1_0/Resource/Bugzilla.pm index f5bb2f417..fc2e15e90 100644 --- a/Bugzilla/API/1_0/Resource/Bugzilla.pm +++ b/Bugzilla/API/1_0/Resource/Bugzilla.pm @@ -69,7 +69,6 @@ use constant PARAMETERS_LOGGED_IN => qw( defaultseverity duplicate_or_move_bug_status emailregexpdesc - emailsuffix letsubmitterchoosemilestone letsubmitterchoosepriority mailfrom @@ -82,6 +81,7 @@ use constant PARAMETERS_LOGGED_IN => qw( requirelogin search_allow_no_criteria urlbase + use_email_as_login use_see_also useclassification usemenuforusers @@ -449,7 +449,6 @@ A logged-in user can access the following parameters (listed alphabetically): C, C, C, - C, C, C, C, @@ -462,6 +461,7 @@ A logged-in user can access the following parameters (listed alphabetically): C, C, C, + C, C, C, C, diff --git a/Bugzilla/API/1_0/Resource/Group.pm b/Bugzilla/API/1_0/Resource/Group.pm index 43a2521fb..f3b55b3fd 100644 --- a/Bugzilla/API/1_0/Resource/Group.pm +++ b/Bugzilla/API/1_0/Resource/Group.pm @@ -247,8 +247,8 @@ sub _get_group_membership { map {{ id => as_int($_->id), real_name => as_string($_->name), - name => as_string($_->login), - email => as_string($_->email), + name => as_login($_->login), + email => as_email($_->email), can_login => as_boolean($_->is_enabled), email_enabled => as_boolean($_->email_enabled), login_denied_text => as_string($_->disabledtext), @@ -571,12 +571,12 @@ C The actual name of the user. =item email -C The email address of the user. +C If you are in the editusers group, returns the email address of the +user, else returns nothing. =item name -C The login name of the user. Note that in some situations this is -different than their email. +C The login name of the user. =item can_login diff --git a/Bugzilla/API/1_0/Resource/Product.pm b/Bugzilla/API/1_0/Resource/Product.pm index d3576a734..02581b0ed 100644 --- a/Bugzilla/API/1_0/Resource/Product.pm +++ b/Bugzilla/API/1_0/Resource/Product.pm @@ -322,9 +322,9 @@ sub _component_to_hash { name => as_string($component->name), description => as_string($component->description), default_assigned_to => - as_email($component->default_assignee->login), + as_login($component->default_assignee->login), default_qa_contact => - as_email($component->default_qa_contact ? + as_login($component->default_qa_contact ? $component->default_qa_contact->login : ""), sort_key => 0, # sort_key is returned to match Bug.fields is_active => as_boolean($component->is_active), diff --git a/Bugzilla/API/1_0/Resource/User.pm b/Bugzilla/API/1_0/Resource/User.pm index a214bd81f..101a70529 100644 --- a/Bugzilla/API/1_0/Resource/User.pm +++ b/Bugzilla/API/1_0/Resource/User.pm @@ -53,13 +53,11 @@ use constant PUBLIC_METHODS => qw( ); use constant MAPPED_FIELDS => { - email => 'login', full_name => 'name', login_denied_text => 'disabledtext', }; use constant MAPPED_RETURNS => { - login_name => 'email', realname => 'full_name', disabledtext => 'login_denied_text', }; @@ -158,8 +156,11 @@ sub offer_account_by_email { my $email = trim($params->{email}) || ThrowCodeError('param_required', { param => 'email' }); + my $login = Bugzilla->params->{use_email_as_login} ? $email : trim($params->{login}); + $login or ThrowCodeError('param_required', { param => 'login' }); + Bugzilla->user->check_account_creation_enabled; - Bugzilla->user->check_and_send_account_creation_confirmation($email); + Bugzilla->user->check_and_send_account_creation_confirmation($login, $email); return undef; } @@ -174,11 +175,16 @@ sub create { my $email = trim($params->{email}) || ThrowCodeError('param_required', { param => 'email' }); + + my $login = Bugzilla->params->{use_email_as_login} ? $email : trim($params->{login}); + $login or ThrowCodeError('param_required', { param => 'login' }); + my $realname = trim($params->{full_name}); my $password = trim($params->{password}) || '*'; my $user = Bugzilla::User->create({ - login_name => $email, + login_name => $login, + email => $email, realname => $realname, cryptpassword => $password }); @@ -225,7 +231,7 @@ sub get { @users = map { filter $params, { id => as_int($_->id), real_name => as_string($_->name), - name => as_email($_->login), + name => as_login($_->login), } } @$in_group; return { users => \@users }; @@ -277,12 +283,12 @@ sub get { my $user_info = filter $params, { id => as_int($user->id), real_name => as_string($user->name), - name => as_email($user->login), - email => as_email($user->email), + name => as_login($user->login), can_login => as_boolean($user->is_enabled ? 1 : 0), }; if (Bugzilla->user->in_group('editusers')) { + $user_info->{email} = as_email($user->email), $user_info->{email_enabled} = as_boolean($user->email_enabled); $user_info->{login_denied_text} = as_string($user->disabledtext); } @@ -651,6 +657,8 @@ This is the recommended way to create a Bugzilla account. =item C (string) - the email to send the offer to. +=item C (string) - the login of the user account. + =back =item B (nothing) @@ -699,6 +707,11 @@ are the same as below. =item C (string) - The email address for the new user. +=item C (string) - The login name for the new user. +If the installation has the C parameter switched on, then +this parameter is ignored, and the value of the C parameter will +be used as the login name for the new account. + =item C (string) B - The user's full name. Will be set to empty if not specified. @@ -768,7 +781,7 @@ C Contains ids of user to update. =item C -C Contains email/login of user to update. +C Contains login of user to update. =item C @@ -996,8 +1009,7 @@ C The email address of the user. =item name -C The login name of the user. Note that in some situations this is -different than their email. +C The login name of the user. =item can_login @@ -1083,7 +1095,7 @@ C The CGI parameters for the saved report. B: If you are not logged in to Bugzilla when you call this function, you will only be returned the C, C, and C items. If you are logged in and not in editusers group, you will only be returned the C, C, -C, C, C, and C items. The groups returned are +C, C, and C items. The groups returned are filtered based on your permission to bless each group. The C and C items are only returned if you are querying your own account, even if you are in the editusers group. -- cgit v1.2.3-24-g4f1b