MT#63062 /api/customercontacts fix PUT/PATCH reseller_id validation

* add Form::Contact::AdminAPI that uses reseller_id field
  instead of reseller for better error message
* update_contact() fix reseller_id validation for admin roles
* update_contact() copy reseller_id from $old_resource for
  reseller roles so that further reseller_id checks can pass.

Change-Id: Ic9559a944265f5c8bceada6077fcf8e14d6bc5d4
(cherry picked from commit b8cd29ce32)
mr13.4
Kirill Solomko 4 months ago
parent d442a26d07
commit 2a9735281c

@ -0,0 +1,27 @@
package NGCP::Panel::Form::Contact::AdminAPI;
use HTML::FormHandler::Moose;
extends 'NGCP::Panel::Form::Contact::Reseller';
has_field 'reseller_id' => (
type => 'PosInteger',
required => 1,
label => 'Contact reseller id',
element_attr => {
rel => ['tooltip'],
title => ['Contact entry reseller id'],
},
);
has_block 'fields' => (
tag => 'div',
class => [qw/modal-body/],
render_list => [qw/reseller_id firstname lastname email company street postcode city
country iban bic bankname vatnum comregnum phonenumber mobilenumber faxnumber
timezone
gpp0 gpp1 gpp2 gpp3 gpp4 gpp5 gpp6 gpp7 gpp8 gpp9
/],
);
1;
# vim: set tabstop=4 expandtab:

@ -35,7 +35,7 @@ sub _item_rs {
sub get_form {
my ($self, $c) = @_;
if ($c->user->roles eq "admin" || $c->user->roles eq "ccareadmin") {
return NGCP::Panel::Form::get("NGCP::Panel::Form::Contact::Admin", $c);
return NGCP::Panel::Form::get("NGCP::Panel::Form::Contact::AdminAPI", $c);
} elsif ($c->user->roles eq "reseller" || $c->user->roles eq "ccare") {
return NGCP::Panel::Form::get("NGCP::Panel::Form::Contact::Reseller", $c);
}
@ -112,6 +112,16 @@ sub update_contact {
$resource->{timezone}{name} = delete $resource->{timezone};
$form //= $self->get_form($c);
return unless $self->validate_form(
c => $c,
form => $form,
resource => $resource,
);
if ($c->user->roles eq "reseller" || $c->user->roles eq "ccare") {
$resource->{reseller_id} = $old_resource->{reseller_id};
}
if ($old_resource->{reseller_id} != $resource->{reseller_id}) {
my $reseller = $c->model('DB')->resultset('resellers')->find($resource->{reseller_id});
unless ($reseller) {
@ -120,18 +130,12 @@ sub update_contact {
}
}
return unless $self->validate_form(
c => $c,
form => $form,
resource => $resource,
);
$resource->{country} = $resource->{country}{id};
$resource->{timezone} = $resource->{timezone}{name};
my $now = NGCP::Panel::Utils::DateTime::current_local;
$resource->{modify_timestamp} = $now;
$contact->update($resource);
return $contact;

Loading…
Cancel
Save