234 lines
9.4 KiB
PHP
234 lines
9.4 KiB
PHP
<?PHP
|
|
require_once('_preload.php');
|
|
require_once('_nav.php');
|
|
|
|
if ($mysqlcon->exec("INSERT INTO `$dbname`.`csrf_token` (`token`,`timestamp`,`sessionid`) VALUES ('$csrf_token','".time()."','".session_id()."')") === false) {
|
|
$err_msg = print_r($mysqlcon->errorInfo(), true);
|
|
$err_lvl = 3;
|
|
}
|
|
|
|
if (($db_csrf = $mysqlcon->query("SELECT * FROM `$dbname`.`csrf_token` WHERE `sessionid`='".session_id()."'")->fetchALL(PDO::FETCH_UNIQUE|PDO::FETCH_ASSOC)) === false) {
|
|
$err_msg = print_r($mysqlcon->errorInfo(), true);
|
|
$err_lvl = 3;
|
|
}
|
|
|
|
if (isset($_POST['update']) && isset($db_csrf[$_POST['csrf_token']])) {
|
|
$stats_api_keys = $err_msg = "";
|
|
|
|
if (isset($_POST['apikey']) && isset($_POST['desc'])) {
|
|
$apidefinition = [];
|
|
foreach($_POST['apikey'] as $rowid => $apikey) {
|
|
$desc = isset($_POST["desc"][$rowid]) ? $_POST["desc"][$rowid] : null;
|
|
$apidefinition[] = "$apikey=>$desc";
|
|
}
|
|
|
|
$stats_api_keys = implode(",", $apidefinition);
|
|
|
|
$cfg['stats_api_keys'] = $stats_api_keys;
|
|
}
|
|
|
|
if ($mysqlcon->exec("INSERT INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('stats_api_keys','{$cfg['stats_api_keys']}') ON DUPLICATE KEY UPDATE `value`=VALUES(`value`); DELETE FROM `$dbname`.`csrf_token` WHERE `token`='{$_POST['csrf_token']}'") === false) {
|
|
$err_msg = print_r($mysqlcon->errorInfo(), true);
|
|
$err_lvl = 3;
|
|
} else {
|
|
$err_msg = $lang['wisvsuc'];
|
|
$err_lvl = NULL;
|
|
}
|
|
|
|
if(empty($stats_api_keys)) {
|
|
$cfg['stats_api_keys'] = NULL;
|
|
} else {
|
|
$keyarr = explode(',', $stats_api_keys);
|
|
foreach ($keyarr as $entry) {
|
|
list($key, $value) = explode('=>', $entry);
|
|
$addnewvalue[$key] = $value;
|
|
$cfg['stats_api_keys'] = $addnewvalue;
|
|
}
|
|
}
|
|
} elseif(isset($_POST['update'])) {
|
|
echo '<div class="alert alert-danger alert-dismissible">',$lang['errcsrf'],'</div>';
|
|
rem_session_ts3($rspathhex);
|
|
exit;
|
|
}
|
|
?>
|
|
<div id="page-wrapper">
|
|
<?PHP if(isset($err_msg)) error_handling($err_msg, $err_lvl); ?>
|
|
<div class="container-fluid">
|
|
|
|
<form class="form-horizontal" data-toggle="validator" name="update" method="POST" id="new">
|
|
<div class="row">
|
|
<div class="col-lg-12">
|
|
<h1 class="page-header">
|
|
<span><?php echo $lang['api'],' ',$lang['wihlset']; ?></span>
|
|
</h1>
|
|
</div>
|
|
</div>
|
|
<input type="hidden" name="csrf_token" value="<?PHP echo $csrf_token; ?>">
|
|
<div class="row">
|
|
<div class="col-md-12">
|
|
<div class="form-group">
|
|
<label class="col-sm-12 pointer" data-toggle="modal" data-target="#wiapidesc"><?php echo $lang['wihladm0']; ?><i class="help-hover fas fa-question-circle"></i></label>
|
|
<div class="panel-body">
|
|
<div class="row"> </div>
|
|
<div class="row"> </div>
|
|
<div class="form-group">
|
|
<div class="col-sm-5">
|
|
<b><?php echo $lang['apikey'] ?></b>
|
|
</div>
|
|
<div class="col-sm-6">
|
|
<b><?php echo $lang['descr']; ?></b>
|
|
</div>
|
|
<div class="col-sm-1"></div>
|
|
</div>
|
|
<div class="form-group hidden" name="template">
|
|
<div class="col-sm-4">
|
|
<input type="text" data-pattern="^[a-zA-Z0-9]{1,64}$" data-error="No special characters allowed and maximum 64 characters!" maxlength="64" class="form-control" name="tempapikey[]" value="<?PHP $apikey= bin2hex(openssl_random_pseudo_bytes(32)); echo $apikey; ?>">
|
|
<div class="help-block with-errors"></div>
|
|
</div>
|
|
<div class="col-sm-1 text-left"></div>
|
|
<div class="col-sm-6">
|
|
<input type="text" data-pattern="^[^,=>]{1,128}$" data-error="No comma, equal sign or greater-than sign allowed and maximum 128 characters!" maxlength="128" class="form-control" name="tempdesc[]" value="" placeholder="set a description..">
|
|
<div class="help-block with-errors"></div>
|
|
</div>
|
|
<div class="col-sm-1 text-center delete" name="delete"><i class="fas fa-trash" style="margin-top:10px;cursor:pointer;" title="delete line"></i></div>
|
|
<div class="col-sm-2"></div>
|
|
</div>
|
|
<?PHP
|
|
foreach($cfg['stats_api_keys'] as $apikey => $desc) {
|
|
?>
|
|
<div class="form-group" name="apidef">
|
|
<div class="col-sm-4">
|
|
<input type="text" data-pattern="^[a-zA-Z0-9]{1,64}$" data-error="No special characters allowed and maximum 64 characters!" maxlength="64" class="form-control" name="apikey[]" value="<?PHP echo $apikey; ?>">
|
|
<div class="help-block with-errors"></div>
|
|
</div>
|
|
<div class="col-sm-1 text-left">
|
|
<i class="fas fa-link" onclick="openurl('../api/?apikey=<?PHP echo $apikey; ?>')" style="margin-top:10px;cursor:pointer;" title="open URL"></i>
|
|
<i class="fas fa-copy" onclick="copyurl('<?PHP echo $_SERVER['SERVER_NAME'],substr(dirname($_SERVER['SCRIPT_NAME']),0,-12),'api/?apikey=',$apikey; ?>')" style="margin-top:10px;cursor:pointer;" title="copy URL to clipboard"></i>
|
|
</div>
|
|
<div class="col-sm-6">
|
|
<input type="text" data-pattern="^[^,=>]{1,128}$" data-error="No comma, equal sign or greater-than sign allowed and maximum 128 characters!" maxlength="128" class="form-control" name="desc[]" value="<?PHP echo $desc; ?>" placeholder="set a description..">
|
|
<div class="help-block with-errors"></div>
|
|
</div>
|
|
<div class="col-sm-1 text-center delete" name="delete"><i class="fas fa-trash" style="margin-top:10px;cursor:pointer;" title="delete line"></i></div>
|
|
<div class="col-sm-2"></div>
|
|
</div>
|
|
<?PHP
|
|
}
|
|
?>
|
|
<div class="form-group" id="addapikey">
|
|
<?PHP
|
|
if(!isset($cfg['stats_api_keys'])) {
|
|
echo '<div class="col-sm-11"><div id="noentry"><i>',$lang['wiboostempty'],'</i></div></div>';
|
|
} else {
|
|
echo '<div class="col-sm-11"></div>';
|
|
}?>
|
|
<div class="col-sm-1 text-center">
|
|
<span class="d-inline-block" ata-toggle="tooltip" title="Add new line">
|
|
<button class="btn btn-primary" onclick="addapikey()" style="margin-top: 5px;" type="button"><i class="fas fa-plus"></i></button>
|
|
</span>
|
|
</div>
|
|
<div class="col-sm-2"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row"> </div>
|
|
<div class="row">
|
|
<div class="text-center">
|
|
<button type="submit" class="btn btn-primary" name="update"><i class="fas fa-save"></i> <?php echo $lang['wisvconf']; ?></button>
|
|
</div>
|
|
</div>
|
|
<div class="row"> </div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="modal fade" id="wiapidesc" tabindex="-1">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
|
<h4 class="modal-title"><?php echo $lang['api']; ?></h4>
|
|
</div>
|
|
<div class="modal-body">
|
|
<?php
|
|
$host = "<a href=\"//".$_SERVER['HTTP_HOST'].substr(rtrim(dirname($_SERVER['PHP_SELF']), '/\\'),0,-12)."api\" target=\"_blank\">".$_SERVER['HTTP_HOST'].substr(rtrim(dirname($_SERVER['PHP_SELF']), '/\\'),0,-12)."api</a>";
|
|
echo sprintf($lang['wiapidesc'], $host); ?>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-default" data-dismiss="modal"><?PHP echo $lang['stnv0002']; ?></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
$('form[data-toggle="validator"]').validator({
|
|
custom: {
|
|
pattern: function ($el) {
|
|
var pattern = new RegExp($el.data('pattern'));
|
|
return pattern.test($el.val());
|
|
}
|
|
},
|
|
delay: 100,
|
|
errors: {
|
|
pattern: "There should be an error in your value, please check all could be right!"
|
|
}
|
|
});
|
|
function addapikey() {
|
|
var $clone = $("div[name='template']").last().clone();
|
|
$clone.removeClass("hidden");
|
|
$clone.attr('name','apidef');
|
|
$clone.insertBefore("#addapikey");
|
|
$("input[name='tempapikey[]']").last().attr('name', 'apikey[]');
|
|
$("input[name='tempdesc[]']").last().attr('name', 'desc[]');
|
|
$('.delete').removeClass("hidden");
|
|
if (document.contains(document.getElementById("noentry"))) {
|
|
document.getElementById("noentry").remove();
|
|
}
|
|
|
|
var newapikey = {
|
|
_pattern : /[a-z0-9]/,
|
|
_getRandomByte : function() {
|
|
if(window.crypto && window.crypto.getRandomValues) {
|
|
var result = new Uint8Array(1);
|
|
window.crypto.getRandomValues(result);
|
|
return result[0];
|
|
} else if(window.msCrypto && window.msCrypto.getRandomValues) {
|
|
var result = new Uint8Array(1);
|
|
window.msCrypto.getRandomValues(result);
|
|
return result[0];
|
|
} else {
|
|
return Math.floor(Math.random() * 256);
|
|
}
|
|
},
|
|
|
|
generate : function(length) {
|
|
return Array.apply(null, {'length': length})
|
|
.map(function() {
|
|
var result;
|
|
while(true) {
|
|
result = String.fromCharCode(this._getRandomByte());
|
|
if(this._pattern.test(result)) {
|
|
return result;
|
|
}
|
|
}
|
|
}, this)
|
|
.join('');
|
|
}
|
|
};
|
|
$("input[name='apikey[]']").last().attr('value', newapikey.generate(64));
|
|
};
|
|
$(document).on("click", ".delete", function(){
|
|
$(this).parent().remove();
|
|
});
|
|
function openurl(url) {
|
|
window.open(url,'_blank');
|
|
}
|
|
function copyurl(url) {
|
|
navigator.clipboard.writeText(url).then(function() { });
|
|
}
|
|
</script>
|
|
</body>
|
|
</html>
|