TT#20690 Fix rtc user create/update/terminate for Resellers

* create reseller with enable_rtc now succeds but shows an
      error if the "rtc" related part cannot be created
    * update reseller with enable_rtc now succeds but shows an
      error if the "rtc" related part cannot be update
    * terminate reseller with enable_rtc now fails with an
      error if the "rtc" related part cannot be deleted

Change-Id: I59a8b531d59bc3d4ca9201a2a25c783cb149b759
changes/06/15006/1
Kirill Solomko 8 years ago
parent 9c4c342f8d
commit 476904f77f

@ -110,24 +110,35 @@ sub create :Chained('list_reseller') :PathPart('create') :Args(0) :Does(ACL) :AC
NGCP::Panel::Utils::Reseller::create_email_templates( c => $c, reseller => $reseller );
my $resource = $form->values;
$resource->{rtc_networks} = [qw/sip xmpp webrtc conference/];
NGCP::Panel::Utils::Rtc::modify_reseller_rtc(
resource => $resource,
config => $c->config,
reseller_item => $reseller,
err_code => sub {
my ($msg, $debug) = @_;
$c->log->debug($debug) if $debug;
$c->log->warn($msg);
# TODO: abort reseller creation with error?
return;
});
eval {
NGCP::Panel::Utils::Rtc::modify_reseller_rtc(
resource => $resource,
config => $c->config,
reseller_item => $reseller,
err_code => sub {
my ($msg, $debug) = @_;
$c->log->debug($debug) if $debug;
$c->log->warn($msg);
die $msg,"\n";
});
};
my $rtc_err = $@ // '';
delete $c->session->{created_objects}->{contract};
$c->session->{created_objects}->{reseller} = { id => $reseller->id };
NGCP::Panel::Utils::Message::info(
c => $c,
desc => $c->loc('Reseller successfully created'),
);
if ($rtc_err) {
NGCP::Panel::Utils::Message::error(
c => $c,
desc => $c->loc(sprintf '%s (%s)',
'Reseller successfully updated', $rtc_err),
);
} else {
NGCP::Panel::Utils::Message::info(
c => $c,
desc => $c->loc('Reseller successfully created.'),
);
}
} catch($e) {
NGCP::Panel::Utils::Message::error(
c => $c,
@ -279,7 +290,7 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) :Does(ACL) :ACLDetachTo('/d
my $params = { $reseller->get_inflated_columns };
$params->{contract}{id} = delete $params->{contract_id};
$params = merge($params, $c->session->{created_objects});
$params->{enable_rtc} = !!$reseller->rtc_user;
$params->{enable_rtc} = $reseller->rtc_user;
$form->process(
posted => $posted,
params => $c->request->params,
@ -293,6 +304,7 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) :Does(ACL) :ACLDetachTo('/d
);
if($posted && $form->validated) {
my $rtc_err = '';
try {
$c->model('DB')->txn_do(sub {
$form->params->{contract_id} = delete $form->params->{contract}{id};
@ -305,18 +317,20 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) :Does(ACL) :ACLDetachTo('/d
});
my $resource = $form->values;
$resource->{rtc_networks} = [qw/sip xmpp webrtc conference/];
NGCP::Panel::Utils::Rtc::modify_reseller_rtc(
old_resource => $params,
resource => $resource,
config => $c->config,
reseller_item => $reseller,
err_code => sub {
my ($msg, $debug) = @_;
$c->log->debug($debug) if $debug;
$c->log->warn($msg);
# TODO: abort reseller creation with error?
return;
});
eval {
NGCP::Panel::Utils::Rtc::modify_reseller_rtc(
old_resource => $params,
resource => $resource,
config => $c->config,
reseller_item => $reseller,
err_code => sub {
my ($msg, $debug) = @_;
$c->log->debug($debug) if $debug;
$c->log->warn($msg);
die $msg,"\n";
});
};
$rtc_err = $@ // '';
if($reseller->status ne $old_status) {
NGCP::Panel::Utils::Reseller::_handle_reseller_status_change($c, $reseller);
@ -325,10 +339,18 @@ sub edit :Chained('base') :PathPart('edit') :Args(0) :Does(ACL) :ACLDetachTo('/d
delete $c->session->{created_objects}->{contract};
delete $c->session->{edit_contract_id};
NGCP::Panel::Utils::Message::info(
c => $c,
desc => $c->loc('Reseller successfully updated'),
);
if ($rtc_err) {
NGCP::Panel::Utils::Message::error(
c => $c,
desc => $c->loc(sprintf '%s (%s)',
'Reseller successfully updated', $rtc_err),
);
} else {
NGCP::Panel::Utils::Message::info(
c => $c,
desc => $c->loc('Reseller successfully updated'),
);
}
} catch($e) {
NGCP::Panel::Utils::Message::error(
c => $c,
@ -363,7 +385,7 @@ sub terminate :Chained('base') :PathPart('terminate') :Args(0) :Does(ACL) :ACLDe
try {
$c->model('DB')->txn_do(sub {
my $old_status = $reseller->status;
my $old_enable_rtc = !!$reseller->rtc_user;
my $old_enable_rtc = $reseller->rtc_user;
$reseller->update({ status => 'terminated' });
NGCP::Panel::Utils::Rtc::modify_reseller_rtc(
old_resource => {status => $old_status, enable_rtc => $old_enable_rtc},
@ -374,8 +396,7 @@ sub terminate :Chained('base') :PathPart('terminate') :Args(0) :Does(ACL) :ACLDe
my ($msg, $debug) = @_;
$c->log->debug($debug) if $debug;
$c->log->warn($msg);
# TODO: abort reseller creation with error?
return;
die $msg,"\n";
});
if($reseller->status ne $old_status) {

@ -131,17 +131,25 @@ sub update_reseller {
contract_id => $resource->{contract_id},
});
NGCP::Panel::Utils::Rtc::modify_reseller_rtc(
old_resource => $old_resource,
resource => $resource,
config => $c->config,
reseller_item => $reseller,
err_code => sub {
my ($msg, $debug) = @_;
$c->log->debug($debug) if $debug;
$c->log->warn($msg);
return;
});
eval {
NGCP::Panel::Utils::Rtc::modify_reseller_rtc(
old_resource => $old_resource,
resource => $resource,
config => $c->config,
reseller_item => $reseller,
err_code => sub {
my ($msg, $debug) = @_;
$c->log->debug($debug) if $debug;
$c->log->warn($msg);
die $msg,"\n";
});
};
my $rtc_err = $@ // '';
if ($rtc_err && $resource->{status} eq 'terminated') {
$self->error($c, HTTP_INTERNAL_SERVER_ERROR,
"Could not terminate rtc_user: $rtc_err");
return;
}
# TODO: should we lock reseller admin logins if reseller gets terminated?
# or terminate all his customers and delete non-billing data?

Loading…
Cancel
Save