4 Commits
2.3.1 ... 2.3.3

Author SHA1 Message Date
c6fb90e562 Netzwerkdaten anzeigen 2023-08-04 21:30:36 +02:00
9f2d29c8fe PHP CLI in Cron prüfen 2023-05-03 15:17:04 +02:00
ec8a954b0b Auslesen von Netzwerkinformationen 2023-05-02 22:03:09 +02:00
f2938cf701 Installer angepasst für aktuelle Systeme 2023-04-21 09:17:10 +02:00
12 changed files with 321 additions and 358 deletions

View File

@@ -8,73 +8,94 @@ const PICONTROL = true;
(include_once LIBRARY_PATH . 'api/api.class.php') or die('Error: 0x0004'); (include_once LIBRARY_PATH . 'api/api.class.php') or die('Error: 0x0004');
(include_once LIBRARY_PATH . 'plugin/plugin.function.php') or die('Error: 0x0005'); (include_once LIBRARY_PATH . 'plugin/plugin.function.php') or die('Error: 0x0005');
$api = new API; $requestMethod = $_SERVER["REQUEST_METHOD"];
if (isset($_POST['id'])) { if ($requestMethod == 'GET') {
$controller = new StatisticController(); $log = new LogStatistic();
$controller->loadStatistics(); $log->setFile(LOG_PATH . 'statistic/' . $_GET['statistic'] . '.csv');
$data = array();
if (($name = $controller->getStatisticName($_POST['id'])) !== false) { $data['data'] = array();
if (isset($_POST['plugin']) && trim($_POST['plugin']) != '') $limit = 2016;
pluginLanguage(trim($_POST['plugin'])); if (isset($_GET['limit'])) {
$limit = $_GET['limit'];
$builder = new StatisticBuilder(); }
$builder->loadFromFile($name, (isset($_POST['plugin']) && trim($_POST['plugin']) != '') ? $_POST['plugin'] : NULL); $i = 0;
$statistic = $builder->getArray(); foreach ($log->getAll() as $row) {
if ($i >= 2016 - $limit) {
$log = new LogStatistic(); array_push($data['data'], array('time' => (int)$row[0], 'value' => (float)$row[1]));
$log->setFile(LOG_PATH . $statistic['raw'] . '.csv');
$logData = $log->getAll();
$arr = $info = array();
foreach ($statistic['columns'] as $column) {
$arr['cols'][] = array('id' => '', 'label' => _t($column['label']), 'type' => $column['type']);
} }
$i++;
}
echo json_encode($data);
} else {
$api = new API;
getRowsFromLog($arr, $info, $logData, $statistic['columns'], $statistic['cycle']); if (isset($_POST['id'])) {
$controller = new StatisticController();
$controller->loadStatistics();
if (isset($arr['rows'])) { if (($name = $controller->getStatisticName($_POST['id'])) !== false) {
if (isset($_POST['type']) && $_POST['type'] == 'googleChart') if (isset($_POST['plugin']) && trim($_POST['plugin']) != '')
$arr['rows'] = convertForGoogleChart($arr['rows']); pluginLanguage(trim($_POST['plugin']));
$arr['rows'] = array_slice($arr['rows'], -2016); $builder = new StatisticBuilder();
$arr['periods'] = $info['periods']; $builder->loadFromFile($name, (isset($_POST['plugin']) && trim($_POST['plugin']) != '') ? $_POST['plugin'] : NULL);
$statistic = $builder->getArray();
foreach (array('min', 'max') as $type) { $log = new LogStatistic();
if ($statistic['limits'][$type]['use'] == 'multiply') $log->setFile(LOG_PATH . $statistic['raw'] . '.csv');
$arr[$type] = round($info[$type] * $statistic['limits'][$type]['value']); $logData = $log->getAll();
elseif ($statistic['limits'][$type]['use'] == 'fix') {
if ($statistic['limits'][$type]['fix'] == true) $arr = $info = array();
$arr[$type] = $statistic['limits'][$type]['value'];
else foreach ($statistic['columns'] as $column) {
$arr[$type] = round($info[$type]); $arr['cols'][] = array('id' => '', 'label' => _t($column['label']), 'type' => $column['type']);
}
} }
$api->addData('statistic', $arr); getRowsFromLog($arr, $info, $logData, $statistic['columns'], $statistic['cycle']);
if (isset($arr['rows'])) {
if (isset($_POST['type']) && $_POST['type'] == 'googleChart')
$arr['rows'] = convertForGoogleChart($arr['rows']);
$arr['rows'] = array_slice($arr['rows'], -2016);
$arr['periods'] = $info['periods'];
foreach (array('min', 'max') as $type) {
if ($statistic['limits'][$type]['use'] == 'multiply')
$arr[$type] = round($info[$type] * $statistic['limits'][$type]['value']);
elseif ($statistic['limits'][$type]['use'] == 'fix') {
if ($statistic['limits'][$type]['fix'] == true)
$arr[$type] = $statistic['limits'][$type]['value'];
else
$arr[$type] = round($info[$type]);
}
}
$api->addData('statistic', $arr);
} else
$api->setError('error', 'Empty data.');
} else } else
$api->setError('error', 'Empty data.'); $api->setError('error', 'Data not found.');
} else } else {
$api->setError('error', 'Data not found.'); $statistics = array();
} else { $hiddenStatistics = unserialize(htmlspecialchars_decode(getConfig('main:statistic.hidden', 'a:0:{}')));
$statistics = array();
$hiddenStatistics = unserialize(htmlspecialchars_decode(getConfig('main:statistic.hidden', 'a:0:{}')));
$controller = new StatisticController(); $controller = new StatisticController();
$controller->loadStatistics(); $controller->loadStatistics();
foreach ($controller->getStatistics() as $statistic) { foreach ($controller->getStatistics() as $statistic) {
$builder = new StatisticBuilder(); $builder = new StatisticBuilder();
$builder->loadFromFile($statistic); $builder->loadFromFile($statistic);
$array = $builder->getArray(); $array = $builder->getArray();
if (!in_array($builder->getId(), $hiddenStatistics)) if (!in_array($builder->getId(), $hiddenStatistics))
$statistics[] = array('array' => $array); $statistics[] = array('array' => $array);
}
$api->addData('statistics', $statistics);
$api->addData('hidden', $hiddenStatistics);
} }
$api->addData('statistics', $statistics); $api->display();
$api->addData('hidden', $hiddenStatistics);
} }
$api->display();

View File

