closes #175 added alternative environment configuration

This commit is contained in:
Exodus4D
2016-05-30 20:17:54 +02:00
parent a8bc61b7a7
commit 1e02027282
10 changed files with 275 additions and 56 deletions

View File

@@ -39,9 +39,9 @@ AUTOLOAD = app/main/
FAVICON = /favicon
; load additional config files
; DO NOT load environment.ini, it is loaded automatically
[configs]
app/routes.ini = true
app/environment.ini = true
app/pathfinder.ini = true
app/requirements.ini = true
app/cron.ini = true

View File

@@ -38,7 +38,7 @@ CCP_XML = https://api.testeveonline.com
; SMTP settings (optional)
SMTP_HOST = localhost
SMTP_PORT = 25
SMTP_SCHEME = ""
SMTP_SCHEME = TLS
SMTP_USER = pathfinder
SMTP_PASS = root

View File

@@ -9,6 +9,7 @@
namespace Controller;
use Controller\Api as Api;
use Controller\Ccp\Sso as Sso;
use lib\Config;
use Model;
use DB;
@@ -760,33 +761,7 @@ class Controller {
* @return string|null
*/
static function getEnvironmentData($key){
$f3 = \Base::instance();
$environment = self::getEnvironment();
$environmentKey = 'ENVIRONMENT[' . $environment . '][' . $key . ']';
$data = null;
if( $f3->exists($environmentKey) ){
$data = $f3->get($environmentKey);
}
return $data;
}
/**
* get current server environment status
* -> "DEVELOP" or "PRODUCTION"
* @return string
*/
static function getEnvironment(){
$f3 = \Base::instance();
return $f3->get('ENVIRONMENT.SERVER');
}
/**
* check if current server is "PRODUCTION"
* @return bool
*/
static function isProduction(){
return self::getEnvironment() == 'PRODUCTION';
return Config::getEnvironmentData($key);
}
/**

View File

@@ -11,11 +11,46 @@ namespace Controller;
use DB;
use DB\SQL;
use DB\SQL\MySQL as MySQL;
use lib\Config;
use Model;
class Setup extends Controller {
/**
* required environment variables
* @var array
*/
protected $environmentVars = [
'TYPE',
'BASE',
'URL',
'DEBUG',
'DB_DNS',
'DB_NAME',
'DB_USER',
'DB_PASS',
'DB_CCP_DNS',
'DB_CCP_NAME',
'DB_CCP_USER',
'DB_CCP_PASS',
'CCP_CREST_URL',
'SSO_CCP_URL',
'SSO_CCP_CLIENT_ID',
'SSO_CCP_SECRET_KEY',
'CCP_XML',
'SMTP_HOST',
'SMTP_PORT',
'SMTP_SCHEME',
'SMTP_USER',
'SMTP_PASS',
'SMTP_FROM',
'SMTP_ERROR'
];
/**
* required database setup
* @var array
*/
protected $databases = [
'PF' => [
'info' => [],
@@ -104,7 +139,7 @@ class Setup extends Controller {
* works as dispatcher for setup functions
* @param \Base $f3
*/
public function init($f3){
public function init(\Base $f3){
$params = $f3->get('GET');
// enables automatic column fix
@@ -128,22 +163,69 @@ class Setup extends Controller {
$fixColumns = true;
}
// set server information for page render
// set template data ----------------------------------------------------------------
// set environment information
$f3->set('environmentInformation', $this->getEnvironmentInformation($f3));
// set server information
$f3->set('serverInformation', $this->getServerInformation($f3));
// set requirement check information for page render
// set requirement check information
$f3->set('checkRequirements', $this->checkRequirements($f3));
// set database connection information for page render
// set database connection information
$f3->set('checkDatabase', $this->checkDatabase($f3, $fixColumns));
}
/**
* set environment information
* @param \Base $f3
* @return array
*/
protected function getEnvironmentInformation(\Base $f3){
$environmentData = [];
// exclude some sensitive data (e.g. database, passwords)
$excludeVars = ['DB_DNS', 'DB_NAME', 'DB_USER',
'DB_PASS', 'DB_CCP_DNS', 'DB_CCP_NAME',
'DB_CCP_USER', 'DB_CCP_PASS'
];
// obscure some values
$obscureVars = ['SSO_CCP_CLIENT_ID', 'SSO_CCP_SECRET_KEY', 'SMTP_PASS'];
foreach($this->environmentVars as $var){
if( !in_array($var, $excludeVars) ){
$value = Config::getEnvironmentData($var);
$check = true;
if(is_null($value)){
// variable missing
$check = false;
$value = '[missing]';
}elseif( in_array($var, $obscureVars)){
$length = strlen($value);
$hideChars = ($length < 10) ? $length : 10;
$value = substr_replace($value, str_repeat('.', 3), -$hideChars);
$value .= ' [' . $length . ']';
}
$environmentData[$var] = [
'label' => $var,
'value' => ((empty($value)) ? '&nbsp;' : $value),
'check' => $check
];
}
}
return $environmentData;
}
/**
* get server information
* @param \Base $f3
* @return array
*/
protected function getServerInformation($f3){
protected function getServerInformation(\Base $f3){
$serverInfo = [
'time' => [
'label' => 'Time',
@@ -180,7 +262,7 @@ class Setup extends Controller {
* @param \Base $f3
* @return array
*/
protected function checkRequirements($f3){
protected function checkRequirements(\Base $f3){
// server type ------------------------------------------------------------------
@@ -291,7 +373,7 @@ class Setup extends Controller {
* @param bool|false $exec
* @return array
*/
protected function checkDatabase($f3, $exec = false){
protected function checkDatabase(\Base $f3, $exec = false){
foreach($this->databases as $dbKey => $dbData){
@@ -575,7 +657,7 @@ class Setup extends Controller {
* @param $db
* @return array
*/
protected function checkDBConfig($f3, $db){
protected function checkDBConfig(\Base $f3, $db){
// some db like "Maria DB" have some strange version strings....
$dbVersionString = $db->version();

View File

@@ -9,6 +9,7 @@
namespace Cron;
use Controller;
use DB;
use lib\Config;
class CcpSystemsUpdate {
@@ -83,7 +84,7 @@ class CcpSystemsUpdate {
// get current jump Data -------------------------------------------------------
$time_start = microtime(true);
$apiPath = $f3->get('ENVIRONMENT.PRODUCTION.CCP_XML') . '/map/Jumps.xml.aspx';
$apiPath = Config::getEnvironmentData('CCP_XML') . '/map/Jumps.xml.aspx';
$apiResponse = \Web::instance()->request($apiPath, $this->apiRequestOptions );
@@ -108,7 +109,7 @@ class CcpSystemsUpdate {
// get current kill Data -------------------------------------------------------
$time_start = microtime(true);
$apiPath = $f3->get('ENVIRONMENT.PRODUCTION.CCP_XML') . '/map/Kills.xml.aspx';
$apiPath = Config::getEnvironmentData('CCP_XML') . '/map/Kills.xml.aspx';
$apiResponse = \Web::instance()->request($apiPath, $this->apiRequestOptions );
$killData = [];

View File

@@ -20,7 +20,7 @@ class MapUpdate {
/**
* deactivate all "private" maps whose lifetime is over
* >> php index.php "/cron/deactivateMapData"
* @param $f3
* @param \Base $f3
*/
function deactivateMapData($f3){
@@ -46,7 +46,7 @@ class MapUpdate {
/**
* delete all deactivated maps
* >> php index.php "/cron/deleteMapData"
* @param $f3
* @param \Base $f3
*/
function deleteMapData($f3){

150
app/main/lib/config.php Normal file
View File

@@ -0,0 +1,150 @@
<?php
/**
* Created by PhpStorm.
* User: Exodus
* Date: 28.05.2016
* Time: 16:05
*/
namespace lib;
class Config extends \Prefab {
const PREFIX_KEY = 'PF';
const ARRAY_DELIMITER = '-';
const HIVE_KEY_ENVIRONMENT = 'ENVIRONMENT';
/**
* all environment data
* @var array
*/
private $serverConfigData = [];
public function __construct(){
// set server data
// -> CGI params (Nginx)
// -> .htaccess (Apache)
$this->setServerData();
// set environment data
$this->setAllEnvironmentData();
// set hive configuration variables
// -> overwrites default configuration
$this->setHiveVariables();
}
/**
* get environment configuration data
* @return array|null
*/
protected function getAllEnvironmentData(){
$f3 = \Base::instance();
$environmentData = null;
if( $f3->exists(self::HIVE_KEY_ENVIRONMENT) ){
$environmentData = $f3->get(self::HIVE_KEY_ENVIRONMENT);
}else{
$environmentData = $this->setAllEnvironmentData();
}
return $environmentData;
}
/**
* set some global framework variables
* that depend on environment settings
*/
protected function setHiveVariables(){
$f3 = \Base::instance();
// hive keys that should be overwritten by environment config
$hiveKeys = ['BASE', 'URL', 'DEBUG'];
foreach($hiveKeys as $key){
$f3->set($key, self::getEnvironmentData($key));
}
}
/**
* set all environment configuration data
* @return array|null
*/
protected function setAllEnvironmentData(){
$environmentData = null;
$f3 = \Base::instance();
if( !empty($this->serverConfigData['ENV']) ){
// get environment config from $_SERVER data
$environmentData = (array)$this->serverConfigData['ENV'];
$environmentData['TYPE'] = 'PHP: environment variables';
}else{
// get environment data from *.ini file config
$f3->config('app/environment.ini');
if(
$f3->exists(self::HIVE_KEY_ENVIRONMENT) &&
($environment = $f3->get(self::HIVE_KEY_ENVIRONMENT . '.SERVER')) &&
($environmentData = $f3->get(self::HIVE_KEY_ENVIRONMENT . '.' . $environment))
){
$environmentData['TYPE'] = 'Config: environment.ini';
}
}
if( !is_null($environmentData) ){
ksort($environmentData);
$f3->set(self::HIVE_KEY_ENVIRONMENT, $environmentData);
}
return $environmentData;
}
/**
* get/extract all server data passed to PHP
* this can be done by either:
* OS Environment variables:
* -> add to /etc/environment
* OR:
* Nginx (server config):
* -> FastCGI syntax
* fastcgi_param PF-ENV-DEBUG 3;
*
* @return array
*/
protected function setServerData(){
$data = [];
foreach($_SERVER as $key => $value){
if( strpos($key, self::PREFIX_KEY . self::ARRAY_DELIMITER) === 0 ){
$path = explode( self::ARRAY_DELIMITER, $key);
// remove prefix
array_shift($path);
$tmp = &$data;
foreach ($path as $segment) {
$tmp[$segment] = (array)$tmp[$segment];
$tmp = &$tmp[$segment];
}
// type cast values
// (e.g. '1.2' => (float); '4' => (int),...)
$tmp = is_numeric($value) ? $value + 0 : $value;
}
}
$this->serverConfigData = $data;
}
/**
* get a environment variable by hive key
* @param $key
* @return string|null
*/
static function getEnvironmentData($key){
$f3 = \Base::instance();
$hiveKey = self::HIVE_KEY_ENVIRONMENT . '.' . $key;
$data = null;
if( $f3->exists($hiveKey) ){
$data = $f3->get($hiveKey);
}
return $data;
}
}

View File

@@ -105,8 +105,6 @@ class CharacterModel extends BasicModel {
* @return \stdClass
*/
public function getData($addCharacterLogData = false){
$characterData = null;
$cacheKeyModifier = '';
// check if there is cached data

View File

@@ -4,14 +4,8 @@ $f3 = require('app/lib/base.php');
// load main config
$f3->config('app/config.ini');
// set base dir
$f3->set('BASE', \Controller\Controller::getEnvironmentData('BASE'));
// set debug level (stacktrace)
$f3->set('DEBUG', \Controller\Controller::getEnvironmentData('DEBUG'));
// set debug level (stacktrace)
$f3->set('URL', \Controller\Controller::getEnvironmentData('URL'));
// load environment dependent config
lib\Config::instance();
// initiate cron-jobs
Cron::instance();

View File

@@ -58,10 +58,6 @@
<td>Version</td>
<td class="text-right">{{ @PATHFINDER.VERSION }}</td>
</tr>
<tr>
<td>Environment</td>
<td class="text-right">{{ @ENVIRONMENT.SERVER }}</td>
</tr>
<tr>
<td>Contact</td>
<td class="text-right"><a href="{{ @PATHFINDER.CONTACT }}" target="_blank">{{ @PATHFINDER.CONTACT }}</a></td>
@@ -73,6 +69,29 @@
</tbody>
</table>
<div class="panel-footer text-left">
<h3 class="panel-title">Configuration</h3>
</div>
<table class="table">
<tbody>
<repeat group="{{ @environmentInformation }}" value="{{ @environmentData }}">
<tr>
<td>{{@environmentData.label}}</td>
<td class="text-right col-md-8">
<check if="{{ @environmentData.check }}">
<true>
<kbd>{{@environmentData.value | raw}}</kbd>
</true>
<false>
<kbd class="txt-color txt-color-danger">{{@environmentData.value | raw}}</kbd>
</false>
</check>
</td>
</tr>
</repeat>
</tbody>
</table>
</div>
</div>
</div>