work in progress, use run_server.php to startup a local webserver and browse to /ui/ pages locally, when -d is specified xdebug is enabled (slow, but functional).
parent
1709a6208f
commit
4e128da70f
8 changed files with 391 additions and 1 deletions
@ -0,0 +1,62 @@ |
||||
<?php |
||||
/** |
||||
* Copyright (C) 2018 Deciso B.V. |
||||
* |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* |
||||
* 2. Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in the |
||||
* documentation and/or other materials provided with the distribution. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, |
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY |
||||
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
||||
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, |
||||
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
* POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
|
||||
$conf = new \Phalcon\Config(array( |
||||
'application' => array( |
||||
'controllersDir' => '{plugin_directory}/src/opnsense/mvc/app/controllers/', |
||||
'modelsDir' => '{plugin_directory}/src/opnsense/mvc/app/models/', |
||||
'viewsDir' => '{plugin_directory}/src/opnsense/mvc/app/views/', |
||||
'libraryDir' => '.', |
||||
'cacheDir' => '{temp_directory}/cache', |
||||
'baseUri' => '/opnsense_gui/', |
||||
), |
||||
'globals' => array( |
||||
'config_path' => __DIR__ . '/../conf/', |
||||
'temp_path' => '/tmp/', |
||||
'debug' => false, |
||||
'simulate_mode' => true |
||||
), |
||||
'environment' => array( |
||||
/* php includes to add */ |
||||
'includes' => array( |
||||
'.' |
||||
), |
||||
/* location of OPNsense core package */ |
||||
'coreDir' => '{root_of_OPNsense_core_repo}', |
||||
) |
||||
)); |
||||
|
||||
// Add core views |
||||
if (strpos($conf->application->viewsDir, $conf->environment->coreDir) === false) { |
||||
$conf->application->viewsDir = array($conf->application->viewsDir, |
||||
"{$conf->environment->coreDir}/src/opnsense/mvc/app/views/" |
||||
); |
||||
} |
||||
|
||||
return $conf; |
@ -0,0 +1,81 @@ |
||||
<?php |
||||
/** |
||||
* Copyright (C) 2018 Deciso B.V. |
||||
* |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* |
||||
* 2. Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in the |
||||
* documentation and/or other materials provided with the distribution. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, |
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY |
||||
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
||||
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, |
||||
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
* POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
$uri = urldecode(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)); |
||||
|
||||
// handle local hosted files (js, css, etc) |
||||
$hosted_local_patterns = array(); |
||||
$hosted_local_patterns[] = '/^\/ui\/css\/.*/'; |
||||
$hosted_local_patterns[] = '/^\/ui\/fonts\/.*/'; |
||||
$hosted_local_patterns[] = '/^\/ui\/js\/.*/'; |
||||
$hosted_local_patterns[] = '/^\/ui\/img\/.*/'; |
||||
$hosted_local_patterns[] = '/^\/ui\/themes\/.*/'; |
||||
$hosted_local_patterns[] = '/^\favicon.*/'; |
||||
foreach ($hosted_local_patterns as $pattern) { |
||||
if (preg_match($pattern, $uri)) { |
||||
if (strpos($uri, '/ui/') === 0) { |
||||
$path = __DIR__ . substr($uri, 3); |
||||
if (is_file($path)) { |
||||
$tmp_ext = explode('.', strtolower($path)); |
||||
$mimeTypes = [ |
||||
'css' => 'text/css', |
||||
'js' => 'application/javascript', |
||||
'jpg' => 'image/jpg', |
||||
'png' => 'image/png', |
||||
'map' => 'application/json' |
||||
]; |
||||
if (isset($mimeTypes[$tmp_ext[count($tmp_ext)-1]])) { |
||||
header("Content-Type: {$mimeTypes[$tmp_ext[count($tmp_ext)-1]]}"); |
||||
} |
||||
readfile($path); |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
// setup environment |
||||
global $DEV_WORKDIR; |
||||
$DEV_WORKDIR = getenv("DEV_WORKDIR"); // passed through from run_server |
||||
|
||||
// set user to root for local testing |
||||
session_start(); |
||||
$_SESSION["Username"]="root"; |
||||
session_write_close(); |
||||
|
||||
if (preg_match("/^\/ui\/.*/", $uri)) { |
||||
$_GET['_url'] = substr($_SERVER['REQUEST_URI'], 3); |
||||
require_once "{$DEV_WORKDIR}/stubs/index.php"; |
||||
} elseif (preg_match("/^\/api\/.*/", $uri)) { |
||||
$_GET['_url'] = substr($_SERVER['REQUEST_URI'], 4); |
||||
require_once "{$DEV_WORKDIR}/stubs/api.php"; |
||||
} else { |
||||
return false; |
||||
} |
@ -0,0 +1,75 @@ |
||||
<?php |
||||
/** |
||||
* Copyright (C) 2018 Deciso B.V. |
||||
* |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* |
||||
* 2. Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in the |
||||
* documentation and/or other materials provided with the distribution. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, |
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY |
||||
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
||||
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, |
||||
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
* POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
// construct "run server" command |
||||
$run_command = array(); |
||||
$run_command[] = PHP_BINARY; |
||||
|
||||
// enable xdebug when requested |
||||
if (in_array('-d', $argv)) { |
||||
$run_command[] = "-d xdebug.remote_autostart=1"; |
||||
$run_command[] = "-d xdebug.remote_enable=1"; |
||||
$run_command[] = "-d xdebug.remote_host=localhost"; |
||||
$run_command[] = "-d xdebug.remote_port=9000"; |
||||
$run_command[] = "-d xdebug.remote_handler=dbgp"; |
||||
} |
||||
|
||||
$config = include __DIR__ . "/config/config.php"; |
||||
|
||||
// copy our ht access router to the core www directory |
||||
copy(__DIR__ . '/public/.htrouter.php', "{$config->environment->coreDir}/src/opnsense/www/.htrouter.php"); |
||||
|
||||
// copy default config when there is no config found |
||||
if (!is_file("{$config->globals->config_path}/config.xml")) { |
||||
copy("{$config->environment->coreDir}/src/etc/config.xml.sample", "{$config->globals->config_path}/config.xml"); |
||||
} |
||||
|
||||
// gather php include paths and add to run command |
||||
$include_paths = array(); |
||||
foreach ($config->environment->includes as $include) { |
||||
$include_paths[] = trim($include); |
||||
} |
||||
$run_command[] = '-d include_path="'.implode(':', $include_paths).'"'; |
||||
|
||||
// listen to localhost |
||||
$run_command[] = "-S localhost:8000"; |
||||
|
||||
// set document root |
||||
$run_command[] = str_replace('//', '/', "-t {$config->environment->coreDir}/src/opnsense/www"); |
||||
|
||||
// .htaccess alternative routing |
||||
$run_command[] = ".htrouter.php"; |
||||
|
||||
// set our working directory in the php environment in which the server runs |
||||
putenv("DEV_WORKDIR=".__DIR__); |
||||
|
||||
// show executed command |
||||
$cmd_action = implode(' ', $run_command) ; |
||||
echo "{$cmd_action}\n"; |
||||
|
||||
exec($cmd_action); |
@ -0,0 +1,68 @@ |
||||
<?php |
||||
/** |
||||
* Copyright (C) 2018 Deciso B.V. |
||||
* |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* |
||||
* 2. Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in the |
||||
* documentation and/or other materials provided with the distribution. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, |
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY |
||||
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
||||
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, |
||||
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
* POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
error_reporting(E_ALL); |
||||
|
||||
try { |
||||
|
||||
/** |
||||
* Read the configuration |
||||
*/ |
||||
$config = include __DIR__ . "/../config/config.php"; |
||||
|
||||
/** |
||||
* Read auto-loader |
||||
*/ |
||||
include __DIR__ . "/loader.php"; |
||||
|
||||
/** |
||||
* Read services |
||||
*/ |
||||
include $config->environment->coreDir . "/src/opnsense/mvc/app/config/services_api.php"; |
||||
|
||||
/** |
||||
* local webserver might have moved Authorization header, move it back |
||||
*/ |
||||
if (!empty($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_PW'])) { |
||||
$_SERVER['HTTP_AUTHORIZATION'] = "Basic " .base64_encode($_SERVER['PHP_AUTH_USER'].":".$_SERVER['PHP_AUTH_PW']); |
||||
} |
||||
|
||||
/** |
||||
* Handle the request |
||||
*/ |
||||
$application = new \Phalcon\Mvc\Application($di); |
||||
echo $application->handle()->getContent(); |
||||
|
||||
} catch (\Exception $e) { |
||||
$response = array(); |
||||
$response['errorMessage'] = $e->getMessage(); |
||||
header('HTTP', true, 500); |
||||
header("Content-Type: application/json;charset=utf-8"); |
||||
echo htmlspecialchars(json_encode($response), ENT_NOQUOTES); |
||||
error_log($e); |
||||
} |
@ -0,0 +1,59 @@ |
||||
<?php |
||||
/** |
||||
* Copyright (C) 2018 Deciso B.V. |
||||
* |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* |
||||
* 2. Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in the |
||||
* documentation and/or other materials provided with the distribution. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, |
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY |
||||
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
||||
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, |
||||
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
* POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
error_reporting(E_ALL); |
||||
|
||||
try { |
||||
/** |
||||
* Read the configuration |
||||
*/ |
||||
$config = include __DIR__ . "/../config/config.php"; |
||||
|
||||
/** |
||||
* Read auto-loader |
||||
*/ |
||||
include __DIR__ . "/loader.php"; |
||||
|
||||
/** |
||||
* Read services |
||||
*/ |
||||
include $config->environment->coreDir . "/src/opnsense/mvc/app/config/services.php"; |
||||
|
||||
/** |
||||
* Handle the request |
||||
*/ |
||||
$application = new \Phalcon\Mvc\Application($di); |
||||
|
||||
// always flush caches for local testing |
||||
(new \OPNsense\Base\Menu\MenuSystem())->invalidateCache(); |
||||
(new \OPNsense\Core\ACL())->invalidateCache(); |
||||
echo $application->handle()->getContent(); |
||||
|
||||
} catch (\Exception $e) { |
||||
echo $e->getMessage(); |
||||
} |
@ -0,0 +1,43 @@ |
||||
<?php |
||||
/** |
||||
* Copyright (C) 2018 Deciso B.V. |
||||
* |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are met: |
||||
* |
||||
* 1. Redistributions of source code must retain the above copyright notice, |
||||
* this list of conditions and the following disclaimer. |
||||
* |
||||
* 2. Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in the |
||||
* documentation and/or other materials provided with the distribution. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, |
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY |
||||
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
||||
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, |
||||
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
* POSSIBILITY OF SUCH DAMAGE. |
||||
* |
||||
*/ |
||||
$loader = new \Phalcon\Loader(); |
||||
|
||||
/** |
||||
* We're a registering a set of directories taken from the configuration file |
||||
*/ |
||||
$loader->registerDirs( |
||||
array( |
||||
$config->application->controllersDir, |
||||
$config->application->modelsDir, |
||||
$config->application->libraryDir, |
||||
"{$config->environment->coreDir}/src/opnsense/mvc/app/controllers", |
||||
"{$config->environment->coreDir}/src/opnsense/mvc/app/models", |
||||
"{$config->environment->coreDir}/src/opnsense/mvc/app/library", |
||||
) |
||||
)->register(); |
Loading…
Reference in new issue