@@ -1,13 +1,13 @@
<?php <?php
if (!defined('PICONTROL')) exit(); if (!defined('PICONTROL')) exit();
(include_once LIBRARY_PATH.'main/rpi.function.php') or die('Error: 0x0010'); (include_once LIBRARY_PATH . 'main/rpi.function.php') or die('Error: 0x0010');
(include_once LIBRARY_PATH.'install/install.function.php') or die('Error: 0x0011'); (include_once LIBRARY_PATH . 'install/install.function.php') or die('Error: 0x0011');
$tpl->setHeaderTitle(_t('Anforderungen')); $tpl->setHeaderTitle(_t('Anforderungen'));
// PHP // PHP
$phpVersion = array('version' => PHP_VERSION, 'status' => false); $phpVersion = array('version' => PHP_VERSION, 'status' => false);
$phpSSH = array('status' => false); $phpSSH = array('status' => true);
$phpMcrypt = array('status' => false); $phpMcrypt = array('status' => false);
$phpCLI = array('status' => false); $phpCLI = array('status' => false);
$phpCURL = array('status' => false); $phpCURL = array('status' => false);
@@ -15,7 +15,7 @@ $phpZipArchive = array('status' => false);
$phpAllowUrlFopen = array('status' => false); $phpAllowUrlFopen = array('status' => false);
$filesFoldersExist = array('count' => 0, 'status' => true); $filesFoldersExist = array('count' => 0, 'status' => true);
$filesFoldersPermission = array('count' => 0, 'status' => true); $filesFoldersPermission = array('count' => 0, 'status' => true);
$otherDistribution = array('version' => rpi_getDistribution(), 'status' => false); $otherDistribution = array('version' => rpi_getDistribution(), 'status' => true);
$otherCookie = array('status' => false); $otherCookie = array('status' => false);
$error = false; $error = false;
@@ -28,7 +28,7 @@ if (extension_loaded('ssh2'))
#if (function_exists('mcrypt_encrypt') !== false) #if (function_exists('mcrypt_encrypt') !== false)
# $phpMcrypt['status'] = true; # $phpMcrypt['status'] = true;
if (trim(exec('dpkg -s php7.3-cli | grep Status: ')) != '' || trim(exec('dpkg -s php7.4-cli | grep Status: ')) != '') if (trim(exec('dpkg -s php-cli | grep Status: ')) != '' || trim(exec('dpkg -s php7.4-cli | grep Status: ')) != '' || trim(exec('dpkg -s php8.0-cli | grep Status: ')) != '' || trim(exec('dpkg -s php8.1-cli | grep Status: ')) != '' || trim(exec('dpkg -s php8.2-cli | grep Status: ')) != '')
$phpCLI['status'] = true; $phpCLI['status'] = true;
if (function_exists('curl_init') !== false) if (function_exists('curl_init') !== false)
@@ -43,18 +43,14 @@ if (ini_get('allow_url_fopen') !== false)
// Dateien und Ordner // Dateien und Ordner
$filesFolders = fileFolderPermission(); $filesFolders = fileFolderPermission();
foreach ($filesFolders as $file => $info) foreach ($filesFolders as $file => $info) {
{ if ($info['error'] === true) {
if ($info['error'] === true) if ($info['existsBool'] === false || $info['filesizeBool'] === false) {
{
if ($info['existsBool'] === false || $info['filesizeBool'] === false)
{
$filesFoldersExist['count'] += 1; $filesFoldersExist['count'] += 1;
$filesFoldersExist['status'] = false; $filesFoldersExist['status'] = false;
} }
if ($info['permissionBool'] === false || $info['userGroupBool'] === false) if ($info['permissionBool'] === false || $info['userGroupBool'] === false) {
{
$filesFoldersPermission['count'] += 1; $filesFoldersPermission['count'] += 1;
$filesFoldersPermission['status'] = false; $filesFoldersPermission['status'] = false;
} }
@@ -62,8 +58,8 @@ foreach ($filesFolders as $file => $info)
} }
// Sonstiges // Sonstiges
if ($otherDistribution['version'] == 'Raspbian GNU/Linux 10' || $otherDistribution['version'] == 'Raspbian GNU/Linux 11' || $otherDistribution['version'] == 'Debian GNU/Linux 11') //if ($otherDistribution['version'] == 'Raspbian GNU/Linux 10' || $otherDistribution['version'] == 'Raspbian GNU/Linux 11' || $otherDistribution['version'] == 'Debian GNU/Linux 11')
$otherDistribution['status'] = true; // $otherDistribution['status'] = true;
if (isset($_COOKIE['_pi-control_install_language']) && $_COOKIE['_pi-control_install_language'] != '') if (isset($_COOKIE['_pi-control_install_language']) && $_COOKIE['_pi-control_install_language'] != '')
$otherCookie['status'] = true; $otherCookie['status'] = true;
@@ -87,8 +83,7 @@ $tpl->assign('filesFoldersPermission', $filesFoldersPermission);
$tpl->assign('otherDistribution', $otherDistribution); $tpl->assign('otherDistribution', $otherDistribution);
$tpl->assign('otherCookie', $otherCookie); $tpl->assign('otherCookie', $otherCookie);
$tpl->assign('error', $error); $tpl->assign('error', $error);
$tpl->assign('langUrl', (isset($_GET['lang']) && $_GET['lang'] != '') ? '&amp;lang='.$_GET['lang'] : ''); $tpl->assign('langUrl', (isset($_GET['lang']) && $_GET['lang'] != '') ? '&amp;lang=' . $_GET['lang'] : '');
$tpl->assign('configHelp', $config['url']['help']); $tpl->assign('configHelp', $config['url']['help']);
$tpl->draw('install_requirement'); $tpl->draw('install_requirement');
?>

View File

@@ -650,7 +650,7 @@ class PiTpl
* @return bool * @return bool
*/ */
public function msg($type, $title = NULL, $msg, $cancelable = true, $id = 0) public function msg($type, $msg, $title = NULL, $cancelable = true, $id = 0)
{ {
if (!strlen($type) > 0 || !is_string($type) || if (!strlen($type) > 0 || !is_string($type) ||
!strlen($msg) > 0 || !is_string($msg) !strlen($msg) > 0 || !is_string($msg)
@@ -943,4 +943,3 @@ class PiTpl
return true; return true;
} }
} }
?>

View File

@@ -1,60 +1,51 @@
<?php <?php
if (!defined('PICONTROL')) exit(); if (!defined('PICONTROL')) exit();
(include_once LIBRARY_PATH.'main/rpi.function.php') or die('Error: 0x0010'); (include_once LIBRARY_PATH . 'main/rpi.function.php') or die('Error: 0x0010');
(include_once LIBRARY_PATH.'network/network.function.php') or die('Error: 0x0011'); (include_once LIBRARY_PATH . 'network/network.function.php') or die('Error: 0x0011');
$tpl->setHeaderTitle(_t('Netzwerk')); $tpl->setHeaderTitle(_t('Netzwerk'));
if (isset($_GET['hostname'])) if (isset($_GET['hostname'])) {
{ if (isset($_POST['submit']) && $_POST['submit'] != '') {
if (isset($_POST['submit']) && $_POST['submit'] != '') if (isset($_POST['hostname']) && trim($pHostname = trim($_POST['hostname'])) != '') {
{ if (preg_match('/^([a-z][a-z0-9\-\.]*[^\-]){1,24}$/im', $pHostname)) {
if (isset($_POST['hostname']) && trim($pHostname = trim($_POST['hostname'])) != '')
{
if (preg_match('/^([a-z][a-z0-9\-\.]*[^\-]){1,24}$/im', $pHostname))
{
if (($status = editHostname($pHostname)) === true) if (($status = editHostname($pHostname)) === true)
$tpl->msg('success', _t('Hostname gespeichert'), _t('Damit die &Auml;nderung wirksam wird, muss dein Raspberry Pi neu gestartet werden. <a href="%s">Jetzt neu starten.</a>', '?s=shutdown&restart')); $tpl->msg('success', _t('Hostname gespeichert'), _t('Damit die &Auml;nderung wirksam wird, muss dein Raspberry Pi neu gestartet werden. <a href="%s">Jetzt neu starten.</a>', '?s=shutdown&restart'));
else else
$tpl->msg('error', _t('Fehler'), _t('Fehler beim &Auml;ndern des Hostname! Fehlercode: %s', $status)); $tpl->msg('error', _t('Fehler'), _t('Fehler beim &Auml;ndern des Hostname! Fehlercode: %s', $status));
} } else
else
$tpl->msg('error', _t('Fehler'), _t('Der Hostname ist ung&uuml;ltig! Er muss aus mindestens 1 bis 24 Zeichen bestehen und darf nur folgende Zeichen enthalten: A-Z a-z 0-9 -<br />Der Hostname darf nicht mit einem Bindestrich Anfangen oder Enden.')); $tpl->msg('error', _t('Fehler'), _t('Der Hostname ist ung&uuml;ltig! Er muss aus mindestens 1 bis 24 Zeichen bestehen und darf nur folgende Zeichen enthalten: A-Z a-z 0-9 -<br />Der Hostname darf nicht mit einem Bindestrich Anfangen oder Enden.'));
} }
} }
$tpl->assign('hostname', rpi_getHostname()); $tpl->assign('hostname', rpi_getHostname());
$tpl->draw('network_hostname'); $tpl->draw('network_hostname');
} } else {
else
{
$networkConnections = getAllNetworkConnections(); $networkConnections = getAllNetworkConnections();
$networkCounts = unserialize(htmlspecialchars_decode(getConfig('main:network.overflowCount', 'a:0:{}'))); $networkCounts = unserialize(htmlspecialchars_decode(getConfig('main:network.overflowCount', 'a:0:{}')));
$counter = 0; $counter = 0;
foreach ($networkConnections as $network) foreach ($networkConnections as $network) {
{
$countSent = 0; $countSent = 0;
$countReceive = 0; $countReceive = 0;
if (isset($networkCounts[$network['interface']]['sent'])) if (isset($networkCounts[$network['interface']]['sent']))
$countSent = $networkCounts[$network['interface']]['sent']; $countSent = $networkCounts[$network['interface']]['sent'];
if (isset($networkCounts[$network['interface']]['receive'])) if (isset($networkCounts[$network['interface']]['receive']))
$countReceive = $networkCounts[$network['interface']]['receive']; $countReceive = $networkCounts[$network['interface']]['receive'];
$networkConnections[$counter]['sent'] = (4294967295 * $countSent) + $network['sent']; $networkConnections[$counter]['sent'] = (4294967295 * $countSent) + $network['sent'];
$networkConnections[$counter]['receive'] = (4294967295 * $countReceive) + $network['receive']; $networkConnections[$counter]['receive'] = (4294967295 * $countReceive) + $network['receive'];
$counter += 1; $counter += 1;
} }
$tpl->assign('network_connections', $networkConnections); $tpl->assign('network_connections', $networkConnections);
$tpl->assign('hostname', rpi_getHostname()); $tpl->assign('hostname', rpi_getHostname());
$tpl->assign('wlan', scanAccessPoints($networkConnections, (isset($_GET['refresh_wlan'])) ? true : false)); $tpl->assign('wlan', scanAccessPoints($networkConnections, (isset($_GET['refresh_wlan'])) ? true : false));
$tpl->draw('network'); $tpl->draw('network');
} }
?>

View File

@@ -38,7 +38,7 @@ $tpl->assign('configHelpFilesFolders', $config['url']['help'].'?s=view&amp;i=1'.
$tpl->assign('configHelpCron', $config['url']['help'].'?s=view&amp;i=10'.getURLLangParam()); $tpl->assign('configHelpCron', $config['url']['help'].'?s=view&amp;i=10'.getURLLangParam());
$tpl->assign('cronEntry', $cronEntry); $tpl->assign('cronEntry', $cronEntry);
$tpl->assign('cronMatch', $cronMatch); $tpl->assign('cronMatch', $cronMatch);
$tpl->assign('cronPHPCLI', ($cronPHPCLI = (trim(exec('dpkg -s php7.0-cli | grep Status: ')) != '' || trim(exec('dpkg -s php7.3-cli | grep Status: ')) != '') ? true : false)); $tpl->assign('cronPHPCLI', ($cronPHPCLI = (trim(exec('dpkg -s php-cli | grep Status: ')) != '' || trim(exec('dpkg -s php7.3-cli | grep Status: ')) != '') ? true : false));
$tpl->assign('cronLastExecution', formatTime(getConfig('cron:execution.cron', 0))); $tpl->assign('cronLastExecution', formatTime(getConfig('cron:execution.cron', 0)));
$tpl->assign('cronLastExecutionBool', ($cronLastExecutionBool = (getConfig('cron:execution.cron', 0) > time()-150) ? true : false)); $tpl->assign('cronLastExecutionBool', ($cronLastExecutionBool = (getConfig('cron:execution.cron', 0) > time()-150) ? true : false));
$tpl->assign('cronLastExecutionLog', formatTime($lastExecutionLog[0])); $tpl->assign('cronLastExecutionLog', formatTime($lastExecutionLog[0]));

View File

@@ -3,33 +3,29 @@ if (PHP_SAPI != 'cli') exit();
const PICONTROL = true; const PICONTROL = true;
$doNotCheckForAuthentification = true; $doNotCheckForAuthentification = true;
(include_once realpath(dirname(__FILE__)).'/../init.php') or die('Error: 0x0000'); (include_once realpath(dirname(__FILE__)) . '/../init.php') or die('Error: 0x0000');
(include_once LIBRARY_PATH.'main/main.function.php') or die('Error: 0x0001'); (include_once LIBRARY_PATH . 'main/main.function.php') or die('Error: 0x0001');
$folder = CRON_PATH; $folder = CRON_PATH;
$fileArray = array(); $fileArray = array();
foreach (@scandir($folder) as $file) foreach (@scandir($folder) as $file) {
{ if ($file[0] != '.') {
if ($file[0] != '.') if (is_file($folder . '/' . $file) && $file != 'init.php')
{
if (is_file($folder.'/'.$file) && $file != 'init.php')
$fileArray[] = $file; $fileArray[] = $file;
} }
} }
foreach ($fileArray as $file) foreach ($fileArray as $file) {
{
$timeOfFile = str_replace('-', '', substr($file, 0, 2)); $timeOfFile = str_replace('-', '', substr($file, 0, 2));
$rest = date('i', time()) % $timeOfFile; $rest = date('i', time()) % $timeOfFile;
if (is_numeric($rest) && $rest == 0) if (is_numeric($rest) && $rest == 0) {
{ exec('/usr/bin/php -f "' . CRON_PATH . $file . '"');
exec('/usr/bin/php -f "'.CRON_PATH.$file.'"');
set_time_limit(30); set_time_limit(30);
usleep(500000); usleep(500000);
} }
} }
if (trim(exec('dpkg -s php7.4-cli | grep Status: ')) != '' || trim(exec('dpkg -s php7.3-cli | grep Status: ')) != '') if (trim(exec('dpkg -s php-cli | grep Status: ')) != '')
setConfig('cron:execution.cron', time()); setConfig('cron:execution.cron', time());

View File

@@ -10,8 +10,8 @@ if (!isset($config))
'ssh_ip' => '127.0.0.1' 'ssh_ip' => '127.0.0.1'
), ),
'version' => array( 'version' => array(
'version' => '2.3.1', 'version' => '2.3.3',
'versioncode' => 36, 'versioncode' => 38,
'android_comp_level' => 25 'android_comp_level' => 25
), ),
'url' => array( 'url' => array(
@@ -26,20 +26,20 @@ if (!isset($config))
); );
} }
defined('PICONTROL_PATH') or define('PICONTROL_PATH', realpath(dirname(__FILE__).'/../').'/'); defined('PICONTROL_PATH') || define('PICONTROL_PATH', realpath(dirname(__FILE__).'/../').'/');
defined('RESOURCE_PATH') or define('RESOURCE_PATH', realpath(dirname(__FILE__)).'/'); defined('RESOURCE_PATH') || define('RESOURCE_PATH', realpath(dirname(__FILE__)).'/');
defined('LIBRARY_PATH') or define('LIBRARY_PATH', realpath(dirname(__FILE__).'/library/').'/'); defined('LIBRARY_PATH') || define('LIBRARY_PATH', realpath(dirname(__FILE__).'/library/').'/');
defined('CONTENT_PATH') or define('CONTENT_PATH', realpath(dirname(__FILE__).'/content/').'/'); defined('CONTENT_PATH') || define('CONTENT_PATH', realpath(dirname(__FILE__).'/content/').'/');
defined('CONFIG_PATH') or define('CONFIG_PATH', realpath(dirname(__FILE__).'/config/').'/'); defined('CONFIG_PATH') || define('CONFIG_PATH', realpath(dirname(__FILE__).'/config/').'/');
defined('PLUGINS_PATH') or define('PLUGINS_PATH', realpath(dirname(__FILE__).'/plugins/').'/'); defined('PLUGINS_PATH') || define('PLUGINS_PATH', realpath(dirname(__FILE__).'/plugins/').'/');
defined('UPDATE_PATH') or define('UPDATE_PATH', realpath(dirname(__FILE__).'/update/').'/'); defined('UPDATE_PATH') || define('UPDATE_PATH', realpath(dirname(__FILE__).'/update/').'/');
defined('TEMPLATES_PATH') or define('TEMPLATES_PATH', realpath(dirname(__FILE__).'/../public_html/templates/').'/'); defined('TEMPLATES_PATH') || define('TEMPLATES_PATH', realpath(dirname(__FILE__).'/../public_html/templates/').'/');
defined('TEMPLATES2_PATH') or define('TEMPLATES2_PATH',realpath(dirname(__FILE__).'/templates/').'/'); defined('TEMPLATES2_PATH') || define('TEMPLATES2_PATH',realpath(dirname(__FILE__).'/templates/').'/');
defined('LOG_PATH') or define('LOG_PATH', realpath(dirname(__FILE__).'/log/').'/'); defined('LOG_PATH') || define('LOG_PATH', realpath(dirname(__FILE__).'/log/').'/');
defined('CRON_PATH') or define('CRON_PATH', realpath(dirname(__FILE__).'/cron/').'/'); defined('CRON_PATH') || define('CRON_PATH', realpath(dirname(__FILE__).'/cron/').'/');
defined('LANGUAGE_PATH') or define('LANGUAGE_PATH', realpath(dirname(__FILE__).'/languages/').'/'); defined('LANGUAGE_PATH') || define('LANGUAGE_PATH', realpath(dirname(__FILE__).'/languages/').'/');
defined('CACHE_PATH') or define('CACHE_PATH', realpath(dirname(__FILE__).'/cache/').'/'); defined('CACHE_PATH') || define('CACHE_PATH', realpath(dirname(__FILE__).'/cache/').'/');
defined('INSTALL_PATH') or define('INSTALL_PATH', realpath(dirname(__FILE__).'/../').'/install/'); defined('INSTALL_PATH') || define('INSTALL_PATH', realpath(dirname(__FILE__).'/../').'/install/');
$globalLanguage = isset($initConfig['language']) ? $initConfig['language'] : 'de'; $globalLanguage = isset($initConfig['language']) ? $initConfig['language'] : 'de';
$globalLanguageArray = array(); $globalLanguageArray = array();

