From f3bc8097e7f73b7265a1ea2a192996d3c406b997 Mon Sep 17 00:00:00 2001
From: Kirill Solomko <ksolomko@sipwise.com>
Date: Tue, 20 Aug 2024 11:35:09 +0200
Subject: [PATCH] MT#60710 add missing DELETE method for pbx endpoints

* enable DELETE method for:
  - /api/pbxdevicefirmwares/
  - /api/pbxdevicemodels/
  - /api/pbxdeviceprofiles/
* /api/pbxdeviceprofiles fix allowed_roles for 'subscriberadmin' to
  only allow GET method

Change-Id: I4ed8f591529e161aa08648c99093459128b55203
---
 .../Controller/API/PbxDeviceConfigsItem.pm    |  4 +--
 .../Controller/API/PbxDeviceFirmwaresItem.pm  |  4 +--
 .../Controller/API/PbxDeviceModelsItem.pm     |  3 ++-
 .../Panel/Controller/API/PbxDeviceProfiles.pm |  5 +++-
 .../Controller/API/PbxDeviceProfilesItem.pm   | 26 +++++++++++++++++--
 5 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/lib/NGCP/Panel/Controller/API/PbxDeviceConfigsItem.pm b/lib/NGCP/Panel/Controller/API/PbxDeviceConfigsItem.pm
index 4efb1bb80a..8537a8a429 100644
--- a/lib/NGCP/Panel/Controller/API/PbxDeviceConfigsItem.pm
+++ b/lib/NGCP/Panel/Controller/API/PbxDeviceConfigsItem.pm
@@ -12,7 +12,7 @@ require NGCP::Panel::Role::HTTPMethods;
 require Catalyst::ActionRole::RequireSSL;
 
 sub allowed_methods{
-    return [qw/GET OPTIONS HEAD PUT/];
+    return [qw/GET OPTIONS HEAD PUT DELETE/];
 }
 
 use parent qw/NGCP::Panel::Role::EntitiesItem NGCP::Panel::Role::API::PbxDeviceConfigs/;
@@ -86,7 +86,6 @@ sub PUT :Allow {
     return;
 }
 
-=pod
 sub DELETE :Allow {
     my ($self, $c, $id) = @_;
 
@@ -103,7 +102,6 @@ sub DELETE :Allow {
     }
     return;
 }
-=cut
 
 1;
 
diff --git a/lib/NGCP/Panel/Controller/API/PbxDeviceFirmwaresItem.pm b/lib/NGCP/Panel/Controller/API/PbxDeviceFirmwaresItem.pm
index ccae61507d..d588c81a00 100644
--- a/lib/NGCP/Panel/Controller/API/PbxDeviceFirmwaresItem.pm
+++ b/lib/NGCP/Panel/Controller/API/PbxDeviceFirmwaresItem.pm
@@ -12,7 +12,7 @@ require NGCP::Panel::Role::HTTPMethods;
 require Catalyst::ActionRole::RequireSSL;
 
 sub allowed_methods{
-    return [qw/GET OPTIONS HEAD PUT/];
+    return [qw/GET OPTIONS HEAD PUT DELETE/];
 }
 
 use parent qw/NGCP::Panel::Role::EntitiesItem NGCP::Panel::Role::API::PbxDeviceFirmwares/;
@@ -91,7 +91,6 @@ sub PUT :Allow {
     return;
 }
 
-=pod
 sub DELETE :Allow {
     my ($self, $c, $id) = @_;
 
@@ -108,7 +107,6 @@ sub DELETE :Allow {
     }
     return;
 }
-=cut
 
 1;
 
diff --git a/lib/NGCP/Panel/Controller/API/PbxDeviceModelsItem.pm b/lib/NGCP/Panel/Controller/API/PbxDeviceModelsItem.pm
index 2ed40cc9a9..0be87be68d 100644
--- a/lib/NGCP/Panel/Controller/API/PbxDeviceModelsItem.pm
+++ b/lib/NGCP/Panel/Controller/API/PbxDeviceModelsItem.pm
@@ -14,12 +14,13 @@ __PACKAGE__->set_config({
         'Default' => [qw/admin reseller subscriberadmin subscriber/],
         'PUT'     => [qw/admin reseller/],
         'PATCH'   => [qw/admin reseller/],
+        'DELETE'  => [qw/admin reseller/],
     },
     required_licenses => [qw/pbx device_provisioning/],
 });
 
 sub allowed_methods{
-    return [qw/GET OPTIONS HEAD PATCH PUT/];
+    return [qw/GET OPTIONS HEAD PATCH PUT DELETE/];
 }
 
 1;
diff --git a/lib/NGCP/Panel/Controller/API/PbxDeviceProfiles.pm b/lib/NGCP/Panel/Controller/API/PbxDeviceProfiles.pm
index daaa6326bd..805be42cf4 100644
--- a/lib/NGCP/Panel/Controller/API/PbxDeviceProfiles.pm
+++ b/lib/NGCP/Panel/Controller/API/PbxDeviceProfiles.pm
@@ -49,7 +49,10 @@ sub relation{
 }
 
 __PACKAGE__->set_config({
-    allowed_roles => [qw/admin reseller subscriberadmin/],
+    allowed_roles => {
+        'Default' => [qw/admin reseller subscriberadmin/],
+        'POST'    => [qw/admin reseller/],
+    }
     required_licenses => [qw/pbx device_provisioning/],
 });
 
diff --git a/lib/NGCP/Panel/Controller/API/PbxDeviceProfilesItem.pm b/lib/NGCP/Panel/Controller/API/PbxDeviceProfilesItem.pm
index 339167042b..cc1e15f95a 100644
--- a/lib/NGCP/Panel/Controller/API/PbxDeviceProfilesItem.pm
+++ b/lib/NGCP/Panel/Controller/API/PbxDeviceProfilesItem.pm
@@ -15,7 +15,7 @@ require NGCP::Panel::Role::HTTPMethods;
 require Catalyst::ActionRole::RequireSSL;
 
 sub allowed_methods{
-    return [qw/GET OPTIONS HEAD PATCH PUT/];
+    return [qw/GET OPTIONS HEAD PATCH PUT DELETE/];
 }
 
 use parent qw/NGCP::Panel::Role::EntitiesItem NGCP::Panel::Role::API::PbxDeviceProfiles/;
@@ -33,7 +33,12 @@ sub relation{
 }
 
 __PACKAGE__->set_config({
-    allowed_roles => [qw/admin reseller subscriberadmin/],
+    allowed_roles => {
+        'Default' => [qw/admin reseller subscriberadmin/],
+        'PUT'     => [qw/admin reseller/],
+        'PATCH'   => [qw/admin reseller/],
+        'DELETE'  => [qw/admin reseller/],
+    },
     required_licenses => [qw/pbx device_provisioning/],
 });
 
@@ -130,6 +135,23 @@ sub PUT :Allow {
     return;
 }
 
+sub DELETE :Allow {
+    my ($self, $c, $id) = @_;
+
+    my $guard = $c->model('DB')->txn_scope_guard;
+    {
+        my $item = $self->item_by_id($c, $id);
+        last unless $self->resource_exists($c, pbxdeviceprofile => $item);
+        $item->delete;
+
+        $guard->commit;
+
+        $c->response->status(HTTP_NO_CONTENT);
+        $c->response->body(q());
+    }
+    return;
+}
+
 1;
 
 __END__