diff --git a/lib/NGCP/Panel/Controller/API/Tests.pm b/lib/NGCP/Panel/Controller/API/Tests.pm new file mode 100644 index 0000000000..6f93e46cd2 --- /dev/null +++ b/lib/NGCP/Panel/Controller/API/Tests.pm @@ -0,0 +1,85 @@ +package NGCP::Panel::Controller::API::Tests; +use Sipwise::Base; +use namespace::sweep; +use boolean qw(true); +use Data::HAL qw(); +use Data::HAL::Link qw(); +use HTTP::Headers qw(); +use HTTP::Status qw(:constants); +use MooseX::ClassAttribute qw(class_has); +use NGCP::Panel::Utils::DateTime; +use Path::Tiny qw(path); +use Safe::Isa qw($_isa); +BEGIN { extends 'Catalyst::Controller::ActionRole'; } +require Catalyst::ActionRole::ACL; +require Catalyst::ActionRole::CheckTrailingSlash; +require Catalyst::ActionRole::HTTPMethods; +require Catalyst::ActionRole::RequireSSL; + +with 'NGCP::Panel::Role::API'; + +class_has 'api_description' => ( + is => 'ro', + isa => 'Str', + default => + 'Defines test (wake-up call) settings for subscribers.', +); + +class_has 'query_params' => ( + is => 'ro', + isa => 'ArrayRef', + default => sub {[ + ]}, +); + +class_has('resource_name', is => 'ro', default => 'tests'); +class_has('dispatch_path', is => 'ro', default => '/api/tests/'); +class_has('relation', is => 'ro', default => 'http://purl.org/sipwise/ngcp-api/#rel-tests'); + +__PACKAGE__->config( + action => { + map { $_ => { + ACLDetachTo => '/api/root/invalid_user', + AllowedRole => [qw/admin reseller/], + Args => 0, + Does => [qw(ACL CheckTrailingSlash RequireSSL)], + Method => $_, + Path => __PACKAGE__->dispatch_path, + } } @{ __PACKAGE__->allowed_methods } + }, + action_roles => [qw(HTTPMethods)], +); + +sub auto :Private { + my ($self, $c) = @_; + + $self->set_body($c); + $self->log_request($c); +} + +sub GET :Allow { + my ($self, $c) = @_; + { + my $res = ""; + my $subscriber = $c->model('DB')->resultset('voip_subscribers')->find(45); + use NGCP::Panel::Utils::Subscriber; + for my $n (qw/12345 012345 004312345/) { + my $nn = NGCP::Panel::Utils::Subscriber::normalize_callee( + c => $c, subscriber => $subscriber, number => $n, + ); + $res .= "$nn;"; + + } + $c->response->body($res); + return; + } + return; +} + +sub end : Private { + my ($self, $c) = @_; + + $self->log_response($c); +} + +# vim: set tabstop=4 expandtab: diff --git a/lib/NGCP/Panel/Utils/Subscriber.pm b/lib/NGCP/Panel/Utils/Subscriber.pm index c94db4be82..c456affe96 100644 --- a/lib/NGCP/Panel/Utils/Subscriber.pm +++ b/lib/NGCP/Panel/Utils/Subscriber.pm @@ -809,6 +809,78 @@ sub prepare_alias_select { $params->{alias_select} = encode_json(\@alias_options); } +sub normalize_callee { + my (%params) = @_; + + my $c = $params{c}; + my $subscriber = $params{subscriber}; + my $callee = $params{number}; + + my $rwr_rs = NGCP::Panel::Utils::Preferences::get_usr_preference_rs( + c => $c, attribute => 'rewrite_callee_in_dpid', + prov_subscriber => $subscriber->provisioning_voip_subscriber, + ); + unless($rwr_rs->count) { + $rwr_rs = NGCP::Panel::Utils::Preferences::get_dom_preference_rs( + c => $c, attribute => 'rewrite_callee_in_dpid', + prov_domain => $subscriber->provisioning_voip_subscriber->domain, + ); + } + unless($rwr_rs->count) { + return $callee; + } + + my $rule_rs = $c->model('DB')->resultset('voip_rewrite_rules')->search({ + 'ruleset.callee_in_dpid' => $rwr_rs->first->value, + direction => 'in', + field => 'callee', + }, { + join => 'ruleset', + order_by => { -asc => 'priority' } + }); + my $cache = {}; + foreach my $r($rule_rs->all) { + my $match = $r->match_pattern; + my $replace = $r->replace_pattern; + + print ">>>>>>>>>>> match=$match, replace=$replace\n"; + for my $field($match, $replace) { + print ">>>>>>>>>>> normalizing $field\n"; + my @avps = (); + @avps = ($field =~ /\$avp\(s:caller_([^\)]+)\)/g); + use Data::Printer; p @avps; + for my $avp(@avps) { + print ">>>>>>>>>> checking avp $avp\n"; + if(!exists $cache->{$avp}) { + my $pref_rs = NGCP::Panel::Utils::Preferences::get_usr_preference_rs( + c => $c, attribute => $avp, + prov_subscriber => $subscriber->provisioning_voip_subscriber, + ); + unless($pref_rs->count) { + $pref_rs = NGCP::Panel::Utils::Preferences::get_dom_preference_rs( + c => $c, attribute => $avp, + prov_domain => $subscriber->provisioning_voip_subscriber->domain, + ); + } + next unless($pref_rs->count); + $cache->{$avp} = $pref_rs->first->value; + } + my $val = $cache->{$avp}; + $field =~ s/\$avp\(s:caller_$avp\)/$val/g; + print ">>>>>>>>>>> normalized $field\n"; + } + } + $replace =~ s/\\(\d{1})/\$$1/g; + + print ">>>>>>>>>>> final match=$match, replace=$replace, applying to $callee\n"; + $callee =~ s/$match/$replace/eeg; + print ">>>>>>>>>>> done, match=$match, replace=$replace, callee is $callee\n"; + + } + + return $callee; +} + 1; =head1 NAME