diff --git a/lib/NGCP/Panel/Controller/API/Domains.pm b/lib/NGCP/Panel/Controller/API/Domains.pm index 7eab0d23ad..8fccfacda5 100644 --- a/lib/NGCP/Panel/Controller/API/Domains.pm +++ b/lib/NGCP/Panel/Controller/API/Domains.pm @@ -69,7 +69,7 @@ __PACKAGE__->config( Does => [qw(ACL CheckTrailingSlash RequireSSL)], Method => $_, Path => __PACKAGE__->dispatch_path, - } } @{ __PACKAGE__->allowed_methods } + } } @{ __PACKAGE__->allowed_methods }, }, action_roles => [qw(HTTPMethods)], ); @@ -79,6 +79,7 @@ sub auto :Private { $self->set_body($c); $self->log_request($c); + return 1; } sub GET :Allow { @@ -160,6 +161,7 @@ sub POST :Allow { media_type => 'application/json', ); last unless $resource; + my ($sip_reload, $xmpp_reload) = $self->check_reload($c, $resource); my $form = $self->get_form($c); last unless $self->validate_form( @@ -215,8 +217,8 @@ sub POST :Allow { $guard->commit; try { - unless($c->config->{features}->{debug}) { - $self->xmpp_domain_reload($c, $resource->{domain}); + $self->xmpp_domain_reload($c, $resource->{domain}) if $xmpp_reload; + if ($sip_reload) { my (undef, $xmlrpc_res) = $self->sip_domain_reload($c); if (!defined $xmlrpc_res || $xmlrpc_res < 1) { die "XMLRPC failed"; @@ -240,6 +242,7 @@ sub end : Private { my ($self, $c) = @_; $self->log_response($c); + return; } # vim: set tabstop=4 expandtab: diff --git a/lib/NGCP/Panel/Controller/API/DomainsItem.pm b/lib/NGCP/Panel/Controller/API/DomainsItem.pm index 11949ca375..56a2203fc0 100644 --- a/lib/NGCP/Panel/Controller/API/DomainsItem.pm +++ b/lib/NGCP/Panel/Controller/API/DomainsItem.pm @@ -38,7 +38,7 @@ __PACKAGE__->config( ACLDetachTo => '/api/root/invalid_user', AllowedRole => [qw/admin reseller/], Does => [qw(ACL RequireSSL)], - }) } + }) }, }, action_roles => [qw(HTTPMethods)], ); @@ -48,6 +48,7 @@ sub auto :Private { $self->set_body($c); $self->log_request($c); + return 1; } sub GET :Allow { @@ -61,9 +62,8 @@ sub GET :Allow { my $response = HTTP::Response->new(HTTP_OK, undef, HTTP::Headers->new( (map { # XXX Data::HAL must be able to generate links with multiple relations - s|rel="(http://purl.org/sipwise/ngcp-api/#rel-resellers)"|rel="item $1"|; - s/rel=self/rel="item self"/; - $_ + s|rel="(http://purl.org/sipwise/ngcp-api/#rel-resellers)"|rel="item $1"|r =~ + s/rel=self/rel="item self"/r; } $hal->http_headers), ), $hal->as_json); $c->response->headers($response->headers); @@ -99,6 +99,8 @@ sub DELETE :Allow { my $domain = $self->item_by_id($c, $id); last unless $self->resource_exists($c, domain => $domain); + my ($sip_reload, $xmpp_reload) = $self->check_reload($c, $c->req->params); + if($c->user->roles eq "admin") { } elsif($c->user->roles eq "reseller") { unless($domain->domain_resellers->reseller_id == $c->user->reseller_id) { @@ -125,10 +127,8 @@ sub DELETE :Allow { $guard->commit; try { - unless($c->config->{features}->{debug}) { - $self->xmpp_domain_disable($c, $domain); - $self->sip_domain_reload($c); - } + $self->xmpp_domain_disable($c, $domain) if $xmpp_reload; + $self->sip_domain_reload($c) if $sip_reload; } catch($e) { $c->log->error("failed to deactivate domain: $e"); # TODO: user, message, trace, ... $self->error($c, HTTP_INTERNAL_SERVER_ERROR, "Failed to deactivate domain."); @@ -180,6 +180,7 @@ sub end : Private { my ($self, $c) = @_; $self->log_response($c); + return; } # vim: set tabstop=4 expandtab: diff --git a/lib/NGCP/Panel/Role/API.pm b/lib/NGCP/Panel/Role/API.pm index fdac3b790f..f8a4dc9d77 100644 --- a/lib/NGCP/Panel/Role/API.pm +++ b/lib/NGCP/Panel/Role/API.pm @@ -90,6 +90,22 @@ sub get_valid_patch_data { return $json; } +sub check_reload { + my ($self, $c, $resource) = @_; + my ($sip, $xmpp) = (1,1); + + if (delete $resource->{_skip_sip_reload} || $c->config->{features}->{debug}) { + $sip = 0; + $c->log->debug("skipping SIP reload"); + } + if (delete $resource->{_skip_xmpp_reload} || $c->config->{features}->{debug}) { + $xmpp = 0; + $c->log->debug("skipping XMPP reload"); + } + + return ($sip, $xmpp); +} + sub validate_form { my ($self, %params) = @_;