View File

@@ -0,0 +1,6 @@
<?php
namespace resources\library\api;
class StatisticController {
}

View File

@@ -393,60 +393,54 @@ function getImageFromSignal($signal)
function getAllNetworkConnections() function getAllNetworkConnections()
{ {
$shell_string = ''; $networkInterfaces = json_decode(shell_exec('ip -j addr'));
$output = array();
exec('/sbin/ifconfig | grep -E -o "^[[:alnum:][:punct:]]*" | grep -E -v "(lo)" | sed "s/:$//"', $networkInterfaces); foreach ($networkInterfaces as $interface) {
if ($interface->ifname != 'lo') {
$wirelessOption = [];
$interfaceData = json_decode(shell_exec('ip -j -s link show ' . $interface->ifname));
foreach ($networkInterfaces as $interface) foreach ($interface->addr_info as $addr) {
$shell_string .= '/sbin/ifconfig ' . $interface . (($networkInterfaces[count($networkInterfaces) - 1] != $interface) ? ' && echo "-#-" && ' : ''); if ($addr->family == "inet")
$ipAddress = $addr->local;
$streamInterfaces = explode('-#-', shell_exec($shell_string));
foreach ($streamInterfaces as $index => $streamInterface) {
$wirelessOption = '';
$interface = $networkInterfaces[$index];
preg_match('#inet(?:[ ]+(?:addr\:)?)([\w\.]+)#', $streamInterface, $ipAddress);
preg_match('#(?:HWaddr|ether) ([\w\:]+)#', $streamInterface, $macAddress);
preg_match('#RX(?:.*?)bytes[:| ]([\d]+)#', $streamInterface, $bytesReceived);
preg_match('#TX(?:.*?)bytes[:| ]([\d]+)#', $streamInterface, $bytesSent);
preg_match('#RX(?:.*?)packets[:| ]([\d]+)#', $streamInterface, $packetsReceived);
preg_match('#TX(?:.*?)packets[:| ]([\d]+)#', $streamInterface, $packetsSent);
$output0 = $interface;
if (substr($output0, 0, 4) == 'wlan') {
$streamWirelessInterface = shell_exec('/sbin/iwconfig ' . $output0);
if (0 == substr_count($streamWirelessInterface, 'Not-Associated')) {
$posConfig_start = @strpos($streamWirelessInterface, 'ESSID:"', 0) + 7;
$posConfig_end = @strpos($streamWirelessInterface, '"', $posConfig_start);
$wirelessOption['ssid'] = trim(substr($streamWirelessInterface, $posConfig_start, ($posConfig_end - $posConfig_start)));
$posConfig_start = @strpos($streamWirelessInterface, 'Access Point:', 0) + 13;
$posConfig_end = @strpos($streamWirelessInterface, 'Bit Rate', $posConfig_start);
$wirelessOption['mac'] = trim(substr($streamWirelessInterface, $posConfig_start, ($posConfig_end - $posConfig_start)));
$posConfig_start = @strpos($streamWirelessInterface, 'Signal level=', 0) + 13;
if (($posConfig_end = @strpos($streamWirelessInterface, '/100', $posConfig_start)) === false) {
$posConfig_end = @strpos($streamWirelessInterface, ' dBm', $posConfig_start);
$signal = trim(substr($streamWirelessInterface, $posConfig_start, ($posConfig_end - $posConfig_start)));
if ($signal <= -100)
$wirelessOption['signal'] = 0;
elseif ($signal >= -50)
$wirelessOption['signal'] = 100;
else
$wirelessOption['signal'] = 2 * ($signal + 100);
} else
$wirelessOption['signal'] = trim(substr($streamWirelessInterface, $posConfig_start, ($posConfig_end - $posConfig_start)));
} }
} $macAddress = $interface->address;
$bytesReceived = $interfaceData[0]->stats64->rx->bytes;
$bytesSent = $interfaceData[0]->stats64->tx->bytes;
$packetsReceived = $interfaceData[0]->stats64->rx->packets;
$packetsSent = $interfaceData[0]->stats64->tx->packets;
$output[] = array('interface' => $interface, 'mac' => strtoupper($macAddress[1]), 'ip' => (isset($ipAddress[1])) ? $ipAddress[1] : NULL, 'sent' => $bytesSent[1], 'receive' => $bytesReceived[1], 'option' => $wirelessOption, 'packets' => array('sent' => $packetsSent[1], 'received' => $packetsReceived[1])); if (substr($interface->ifname, 0, 4) == 'wlan') {
$streamWirelessInterface = shell_exec('/sbin/iwconfig ' . $interface->ifname);
if (0 == substr_count($streamWirelessInterface, 'Not-Associated')) {
$posConfig_start = @strpos($streamWirelessInterface, 'ESSID:"', 0) + 7;
$posConfig_end = @strpos($streamWirelessInterface, '"', $posConfig_start);
$wirelessOption['ssid'] = trim(substr($streamWirelessInterface, $posConfig_start, ($posConfig_end - $posConfig_start)));
$posConfig_start = @strpos($streamWirelessInterface, 'Access Point:', 0) + 13;
$posConfig_end = @strpos($streamWirelessInterface, 'Bit Rate', $posConfig_start);
$wirelessOption['mac'] = trim(substr($streamWirelessInterface, $posConfig_start, ($posConfig_end - $posConfig_start)));
$posConfig_start = @strpos($streamWirelessInterface, 'Signal level=', 0) + 13;
if (($posConfig_end = @strpos($streamWirelessInterface, '/100', $posConfig_start)) === false) {
$posConfig_end = @strpos($streamWirelessInterface, ' dBm', $posConfig_start);
$signal = trim(substr($streamWirelessInterface, $posConfig_start, ($posConfig_end - $posConfig_start)));
if ($signal <= -100)
$wirelessOption['signal'] = 0;
elseif ($signal >= -50)
$wirelessOption['signal'] = 100;
else
$wirelessOption['signal'] = 2 * ($signal + 100);
} else
$wirelessOption['signal'] = trim(substr($streamWirelessInterface, $posConfig_start, ($posConfig_end - $posConfig_start)));
}
}
$output[] = array('interface' => $interface->ifname, 'mac' => strtoupper($macAddress), 'ip' => (isset($ipAddress)) ? $ipAddress : NULL, 'sent' => $bytesSent, 'receive' => $bytesReceived, 'option' => $wirelessOption, 'packets' => array('sent' => $packetsSent, 'received' => $packetsReceived));
}
} }
return $output; return $output;

View File

@@ -5,7 +5,9 @@ if (!defined('PICONTROL')) exit();
* Beschreibung. Mehr unter: http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tags.pkg.html * Beschreibung. Mehr unter: http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tags.pkg.html
*/ */
class FileException extends Exception { } class FileException extends Exception
{
}
class PiTpl class PiTpl
{ {
@@ -61,18 +63,16 @@ class PiTpl
$this->runtimeStart = microtime(true); $this->runtimeStart = microtime(true);
$lang = $globalLanguage; $lang = $globalLanguage;
$langFile = LANGUAGE_PATH.$lang.'.php'; $langFile = LANGUAGE_PATH . $lang . '.php';
if (empty($globalLanguageArray) && file_exists($langFile) === true && is_file($langFile) === true) if (empty($globalLanguageArray) && file_exists($langFile) === true && is_file($langFile) === true) {
{
include $langFile; include $langFile;
$globalLanguageArray = $langArray; $globalLanguageArray = $langArray;
} }
foreach ($this->tplConfigs as $configFile) foreach ($this->tplConfigs as $configFile) {
{ if (file_exists(CONFIG_PATH . $configFile . $this->tplConfigSuffix) === true && is_file(CONFIG_PATH . $configFile . $this->tplConfigSuffix) === true)
if (file_exists(CONFIG_PATH.$configFile.$this->tplConfigSuffix) === true && is_file(CONFIG_PATH.$configFile.$this->tplConfigSuffix) === true) $this->tplConfigArray[$configFile] = parse_ini_file(CONFIG_PATH . $configFile . $this->tplConfigSuffix, true);
$this->tplConfigArray[$configFile] = parse_ini_file(CONFIG_PATH.$configFile.$this->tplConfigSuffix, true);
} }
} }
@@ -173,7 +173,7 @@ class PiTpl
$configPath = CONFIG_PATH; $configPath = CONFIG_PATH;
if ($this->tplFolderPathPlugin != '') if ($this->tplFolderPathPlugin != '')
$configPath = $this->tplFolderPathPlugin.'/resources/config/'; $configPath = $this->tplFolderPathPlugin . '/resources/config/';
if ($customFile !== NULL) if ($customFile !== NULL)
$configPath = $customFile; $configPath = $customFile;
@@ -183,11 +183,10 @@ class PiTpl
if (count($file) != 2) if (count($file) != 2)
return false; return false;
$configFile = $configPath.$file[0].$this->tplConfigSuffix; $configFile = $configPath . $file[0] . $this->tplConfigSuffix;
$md5 = substr(md5($configFile), 0, 6); $md5 = substr(md5($configFile), 0, 6);
if (!isset($this->tplConfigArray[$md5])) if (!isset($this->tplConfigArray[$md5])) {
{
if (file_exists($configFile) === true && is_file($configFile) === true) if (file_exists($configFile) === true && is_file($configFile) === true)
$this->tplConfigArray[$md5] = parse_ini_file($configFile, true); $this->tplConfigArray[$md5] = parse_ini_file($configFile, true);
else else
@@ -222,7 +221,7 @@ class PiTpl
$configPath = CONFIG_PATH; $configPath = CONFIG_PATH;
if ($this->tplFolderPathPlugin != '') if ($this->tplFolderPathPlugin != '')
$configPath = $this->tplFolderPathPlugin.'/resources/config/'; $configPath = $this->tplFolderPathPlugin . '/resources/config/';
if ($customFile !== NULL) if ($customFile !== NULL)
$configPath = $customFile; $configPath = $customFile;
@@ -232,11 +231,10 @@ class PiTpl
if (count($file) != 2) if (count($file) != 2)
return $default; return $default;
$configFile = $configPath.$file[0].$this->tplConfigSuffix; $configFile = $configPath . $file[0] . $this->tplConfigSuffix;
$md5 = substr(md5($configFile), 0, 6); $md5 = substr(md5($configFile), 0, 6);
if (!isset($this->tplConfigArray[$md5])) if (!isset($this->tplConfigArray[$md5])) {
{
if (file_exists($configFile) === true && is_file($configFile) === true) if (file_exists($configFile) === true && is_file($configFile) === true)
$this->tplConfigArray[$md5] = parse_ini_file($configFile, true); $this->tplConfigArray[$md5] = parse_ini_file($configFile, true);
else else
@@ -278,7 +276,7 @@ class PiTpl
else else
return false; return false;
return writeConfig($this->tplConfigArray[$file[0]], CONFIG_PATH.$file[0].$this->tplConfigSuffix); return writeConfig($this->tplConfigArray[$file[0]], CONFIG_PATH . $file[0] . $this->tplConfigSuffix);
} }
/** /**
@@ -416,7 +414,7 @@ class PiTpl
if ($this->tplLoadHeader !== true) if ($this->tplLoadHeader !== true)
return false; return false;
$fileName = CONTENT_PATH.'html_header.php'; $fileName = CONTENT_PATH . 'html_header.php';
$this->tplLoadedHeader = true; $this->tplLoadedHeader = true;
@@ -470,7 +468,7 @@ class PiTpl
if ($this->tplLoadFooter !== true) if ($this->tplLoadFooter !== true)
return false; return false;
$fileName = CONTENT_PATH.'html_footer.php'; $fileName = CONTENT_PATH . 'html_footer.php';
$this->tplLoadedFooter = true; $this->tplLoadedFooter = true;
@@ -506,20 +504,18 @@ class PiTpl
$folderPath = $this->tplFolderPath; $folderPath = $this->tplFolderPath;
if ($this->tplFolderPathPlugin != '') if ($this->tplFolderPathPlugin != '')
$folderPath = $this->tplFolderPathPlugin.'/public_html/templates/'; $folderPath = $this->tplFolderPathPlugin . '/public_html/templates/';
if (strlen($tplFileName) >= 1 && is_string($tplFileName)) if (strlen($tplFileName) >= 1 && is_string($tplFileName)) {
{ if (file_exists($folderPath . $tplFileName . $this->tplFileSuffix) !== true || is_file($folderPath . $tplFileName . $this->tplFileSuffix) !== true)
if (file_exists($folderPath.$tplFileName.$this->tplFileSuffix) !== true || is_file($folderPath.$tplFileName.$this->tplFileSuffix) !== true) return self::tplError(self::_t('Datei "%s" existiert nicht oder ist keine g&uuml;ltige Datei.', $tplFileName), __LINE__ - 1);
return self::tplError(self::_t('Datei "%s" existiert nicht oder ist keine g&uuml;ltige Datei.', $tplFileName), __LINE__-1);
} }
self::drawMsg(); self::drawMsg();
$data = $this->tplVariables; $data = $this->tplVariables;
if (strlen($tplFileName) >= 1 && is_string($tplFileName)) if (strlen($tplFileName) >= 1 && is_string($tplFileName)) (include_once $folderPath . $tplFileName . $this->tplFileSuffix) or self::error(self::_t('Konnte Datei "%s" nicht &ouml;ffnen und auslesen.', $tplFileName), __LINE__);
(include_once $folderPath.$tplFileName.$this->tplFileSuffix) or self::error(self::_t('Konnte Datei "%s" nicht &ouml;ffnen und auslesen.', $tplFileName), __LINE__);
// Optisch schöner // Optisch schöner
echo PHP_EOL; echo PHP_EOL;
@@ -545,7 +541,7 @@ class PiTpl
if (!strlen($errorMsg) > 0 || !is_string($errorMsg)) if (!strlen($errorMsg) > 0 || !is_string($errorMsg))
return false; return false;
if (file_exists($this->tplFolderPath.'error'.$this->tplFileSuffix) !== true || is_file($this->tplFolderPath.'error'.$this->tplFileSuffix) !== true) if (file_exists($this->tplFolderPath . 'error' . $this->tplFileSuffix) !== true || is_file($this->tplFolderPath . 'error' . $this->tplFileSuffix) !== true)
return false; return false;
if ($errorCancel === true) if ($errorCancel === true)
@@ -555,7 +551,7 @@ class PiTpl
$data['title'] = $errorTitle; $data['title'] = $errorTitle;
$data['msg'] = $errorMsg; $data['msg'] = $errorMsg;
include $this->tplFolderPath.'error'.$this->tplFileSuffix; include $this->tplFolderPath . 'error' . $this->tplFileSuffix;
if ($errorCancel === true) if ($errorCancel === true)
if (self::drawFooter() === false) if (self::drawFooter() === false)
@@ -623,12 +619,13 @@ class PiTpl
return false; return false;
if (!headers_sent($filename, $linenum)) if (!headers_sent($filename, $linenum))
exit(header('Location: '.$url)); exit(header('Location: ' . $url));
else else {
{ self::error(
self::error(self::_t('Weiterleitung'), self::_t('Weiterleitung'),
'<strong class="red">'.self::_t('Header bereits gesendet. Redirect nicht m&ouml;glich, klicke daher stattdessen <a href="%s">diesen Link</a> an.', $url).'</strong>', '<strong class="red">' . self::_t('Header bereits gesendet. Redirect nicht m&ouml;glich, klicke daher stattdessen <a href="%s">diesen Link</a> an.', $url) . '</strong>',
true); true
);
} }
return true; return true;
@@ -644,7 +641,7 @@ class PiTpl
public function showDebug() public function showDebug()
{ {
printf(PHP_EOL.'<!-- DEBUG - Start -->'.PHP_EOL.' <hr /><p>Ladezeit: %f<br />Fehler: %s</p>'.PHP_EOL.'<!-- DEBUG - End -->'.PHP_EOL, round(microtime(true)-$this->runtimeStart, 5), ($this->ifError) ? 'true' : 'false'); printf(PHP_EOL . '<!-- DEBUG - Start -->' . PHP_EOL . ' <hr /><p>Ladezeit: %f<br />Fehler: %s</p>' . PHP_EOL . '<!-- DEBUG - End -->' . PHP_EOL, round(microtime(true) - $this->runtimeStart, 5), ($this->ifError) ? 'true' : 'false');
return true; return true;
} }
@@ -661,18 +658,17 @@ class PiTpl
* @return bool * @return bool
*/ */
public function msg($type, $title = NULL, $msg, $cancelable = true, $id = 0) public function msg($type, $msg, $title = NULL, $cancelable = true, $id = 0)
{ {
if (!strlen($type) > 0 || !is_string($type) || if (
!strlen($type) > 0 || !is_string($type) ||
!strlen($msg) > 0 || !is_string($msg) !strlen($msg) > 0 || !is_string($msg)
) )
return false; return false;
if ($id > 0) if ($id > 0) {
{
$this->tplMsg[$id + 100] = array($type, $title, $msg, $cancelable); $this->tplMsg[$id + 100] = array($type, $title, $msg, $cancelable);
} } else
else
$this->tplMsg[] = array($type, $title, $msg, $cancelable); $this->tplMsg[] = array($type, $title, $msg, $cancelable);
return true; return true;
@@ -699,18 +695,17 @@ class PiTpl
if (is_array($this->tplMsg) !== true || count($this->tplMsg) == 0) if (is_array($this->tplMsg) !== true || count($this->tplMsg) == 0)
return false; return false;
if (file_exists($this->tplFolderPath.'msg'.$this->tplFileSuffix) !== true || is_file($this->tplFolderPath.'msg'.$this->tplFileSuffix) !== true) if (file_exists($this->tplFolderPath . 'msg' . $this->tplFileSuffix) !== true || is_file($this->tplFolderPath . 'msg' . $this->tplFileSuffix) !== true)
return false; return false;
foreach ($this->tplMsg as $key => $msg) foreach ($this->tplMsg as $key => $msg) {
{
$data['id'] = $key; $data['id'] = $key;
$data['type'] = $msg[0]; $data['type'] = $msg[0];
$data['title'] = $msg[1]; $data['title'] = $msg[1];
$data['msg'] = $msg[2]; $data['msg'] = $msg[2];
$data['cancelable'] = $msg[3]; $data['cancelable'] = $msg[3];
(include $this->tplFolderPath.'msg'.$this->tplFileSuffix) or self::tplError(self::_t('Konnte Datei "%s" nicht &ouml;ffnen und auslesen.', $this->tplFolderPath.'msg'.$this->tplFileSuffix), __LINE__); (include $this->tplFolderPath . 'msg' . $this->tplFileSuffix) or self::tplError(self::_t('Konnte Datei "%s" nicht &ouml;ffnen und auslesen.', $this->tplFolderPath . 'msg' . $this->tplFileSuffix), __LINE__);
} }
return false; return false;
@@ -726,13 +721,12 @@ class PiTpl
private function loadSSH() private function loadSSH()
{ {
set_include_path(LIBRARY_PATH.'terminal'); set_include_path(LIBRARY_PATH . 'terminal');
if (!class_exists('Net_SSH2')) if (!class_exists('Net_SSH2')) {
{ include(LIBRARY_PATH . 'terminal/Net/SSH2.php');
include(LIBRARY_PATH.'terminal/Net/SSH2.php'); include(LIBRARY_PATH . 'terminal/File/ANSI.php');
include(LIBRARY_PATH.'terminal/File/ANSI.php'); include(LIBRARY_PATH . 'terminal/Crypt/RSA.php');
include(LIBRARY_PATH.'terminal/Crypt/RSA.php');
} }
$ssh = NULL; $ssh = NULL;
@@ -741,30 +735,28 @@ class PiTpl
return false; return false;
$token = $_COOKIE['_pi-control_ssh']; $token = $_COOKIE['_pi-control_ssh'];
$token2 = $_COOKIE['_pi-control_ssh_'.$token]; $token2 = $_COOKIE['_pi-control_ssh_' . $token];
$sshType = getConfig('ssh:token_'.$token.'.type', 'password'); $sshType = getConfig('ssh:token_' . $token . '.type', 'password');
$sshPort = getConfig('ssh:token_'.$token.'.port', 22); $sshPort = getConfig('ssh:token_' . $token . '.port', 22);
$sshUsername = getConfig('ssh:token_'.$token.'.username', 'root'); $sshUsername = getConfig('ssh:token_' . $token . '.username', 'root');
$sshPassword = getConfig('ssh:token_'.$token.'.password', ''); $sshPassword = getConfig('ssh:token_' . $token . '.password', '');
$sshPrivateKey = base64_decode(getConfig('ssh:token_'.$token.'.privateKey', '')); $sshPrivateKey = base64_decode(getConfig('ssh:token_' . $token . '.privateKey', ''));
#$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND); #$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND);
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc')); $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
#$sshPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $token2, base64_decode($sshPassword), MCRYPT_MODE_ECB, $iv); #$sshPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $token2, base64_decode($sshPassword), MCRYPT_MODE_ECB, $iv);
$sshPassword = openssl_encrypt(base64_decode($sshPassword), 'aes-256-cbc', $token2, 0, $iv); $sshPassword = openssl_encrypt(base64_decode($sshPassword), 'aes-256-cbc', $token2, 0, $iv);
$sshPassword = rtrim($sshPassword, "\0"); $sshPassword = rtrim($sshPassword, "\0");
$ssh = new Net_SSH2('127.0.0.1', $sshPort); $ssh = new Net_SSH2('127.0.0.1', $sshPort);
if ($sshType == 'password') if ($sshType == 'password') {
{
if (!$ssh->login($sshUsername, $sshPassword)) if (!$ssh->login($sshUsername, $sshPassword))
return false; return false;
} }
if ($sshType == 'publickey') if ($sshType == 'publickey') {
{
$sshKey = new Crypt_RSA(); $sshKey = new Crypt_RSA();
if ($sshPassword != '') if ($sshPassword != '')
@@ -773,7 +765,7 @@ class PiTpl
$sshKey->loadKey($sshPrivateKey); $sshKey->loadKey($sshPrivateKey);
if (!$ssh->login($sshUsername, $sshKey)) if (!$ssh->login($sshUsername, $sshKey))
return false; return false;
} }
if ($ssh === NULL) if ($ssh === NULL)
@@ -804,7 +796,7 @@ class PiTpl
if (self::loadSSH() !== true) if (self::loadSSH() !== true)
if ($cancelIfError !== 0) if ($cancelIfError !== 0)
return self::error(_t('SSH-Zugriffsfehler'), _t('Kein SSH-Zugriff, diese Funktion steht aktuell nicht zur Verfügung!'), ($cancelIfError === 1) ? true : false); return self::error(_t('SSH-Zugriffsfehler'), _t('Kein SSH-Zugriff, diese Funktion steht aktuell nicht zur Verfügung!'), ($cancelIfError === 1) ? true : false);
#return self::error(_t('SSH-Zugriffsfehler'), _t('Kein SSH-Zugriff, bitte anmelden! <a href="%s">Jetzt anmelden.</a>', '?s=ssh_login'), ($cancelIfError === 1) ? true : false); #return self::error(_t('SSH-Zugriffsfehler'), _t('Kein SSH-Zugriff, bitte anmelden! <a href="%s">Jetzt anmelden.</a>', '?s=ssh_login'), ($cancelIfError === 1) ? true : false);
if ($timeout != NULL) if ($timeout != NULL)
$this->tplSSH->setTimeout($timeout); $this->tplSSH->setTimeout($timeout);
@@ -833,11 +825,10 @@ class PiTpl
public function getSSHResource($cancelIfError = 0) public function getSSHResource($cancelIfError = 0)
{ {
if ($this->tplSSH === NULL) if ($this->tplSSH === NULL)
if (self::loadSSH() !== true) if (self::loadSSH() !== true) {
{ if ($cancelIfError !== 0)
if ($cancelIfError !== 0)
self::error(_t('SSH-Zugriffsfehler'), _t('Kein SSH-Zugriff, diese Funktion steht aktuell nicht zur Verfügung!'), ($cancelIfError === 1) ? true : false); self::error(_t('SSH-Zugriffsfehler'), _t('Kein SSH-Zugriff, diese Funktion steht aktuell nicht zur Verfügung!'), ($cancelIfError === 1) ? true : false);
#self::error(_t('SSH-Zugriffsfehler'), _t('Kein SSH-Zugriff, bitte anmelden! <a href="%s">Jetzt anmelden.</a>', '?s=ssh_login'), ($cancelIfError === 1) ? true : false); #self::error(_t('SSH-Zugriffsfehler'), _t('Kein SSH-Zugriff, bitte anmelden! <a href="%s">Jetzt anmelden.</a>', '?s=ssh_login'), ($cancelIfError === 1) ? true : false);
return false; return false;
} }
@@ -859,13 +850,12 @@ class PiTpl
$sshPort = getConfig('ssh:latest.port', 22); $sshPort = getConfig('ssh:latest.port', 22);
$sshUsername = getConfig('ssh:latest.username', ''); $sshUsername = getConfig('ssh:latest.username', '');
if (isset($_COOKIE['_pi-control_ssh']) && $_COOKIE['_pi-control_ssh'] != '') if (isset($_COOKIE['_pi-control_ssh']) && $_COOKIE['_pi-control_ssh'] != '') {
{
$token = $_COOKIE['_pi-control_ssh']; $token = $_COOKIE['_pi-control_ssh'];
$sshType = getConfig('ssh:token_'.$token.'.type', $sshType); $sshType = getConfig('ssh:token_' . $token . '.type', $sshType);
$sshPort = getConfig('ssh:token_'.$token.'.port', $sshPort); $sshPort = getConfig('ssh:token_' . $token . '.port', $sshPort);
$sshUsername = getConfig('ssh:token_'.$token.'.username', $sshUsername); $sshUsername = getConfig('ssh:token_' . $token . '.username', $sshUsername);
} }
return array('type' => $sshType, 'port' => $sshPort, 'username' => $sshUsername); return array('type' => $sshType, 'port' => $sshPort, 'username' => $sshUsername);
@@ -900,8 +890,7 @@ class PiTpl
if ($privateKey != '' && is_string($privateKey)) if ($privateKey != '' && is_string($privateKey))
$SSHInfo['privateKey'] = $privateKey; $SSHInfo['privateKey'] = $privateKey;
if ($password != '') if ($password != '') {
{
if (isset($_COOKIE['_pi-control_ssh']) && $_COOKIE['_pi-control_ssh'] != '') if (isset($_COOKIE['_pi-control_ssh']) && $_COOKIE['_pi-control_ssh'] != '')
$this->logoutSSH(); $this->logoutSSH();
@@ -915,30 +904,27 @@ class PiTpl
$SSHInfo['privateKey'] = $privateKey; $SSHInfo['privateKey'] = $privateKey;
if (setConfig('ssh:token_'.$uniqid.'.created', time()) !== true) return false; if (setConfig('ssh:token_' . $uniqid . '.created', time()) !== true) return false;
if (setConfig('ssh:token_'.$uniqid.'.type', $SSHInfo['type']) !== true) return false; if (setConfig('ssh:token_' . $uniqid . '.type', $SSHInfo['type']) !== true) return false;
if (setConfig('ssh:token_'.$uniqid.'.port', $SSHInfo['port']) !== true) return false; if (setConfig('ssh:token_' . $uniqid . '.port', $SSHInfo['port']) !== true) return false;
if (setConfig('ssh:token_'.$uniqid.'.username', $SSHInfo['username']) !== true) return false; if (setConfig('ssh:token_' . $uniqid . '.username', $SSHInfo['username']) !== true) return false;
if (setConfig('ssh:token_'.$uniqid.'.password', $SSHInfo['password']) !== true) return false; if (setConfig('ssh:token_' . $uniqid . '.password', $SSHInfo['password']) !== true) return false;
if (setConfig('ssh:token_'.$uniqid.'.privateKey', base64_encode($SSHInfo['privateKey'])) !== true) return false; if (setConfig('ssh:token_' . $uniqid . '.privateKey', base64_encode($SSHInfo['privateKey'])) !== true) return false;
setConfig('ssh:latest.type', $SSHInfo['type']); setConfig('ssh:latest.type', $SSHInfo['type']);
setConfig('ssh:latest.port', $SSHInfo['port']); setConfig('ssh:latest.port', $SSHInfo['port']);
setConfig('ssh:latest.username', $SSHInfo['username']); setConfig('ssh:latest.username', $SSHInfo['username']);
if ($rememberMe == false) if ($rememberMe == false) {
{ setcookie('_pi-control_ssh', $uniqid, time() + 60 * 60 * 12);
setcookie('_pi-control_ssh', $uniqid, time()+60*60*12); setcookie('_pi-control_ssh_' . $uniqid, $uniqid2, time() + 60 * 60 * 12);
setcookie('_pi-control_ssh_'.$uniqid, $uniqid2, time()+60*60*12); } else {
} setcookie('_pi-control_ssh', $uniqid, time() + 60 * 60 * 24 * 30);
else setcookie('_pi-control_ssh_' . $uniqid, $uniqid2, time() + 60 * 60 * 24 * 30);
{
setcookie('_pi-control_ssh', $uniqid, time()+60*60*24*30);
setcookie('_pi-control_ssh_'.$uniqid, $uniqid2, time()+60*60*24*30);
} }
$_COOKIE['_pi-control_ssh'] = $uniqid; $_COOKIE['_pi-control_ssh'] = $uniqid;
$_COOKIE['_pi-control_ssh_'.$uniqid] = $uniqid2; $_COOKIE['_pi-control_ssh_' . $uniqid] = $uniqid2;
} }
return true; return true;
@@ -954,18 +940,16 @@ class PiTpl
public function logoutSSH() public function logoutSSH()
{ {
if (isset($_COOKIE['_pi-control_ssh']) && $_COOKIE['_pi-control_ssh'] != '') if (isset($_COOKIE['_pi-control_ssh']) && $_COOKIE['_pi-control_ssh'] != '') {
{
$token = $_COOKIE['_pi-control_ssh']; $token = $_COOKIE['_pi-control_ssh'];
removeConfig('ssh:token_'.$token); removeConfig('ssh:token_' . $token);
setcookie('_pi-control_ssh', '', time()-60); setcookie('_pi-control_ssh', '', time() - 60);
setcookie('_pi-control_ssh_'.$token, '', time()-60); setcookie('_pi-control_ssh_' . $token, '', time() - 60);
$_COOKIE['_pi-control_ssh'] = ''; $_COOKIE['_pi-control_ssh'] = '';
$_COOKIE['_pi-control_ssh_'.$token] = ''; $_COOKIE['_pi-control_ssh_' . $token] = '';
} }
return true; return true;
} }
} }
?>

View File

@@ -4,126 +4,103 @@ if (!defined('PICONTROL')) exit();
function checkTemperatureMonitoringEmailStatus() function checkTemperatureMonitoringEmailStatus()
{ {
global $tpl, $config; global $tpl, $config;
$id = getConfig('main:monitoringCpuTemp.id', ''); $id = getConfig('main:monitoringCpuTemp.id', '');
$code = getConfig('main:monitoringCpuTemp.code', ''); $code = getConfig('main:monitoringCpuTemp.code', '');
$email = getConfig('main:monitoringCpuTemp.email', ''); $email = getConfig('main:monitoringCpuTemp.email', '');
$data = NULL; $data = NULL;
$curl = curl_init(); $curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $config['url']['temperatureMonitoring'].'?'.http_build_query(array('id' => $id, 'code' => $code, 'email' => $email))); curl_setopt($curl, CURLOPT_URL, $config['url']['temperatureMonitoring'] . '?' . http_build_query(array('id' => $id, 'code' => $code, 'email' => $email)));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
do do {
{ if (($data = curl_exec($curl)) === false) {
if (($data = curl_exec($curl)) === false)
{
$info = curl_getinfo($curl); $info = curl_getinfo($curl);
$tpl->msg('error', _t('Verbindungsfehler'), _t('Bei der Verbindung zum Server ist ein unerwarteter Fehler aufgetreten. Fehlercode: %d (%s)', $info['http_code'], curl_error($curl)), true, 12); $tpl->msg('error', _t('Bei der Verbindung zum Server ist ein unerwarteter Fehler aufgetreten. Fehlercode: %d (%s)', _t('Verbindungsfehler'), $info['http_code'], curl_error($curl)), true, 12);
break; break;
} } else {
else
{
$info = curl_getinfo($curl); $info = curl_getinfo($curl);
if ($info['http_code'] == 404) if ($info['http_code'] == 404) {
{ $tpl->msg('error', _t('Leider konnte keine Verbindung zum Server hergestellt werden, da dieser momentan vermutlich nicht erreichbar ist. Fehlercode: %d', _t('Verbindungsfehler'), $info['http_code']), true, 12);
$tpl->msg('error', _t('Verbindungsfehler'), _t('Leider konnte keine Verbindung zum Server hergestellt werden, da dieser momentan vermutlich nicht erreichbar ist. Fehlercode: %d', $info['http_code']), true, 12); break;
} elseif ($info['http_code'] != 200) {
$tpl->msg('error', _t('Bei der Verbindung zum Server ist ein unerwarteter Fehler aufgetreten. Fehlercode: %d', $info['http_code']), _t('Verbindungsfehler'), true, 12);
break; break;
} }
elseif ($info['http_code'] != 200)
{ if ($data == '') {
$tpl->msg('error', _t('Verbindungsfehler'), _t('Bei der Verbindung zum Server ist ein unerwarteter Fehler aufgetreten. Fehlercode: %d', $info['http_code']), true, 12); $tpl->msg('error', _t('Bei der Verbindung zum Server ist ein Fehler aufgetreten. Der Server sendet eine leere Antwort.'), _t('Serverfehler'), true, 12);
break; break;
} }
if ($data == '')
{
$tpl->msg('error', _t('Serverfehler'), _t('Bei der Verbindung zum Server ist ein Fehler aufgetreten. Der Server sendet eine leere Antwort.'), true, 12);
break;
}
// Verarbeite Datenstring // Verarbeite Datenstring
$json = json_decode($data, true); $json = json_decode($data, true);
if (json_last_error() != JSON_ERROR_NONE || !isset($json['existing'], $json['email'], $json['code'])) if (json_last_error() != JSON_ERROR_NONE || !isset($json['existing'], $json['email'], $json['code'])) {
{ $tpl->msg('error', _t('Bei der Verbindung zum Server ist ein Fehler aufgetreten. Der Server sendet eine fehlerhafte Antwort.'), _t('Verarbeitungsfehler'), true, 12);
$tpl->msg('error', _t('Verarbeitungsfehler'), _t('Bei der Verbindung zum Server ist ein Fehler aufgetreten. Der Server sendet eine fehlerhafte Antwort.'), true, 12);
break; break;
} }
// Antwort in Ordnung // Antwort in Ordnung
if ($json['existing'] == false || $json['email'] == false || $json['code'] == false) if ($json['existing'] == false || $json['email'] == false || $json['code'] == false)
setConfig('main:monitoringCpuTemp.code', ''); setConfig('main:monitoringCpuTemp.code', '');
} }
} } while (false);
while (false);
curl_close($curl); curl_close($curl);
} }
function checkTemperatureMonitoringEmailCode() function checkTemperatureMonitoringEmailCode()
{ {
global $tpl, $config; global $tpl, $config;
$id = getConfig('main:monitoringCpuTemp.id', ''); $id = getConfig('main:monitoringCpuTemp.id', '');
$email = getConfig('main:monitoringCpuTemp.email', ''); $email = getConfig('main:monitoringCpuTemp.email', '');
$data = NULL; $data = NULL;
$curl = curl_init(); $curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $config['url']['temperatureMonitoring'].'?'.http_build_query(array('id' => $id, 'code' => true, 'email' => $email))); curl_setopt($curl, CURLOPT_URL, $config['url']['temperatureMonitoring'] . '?' . http_build_query(array('id' => $id, 'code' => true, 'email' => $email)));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
do do {
{ if (($data = curl_exec($curl)) === false) {
if (($data = curl_exec($curl)) === false)
{
$info = curl_getinfo($curl); $info = curl_getinfo($curl);
$tpl->msg('error', _t('Verbindungsfehler'), _t('Bei der Verbindung zum Server ist ein unerwarteter Fehler aufgetreten. Fehlercode: %d (%s)', $info['http_code'], curl_error($curl)), true, 12); $tpl->msg('error', _t('Bei der Verbindung zum Server ist ein unerwarteter Fehler aufgetreten. Fehlercode: %d (%s)', _t('Verbindungsfehler'), $info['http_code'], curl_error($curl)), true, 12);
break; break;
} } else {
else
{
$info = curl_getinfo($curl); $info = curl_getinfo($curl);
if ($info['http_code'] == 404) if ($info['http_code'] == 404) {
{ $tpl->msg('error', _t('Leider konnte keine Verbindung zum Server hergestellt werden, da dieser momentan vermutlich nicht erreichbar ist. Fehlercode: %d', _t('Verbindungsfehler'), $info['http_code']), true, 12);
$tpl->msg('error', _t('Verbindungsfehler'), _t('Leider konnte keine Verbindung zum Server hergestellt werden, da dieser momentan vermutlich nicht erreichbar ist. Fehlercode: %d', $info['http_code']), true, 12); break;
} elseif ($info['http_code'] != 200) {
$tpl->msg('error', _t('Bei der Verbindung zum Server ist ein unerwarteter Fehler aufgetreten. Fehlercode: %d', $info['http_code']), _t('Verbindungsfehler'), true, 12);
break; break;
} }
elseif ($info['http_code'] != 200)
{ if ($data == '') {
$tpl->msg('error', _t('Verbindungsfehler'), _t('Bei der Verbindung zum Server ist ein unerwarteter Fehler aufgetreten. Fehlercode: %d', $info['http_code']), true, 12); $tpl->msg('error', _t('Bei der Verbindung zum Server ist ein Fehler aufgetreten. Der Server sendet eine leere Antwort.'), _t('Serverfehler'), true, 12);
break; break;
} }
if ($data == '')
{
$tpl->msg('error', _t('Serverfehler'), _t('Bei der Verbindung zum Server ist ein Fehler aufgetreten. Der Server sendet eine leere Antwort.'), true, 12);
break;
}
// Verarbeite Datenstring // Verarbeite Datenstring
$json = json_decode($data, true); $json = json_decode($data, true);
if (json_last_error() != JSON_ERROR_NONE || !isset($json['existing'], $json['email'], $json['code'])) if (json_last_error() != JSON_ERROR_NONE || !isset($json['existing'], $json['email'], $json['code'])) {
{ $tpl->msg('error', _t('Bei der Verbindung zum Server ist ein Fehler aufgetreten. Der Server sendet eine fehlerhafte Antwort.'), _t('Verarbeitungsfehler'), true, 12);
$tpl->msg('error', _t('Verarbeitungsfehler'), _t('Bei der Verbindung zum Server ist ein Fehler aufgetreten. Der Server sendet eine fehlerhafte Antwort.'), true, 12);
break; break;
} }
// Antwort in Ordnung // Antwort in Ordnung
if ($json['code'] != false && strlen($json['code']) == 16) if ($json['code'] != false && strlen($json['code']) == 16) {
{
setConfig('main:monitoringCpuTemp.code', $json['code']); setConfig('main:monitoringCpuTemp.code', $json['code']);
$tpl->msg('success', _t('E-Mail best&auml;tigt'), _t('Deine E-Mail wurde erfolgreich best&auml;tigt.')); $tpl->msg('success', _t('Deine E-Mail wurde erfolgreich best&auml;tigt.'), _t('E-Mail best&auml;tigt'));
} } else
else $tpl->msg('error', _t('Der Server konnte zugeh&ouml;rige Daten nicht finden. Versichere, dass du die E-Mail best&auml;tigt hast.'), _t('Verarbeitungsfehler'), true, 12);
$tpl->msg('error', _t('Verarbeitungsfehler'), _t('Der Server konnte zugeh&ouml;rige Daten nicht finden. Versichere, dass du die E-Mail best&auml;tigt hast.'), true, 12);
} }
} } while (false);
while (false);
curl_close($curl); curl_close($curl);
} }
?>

View File

@@ -127,7 +127,7 @@ class LogStatistic
if (!file_exists($this->file) || !is_file($this->file)) if (!file_exists($this->file) || !is_file($this->file))
touch($this->file); touch($this->file);
$this->stream = fopen($this->file, 'r+') or exit(_t('Konnte Log-Datei nicht &ouml;ffnen: %s', $this->file)); $this->stream = fopen($this->file, 'r+');# || exit(_t('Konnte Log-Datei nicht &ouml;ffnen: %s', $this->file));
} }
} }