diff --git a/sysutils/api-backup/Makefile b/sysutils/api-backup/Makefile index d1a243984..55131b846 100644 --- a/sysutils/api-backup/Makefile +++ b/sysutils/api-backup/Makefile @@ -1,6 +1,5 @@ PLUGIN_NAME= api-backup -PLUGIN_VERSION= 1.0 -PLUGIN_REVISION= 1 +PLUGIN_VERSION= 1.1 PLUGIN_COMMENT= Provide the functionality to download the config.xml PLUGIN_MAINTAINER= franz.fabian.94@gmail.com diff --git a/sysutils/api-backup/pkg-descr b/sysutils/api-backup/pkg-descr index 45972dda8..2a2a1cfe6 100644 --- a/sysutils/api-backup/pkg-descr +++ b/sysutils/api-backup/pkg-descr @@ -1 +1,12 @@ Provide the functionality to download the config.xml + +Plugin Changelog +================ + +1.1 + +* add json download functionality + +1.0 + +* initial release diff --git a/sysutils/api-backup/src/opnsense/mvc/app/controllers/OPNsense/Backup/Api/BackupController.php b/sysutils/api-backup/src/opnsense/mvc/app/controllers/OPNsense/Backup/Api/BackupController.php index 192be7340..e39e5682b 100644 --- a/sysutils/api-backup/src/opnsense/mvc/app/controllers/OPNsense/Backup/Api/BackupController.php +++ b/sysutils/api-backup/src/opnsense/mvc/app/controllers/OPNsense/Backup/Api/BackupController.php @@ -1,6 +1,7 @@ response->setStatusCode(200, "OK"); - $this->response->setContentType('application/xml', 'UTF-8'); - $this->response->setHeader("Content-Disposition", "attachment; filename=\"config.xml\""); $data = file_get_contents(self::CONFIG_XML); - $this->response->setContent($data); + $status = $data === false ? 'error' : 'success'; + + if ($format == 'json') { + $response = array( + 'status' => $status, + 'filename' => 'config.xml', + 'filetype' => 'application/xml', + 'content' => base64_encode($data), + ); + return $response; + } else { + $this->response->setStatusCode(200, "OK"); + $this->response->setContentType('application/xml', 'UTF-8'); + $this->response->setHeader("Content-Disposition", "attachment; filename=\"config.xml\""); + $data = file_get_contents(self::CONFIG_XML); + $this->response->setContent($data); + } } + /** + * process API results, serialize return data to json. + * @param $dispatcher + * @return string json data + */ public function afterExecuteRoute($dispatcher) { - $this->response->send(); + // check if reponse headers are already set + if ($this->response->getHeaders()->get("Status") != null) { + // Headers already set, send unmodified response. + } else { + // process response, serialize to json object + $data = $dispatcher->getReturnedValue(); + if (is_array($data)) { + $this->response->setContentType('application/json', 'UTF-8'); + if ($this->isExternalClient()) { + $this->response->setContent(json_encode($data)); + } else { + $this->response->setContent(htmlspecialchars(json_encode($data), ENT_NOQUOTES)); + } + } + } + + return $this->response->send(); } }