TT#46159 fix saving sip_username re in Intrecept-SOAP

Change-Id: I00e789ce2f0392f884358299b66d2737f885e366
changes/28/24328/4
Rene Krenn 7 years ago
parent 1a76702b90
commit fec183ca63

@ -137,25 +137,17 @@ sub POST :Allow {
form => $form, form => $form,
); );
my $num_rs = $c->model('DB')->resultset('voip_numbers')->search( my ($sub, $reseller, $voip_number) = NGCP::Panel::Utils::Interception::subresnum_from_number($c, $resource->{number}, sub {
\[ 'concat(cc,ac,sn) = ?', [ {} => $resource->{number} ]] my ($msg,$field,$response) = @_;
); $c->log->error($msg);
unless($num_rs->first) { $self->error($c, HTTP_UNPROCESSABLE_ENTITY, $response);
$c->log->error("invalid number '$$resource{number}'"); return 0;
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Number does not exist"); });
last; last unless($sub && $reseller);
}
# use the long way, since with ossbss provisioning, the reseller_id
# is not set in this case
$resource->{reseller_id} = $num_rs->first->subscriber->contract->contact->reseller_id;
my $sub = $num_rs->first->subscriber; $resource->{reseller_id} = $reseller->id;
unless($sub) {
$c->log->error("invalid number '$$resource{number}', not assigned to any subscriber"); $resource->{sip_username} = NGCP::Panel::Utils::Interception::username_to_regexp_pattern($c,$voip_number,$sub->username);
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Number is not active");
last;
}
$resource->{sip_username} = NGCP::Panel::Utils::Interception::username_to_regexp_pattern($c,$num_rs->first,$sub->username);
$resource->{sip_domain} = $sub->domain->domain; $resource->{sip_domain} = $sub->domain->domain;
if($resource->{x3_required} && (!defined $resource->{x3_host} || !defined $resource->{x3_port})) { if($resource->{x3_required} && (!defined $resource->{x3_host} || !defined $resource->{x3_port})) {
@ -187,8 +179,8 @@ sub POST :Allow {
liid => $resource->{liid}, liid => $resource->{liid},
uuid => $resource->{uuid}, uuid => $resource->{uuid},
number => $resource->{number}, number => $resource->{number},
sip_username => NGCP::Panel::Utils::Interception::username_to_regexp_pattern($c,$num_rs->first,$sub->username), sip_username => $resource->{sip_username},
sip_domain => $sub->domain->domain, sip_domain => $resource->{sip_domain},
delivery_host => $resource->{x2_host}, delivery_host => $resource->{x2_host},
delivery_port => $resource->{x2_port}, delivery_port => $resource->{x2_port},
delivery_user => $resource->{x2_user}, delivery_user => $resource->{x2_user},

@ -32,6 +32,7 @@ use Sipwise::Base;
use NGCP::Panel::Form; use NGCP::Panel::Form;
use Data::Structure::Util qw/unbless/; use Data::Structure::Util qw/unbless/;
use NGCP::Panel::Utils::SOAP qw/typed/; use NGCP::Panel::Utils::SOAP qw/typed/;
use NGCP::Panel::Utils::Interception qw();
use UUID; use UUID;
use Moose; use Moose;
use NGCP::Panel::Utils::Admin; use NGCP::Panel::Utils::Admin;
@ -119,30 +120,33 @@ sub create_interception {
$self->_auth($auth); $self->_auth($auth);
$self->_validate(NGCP::Panel::Form::get("NGCP::Panel::Form::Intercept::Create", $c), $params); $self->_validate(NGCP::Panel::Form::get("NGCP::Panel::Form::Intercept::Create", $c), $params);
my $i; my ($sub, $reseller, $voip_number, $sip_username, $sip_domain);
my $num;
try { try {
$num = $c->model('DB')->resultset('voip_dbaliases')->find({ ($sub, $reseller, $voip_number) = NGCP::Panel::Utils::Interception::subresnum_from_number($c, $params->{number}, sub {
username => $params->{number} my ($msg,$field,$response) = @_;
die SOAP::Fault
->faultcode('Client.Voip.NoSuchSubscriber')
->faultstring($msg);
return 0;
}); });
$sip_username = NGCP::Panel::Utils::Interception::username_to_regexp_pattern($c,$voip_number,$sub->username);
$sip_domain = $sub->domain->domain;
} catch($e) { } catch($e) {
die $e if 'SOAP::Fault' eq ref $e;
die SOAP::Fault die SOAP::Fault
->faultcode('Server.Internal') ->faultcode('Server.Internal')
->faultstring($e); ->faultstring($e);
} }
unless($num) {
die SOAP::Fault
->faultcode('Client.Voip.NoSuchSubscriber')
->faultstring("number '$$params{number}' is not assigned to any subscriber");
}
my ($uuid_bin, $uuid_string); my ($uuid_bin, $uuid_string);
UUID::generate($uuid_bin); UUID::generate($uuid_bin);
UUID::unparse($uuid_bin, $uuid_string); UUID::unparse($uuid_bin, $uuid_string);
my $guard = $c->model('DB')->txn_scope_guard; my $guard = $c->model('DB')->txn_scope_guard;
my $i;
{ {
try { try {
$i = $self->c->model('DB')->resultset('voip_intercept')->create({ $i = $self->c->model('InterceptDB')->resultset('voip_intercept')->create({
reseller_id => $num->subscriber->voip_subscriber->contract->contact->reseller_id, reseller_id => $reseller->id,
LIID => $params->{LIID}, LIID => $params->{LIID},
number => $params->{number}, number => $params->{number},
cc_required => $params->{cc_required}, cc_required => $params->{cc_required},
@ -152,8 +156,8 @@ sub create_interception {
delivery_pass => $params->{iri_delivery}->{pass}, delivery_pass => $params->{iri_delivery}->{pass},
deleted => 0, deleted => 0,
uuid => $uuid_string, uuid => $uuid_string,
sip_username => $num->subscriber->username, sip_username => $sip_username,
sip_domain => $num->domain->domain, sip_domain => $sip_domain,
create_timestamp => \['NOW()'], create_timestamp => \['NOW()'],
$params->{cc_required} ? (cc_delivery_host => $params->{cc_delivery}->{host}) : (), $params->{cc_required} ? (cc_delivery_host => $params->{cc_delivery}->{host}) : (),
$params->{cc_required} ? (cc_delivery_port => $params->{cc_delivery}->{port}) : (), $params->{cc_required} ? (cc_delivery_port => $params->{cc_delivery}->{port}) : (),
@ -164,8 +168,8 @@ sub create_interception {
liid => $i->LIID, liid => $i->LIID,
uuid => $i->uuid, uuid => $i->uuid,
number => $i->number, number => $i->number,
sip_username => $num->subscriber->username, sip_username => $sip_username,
sip_domain => $num->domain->domain, sip_domain => $sip_domain,
delivery_host => $i->delivery_host, delivery_host => $i->delivery_host,
delivery_port => $i->delivery_port, delivery_port => $i->delivery_port,
delivery_user => $i->delivery_user, delivery_user => $i->delivery_user,
@ -221,6 +225,7 @@ sub update_interception {
$i->cc_delivery_port($params->{data}->{cc_delivery}->{port}); $i->cc_delivery_port($params->{data}->{cc_delivery}->{port});
} }
$i->cc_required($params->{data}->{cc_required}); $i->cc_required($params->{data}->{cc_required});
# not applying changed number/domain?
try { try {
$i->update(); $i->update();

@ -129,7 +129,12 @@ sub update_item {
resource => $resource, resource => $resource,
); );
my ($sub, $reseller, $voip_number) = $self->subresnum_from_number($c, $resource->{number}); my ($sub, $reseller, $voip_number) = NGCP::Panel::Utils::Interception::subresnum_from_number($c, $resource->{number}, sub {
my ($msg,$field,$response) = @_;
$c->log->error($msg);
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, $response);
return 0;
});
return unless($sub && $reseller); return unless($sub && $reseller);
$resource->{reseller_id} = $reseller->id; $resource->{reseller_id} = $reseller->id;
@ -180,37 +185,5 @@ sub update_item {
return $item; return $item;
} }
sub subresnum_from_number {
my ($self, $c, $number) = @_;
my $num_rs = $c->model('DB')->resultset('voip_numbers')->search(
\[ 'concat(cc,ac,sn) = ?', [ {} => $number ]]
);
unless($num_rs->first) {
$c->log->error("invalid number '$number'");
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Number does not exist");
return;
}
my $sub = $num_rs->first->subscriber;
unless($sub) {
$c->log->error("invalid number '$number', not assigned to any subscriber");
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Number is not active");
return;
}
my $res = $num_rs->first->reseller;
unless($res) {
# with ossbss provisioning, reseller is not set on number,
# so take the long way here
$res = $sub->contract->contact->reseller;
unless($res) {
$c->log->error("invalid number '$number', not assigned to any reseller");
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Number is not active");
return;
}
}
return ($sub, $res, $num_rs->first);
}
1; 1;
# vim: set tabstop=4 expandtab: # vim: set tabstop=4 expandtab:

@ -113,4 +113,33 @@ sub username_to_regexp_pattern {
} }
sub subresnum_from_number {
my ($c, $number, $err_code) = @_;
if (!defined $err_code || ref $err_code ne 'CODE') {
$err_code = sub { return 0; };
}
my $num_rs = $c->model('DB')->resultset('voip_numbers')->search(
\[ 'concat(cc,ac,sn) = ?', [ {} => $number ]]
);
unless($num_rs->first) {
return 0 unless &{$err_code}("invalid number '$number'",'number',"Number does not exist");
}
my $sub = $num_rs->first->subscriber;
unless($sub) {
return 0 unless &{$err_code}("invalid number '$number', not assigned to any subscriber",'number',"Number is not active");
}
my $res = $num_rs->first->reseller;
unless($res) {
# with ossbss provisioning, reseller is not set on number,
# so take the long way here
$res = $sub->contract->contact->reseller;
unless($res) {
return 0 unless &{$err_code}("invalid number '$number', not assigned to any reseller",'number',"Number is not active");
}
}
return ($sub, $res, $num_rs->first);
}
1; 1;

Loading…
Cancel
Save