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).
This commit is contained in:
parent
1709a6208f
commit
4e128da70f
|
@ -4,4 +4,6 @@
|
|||
*.pyc
|
||||
*.sass-cache
|
||||
*.volt.php
|
||||
/.idea/
|
||||
/.idea/
|
||||
/config/config.php
|
||||
/conf/config.xml
|
||||
|
|
|
@ -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