<?php
/**
* Copyright (c) 2015, Till Wehowski
* 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.
* 3. Neither the name of frdl/webfan nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY frdl/webfan ''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 frdl/webfan 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.
*
* @role example/test
*
* @cmd "frdl test -b -d"
*
*/
namespace frdl\ApplicationComposer\Command;
class cnf extends CMD
{
protected $data;
protected $file;
function __construct(){
parent::__construct();
}
public function applyValue($k,$v, $cbs = null){
$setSessionFunc = function($k,$v){
$this->data['config'][$k] = $v;
return $v;
};
$setAdminPWD = function($k,$v){
$this->data['config'][$k] = $v;
$this->aSess['ADMIN_PWD'] = $v;
return $v;
};
$bool = function($k,$v){
if('true' === $v || 1 === intval($v))$v = true;
if('false' === $v || 0 === intval($v))$v = false;
$this->data['config'][$k] = $v;
return $v;
};
$cbs = (is_array($cbs)) ? $cbs : array(
'______DEFAULT______' => $setSessionFunc,
'ADMIN_PWD' => $setSessionFunc,
'DISABLE_ADMIN_PWD' => $bool,
'PUBLIC_PROXY' => $bool,
);
if(isset($cbs[$k])){
if(is_callable($cbs[$k])){
return $cbs[$k]($k,$v);
}
}else{
return $cbs['______DEFAULT______']($k,$v);
}
return $v;
}
public function filterValue($k,$v, $cbs = null){
$cbs = (is_array($cbs)) ? $cbs : array(
'ADMIN_PWD' => function($pwd){
return sha1($pwd);
},
'DISABLE_ADMIN_PWD' => function($v){
if('true' === $v || 1 === intval($v))$v = true;
if('false' === $v || 0 === intval($v))$v = false;
return $v;
} ,
'PUBLIC_PROXY' => function($v){
if('true' === $v || 1 === intval($v))$v = true;
if('false' === $v || 0 === intval($v))$v = false;
return $v;
}
);
if(isset($cbs[$k])){
if(is_callable($cbs[$k])){
return $cbs[$k]($v);
}elseif(is_string($cbs[$k])){
return $cbs[$k];
}
}
return $v;
}
public function getKey($k){
$ks = array(
'admin-pwd' => 'ADMIN_PWD',
);
if(isset($ks[$k]))return $ks[$k];
return $k;
}
public function process()
{
$args = func_get_args();
if(!isset($this->aSess['isAdmin']) || true !== $this->aSess['isAdmin'] ){
$this->result->out = 'set config ERROR: You are not logged in as Admin';
return;
}
if(true!== $this->loadConfigFromFile(true)){
$this->result->out = 'set config ERROR: cannot readf config file';
return;
}
if(isset($this->argtoks['flags']['t']) || 'response' === $this->getRequestOption('test')){
$this->result->out = 'set config: TEST ONLY - aborted ';
$this->result->out .= 'Request: '.print_r($this->argtoks, true);
return;
}
if('get' === strtolower($this->argtoks['arguments'][0]['cmd']) && intval($this->argtoks['arguments'][0]['pos']) === 1){
$this->result->config =$this->data['config'];
unset($this->result->config['PIN_HASH']);
unset($this->result->config['ADMIN_PWD']);
unset($this->result->config['PIN']);
unset($this->result->config['SECRET']);
unset($this->result->config['SHAREDSECRET']);
if('all' === $this->argtoks['arguments'][1]['cmd'] && intval($this->argtoks['arguments'][1]['pos']) === 2){
return;
}
$this->result->config = Array();
foreach($this->argtoks['options'] as $num => $o){
$v = $o['value'];
if(isset( $this->data['config'][ $this->getKey($o['opt'])]) && !is_string($this->data['config'][ $this->getKey($o['opt'])])
&& is_string($v)
){
$v = json_decode($v);
}
if(isset( $this->data['config'][ $this->getKey($o['opt'])] )
&& 'PIN_HASH' !== $this->getKey($o['opt'])
&& 'ADMIN_PWD' !== $this->getKey($o['opt'])
&& 'PIN_HASH' !== $this->getKey($o['opt'])
&& 'SECRET' !== $this->getKey($o['opt'])
&& 'SHAREDSECRET' !== $this->getKey($o['opt'])
){
$this->result->config[$o['opt']] =$this->data['config'][$this->getKey($o['opt'])];
}else{
unset($this->result->config[$o['opt']]);
}
}
return;
}
if('set' === strtolower($this->argtoks['arguments'][0]['cmd']) && intval($this->argtoks['arguments'][0]['pos']) === 1){
foreach($this->argtoks['options'] as $num => $o){
$v = $this->filterValue($this->getKey($o['opt']), $o['value']);
if(isset($this->argtoks['flags']['w']) || isset($this->data['config'][ $this->getKey($o['opt'])])){
$this->data['config'][ $this->getKey($o['opt'])] = $v;
}
}
}
if(true===$this->writeToConfigFile()){
$this->result->out = 'set config: done';
}else{
$this->result->out = 'set config: ERROR writing config file';
}
}
public function required()
{
$args = func_get_args();
}
}
|