@ -21,29 +21,19 @@ sub allowed_methods{
use parent qw/NGCP::Panel::Role::EntitiesItem NGCP::Panel::Role::API::Subscribers/ ;
sub resource_name {
return 'subscribers' ;
}
sub dispatch_path {
return '/api/subscribers/' ;
}
__PACKAGE__ - > set_config ( {
allowed_roles = > {
Default = > [ qw/admin reseller subscriberadmin subscriber/ ] ,
Journal = > [ qw/admin reseller/ ] ,
}
} ) ;
sub relation {
return 'http://purl.org/sipwise/ngcp-api/#rel-subscribers' ;
}
sub journal_query_params {
my ( $ self , $ query_params ) = @ _ ;
return $ self - > get_journal_query_params ( $ query_params ) ;
}
__PACKAGE__ - > set_config ( {
allowed_roles = > {
Default = > [ qw/admin reseller subscriberadmin subscriber/ ] ,
Journal = > [ qw/admin reseller/ ] ,
}
} ) ;
sub GET :Allow {
my ( $ self , $ c , $ id ) = @ _ ;
@ -81,10 +71,7 @@ sub GET :Allow {
sub PUT :Allow {
my ( $ self , $ c , $ id ) = @ _ ;
if ( $ c - > user - > roles eq "subscriberadmin" || $ c - > user - > roles eq "subscriber" ) {
$ self - > error ( $ c , HTTP_FORBIDDEN , "Read-only resource for authenticated role" ) ;
return ;
}
return unless $ self - > check_write_access ( $ c ) ;
my $ schema = $ c - > model ( 'DB' ) ;
$ schema - > set_transaction_isolation ( 'READ COMMITTED' ) ;
@ -118,21 +105,7 @@ sub PUT :Allow {
last unless $ self - > add_update_journal_item_hal ( $ c , $ hal ) ;
$ guard - > commit ;
if ( 'minimal' eq $ preference ) {
$ c - > response - > status ( HTTP_NO_CONTENT ) ;
$ c - > response - > header ( Preference_Applied = > 'return=minimal' ) ;
$ c - > response - > body ( q( ) ) ;
} else {
#$resource = $self->resource_from_item($c, $subscriber, $form);
#my $hal = $self->hal_from_item($c, $subscriber, $resource, $form);
my $ response = HTTP::Response - > new ( HTTP_OK , undef , HTTP::Headers - > new (
$ hal - > http_headers ,
) , $ hal - > as_json ) ;
$ c - > response - > headers ( $ response - > headers ) ;
$ c - > response - > header ( Preference_Applied = > 'return=representation' ) ;
$ c - > response - > body ( $ response - > content ) ;
}
$ self - > return_representation ( $ c , 'hal' = > $ hal , 'preference' = > $ preference ) ;
}
return ;
}
@ -140,10 +113,7 @@ sub PUT :Allow {
sub PATCH :Allow {
my ( $ self , $ c , $ id ) = @ _ ;
if ( $ c - > user - > roles eq "subscriberadmin" || $ c - > user - > roles eq "subscriber" ) {
$ self - > error ( $ c , HTTP_FORBIDDEN , "Read-only resource for authenticated role" ) ;
return ;
}
return unless $ self - > check_write_access ( $ c ) ;
my $ schema = $ c - > model ( 'DB' ) ;
$ schema - > set_transaction_isolation ( 'READ COMMITTED' ) ;
@ -184,21 +154,7 @@ sub PATCH :Allow {
last unless $ self - > add_update_journal_item_hal ( $ c , $ hal ) ;
$ guard - > commit ;
if ( 'minimal' eq $ preference ) {
$ c - > response - > status ( HTTP_NO_CONTENT ) ;
$ c - > response - > header ( Preference_Applied = > 'return=minimal' ) ;
$ c - > response - > body ( q( ) ) ;
} else {
#$resource = $self->resource_from_item($c, $subscriber, $form);
#my $hal = $self->hal_from_item($c, $subscriber, $resource, $form);
my $ response = HTTP::Response - > new ( HTTP_OK , undef , HTTP::Headers - > new (
$ hal - > http_headers ,
) , $ hal - > as_json ) ;
$ c - > response - > headers ( $ response - > headers ) ;
$ c - > response - > header ( Preference_Applied = > 'return=representation' ) ;
$ c - > response - > body ( $ response - > content ) ;
}
$ self - > return_representation ( $ c , 'hal' = > $ hal , 'preference' = > $ preference ) ;
}
return ;
}
@ -206,10 +162,7 @@ sub PATCH :Allow {
sub DELETE :Allow {
my ( $ self , $ c , $ id ) = @ _ ;
if ( $ c - > user - > roles eq "subscriber" ) {
$ self - > error ( $ c , HTTP_FORBIDDEN , "Read-only resource for authenticated role" ) ;
return ;
}
return unless $ self - > check_write_access ( $ c ) ;
my $ guard = $ c - > model ( 'DB' ) - > txn_scope_guard ;
{
@ -217,12 +170,6 @@ sub DELETE :Allow {
last unless $ self - > resource_exists ( $ c , subscriber = > $ subscriber ) ;
if ( $ c - > user - > roles eq "subscriberadmin" ) {
my $ customer = $ self - > get_customer ( $ c , $ c - > user - > account_id ) ;
if ( $ customer - > get_column ( 'product_class' ) ne 'pbxaccount' ) {
$ self - > error ( $ c , HTTP_FORBIDDEN , "Read-only resource for authenticated role" ) ;
return ;
}
my $ prov_sub = $ subscriber - > provisioning_voip_subscriber ;
if ( $ prov_sub - > is_pbx_pilot ) {
$ self - > error ( $ c , HTTP_FORBIDDEN , "Cannot terminate pilot subscriber" ) ;