MT#5355 Implement peer_auth api calls to sems.

gjungwirth/fix_tests
Andreas Granig 12 years ago
parent 58adac5da9
commit 7e3a2997f4

@ -3,6 +3,7 @@ use Sipwise::Base;
BEGIN { extends 'Catalyst::Controller'; }
use HTML::Entities;
use URI::Escape qw(uri_unescape);
use Test::More;
use NGCP::Panel::Utils::Navigation;
use NGCP::Panel::Utils::Contract;
use NGCP::Panel::Utils::Subscriber;
@ -11,6 +12,7 @@ use NGCP::Panel::Utils::Callflow;
use NGCP::Panel::Utils::Preferences;
use NGCP::Panel::Utils::Message;
use NGCP::Panel::Utils::DateTime;
use NGCP::Panel::Utils::Sems;
use NGCP::Panel::Form::Subscriber;
use NGCP::Panel::Form::SubscriberEdit;
use NGCP::Panel::Form::Customer::PbxExtensionSubscriberEdit;
@ -409,6 +411,8 @@ sub preferences_base :Chained('base') :PathPart('preferences') :CaptureArgs(1) {
sub preferences_edit :Chained('preferences_base') :PathPart('edit') :Args(0) {
my ($self, $c) = @_;
my $prov_subscriber = $c->stash->{subscriber}->provisioning_voip_subscriber;
$c->detach('/denied_page')
if(($c->user->roles eq "admin" || $c->user->roles eq "reseller") && $c->user->read_only);
@ -422,15 +426,55 @@ sub preferences_edit :Chained('preferences_base') :PathPart('edit') :Args(0) {
my $pref_rs = $c->model('DB')
->resultset('voip_usr_preferences')
->search({
subscriber_id => $c->stash->{subscriber}->provisioning_voip_subscriber->id
subscriber_id => $prov_subscriber->id
});
my $old_auth_prefs = {};
if($c->req->method eq "POST" && $c->stash->{preference_meta}->attribute =~ /^peer_auth_/) {
NGCP::Panel::Utils::Preferences::get_peer_auth_params(
$c, $prov_subscriber, $old_auth_prefs);
}
NGCP::Panel::Utils::Preferences::create_preference_form( c => $c,
pref_rs => $pref_rs,
enums => \@enums,
base_uri => $c->uri_for_action('/subscriber/preferences', [$c->req->captures->[0]]),
edit_uri => $c->uri_for_action('/subscriber/preferences_edit', $c->req->captures),
);
if(keys %{ $old_auth_prefs }) {
my $new_auth_prefs = {};
NGCP::Panel::Utils::Preferences::get_peer_auth_params(
$c, $prov_subscriber, $new_auth_prefs);
unless(is_deeply($old_auth_prefs, $new_auth_prefs)) {
try {
if(!NGCP::Panel::Utils::Preferences::is_peer_auth_active($c, $old_auth_prefs) &&
NGCP::Panel::Utils::Preferences::is_peer_auth_active($c, $new_auth_prefs)) {
NGCP::Panel::Utils::Sems::create_peer_registration(
$c, $prov_subscriber, $new_auth_prefs);
} elsif(NGCP::Panel::Utils::Preferences::is_peer_auth_active($c, $old_auth_prefs) &&
!NGCP::Panel::Utils::Preferences::is_peer_auth_active($c, $new_auth_prefs)) {
NGCP::Panel::Utils::Sems::delete_peer_registration(
$c, $prov_subscriber, $old_auth_prefs);
} elsif(NGCP::Panel::Utils::Preferences::is_peer_auth_active($c, $old_auth_prefs) &&
NGCP::Panel::Utils::Preferences::is_peer_auth_active($c, $new_auth_prefs)){
NGCP::Panel::Utils::Sems::update_peer_registration(
$c, $prov_subscriber, $new_auth_prefs, $old_auth_prefs);
}
} catch($e) {
NGCP::Panel::Utils::Message->error(
c => $c,
log => "Failed to set peer registration: $e",
desc => "Peer registration error: $e",
);
}
}
}
}
sub preferences_callforward :Chained('base') :PathPart('preferences/callforward') :Args(1) {

@ -460,6 +460,42 @@ sub get_dom_preference_rs {
return $preference;
}
sub get_peer_auth_params {
my ($c, $prov_subscriber, $prefs) = @_;
my $rs;
$rs = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'peer_auth_user',
prov_subscriber => $prov_subscriber);
$prefs->{peer_auth_user} = $rs->first ? $rs->first->value : undef;
$rs = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'peer_auth_realm',
prov_subscriber => $prov_subscriber);
$prefs->{peer_auth_realm} = $rs->first ? $rs->first->value : undef;
$rs = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'peer_auth_pass',
prov_subscriber => $prov_subscriber);
$prefs->{peer_auth_pass} = $rs->first ? $rs->first->value : undef;
$rs = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'peer_auth_register',
prov_subscriber => $prov_subscriber);
$prefs->{peer_auth_register} = $rs->first ? $rs->first->value : undef;
}
sub is_peer_auth_active {
my ($c, $prefs) = @_;
if(defined $prefs->{peer_auth_register} && $prefs->{peer_auth_register} == 1 &&
defined $prefs->{peer_auth_user} &&
defined $prefs->{peer_auth_realm} &&
defined $prefs->{peer_auth_pass}) {
$c->log->debug("+++++++++++ peer auth register is active");
return 1;
}
$c->log->debug("+++++++++++ peer auth register is NOT active");
return;
}
1;
=head1 NAME

