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,
);
my $num_rs = $c->model('DB')->resultset('voip_numbers')->search(
\[ 'concat(cc,ac,sn) = ?', [ {} => $resource->{number} ]]
);
unless($num_rs->first) {
$c->log->error("invalid number '$$resource{number}'");
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Number does not exist");
last;
}
# 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, $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;
});
last unless($sub && $reseller);
my $sub = $num_rs->first->subscriber;
unless($sub) {
$c->log->error("invalid number '$$resource{number}', not assigned to any subscriber");
$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->{reseller_id} = $reseller->id;
$resource->{sip_username} = NGCP::Panel::Utils::Interception::username_to_regexp_pattern($c,$voip_number,$sub->username);
$resource->{sip_domain} = $sub->domain->domain;
if($resource->{x3_required} && (!defined $resource->{x3_host} || !defined $resource->{x3_port})) {
@ -187,8 +179,8 @@ sub POST :Allow {
liid => $resource->{liid},
uuid => $resource->{uuid},
number => $resource->{number},
sip_username => NGCP::Panel::Utils::Interception::username_to_regexp_pattern($c,$num_rs->first,$sub->username),
sip_domain => $sub->domain->domain,
sip_username => $resource->{sip_username},
sip_domain => $resource->{sip_domain},
delivery_host => $resource->{x2_host},
delivery_port => $resource->{x2_port},
delivery_user => $resource->{x2_user},

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

@ -129,7 +129,12 @@ sub update_item {
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);
$resource->{reseller_id} = $reseller->id;
@ -180,37 +185,5 @@ sub update_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;
# 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;

Loading…
Cancel
Save