diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php b/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php index 79c8639f7..cf65982c5 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php @@ -32,6 +32,7 @@ namespace OPNsense\Core\Api; use \OPNsense\Base\ApiControllerBase; use \OPNsense\Core\Backend; +use OPNsense\Core\Config; /** * Class FirmwareController @@ -384,4 +385,95 @@ class FirmwareController extends ApiControllerBase return $response; } + + /** + * list firmware mirror and flavour options + * @return array + */ + public function getFirmwareOptionsAction() + { + // todo: we might want to move these into configuration files later + $mirrors = array(); + $mirrors['default'] = '(default)'; + $mirrors['https://opnsense.aivian.org'] = 'Aivian (Shaoxing, CN)'; + $mirrors['https://mirror.auf-feindgebiet.de/opnsense'] = 'auf-feindgebiet.de (Karlsruhe, DE)'; + $mirrors['https://opnsense.c0urier.net'] = 'c0urier.net (Lund, SE)'; + $mirrors['https://fleximus.org/mirror/opnsense'] = 'Fleximus (Roubaix, FR)'; + $mirrors['http://mirror.ams1.nl.leaseweb.net/opnsense'] = 'LeaseWeb (Amsterdam, NL)'; + $mirrors['http://mirror.fra10.de.leaseweb.net/opnsense'] = 'LeaseWeb (Frankfurt, DE)'; + $mirrors['http://mirror.sfo12.us.leaseweb.net/opnsense'] = 'LeaseWeb (San Francisco, US)'; + $mirrors['http://mirror.wdc1.us.leaseweb.net/opnsense'] = 'LeaseWeb (Washington, D.C., US)'; + $mirrors['http://mirrors.nycbug.org/pub/opnsense'] = 'NYC*BUG (New York, US)'; + $mirrors['http://pkg.opnsense.org'] = 'OPNsense (Amsterdam, NL)'; + $mirrors['http://mirror.ragenetwork.de/opnsense'] = 'RageNetwork (Munich, DE)'; + $mirrors['http://mirrors.supranet.net/pub/opnsense'] = 'Supranet Communications (Middleton, US)'; + $mirrors['http://mirror.wjcomms.co.uk/opnsense'] = 'WJComms (London, GB)'; + + $flavours = array(); + $flavours['default'] = '(default)'; + $flavours['libressl'] = 'LibreSSL'; + $flavours['latest'] = 'OpenSSL'; + + return array("mirrors"=>$mirrors, "flavours" => $flavours); + } + + /** + * retrieve current firmware configuration options + * @return array + */ + function getFirmwareConfigAction() + { + $result = array(); + if (!empty(Config::getInstance()->object()->system->firmware->mirror)) { + $result['mirror'] = (string)Config::getInstance()->object()->system->firmware->mirror; + } else { + $result['mirror'] = '(default)'; + } + if (!empty(Config::getInstance()->object()->system->firmware->flavour)) { + $result['flavour'] = (string)Config::getInstance()->object()->system->firmware->flavour; + } else { + $result['flavour'] = '(default)'; + } + return $result; + } + + /** + * set firmware configuration options + * @return array status + */ + function setFirmwareConfigAction() + { + $response = array("status" => "failure"); + + if ($this->request->isPost()) { + $response['status'] = 'ok'; + // config data without model, prepare xml structure and write data + if (!isset(Config::getInstance()->object()->system->firmware)) { + Config::getInstance()->object()->system->addChild('firmware'); + } + if (!isset(Config::getInstance()->object()->system->firmware->mirror)) { + Config::getInstance()->object()->system->firmware->addChild('mirror'); + } + if (!isset(Config::getInstance()->object()->system->firmware->flavour)) { + Config::getInstance()->object()->system->firmware->addChild('flavour'); + } + + $selectedMirror = filter_var($this->request->getPost("mirror", null, ""), FILTER_SANITIZE_URL); + $selectedFlavour = filter_var($this->request->getPost("flavour", null, ""), FILTER_SANITIZE_URL); + if (!empty($selectedMirror)) { + Config::getInstance()->object()->system->firmware->mirror = $selectedMirror; + } else { + Config::getInstance()->object()->system->firmware->mirror = 'default'; + } + if (!empty($selectedFlavour)) { + Config::getInstance()->object()->system->firmware->flavour = $selectedFlavour; + } else { + Config::getInstance()->object()->system->firmware->mirror = 'default'; + } + + Config::getInstance()->save(); + } + + return $response; + } } diff --git a/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt b/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt index 6384803fa..cbc7cf57a 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt @@ -305,6 +305,36 @@ POSSIBILITY OF SUCH DAMAGE. updateStatus(); } }); + // fetch firmware options + ajaxGet('/api/core/firmware/getFirmwareOptions',{},function(firmwareoptions, status) { + ajaxGet('/api/core/firmware/getFirmwareConfig',{},function(firmwareconfig, status) { + $.each(firmwareoptions.mirrors, function(key, value) { + var selected = false; + if (firmwareconfig['mirror'].indexOf(key) == 0) { + selected = true; + } + $("#firmware_mirror").append($("