@ -0,0 +1,174 @@
package NGCP::Panel::Utils::Sems;
use Sipwise::Base;
use NGCP::Panel::Utils::XMLDispatcher;
use Data::Dumper;
sub create_peer_registration {
my ($c, $prov_subscriber, $prefs) = @_;
if($c->config->{features}->{debug}) {
$c->log->debug("skip creating peer registration for subscriber '".$prov_subscriber->username.'@'.$prov_subscriber->domain->domain."'");
return 1;
}
my $dispatcher = NGCP::Panel::Utils::XMLDispatcher->new;
$c->log->debug("creating peer registration for subscriber '".$prov_subscriber->username.'@'.$prov_subscriber->domain->domain."'");
my $sid = $prov_subscriber->id;
my $uuid = $prov_subscriber->uuid;
my $contact = $c->config->{sip}->{lb_ext};
my @ret = $dispatcher->dispatch("appserver", 1, 1, <<EOF);
<?xml version="1.0"?>
<methodCall>
<methodName>db_reg_agent.createRegistration</methodName>
<params>
<param><value><int>$sid</int></value></param>
<param><value><string>$$prefs{peer_auth_user}</string></value></param>
<param><value><string>$$prefs{peer_auth_pass}</string></value></param>
<param><value><string>$$prefs{peer_auth_realm}</string></value></param>
<param><value><string>sip:$$prefs{peer_auth_user}\@$contact;uuid=$uuid</string></value></param>
</params>
</methodCall>
EOF
if(grep { $$_[1] != 1 or $$_[2] !~ m#<value>OK</value># } @ret) { # error
$c->log->error("Failed XML-RPC call to appserver: ". Dumper \@ret);
# remove reg from successsful backends
foreach my $ret (grep {!$$_[1]} @ret) { # successful backends
$dispatcher->dispatch($$ret[0], 1, 1, <<EOF);
<?xml version="1.0"?>
<methodCall>
<methodName>db_reg_agent.removeRegistration</methodName>
<params>
<param><value><int>$sid</int></value></param>
</params>
</methodCall>
EOF
}
die "Failed to add peer registration on application servers\n";
}
return 1;
}
sub update_peer_registration {
my ($c, $prov_subscriber, $prefs, $oldprefs) = @_;
if($c->config->{features}->{debug}) {
$c->log->debug("skip updating peer registration for subscriber '".$prov_subscriber->username.'@'.$prov_subscriber->domain->domain."'");
return 1;
}
my $dispatcher = NGCP::Panel::Utils::XMLDispatcher->new;
$c->log->debug("trying to update peer registration for subscriber '".$prov_subscriber->username.'@'.$prov_subscriber->domain->domain."'");
my $sid = $prov_subscriber->id;
my $uuid = $prov_subscriber->uuid;
my $contact = $c->config->{sip}->{lb_ext};
use Data::Dumper;
$c->log->debug("+++++++++++++++++++ old peer auth params: " . Dumper $oldprefs);
$c->log->debug("+++++++++++++++++++ new peer auth params: " . Dumper $prefs);
$c->log->debug("+++++++++++++++++++ sid=$sid");
$c->log->debug("+++++++++++++++++++ uuid=$uuid");
$c->log->debug("+++++++++++++++++++ contact=$contact");
my @ret = $dispatcher->dispatch("appserver", 1, 1, <<EOF);
<?xml version="1.0"?>
<methodCall>
<methodName>db_reg_agent.updateRegistration</methodName>
<params>
<param><value><int>$sid</int></value></param>
<param><value><string>$$prefs{peer_auth_user}</string></value></param>
<param><value><string>$$prefs{peer_auth_pass}</string></value></param>
<param><value><string>$$prefs{peer_auth_realm}</string></value></param>
<param><value><string>sip:$$prefs{peer_auth_user}\@$contact;uuid=$uuid</string></value></param>
</params>
</methodCall>
EOF
if(grep { $$_[1] != 1 or $$_[2] !~ m#<value>OK</value># } @ret) { # error
$c->log->error("Failed XML-RPC call to appserver: ". Dumper \@ret);
# undo update on successsful backends
foreach my $ret (grep {!$$_[1]} @ret) { # successful backends
$dispatcher->dispatch($$ret[0], 1, 1, <<EOF);
<?xml version="1.0"?>
<methodCall>
<methodName>db_reg_agent.updateRegistration</methodName>
<params>
<param><value><int>$sid</int></value></param>
<param><value><string>$$oldprefs{peer_auth_user}</string></value></param>
<param><value><string>$$oldprefs{peer_auth_pass}</string></value></param>
<param><value><string>$$oldprefs{peer_auth_realm}</string></value></param>
<param><value><string>sip:$$oldprefs{peer_auth_user}\@$contact;uuid=$uuid</string></value></param>
</params>
</methodCall>
EOF
}
die "Failed to update peer registration on application servers\n";
}
return 1;
}
sub delete_peer_registration {
my ($c, $prov_subscriber, $oldprefs) = @_;
if($c->config->{features}->{debug}) {
$c->log->debug("skip deleting peer registration for subscriber '".$prov_subscriber->username.'@'.$prov_subscriber->domain->domain."'");
return 1;
}
my $dispatcher = NGCP::Panel::Utils::XMLDispatcher->new;
$c->log->debug("trying to delete peer registration for subscriber '".$prov_subscriber->username.'@'.$prov_subscriber->domain->domain."'");
my $sid = $prov_subscriber->id;
my $uuid = $prov_subscriber->uuid;
my $contact = $c->config->{sip}->{lb_ext};
my @ret = $dispatcher->dispatch("appserver", 1, 1, <<EOF);
<?xml version="1.0"?>
<methodCall>
<methodName>db_reg_agent.removeRegistration</methodName>
<params>
<param><value><int>$sid</int></value></param>
</params>
</methodCall>
EOF
if(grep { $$_[1] != 1 or $$_[2] !~ m#<value>OK</value># } @ret) { # error
$c->log->error("Failed XML-RPC call to appserver: ". Dumper \@ret);
# remove reg from successsful backends
foreach my $ret (grep {!$$_[1]} @ret) { # successful backends
$dispatcher->dispatch($ret[0], 1, 1, <<EOF);
<?xml version="1.0"?>
<methodCall>
<methodName>db_reg_agent.createRegistration</methodName>
<params>
<param><value><int>$sid</int></value></param>
<param><value><string>$$oldprefs{peer_auth_user}</string></value></param>
<param><value><string>$$oldprefs{peer_auth_pass}</string></value></param>
<param><value><string>$$oldprefs{peer_auth_realm}</string></value></param>
<param><value><string>sip:$$oldprefs{peer_auth_user}\@$contact;uuid=$uuid</string></value></param>
</params>
</methodCall>
EOF
}
die "Failed to delete peer registration on application servers\n";
}
return 1;
}
1;
# vim: set tabstop=4 expandtab:
Loading…
Cancel
Save