Merge branch 'qkqpttgf:master' into master
commit
a6cc8203a0
|
@ -0,0 +1,3 @@
|
|||
language = "php74"
|
||||
run = "php -S 0.0.0.0:8000 index.php"
|
||||
entrypoint = "index.php"
|
162
common.php
162
common.php
|
@ -167,6 +167,13 @@ function main($path)
|
|||
if (isset($_COOKIE['timezone'])&&$_COOKIE['timezone']!='') $_SERVER['timezone'] = $_COOKIE['timezone'];
|
||||
if ($_SERVER['timezone']=='') $_SERVER['timezone'] = 0;
|
||||
|
||||
if (isset($_GET['WaitFunction'])) {
|
||||
$response = WaitFunction($_GET['WaitFunction']);
|
||||
//var_dump($response);
|
||||
if ($response===true) return output("ok", 200);
|
||||
elseif ($response===false) return output("", 206);
|
||||
else return $response;
|
||||
}
|
||||
if (getConfig('admin')=='') return install();
|
||||
if (getConfig('adminloginpage')=='') {
|
||||
$adminloginpage = 'admin';
|
||||
|
@ -204,13 +211,6 @@ function main($path)
|
|||
$url = path_format($_SERVER['PHP_SELF'] . '/');
|
||||
return output('<script>alert(\''.getconstStr('SetSecretsFirst').'\');</script>', 302, [ 'Location' => $url ]);
|
||||
}
|
||||
if (isset($_GET['WaitFunction'])) {
|
||||
$response = WaitFunction($_GET['WaitFunction']);
|
||||
//var_dump($response);
|
||||
if ($response===true) return output("ok", 200);
|
||||
elseif ($response===false) return output("", 206);
|
||||
else return $response;
|
||||
}
|
||||
|
||||
$_SERVER['sitename'] = getConfig('sitename');
|
||||
if (empty($_SERVER['sitename'])) $_SERVER['sitename'] = getconstStr('defaultSitename');
|
||||
|
@ -249,7 +249,8 @@ function main($path)
|
|||
return output('Please visit <a href="' . $tmp . '">' . $tmp . '</a>.', 302, [ 'Location' => $tmp ]);
|
||||
//return message('<meta http-equiv="refresh" content="2;URL='.$_SERVER['base_path'].'">Please visit from <a href="'.$_SERVER['base_path'].'">Home Page</a>.', 'Error', 404);
|
||||
}
|
||||
$path = substr($path, strlen('/' . $_SERVER['disktag']));
|
||||
//$path = substr($path, strlen('/' . $_SERVER['disktag']));
|
||||
$path = splitfirst($path, $_SERVER['disktag'])[1];
|
||||
if ($_SERVER['disktag']!='') $_SERVER['base_disk_path'] = path_format($_SERVER['base_disk_path'] . '/' . $_SERVER['disktag'] . '/');
|
||||
}
|
||||
} else $_SERVER['disktag'] = $disktags[0];
|
||||
|
@ -302,6 +303,7 @@ function main($path)
|
|||
if ($_SERVER['ajax']) {
|
||||
if ($_GET['action']=='del_upload_cache') {
|
||||
// del '.tmp' without login. 无需登录即可删除.tmp后缀文件
|
||||
savecache('path_' . $path1, '', $_SERVER['disktag'], 1); // clear cache.
|
||||
return $drive->del_upload_cache($path);
|
||||
}
|
||||
if ($_GET['action']=='upbigfile') {
|
||||
|
@ -358,7 +360,8 @@ function main($path)
|
|||
} else {
|
||||
$files = $drive->list_files($path1);
|
||||
}
|
||||
if ($path!=='') if ( $files['type']=='folder' && substr($path, -1)!=='/' ) {
|
||||
//if ($path!=='')
|
||||
if ( $files['type']=='folder' && substr($path, -1)!=='/' ) {
|
||||
$tmp = path_format($_SERVER['base_disk_path'] . $path . '/');
|
||||
return output('<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
<html><head>
|
||||
|
@ -552,7 +555,7 @@ function compareadminsha1($adminsha1, $timestamp, $pass)
|
|||
if (!is_numeric($timestamp)) return 'Timestamp not Number';
|
||||
if (abs(time()-$timestamp) > 5*60) {
|
||||
date_default_timezone_set('UTC');
|
||||
return 'The timestamp in server is ' . time() . ' (' . date("Y-m-d H:i:s") . ' UTC),<br>and your posted timestamp is ' . $timestamp . ' (' . date("Y-m-d H:i:s", $timestamp) . ' UTC)';
|
||||
return 'The time in server is ' . time() . ' (' . date("Y-m-d H:i:s") . ' UTC),<br>and your time is ' . $timestamp . ' (' . date("Y-m-d H:i:s", $timestamp) . ' UTC)';
|
||||
}
|
||||
if ($adminsha1 == sha1($timestamp . $pass)) return '';
|
||||
else return 'Error password';
|
||||
|
@ -618,7 +621,7 @@ function filecache($disktag)
|
|||
if ( is_writable($tmp) ) $dir = $tmp;
|
||||
} elseif ( mkdir($tmp) ) $dir = $tmp;
|
||||
}
|
||||
$tag = __DIR__ . '/OneManager/' . $disktag;
|
||||
$tag = $_SERVER['HTTP_HOST'] . '/OneManager/' . $disktag;
|
||||
while (strpos($tag, '/')>-1) $tag = str_replace('/', '_', $tag);
|
||||
if (strpos($tag, ':')>-1) {
|
||||
$tag = str_replace(':', '_', $tag);
|
||||
|
@ -629,14 +632,35 @@ function filecache($disktag)
|
|||
return $cache;
|
||||
}
|
||||
|
||||
function findIndexPath($rootpath, $path = '')
|
||||
{// find the path of the first 'index.php' that not in rootpath.
|
||||
global $slash;
|
||||
if (substr($rootpath,-1)==$slash) $rootpath = substr($rootpath, 0, -1);
|
||||
if (substr($path,0,1)==$slash) $path = substr($path, 1);
|
||||
$handler=opendir(path_format($rootpath.$slash.$path)); //打开当前文件夹
|
||||
while($filename=readdir($handler)){
|
||||
if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..’,不要对他们进行操作
|
||||
$nowname = path_format($rootpath.$slash.$path.$slash.$filename);
|
||||
if(is_dir($nowname)){// 如果读取的某个对象是文件夹,则递归
|
||||
$res = findIndexPath($rootpath, $path.$slash.$filename);
|
||||
if ($res!=='') return $res;
|
||||
}else{
|
||||
if ($filename==='index.php') if ($path!='') return $rootpath.$slash.$path;
|
||||
}
|
||||
}
|
||||
}
|
||||
@closedir($handler);
|
||||
return '';
|
||||
}
|
||||
|
||||
function sortConfig(&$arr)
|
||||
{
|
||||
ksort($arr);
|
||||
|
||||
$tags = explode('|', $arr['disktag']);
|
||||
unset($arr['disktag']);
|
||||
if ($tags[0]!='') {
|
||||
foreach($tags as $tag) {
|
||||
if (isset($arr['disktag'])) {
|
||||
$tags = explode('|', $arr['disktag']);
|
||||
unset($arr['disktag']);
|
||||
foreach($tags as $tag) if (isset($arr[$tag])) {
|
||||
$disks[$tag] = $arr[$tag];
|
||||
unset($arr[$tag]);
|
||||
}
|
||||
|
@ -917,7 +941,7 @@ function message($message, $title = 'Message', $statusCode = 200, $wainstat = 0)
|
|||
//setTimeout(function() { getStatus() }, 1000);
|
||||
}
|
||||
} else if (xhr.status==206) {
|
||||
errordiv.innerHTML = min + "<br>' . getconstStr('Wait') . '" + x;
|
||||
errordiv.innerHTML = "' . getconstStr('Wait') . '" + x + "<br>" + min;
|
||||
setTimeout(function() { getStatus() }, 1000);
|
||||
} else {
|
||||
errordiv.innerHTML = "ERROR<br>" + xhr.status + "<br>" + xhr.responseText;
|
||||
|
@ -949,7 +973,8 @@ function needUpdate()
|
|||
$current_ver = explode(urldecode('%0D'),$current_ver)[0];
|
||||
$split = splitfirst($current_version, '.' . $current_ver)[0] . '.' . $current_ver;
|
||||
if (!($github_version = getcache('github_version'))) {
|
||||
$tmp = curl('GET', 'https://raw.githubusercontent.com/qkqpttgf/OneManager-php/master/version');
|
||||
//$tmp = curl('GET', 'https://raw.githubusercontent.com/qkqpttgf/OneManager-php/master/version');
|
||||
$tmp = curl('GET', 'https://git.hit.edu.cn/ysun/OneManager-php/-/raw/master/version');
|
||||
if ($tmp['stat']==0) return 0;
|
||||
$github_version = $tmp['body'];
|
||||
savecache('github_version', $github_version);
|
||||
|
@ -1082,7 +1107,7 @@ function adminform($name = '', $pass = '', $storage = '', $path = '')
|
|||
}
|
||||
}
|
||||
</script>
|
||||
<script src="https://cdn.bootcss.com/js-sha1/0.6.0/sha1.min.js"></script>';
|
||||
<script src="https://cdn.jsdelivr.net/npm/js-sha1@0.6.0/src/sha1.min.js"></script>';
|
||||
$html .= '</html>';
|
||||
return output($html, $statusCode);
|
||||
}
|
||||
|
@ -1207,6 +1232,7 @@ function splitfirst($str, $split)
|
|||
$tmp[0] = '';
|
||||
$tmp[1] = substr($str, $len);
|
||||
}
|
||||
if ($tmp[1]===false) $tmp[1] = '';
|
||||
return $tmp;
|
||||
}
|
||||
|
||||
|
@ -1224,6 +1250,7 @@ function splitlast($str, $split)
|
|||
$tmp[0] = '';
|
||||
$tmp[1] = substr($str, $len);
|
||||
}
|
||||
if ($tmp[1]===false) $tmp[1] = '';
|
||||
return $tmp;
|
||||
}
|
||||
|
||||
|
@ -1251,7 +1278,7 @@ function EnvOpt($needUpdate = 0)
|
|||
|
||||
$html = '<title>OneManager '.getconstStr('Setup').'</title>';
|
||||
if (isset($_POST['updateProgram'])&&$_POST['updateProgram']==getconstStr('updateProgram')) if (compareadminmd5('admin', getConfig('admin'), $_COOKIE['admin'], $_POST['_admin'])) {
|
||||
$response = setConfigResponse(OnekeyUpate($_POST['auth'], $_POST['project'], $_POST['branch']));
|
||||
$response = setConfigResponse(OnekeyUpate($_POST['GitSource'], $_POST['auth'], $_POST['project'], $_POST['branch']));
|
||||
if (api_error($response)) {
|
||||
$html = api_error_msg($response);
|
||||
$title = 'Error';
|
||||
|
@ -1391,19 +1418,18 @@ function EnvOpt($needUpdate = 0)
|
|||
}
|
||||
} else return message('please login again', 'Need login', 403);
|
||||
|
||||
if (isset($_GET['preview'])) {
|
||||
$preurl = $_SERVER['PHP_SELF'] . '?preview';
|
||||
} else {
|
||||
$preurl = path_format($_SERVER['PHP_SELF'] . '/');
|
||||
}
|
||||
$html .= '
|
||||
<a href="' . $preurl . '">' . getconstStr('Back') . '</a><br>
|
||||
<a id="back" href="./">' . getconstStr('Back') . '</a><br>
|
||||
<script>
|
||||
if (location.search.indexOf("preview")>0) document.getElementById("back").href = "?preview";
|
||||
</script>
|
||||
';
|
||||
if ($_GET['setup']==='cmd') {
|
||||
$statusCode = 200;
|
||||
$html .= '
|
||||
OneManager DIR: ' . __DIR__ . '
|
||||
<form name="form1" method="POST" action="">
|
||||
<input id="inputarea" name="cmd" style="width:100%" value="' . $_POST['cmd'] . '"><br>
|
||||
<input id="inputarea" name="cmd" style="width:100%" value="' . $_POST['cmd'] . '" placeholder="ls, pwd, cat"><br>
|
||||
<input type="submit" value="post">
|
||||
</form>';
|
||||
if ($_POST['cmd']!='') {
|
||||
|
@ -1433,6 +1459,9 @@ output:
|
|||
</script>';
|
||||
return message($html, 'Run cmd', $statusCode);
|
||||
}
|
||||
if ($_GET['setup']==='auth') {
|
||||
return changeAuthKey();
|
||||
}
|
||||
if ($_GET['setup']==='platform') {
|
||||
$frame .= '
|
||||
<table border=1 width=100%>
|
||||
|
@ -1716,7 +1745,10 @@ output:
|
|||
$canOneKeyUpate = 1;
|
||||
}
|
||||
}
|
||||
$frame .= '<a href="https://github.com/qkqpttgf/OneManager-php" target="_blank">Github</a>';
|
||||
$frame .= '
|
||||
<a href="https://github.com/qkqpttgf/OneManager-php" target="_blank">Github</a>
|
||||
<a href="https://git.hit.edu.cn/ysun/OneManager-php" target="_blank">HIT Gitlab</a><br><br>
|
||||
';
|
||||
if (!$canOneKeyUpate) {
|
||||
$frame .= '
|
||||
' . getconstStr('CannotOneKeyUpate') . '<br>';
|
||||
|
@ -1724,17 +1756,33 @@ output:
|
|||
$frame .= '
|
||||
<form name="updateform" action="" method="post">
|
||||
<input name="_admin" type="hidden" value="">
|
||||
Update from
|
||||
<select name="GitSource" onchange="changeGitSource(this)">
|
||||
<option value="Github" selected>Github</option>
|
||||
<option value="HITGitlab">HIT Gitlab</option>
|
||||
</select>
|
||||
<input type="text" name="auth" size="6" placeholder="auth" value="qkqpttgf">
|
||||
<input type="text" name="project" size="12" placeholder="project" value="OneManager-php">
|
||||
<button name="QueryBranchs" onclick="querybranchs();return false;">' . getconstStr('QueryBranchs') . '</button>
|
||||
<button name="QueryBranchs" onclick="querybranchs(this);return false;">' . getconstStr('QueryBranchs') . '</button>
|
||||
<select name="branch">
|
||||
<option value="master">master</option>
|
||||
</select>
|
||||
<input type="submit" name="updateProgram" value="' . getconstStr('updateProgram') . '">
|
||||
</form>
|
||||
|
||||
<script>
|
||||
function querybranchs()
|
||||
{
|
||||
function changeGitSource(d) {
|
||||
if (d.options[d.options.selectedIndex].value=="Github") document.updateform.auth.value = "qkqpttgf";
|
||||
if (d.options[d.options.selectedIndex].value=="HITGitlab") document.updateform.auth.value = "ysun";
|
||||
document.updateform.QueryBranchs.style.display = null;
|
||||
document.updateform.branch.options.length = 0;
|
||||
document.updateform.branch.options.add(new Option("master", "master"));
|
||||
}
|
||||
function querybranchs(b) {
|
||||
if (document.updateform.GitSource.options[document.updateform.GitSource.options.selectedIndex].value=="Github") return Githubquerybranchs(b);
|
||||
if (document.updateform.GitSource.options[document.updateform.GitSource.options.selectedIndex].value=="HITGitlab") return HITquerybranchs(b);
|
||||
}
|
||||
function Githubquerybranchs(b) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("GET", "https://api.github.com/repos/"+document.updateform.auth.value+"/"+document.updateform.project.value+"/branches");
|
||||
//xhr.setRequestHeader("User-Agent","qkqpttgf/OneManager");
|
||||
|
@ -1746,7 +1794,50 @@ output:
|
|||
document.updateform.branch.options.add(new Option(e.name,e.name));
|
||||
if ("master"==e.name) document.updateform.branch.options[document.updateform.branch.options.length-1].selected = true;
|
||||
});
|
||||
document.updateform.QueryBranchs.style.display="none";
|
||||
//document.updateform.QueryBranchs.style.display="none";
|
||||
b.style.display="none";
|
||||
} else {
|
||||
alert(xhr.responseText+"\n"+xhr.status);
|
||||
}
|
||||
}
|
||||
xhr.onerror = function(e){
|
||||
alert("Network Error "+xhr.status);
|
||||
}
|
||||
xhr.send(null);
|
||||
}
|
||||
function HITquerybranchs(b) {
|
||||
// https://git.hit.edu.cn/api/v4/projects/383/repository/branches/
|
||||
var pro_id;
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("GET", "https://git.hit.edu.cn/api/v4/projects");
|
||||
//xhr.setRequestHeader("User-Agent","qkqpttgf/OneManager");
|
||||
xhr.onload = function(e){
|
||||
//console.log(xhr.responseText+","+xhr.status);
|
||||
if (xhr.status==200) {
|
||||
//document.updateform.branch.options.length=0;
|
||||
JSON.parse(xhr.responseText).forEach( function (e) {
|
||||
if (e.name===document.updateform.project.value && e.namespace.path===document.updateform.auth.value) {
|
||||
//console.log(e.id);
|
||||
pro_id = e.id;
|
||||
}
|
||||
});
|
||||
//console.log(pro_id);
|
||||
var xhr1 = new XMLHttpRequest();
|
||||
xhr1.open("GET", "https://git.hit.edu.cn/api/v4/projects/"+pro_id+"/repository/branches");
|
||||
xhr1.onload = function(e){
|
||||
if (xhr1.status==200) {
|
||||
document.updateform.branch.options.length=0;
|
||||
JSON.parse(xhr1.responseText).forEach( function (e) {
|
||||
document.updateform.branch.options.add(new Option(e.name,e.name));
|
||||
if ("master"==e.name) document.updateform.branch.options[document.updateform.branch.options.length-1].selected = true;
|
||||
});
|
||||
} else {
|
||||
alert(xhr1.responseText+"\n"+xhr1.status);
|
||||
}
|
||||
}
|
||||
xhr1.send(null);
|
||||
//document.updateform.QueryBranchs.style.display="none";
|
||||
b.style.display="none";
|
||||
} else {
|
||||
alert(xhr.responseText+"\n"+xhr.status);
|
||||
}
|
||||
|
@ -1761,17 +1852,17 @@ output:
|
|||
}
|
||||
if ($needUpdate) {
|
||||
$frame .= '<div style="position: relative; word-wrap: break-word;">
|
||||
' . str_replace("\r", '<br>', $_SERVER['github_ver_new']) . '
|
||||
' . str_replace("\n", '<br>', $_SERVER['github_ver_new']) . '
|
||||
</div>
|
||||
<button onclick="document.getElementById(\'github_ver_old\').style.display=(document.getElementById(\'github_ver_old\').style.display==\'none\'?\'\':\'none\');">More...</button>
|
||||
<div id="github_ver_old" style="position: relative; word-wrap: break-word; display: none">
|
||||
' . str_replace("\r", '<br>', $_SERVER['github_ver_old']) . '
|
||||
' . str_replace("\n", '<br>', $_SERVER['github_ver_old']) . '
|
||||
</div>';
|
||||
}/* else {
|
||||
$frame .= getconstStr('NotNeedUpdate');
|
||||
}*/
|
||||
$frame .= '<br><br>
|
||||
<script src="https://cdn.bootcss.com/js-sha1/0.6.0/sha1.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/js-sha1@0.6.0/src/sha1.min.js"></script>
|
||||
<table>
|
||||
<form id="change_pass" name="change_pass" action="" method="POST" onsubmit="return changePassword(this);">
|
||||
<input name="_admin" type="hidden" value="">
|
||||
|
@ -1995,6 +2086,7 @@ function render_list($path = '', $files = [])
|
|||
$authinfo = '
|
||||
<!--
|
||||
OneManager: An index & manager of Onedrive auth by ysun.
|
||||
HIT Gitlab: https://git.hit.edu.cn/ysun/OneManager-php
|
||||
Github: https://github.com/qkqpttgf/OneManager-php
|
||||
-->';
|
||||
//$authinfo = $path . '<br><pre>' . json_encode($files, JSON_PRETTY_PRINT) . '</pre>';
|
||||
|
@ -2559,7 +2651,7 @@ function render_list($path = '', $files = [])
|
|||
|
||||
while (strpos($html, '<!--base_disk_path-->')) $html = str_replace('<!--base_disk_path-->', (substr($_SERVER['base_disk_path'],-1)=='/'?substr($_SERVER['base_disk_path'],0,-1):$_SERVER['base_disk_path']), $html);
|
||||
while (strpos($html, '<!--base_path-->')) $html = str_replace('<!--base_path-->', $_SERVER['base_path'], $html);
|
||||
while (strpos($html, '<!--Path-->')) $html = str_replace('<!--Path-->', str_replace('%23', '#', str_replace('&','&', path_format($path1.'/'))), $html);
|
||||
$html = str_replace('<!--Path-->', str_replace('\'', '\\\'', str_replace('%23', '#', str_replace('&','&', path_format($path1.'/')))), $html);
|
||||
while (strpos($html, '<!--constStr@Home-->')) $html = str_replace('<!--constStr@Home-->', getconstStr('Home'), $html);
|
||||
|
||||
$html = str_replace('<!--customCss-->', getConfig('customCss'), $html);
|
||||
|
|
|
@ -7,7 +7,7 @@ $exts['img'] = ['ico', 'bmp', 'gif', 'jpg', 'jpeg', 'jpe', 'jfif', 'tif', 'tiff'
|
|||
$exts['music'] = ['mp3', 'wma', 'flac', 'ape', 'wav', 'ogg', 'm4a'];
|
||||
$exts['office'] = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx'];
|
||||
$exts['txt'] = ['txt', 'bat', 'sh', 'php', 'asp', 'js', 'css', 'json', 'html', 'c', 'cpp', 'md', 'py', 'omf'];
|
||||
$exts['video'] = ['mp4', 'webm', 'mkv', 'mov', 'flv', 'blv', 'avi', 'wmv', 'm3u8', 'rm', 'ts', 'rmvb'];
|
||||
$exts['video'] = ['mp4', 'webm', 'mkv', 'mov', 'flv', 'blv', 'avi', 'wmv', 'm3u8', 'rm', '3gp', 'rmvb'];
|
||||
$exts['zip'] = ['zip', 'rar', '7z', 'gz', 'tar'];
|
||||
|
||||
$constStr = [
|
||||
|
|
|
@ -611,6 +611,7 @@ class Onedrive {
|
|||
texta[i].style.height = texta[i].scrollHeight + \'px\';
|
||||
}
|
||||
</script>';
|
||||
$tmptoken['Driver'] = get_class($this);
|
||||
$tmptoken['refresh_token'] = $refresh_token;
|
||||
$tmptoken['token_expires'] = time()+7*24*60*60;
|
||||
$response = setConfigResponse( setConfig($tmptoken, $this->disktag) );
|
||||
|
@ -733,7 +734,7 @@ class Onedrive {
|
|||
<label><input type="checkbox" name="NT_Drive_custom" onclick="document.getElementById(\'NT_secret\').style.display=(this.checked?\'\':\'none\');">' . getconstStr('CustomIdSecret') . '</label><br>
|
||||
<div id="NT_secret" style="display:none;margin:10px 35px">
|
||||
<a href="https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps" target="_blank">' . getconstStr('GetSecretIDandKEY') . '</a><br>
|
||||
return_uri(Reply URL):<br>https://scfonedrive.github.io/<br>
|
||||
return_uri(Reply URL):<br>' . $this->redirect_uri . '<br>
|
||||
client_id:<input type="text" name="NT_client_id" style="width:100%" placeholder="a1b2c345-90ab-cdef-ghij-klmnopqrstuv"><br>
|
||||
client_secret:<input type="text" name="NT_client_secret" style="width:100%"><br>
|
||||
</div>
|
||||
|
@ -743,7 +744,7 @@ class Onedrive {
|
|||
<label><input type="checkbox" name="CN_Drive_custom" onclick="document.getElementById(\'CN_secret\').style.display=(this.checked?\'\':\'none\');">' . getconstStr('CustomIdSecret') . '</label><br>
|
||||
<div id="CN_secret" style="display:none;margin:10px 35px">
|
||||
<a href="https://portal.azure.cn/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps" target="_blank">' . getconstStr('GetSecretIDandKEY') . '</a><br>
|
||||
return_uri(Reply URL):<br>https://scfonedrive.github.io/<br>
|
||||
return_uri(Reply URL):<br>' . $this->redirect_uri . '<br>
|
||||
client_id:<input type="text" name="CN_client_id" style="width:100%" placeholder="a1b2c345-90ab-cdef-ghij-klmnopqrstuv"><br>
|
||||
client_secret:<input type="text" name="CN_client_secret" style="width:100%"><br>
|
||||
</div>
|
||||
|
|
17
index.php
17
index.php
|
@ -39,6 +39,22 @@ if (isset($_SERVER['USER'])&&$_SERVER['USER']==='qcloud') {
|
|||
//echo 'path:'. $path;
|
||||
$_GET = getGET();
|
||||
//echo '<pre>'. json_encode($_GET, JSON_PRETTY_PRINT).'</pre>';
|
||||
$re = main($path);
|
||||
$sendHeaders = array();
|
||||
foreach ($re['headers'] as $headerName => $headerVal) {
|
||||
header($headerName . ': ' . $headerVal, true);
|
||||
}
|
||||
http_response_code($re['statusCode']);
|
||||
if ($re['isBase64Encoded']) echo base64_decode($re['body']);
|
||||
else echo $re['body'];
|
||||
} elseif (isset($_SERVER['DOCUMENT_ROOT'])&&substr($_SERVER['DOCUMENT_ROOT'], 0, 13)==='/home/runner/') {
|
||||
include 'platform/Replit.php';
|
||||
|
||||
$path = getpath();
|
||||
//echo 'path:'. $path;
|
||||
$_GET = getGET();
|
||||
//echo '<pre>'. json_encode($_GET, JSON_PRETTY_PRINT).'</pre>';
|
||||
|
||||
$re = main($path);
|
||||
$sendHeaders = array();
|
||||
foreach ($re['headers'] as $headerName => $headerVal) {
|
||||
|
@ -56,7 +72,6 @@ if (isset($_SERVER['USER'])&&$_SERVER['USER']==='qcloud') {
|
|||
//echo 'path:'. $path;
|
||||
$_GET = getGET();
|
||||
//echo '<pre>'. json_encode($_GET, JSON_PRETTY_PRINT).'</pre>';
|
||||
|
||||
$re = main($path);
|
||||
$sendHeaders = array();
|
||||
foreach ($re['headers'] as $headerName => $headerVal) {
|
||||
|
|
|
@ -185,16 +185,16 @@ function install()
|
|||
if ($_GET['install1']) {
|
||||
//if ($_POST['admin']!='') {
|
||||
$tmp['timezone'] = $_COOKIE['timezone'];
|
||||
$AccessKeyID = getConfig('AccessKeyID');
|
||||
if ($AccessKeyID=='') {
|
||||
//$AccessKeyID = getConfig('AccessKeyID');
|
||||
//if ($AccessKeyID=='') {
|
||||
$AccessKeyID = $_POST['AccessKeyID'];
|
||||
$tmp['AccessKeyID'] = $AccessKeyID;
|
||||
}
|
||||
$AccessKeySecret = getConfig('AccessKeySecret');
|
||||
if ($AccessKeySecret=='') {
|
||||
//}
|
||||
//$AccessKeySecret = getConfig('AccessKeySecret');
|
||||
//if ($AccessKeySecret=='') {
|
||||
$AccessKeySecret = $_POST['AccessKeySecret'];
|
||||
$tmp['AccessKeySecret'] = $AccessKeySecret;
|
||||
}
|
||||
//}
|
||||
$response = setConfigResponse( SetbaseConfig($tmp, $_SERVER['accountId'], $_SERVER['region'], $_SERVER['service_name'], $_SERVER['function_name'], $AccessKeyID, $AccessKeySecret) );
|
||||
if (api_error($response)) {
|
||||
$html = api_error_msg($response);
|
||||
|
@ -229,12 +229,13 @@ language:<br>';
|
|||
$html .= '
|
||||
<label><input type="radio" name="language" value="'.$key1.'" '.($key1==$constStr['language']?'checked':'').' onclick="changelanguage(\''.$key1.'\')">'.$value1.'</label><br>';
|
||||
}
|
||||
if (getConfig('AccessKeyID')==''||getConfig('AccessKeySecret')=='') $html .= '
|
||||
<a href="https://usercenter.console.aliyun.com/?#/manage/ak" target="_blank">'.getconstStr('Create').' AccessKeyID & AccessKeySecret</a><br>
|
||||
<label>AccessKeyID:<input name="AccessKeyID" type="text" placeholder="" size=""></label><br>
|
||||
<label>AccessKeySecret:<input name="AccessKeySecret" type="text" placeholder="" size=""></label><br>';
|
||||
//if (getConfig('AccessKeyID')==''||getConfig('AccessKeySecret')=='')
|
||||
$html .= '
|
||||
<input type="submit" value="'.getconstStr('Submit').'">
|
||||
<a href="https://usercenter.console.aliyun.com/?#/manage/ak" target="_blank">' . getconstStr('Create') . ' AccessKeyID & AccessKeySecret</a><br>
|
||||
<label>AccessKeyID:<input name="AccessKeyID" type="text" placeholder="" size=""></label><br>
|
||||
<label>AccessKeySecret:<input name="AccessKeySecret" type="password" placeholder="" size=""></label><br>';
|
||||
$html .= '
|
||||
<input type="submit" value="' . getconstStr('Submit') . '">
|
||||
</form>
|
||||
<script>
|
||||
var nowtime= new Date();
|
||||
|
@ -253,7 +254,8 @@ language:<br>';
|
|||
}
|
||||
function notnull(t)
|
||||
{';
|
||||
if (getConfig('AccessKeyID')==''||getConfig('AccessKeySecret')=='') $html .= '
|
||||
//if (getConfig('AccessKeyID')==''||getConfig('AccessKeySecret')=='')
|
||||
$html .= '
|
||||
if (t.AccessKeyID.value==\'\') {
|
||||
alert(\'input AccessKeyID\');
|
||||
return false;
|
||||
|
@ -269,7 +271,7 @@ language:<br>';
|
|||
$title = getconstStr('SelectLanguage');
|
||||
return message($html, $title, 201);
|
||||
}
|
||||
$html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind');
|
||||
$html .= '<a href="?install0">' . getconstStr('ClickInstall').'</a>, ' . getconstStr('LogintoBind');
|
||||
$title = 'Install';
|
||||
return message($html, $title, 201);
|
||||
}
|
||||
|
@ -419,42 +421,27 @@ function setConfigResponse($response)
|
|||
return json_decode($response, true);
|
||||
}
|
||||
|
||||
function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
function OnekeyUpate($GitSource = 'Github', $auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
{
|
||||
$source = '/tmp/code.zip';
|
||||
$outPath = '/tmp/';
|
||||
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
if ($GitSource=='Github') {
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
} elseif ($GitSource=='HITGitlab') {
|
||||
$url = 'https://git.hit.edu.cn/' . $auth . '/' . $project . '/-/archive/' . urlencode($branch) . '/' . $project . '-' . urlencode($branch) . '.tar.gz';
|
||||
} else return json_encode(['ErrorMessage'=>'Git Source input Error!']);
|
||||
$tarfile = '/tmp/github.tar.gz';
|
||||
file_put_contents($tarfile, file_get_contents($url));
|
||||
$phar = new PharData($tarfile);
|
||||
$html = $phar->extractTo($outPath, null, true);//路径 要解压的文件 是否覆盖
|
||||
|
||||
// 获取解压出的目录名
|
||||
/*
|
||||
@ob_start();
|
||||
passthru('ls /tmp | grep '.$auth.'-'.$project.'',$stat);
|
||||
$html.='状态:' . $stat . '
|
||||
结果:
|
||||
';
|
||||
$archivefolder = ob_get_clean();
|
||||
if (substr($archivefolder,-1)==PHP_EOL) $archivefolder = substr($archivefolder, 0, -1);
|
||||
$outPath .= $archivefolder;
|
||||
$html.=htmlspecialchars($archivefolder);
|
||||
//return $html;
|
||||
*/
|
||||
$tmp = scandir($outPath);
|
||||
$name = $auth.'-'.$project;
|
||||
foreach ($tmp as $f) {
|
||||
if ( substr($f, 0, strlen($name)) == $name) {
|
||||
$outPath .= $f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$outPath = findIndexPath($outPath);
|
||||
|
||||
// 将目录中文件打包成zip
|
||||
$zip=new ZipArchive();
|
||||
$zip = new ZipArchive();
|
||||
if($zip->open($source, ZipArchive::CREATE)){
|
||||
addFileToZip($zip, $outPath); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
|
||||
$zip->close(); //关闭处理的zip文件
|
||||
|
@ -481,7 +468,7 @@ function addFileToZip($zip, $rootpath, $path = '')
|
|||
}
|
||||
}
|
||||
}
|
||||
@closedir($path);
|
||||
@closedir($handler);
|
||||
}
|
||||
|
||||
function myErrorHandler($errno, $errstr, $errfile, $errline) {
|
||||
|
@ -509,3 +496,52 @@ function myErrorHandler($errno, $errstr, $errfile, $errline) {
|
|||
function WaitFunction() {
|
||||
return true;
|
||||
}
|
||||
|
||||
function changeAuthKey() {
|
||||
if ($_POST['AccessKeyID']!=''&&$_POST['AccessKeySecret']!='') {
|
||||
$tmp['AccessKeyID'] = $_POST['AccessKeyID'];
|
||||
$tmp['AccessKeySecret'] = $_POST['AccessKeySecret'];
|
||||
$response = setConfigResponse( SetbaseConfig($tmp, $_SERVER['accountId'], $_SERVER['region'], $_SERVER['service_name'], $_SERVER['function_name'], $tmp['AccessKeyID'], $tmp['AccessKeySecret']) );
|
||||
if (api_error($response)) {
|
||||
$html = api_error_msg($response);
|
||||
$title = 'Error';
|
||||
return message($html, $title, 400);
|
||||
} else {
|
||||
$html = getconstStr('Success') . '
|
||||
<script>
|
||||
var i = 0;
|
||||
var uploadList = setInterval(function(){
|
||||
if (document.getElementById("dis").style.display=="none") {
|
||||
console.log(i++);
|
||||
} else {
|
||||
clearInterval(uploadList);
|
||||
location.href = "' . path_format($_SERVER['base_path'] . '/') . '";
|
||||
}
|
||||
}, 1000);
|
||||
</script>';
|
||||
return message($html, $title, 201, 1);
|
||||
}
|
||||
}
|
||||
$html = '
|
||||
<form action="" method="post" onsubmit="return notnull(this);">
|
||||
<a href="https://usercenter.console.aliyun.com/?#/manage/ak" target="_blank">' . getconstStr('Create') . ' AccessKeyID & AccessKeySecret</a><br>
|
||||
<label>AccessKeyID:<input name="AccessKeyID" type="text" placeholder="" size=""></label><br>
|
||||
<label>AccessKeySecret:<input name="AccessKeySecret" type="password" placeholder="" size=""></label><br>
|
||||
<input type="submit" value="' . getconstStr('Submit') . '">
|
||||
</form>
|
||||
<script>
|
||||
function notnull(t)
|
||||
{
|
||||
if (t.AccessKeyID.value==\'\') {
|
||||
alert(\'input AccessKeyID\');
|
||||
return false;
|
||||
}
|
||||
if (t.AccessKeySecret.value==\'\') {
|
||||
alert(\'input SecretKey\');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
</script>';
|
||||
return message($html, 'Change platform Auth token or key', 200);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
<?php
|
||||
// https://cloud.baidu.com/doc/CFC/s/jjwvz45ex
|
||||
// https://cloud.baidu.com/doc/CFC/s/2jwvz44ns
|
||||
|
||||
function printInput($event, $context)
|
||||
{
|
||||
|
@ -164,16 +166,16 @@ function install()
|
|||
}
|
||||
if ($_GET['install1']) {
|
||||
$tmp['timezone'] = $_COOKIE['timezone'];
|
||||
$SecretId = getConfig('SecretId');
|
||||
if ($SecretId=='') {
|
||||
//$SecretId = getConfig('SecretId');
|
||||
//if ($SecretId=='') {
|
||||
$SecretId = $_POST['SecretId'];
|
||||
$tmp['SecretId'] = $SecretId;
|
||||
}
|
||||
$SecretKey = getConfig('SecretKey');
|
||||
if ($SecretKey=='') {
|
||||
//}
|
||||
//$SecretKey = getConfig('SecretKey');
|
||||
//if ($SecretKey=='') {
|
||||
$SecretKey = $_POST['SecretKey'];
|
||||
$tmp['SecretKey'] = $SecretKey;
|
||||
}
|
||||
//}
|
||||
$response = setConfigResponse(SetbaseConfig($tmp, $SecretId, $SecretKey));
|
||||
if (api_error($response)) {
|
||||
$html = api_error_msg($response);
|
||||
|
@ -207,12 +209,13 @@ language:<br>';
|
|||
$html .= '
|
||||
<label><input type="radio" name="language" value="'.$key1.'" '.($key1==$constStr['language']?'checked':'').' onclick="changelanguage(\''.$key1.'\')">'.$value1.'</label><br>';
|
||||
}
|
||||
if (getConfig('SecretId')==''||getConfig('SecretKey')=='') $html .= '
|
||||
<a href="https://console.bce.baidu.com/iam/#/iam/accesslist" target="_blank">'.getconstStr('Create').' Access Key & Secret Key</a><br>
|
||||
<label>Access Key:<input name="SecretId" type="text" placeholder="" size=""></label><br>
|
||||
<label>Secret Key:<input name="SecretKey" type="text" placeholder="" size=""></label><br>';
|
||||
//if (getConfig('SecretId')==''||getConfig('SecretKey')=='')
|
||||
$html .= '
|
||||
<input type="submit" value="'.getconstStr('Submit').'">
|
||||
<a href="https://console.bce.baidu.com/iam/#/iam/accesslist" target="_blank">' . getconstStr('Create') . ' Access Key & Secret Key</a><br>
|
||||
<label>Access Key:<input name="SecretId" type="text" placeholder="" size=""></label><br>
|
||||
<label>Secret Key:<input name="SecretKey" type="password" placeholder="" size=""></label><br>';
|
||||
$html .= '
|
||||
<input type="submit" value="' . getconstStr('Submit') . '">
|
||||
</form>
|
||||
<script>
|
||||
var nowtime= new Date();
|
||||
|
@ -231,7 +234,8 @@ language:<br>';
|
|||
}
|
||||
function notnull(t)
|
||||
{';
|
||||
if (getConfig('SecretId')==''||getConfig('SecretKey')=='') $html .= '
|
||||
//if (getConfig('SecretId')==''||getConfig('SecretKey')=='')
|
||||
$html .= '
|
||||
if (t.SecretId.value==\'\') {
|
||||
alert(\'input Access Key\');
|
||||
return false;
|
||||
|
@ -374,29 +378,24 @@ function setConfigResponse($response)
|
|||
return json_decode( $response, true );
|
||||
}
|
||||
|
||||
function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
function OnekeyUpate($GitSource = 'Github', $auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
{
|
||||
$source = '/tmp/code.zip';
|
||||
$outPath = '/tmp/';
|
||||
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
if ($GitSource=='Github') {
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
} elseif ($GitSource=='HITGitlab') {
|
||||
$url = 'https://git.hit.edu.cn/' . $auth . '/' . $project . '/-/archive/' . urlencode($branch) . '/' . $project . '-' . urlencode($branch) . '.tar.gz';
|
||||
} else return json_encode(['FunctionBrn'=>$_SERVER['functionBrn'], 'code'=>'Git Source input Error!']);
|
||||
$tarfile = '/tmp/github.tar.gz';
|
||||
file_put_contents($tarfile, file_get_contents($url));
|
||||
$phar = new PharData($tarfile);
|
||||
$html = $phar->extractTo($outPath, null, true);//路径 要解压的文件 是否覆盖
|
||||
|
||||
// 获取包中目录名
|
||||
$tmp = scandir('phar://'.$tarfile);
|
||||
$name = $auth.'-'.$project;
|
||||
foreach ($tmp as $f) {
|
||||
if ( substr($f, 0, strlen($name)) == $name) {
|
||||
$outPath .= $f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 放入配置文件
|
||||
//file_put_contents($outPath . '/config.php', file_get_contents(__DIR__.'/../config.php'));
|
||||
// 获取解压出的目录名
|
||||
$outPath = findIndexPath($outPath);
|
||||
|
||||
// 将目录中文件打包成zip
|
||||
//$zip=new ZipArchive();
|
||||
|
@ -428,9 +427,60 @@ function addFileToZip($zip, $rootpath, $path = '')
|
|||
}
|
||||
}
|
||||
}
|
||||
@closedir($path);
|
||||
@closedir($handler);
|
||||
}
|
||||
|
||||
function WaitFunction() {
|
||||
return true;
|
||||
}
|
||||
|
||||
function changeAuthKey() {
|
||||
if ($_POST['SecretId']!=''&&$_POST['SecretKey']!='') {
|
||||
$SecretId = $_POST['SecretId'];
|
||||
$tmp['SecretId'] = $SecretId;
|
||||
$SecretKey = $_POST['SecretKey'];
|
||||
$tmp['SecretKey'] = $SecretKey;
|
||||
$response = setConfigResponse(SetbaseConfig($tmp, $SecretId, $SecretKey));
|
||||
if (api_error($response)) {
|
||||
$html = api_error_msg($response);
|
||||
$title = 'Error';
|
||||
return message($html, $title, 400);
|
||||
} else {
|
||||
$html = getconstStr('Success') . '
|
||||
<script>
|
||||
var i = 0;
|
||||
var uploadList = setInterval(function(){
|
||||
if (document.getElementById("dis").style.display=="none") {
|
||||
console.log(i++);
|
||||
} else {
|
||||
clearInterval(uploadList);
|
||||
location.href = "' . path_format($_SERVER['base_path'] . '/') . '";
|
||||
}
|
||||
}, 1000);
|
||||
</script>';
|
||||
return message($html, $title, 201, 1);
|
||||
}
|
||||
}
|
||||
$html = '
|
||||
<form action="" method="post" onsubmit="return notnull(this);">
|
||||
<a href="https://console.bce.baidu.com/iam/#/iam/accesslist" target="_blank">' . getconstStr('Create') . ' Access Key & Secret Key</a><br>
|
||||
<label>Access Key:<input name="SecretId" type="text" placeholder="" size=""></label><br>
|
||||
<label>Secret Key:<input name="SecretKey" type="password" placeholder="" size=""></label><br>
|
||||
<input type="submit" value="' . getconstStr('Submit') . '">
|
||||
</form>
|
||||
<script>
|
||||
function notnull(t)
|
||||
{
|
||||
if (t.SecretId.value==\'\') {
|
||||
alert(\'input Access Key\');
|
||||
return false;
|
||||
}
|
||||
if (t.SecretKey.value==\'\') {
|
||||
alert(\'input Secret Key\');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
</script>';
|
||||
return message($html, 'Change platform Auth token or key', 200);
|
||||
}
|
||||
|
|
|
@ -170,11 +170,8 @@ function install()
|
|||
$tmp['admin'] = $_POST['admin'];
|
||||
//$tmp['language'] = $_POST['language'];
|
||||
$tmp['timezone'] = $_COOKIE['timezone'];
|
||||
$APIKey = getConfig('APIKey');
|
||||
if ($APIKey=='') {
|
||||
$APIKey = $_POST['APIKey'];
|
||||
$tmp['APIKey'] = $APIKey;
|
||||
}
|
||||
$APIKey = $_POST['APIKey'];
|
||||
$tmp['APIKey'] = $APIKey;
|
||||
$HerokuappId = getConfig('HerokuappId');
|
||||
if ($HerokuappId=='') {
|
||||
$function_name = getConfig('function_name');
|
||||
|
@ -197,17 +194,27 @@ function install()
|
|||
if (api_error($response)) {
|
||||
$html = api_error_msg($response);
|
||||
$title = 'Error';
|
||||
return message($html, $title, 400);
|
||||
} else {
|
||||
return output('Jump
|
||||
$html = getconstStr('Success') . '
|
||||
<script>
|
||||
var expd = new Date();
|
||||
expd.setTime(expd.getTime()+1000);
|
||||
var expires = "expires="+expd.toGMTString();
|
||||
document.cookie=\'language=; path=/; \'+expires;
|
||||
</script>
|
||||
<meta http-equiv="refresh" content="3;URL=' . path_format($_SERVER['base_path'] . '/') . '">', 302);
|
||||
var status = "' . $response['DplStatus'] . '";
|
||||
var i = 0;
|
||||
var uploadList = setInterval(function(){
|
||||
if (document.getElementById("dis").style.display=="none") {
|
||||
console.log(i++);
|
||||
} else {
|
||||
clearInterval(uploadList);
|
||||
location.href = "' . path_format($_SERVER['base_path'] . '/') . '";
|
||||
}
|
||||
}, 1000);
|
||||
</script>';
|
||||
return message($html, $title, 201, 1);
|
||||
}
|
||||
return message($html, $title, 201);
|
||||
}
|
||||
}
|
||||
if ($_GET['install0']) {
|
||||
|
@ -218,9 +225,9 @@ language:<br>';
|
|||
$html .= '
|
||||
<label><input type="radio" name="language" value="'.$key1.'" '.($key1==$constStr['language']?'checked':'').' onclick="changelanguage(\''.$key1.'\')">'.$value1.'</label><br>';
|
||||
}
|
||||
if (getConfig('APIKey')=='') $html .= '
|
||||
<a href="https://dashboard.heroku.com/account" target="_blank">'.getconstStr('Create').' API Key</a><br>
|
||||
<label>API Key:<input name="APIKey" type="text" placeholder="" size=""></label><br>';
|
||||
$html .= '
|
||||
<a href="https://dashboard.heroku.com/account" target="_blank">' . getconstStr('Create') . ' API Key</a><br>
|
||||
<label>API Key:<input name="APIKey" type="password" placeholder="" size=""></label><br>';
|
||||
$html .= '
|
||||
<label>Set admin password:<input name="admin" type="password" placeholder="' . getconstStr('EnvironmentsDescription')['admin'] . '" size="' . strlen(getconstStr('EnvironmentsDescription')['admin']) . '"></label><br>';
|
||||
$html .= '
|
||||
|
@ -247,7 +254,7 @@ language:<br>';
|
|||
alert(\'input admin\');
|
||||
return false;
|
||||
}';
|
||||
if (getConfig('APIKey')=='') $html .= '
|
||||
$html .= '
|
||||
if (t.APIKey.value==\'\') {
|
||||
alert(\'input API Key\');
|
||||
return false;
|
||||
|
@ -333,10 +340,15 @@ function_name:' . $_SERVER['function_name'] . '<br>
|
|||
<button onclick="location.href = location.href;">'.getconstStr('Refresh').'</button>';
|
||||
}
|
||||
|
||||
function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
function OnekeyUpate($GitSource = 'Github', $auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
{
|
||||
//'https://github.com/qkqpttgf/OneManager-php/tarball/master/';
|
||||
$source = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
if ($GitSource=='Github') {
|
||||
//'https://github.com/qkqpttgf/OneManager-php/tarball/master/';
|
||||
$source = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
} elseif ($GitSource=='HITGitlab') {
|
||||
$source = 'https://git.hit.edu.cn/' . $auth . '/' . $project . '/-/archive/' . urlencode($branch) . '/' . $project . '-' . urlencode($branch) . '.tar.gz';
|
||||
} else return ['stat'=>403, 'body'=>json_encode(['id'=>'Error', 'message'=>'Git Source input Error!'])];
|
||||
|
||||
return updateHerokuapp(getConfig('HerokuappId'), getConfig('APIKey'), $source);
|
||||
}
|
||||
|
||||
|
@ -358,3 +370,48 @@ function WaitFunction($buildId = '') {
|
|||
return $response;
|
||||
}
|
||||
}
|
||||
|
||||
function changeAuthKey() {
|
||||
if ($_POST['APIKey']!='') {
|
||||
$APIKey = $_POST['APIKey'];
|
||||
$tmp['APIKey'] = $APIKey;
|
||||
$response = setConfigResponse( setHerokuConfig($tmp, getConfig('HerokuappId'), $APIKey) );
|
||||
if (api_error($response)) {
|
||||
$html = api_error_msg($response);
|
||||
$title = 'Error';
|
||||
return message($html, $title, 400);
|
||||
} else {
|
||||
$html = getconstStr('Success') . '
|
||||
<script>
|
||||
var status = "' . $response['DplStatus'] . '";
|
||||
var i = 0;
|
||||
var uploadList = setInterval(function(){
|
||||
if (document.getElementById("dis").style.display=="none") {
|
||||
console.log(i++);
|
||||
} else {
|
||||
clearInterval(uploadList);
|
||||
location.href = "' . path_format($_SERVER['base_path'] . '/') . '";
|
||||
}
|
||||
}, 1000);
|
||||
</script>';
|
||||
return message($html, $title, 201, 1);
|
||||
}
|
||||
}
|
||||
$html = '
|
||||
<form action="" method="post" onsubmit="return notnull(this);">
|
||||
<a href="https://dashboard.heroku.com/account" target="_blank">'.getconstStr('Create').' API Key</a><br>
|
||||
<label>API Key:<input name="APIKey" type="password" placeholder="" size=""></label><br>
|
||||
<input type="submit" value="' . getconstStr('Submit') . '">
|
||||
</form>
|
||||
<script>
|
||||
function notnull(t)
|
||||
{
|
||||
if (t.APIKey.value==\'\') {
|
||||
alert(\'input API Key\');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
</script>';
|
||||
return message($html, 'Change platform Auth token or key', 200);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
<?php
|
||||
// https://support.huaweicloud.com/api-functiongraph/functiongraph_06_0110.html
|
||||
// https://support.huaweicloud.com/api-functiongraph/functiongraph_06_0111.html
|
||||
|
||||
global $contextUserData;
|
||||
|
||||
function printInput($event, $context)
|
||||
|
@ -190,18 +193,9 @@ function install()
|
|||
if ($_GET['install1']) {
|
||||
//if ($_POST['admin']!='') {
|
||||
$tmp['timezone'] = $_COOKIE['timezone'];
|
||||
$tmp['HW_urn'] = getConfig('HW_urn');
|
||||
if ($tmp['HW_urn']=='') {
|
||||
$tmp['HW_urn'] = $_POST['HW_urn'];
|
||||
}
|
||||
$tmp['HW_key'] = getConfig('HW_key');
|
||||
if ($tmp['HW_key']=='') {
|
||||
$tmp['HW_key'] = $_POST['HW_key'];
|
||||
}
|
||||
$tmp['HW_secret'] = getConfig('HW_secret');
|
||||
if ($tmp['HW_secret']=='') {
|
||||
$tmp['HW_secret'] = $_POST['HW_secret'];
|
||||
}
|
||||
$tmp['HW_urn'] = $_POST['HW_urn'];
|
||||
$tmp['HW_key'] = $_POST['HW_key'];
|
||||
$tmp['HW_secret'] = $_POST['HW_secret'];
|
||||
$tmp['ONEMANAGER_CONFIG_SAVE'] = $_POST['ONEMANAGER_CONFIG_SAVE'];
|
||||
//$response = json_decode(SetbaseConfig($tmp, $HW_urn, $HW_name, $HW_pwd), true)['Response'];
|
||||
$response = setConfigResponse( SetbaseConfig($tmp, $tmp['HW_urn'], $tmp['HW_key'], $tmp['HW_secret']) );
|
||||
|
@ -243,13 +237,14 @@ language:<br>';
|
|||
$html .= '
|
||||
<label><input type="radio" name="language" value="'.$key1.'" '.($key1==$constStr['language']?'checked':'').' onclick="changelanguage(\''.$key1.'\')">'.$value1.'</label><br>';
|
||||
}
|
||||
if (getConfig('HW_urn')==''||getConfig('HW_key')==''||getConfig('HW_secret')=='') $html .= '
|
||||
//if (getConfig('HW_urn')==''||getConfig('HW_key')==''||getConfig('HW_secret')=='')
|
||||
$html .= '
|
||||
在函数代码操作页上方找到URN,鼠标放上去后显示URN,复制填入:<br>
|
||||
<label>URN:<input name="HW_urn" type="text" placeholder="" size=""></label><br>
|
||||
<a href="https://console.huaweicloud.com/iam/#/mine/accessKey" target="_blank">点击链接</a>,新增访问密钥,
|
||||
在下载的credentials.csv文件中找到对应信息,填入:<br>
|
||||
<label>Access Key Id:<input name="HW_key" type="text" placeholder="" size=""></label><br>
|
||||
<label>Secret Access Key:<input name="HW_secret" type="text" placeholder="" size=""></label><br>';
|
||||
<label>Secret Access Key:<input name="HW_secret" type="password" placeholder="" size=""></label><br>';
|
||||
$html .= '
|
||||
<label><input type="radio" name="ONEMANAGER_CONFIG_SAVE" value="" ' . ('file'==$contextUserData->getUserData('ONEMANAGER_CONFIG_SAVE')?'':'checked') . '>' . getconstStr('ONEMANAGER_CONFIG_SAVE_ENV') . '</label><br>
|
||||
<label><input type="radio" name="ONEMANAGER_CONFIG_SAVE" value="file" ' . ('file'==$contextUserData->getUserData('ONEMANAGER_CONFIG_SAVE')?'checked':'') . '>' . getconstStr('ONEMANAGER_CONFIG_SAVE_FILE') . '</label><br>';
|
||||
|
@ -273,7 +268,8 @@ language:<br>';
|
|||
}
|
||||
function notnull(t)
|
||||
{';
|
||||
if (getConfig('HW_urn')==''||getConfig('HW_key')==''||getConfig('HW_secret')=='') $html .= '
|
||||
//if (getConfig('HW_urn')==''||getConfig('HW_key')==''||getConfig('HW_secret')=='')
|
||||
$html .= '
|
||||
if (t.HW_urn.value==\'\') {
|
||||
alert(\'input URN\');
|
||||
return false;
|
||||
|
@ -433,27 +429,24 @@ function setConfigResponse($response)
|
|||
return json_decode( $response, true );
|
||||
}
|
||||
|
||||
function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
function OnekeyUpate($GitSource = 'Github', $auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
{
|
||||
$source = '/tmp/code.zip';
|
||||
$outPath = '/tmp/';
|
||||
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
if ($GitSource=='Github') {
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
} elseif ($GitSource=='HITGitlab') {
|
||||
$url = 'https://git.hit.edu.cn/' . $auth . '/' . $project . '/-/archive/' . urlencode($branch) . '/' . $project . '-' . urlencode($branch) . '.tar.gz';
|
||||
} else return json_encode(['error_code'=>'Error', 'error_msg'=>'Git Source input Error!']);
|
||||
$tarfile = '/tmp/github.tar.gz';
|
||||
file_put_contents($tarfile, file_get_contents($url));
|
||||
$phar = new PharData($tarfile);
|
||||
$html = $phar->extractTo($outPath, null, true);//路径 要解压的文件 是否覆盖
|
||||
|
||||
// 获取解压出的目录名
|
||||
$tmp = scandir($outPath);
|
||||
$name = $auth.'-'.$project;
|
||||
foreach ($tmp as $f) {
|
||||
if ( substr($f, 0, strlen($name)) == $name) {
|
||||
$outPath .= $f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$outPath = findIndexPath($outPath);
|
||||
|
||||
// 将目录中文件打包成zip
|
||||
//$zip=new ZipArchive();
|
||||
|
@ -485,9 +478,60 @@ function addFileToZip($zip, $rootpath, $path = '')
|
|||
}
|
||||
}
|
||||
}
|
||||
@closedir($path);
|
||||
@closedir($handler);
|
||||
}
|
||||
|
||||
function WaitFunction() {
|
||||
return true;
|
||||
}
|
||||
|
||||
function changeAuthKey() {
|
||||
if ($_POST['HW_key']!=''&&$_POST['HW_secret']!='') {
|
||||
$tmp['HW_key'] = $_POST['HW_key'];
|
||||
$tmp['HW_secret'] = $_POST['HW_secret'];
|
||||
$response = setConfigResponse( SetbaseConfig($tmp, getConfig('HW_urn'), $tmp['HW_key'], $tmp['HW_secret']) );
|
||||
if (api_error($response)) {
|
||||
$html = api_error_msg($response);
|
||||
$title = 'Error';
|
||||
return message($html, $title, 400);
|
||||
} else {
|
||||
$html = getconstStr('Success') . '
|
||||
<script>
|
||||
var status = "' . $response['DplStatus'] . '";
|
||||
var i = 0;
|
||||
var uploadList = setInterval(function(){
|
||||
if (document.getElementById("dis").style.display=="none") {
|
||||
console.log(i++);
|
||||
} else {
|
||||
clearInterval(uploadList);
|
||||
location.href = "' . path_format($_SERVER['base_path'] . '/') . '";
|
||||
}
|
||||
}, 1000);
|
||||
</script>';
|
||||
return message($html, $title, 201, 1);
|
||||
}
|
||||
}
|
||||
$html = '
|
||||
<form action="" method="post" onsubmit="return notnull(this);">
|
||||
<a href="https://console.huaweicloud.com/iam/#/mine/accessKey" target="_blank">点击链接</a>,新增访问密钥,
|
||||
在下载的credentials.csv文件中找到对应信息,填入:<br>
|
||||
<label>Access Key Id:<input name="HW_key" type="text" placeholder="" size=""></label><br>
|
||||
<label>Secret Access Key:<input name="HW_secret" type="password" placeholder="" size=""></label><br>
|
||||
<input type="submit" value="' . getconstStr('Submit') . '">
|
||||
</form>
|
||||
<script>
|
||||
function notnull(t)
|
||||
{
|
||||
if (t.HW_key.value==\'\') {
|
||||
alert(\'input Access Key Id\');
|
||||
return false;
|
||||
}
|
||||
if (t.HW_secret.value==\'\') {
|
||||
alert(\'input Secret Access Key\');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
</script>';
|
||||
return message($html, 'Change platform Auth token or key', 200);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
<?php
|
||||
// https://support.huaweicloud.com/api-functiongraph/functiongraph_06_0110.html
|
||||
// https://support.huaweicloud.com/api-functiongraph/functiongraph_06_0111.html
|
||||
|
||||
global $contextUserData;
|
||||
|
||||
function printInput($event, $context)
|
||||
|
@ -77,10 +80,8 @@ function GetPathSetting($event, $context)
|
|||
|
||||
function getConfig($str, $disktag = '')
|
||||
{
|
||||
|
||||
global $slash;
|
||||
$projectPath = splitlast(__DIR__, $slash)[0];
|
||||
$configPath = $projectPath . $slash . '.data' . $slash . 'config.php';
|
||||
$projectPath = splitlast(__DIR__, '/')[0];
|
||||
$configPath = $projectPath . '/.data/config.php';
|
||||
$s = file_get_contents($configPath);
|
||||
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
|
||||
if ($configs!='') {
|
||||
|
@ -105,9 +106,8 @@ function setConfig($arr, $disktag = '')
|
|||
{
|
||||
|
||||
if ($disktag=='') $disktag = $_SERVER['disktag'];
|
||||
global $slash;
|
||||
$projectPath = splitlast(__DIR__, $slash)[0];
|
||||
$configPath = $projectPath . $slash . '.data' . $slash . 'config.php';
|
||||
$projectPath = splitlast(__DIR__, '/')[0];
|
||||
$configPath = $projectPath . '/.data/config.php';
|
||||
$s = file_get_contents($configPath);
|
||||
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
|
||||
if ($configs!='') $envs = json_decode($configs, true);
|
||||
|
@ -204,18 +204,9 @@ function install()
|
|||
if ($_GET['install1']) {
|
||||
//if ($_POST['admin']!='') {
|
||||
$tmp['timezone'] = $_COOKIE['timezone'];
|
||||
$tmp['HW_urn'] = getConfig('HW_urn');
|
||||
if ($tmp['HW_urn']=='') {
|
||||
$tmp['HW_urn'] = $_POST['HW_urn'];
|
||||
}
|
||||
$tmp['HW_key'] = getConfig('HW_key');
|
||||
if ($tmp['HW_key']=='') {
|
||||
$tmp['HW_key'] = $_POST['HW_key'];
|
||||
}
|
||||
$tmp['HW_secret'] = getConfig('HW_secret');
|
||||
if ($tmp['HW_secret']=='') {
|
||||
$tmp['HW_secret'] = $_POST['HW_secret'];
|
||||
}
|
||||
$tmp['HW_urn'] = $_POST['HW_urn'];
|
||||
$tmp['HW_key'] = $_POST['HW_key'];
|
||||
$tmp['HW_secret'] = $_POST['HW_secret'];
|
||||
$tmp['ONEMANAGER_CONFIG_SAVE'] = $_POST['ONEMANAGER_CONFIG_SAVE'];
|
||||
//return message($html, $title, 201);
|
||||
$response = setConfigResponse( SetbaseConfig($tmp, $tmp['HW_urn'], $tmp['HW_key'], $tmp['HW_secret']) );
|
||||
|
@ -257,13 +248,14 @@ language:<br>';
|
|||
$html .= '
|
||||
<label><input type="radio" name="language" value="'.$key1.'" '.($key1==$constStr['language']?'checked':'').' onclick="changelanguage(\''.$key1.'\')">'.$value1.'</label><br>';
|
||||
}
|
||||
if (getConfig('HW_urn')==''||getConfig('HW_key')==''||getConfig('HW_secret')=='') $html .= '
|
||||
//if (getConfig('HW_urn')==''||getConfig('HW_key')==''||getConfig('HW_secret')=='')
|
||||
$html .= '
|
||||
在函数代码操作页上方找到URN,鼠标放上去后显示URN,复制填入:<br>
|
||||
<label>URN:<input name="HW_urn" type="text" placeholder="urn:fss:ap-XXXXXXXX:XXXXXXXXXXXXXXXXXXXXc01a1e9caXXX:function:default:XXXXX:latest" size=""></label><br>
|
||||
<a href="https://console.huaweicloud.com/iam/#/mine/accessKey" target="_blank">点击链接</a>,新增访问密钥,
|
||||
在下载的credentials.csv文件中找到对应信息,填入:<br>
|
||||
<label>Access Key Id:<input name="HW_key" type="text" placeholder="" size=""></label><br>
|
||||
<label>Secret Access Key:<input name="HW_secret" type="text" placeholder="" size=""></label><br>';
|
||||
<label>Secret Access Key:<input name="HW_secret" type="password" placeholder="" size=""></label><br>';
|
||||
$html .= '
|
||||
<label><input type="radio" name="ONEMANAGER_CONFIG_SAVE" value="" ' . ('file'==$contextUserData->getUserData('ONEMANAGER_CONFIG_SAVE')?'':'checked') . '>' . getconstStr('ONEMANAGER_CONFIG_SAVE_ENV') . '</label><br>
|
||||
<label><input type="radio" name="ONEMANAGER_CONFIG_SAVE" value="file" ' . ('file'==$contextUserData->getUserData('ONEMANAGER_CONFIG_SAVE')?'checked':'') . '>' . getconstStr('ONEMANAGER_CONFIG_SAVE_FILE') . '</label><br>';
|
||||
|
@ -287,17 +279,18 @@ language:<br>';
|
|||
}
|
||||
function notnull(t)
|
||||
{';
|
||||
if (getConfig('HW_urn')==''||getConfig('HW_key')==''||getConfig('HW_secret')=='') $html .= '
|
||||
//if (getConfig('HW_urn')==''||getConfig('HW_key')==''||getConfig('HW_secret')=='')
|
||||
$html .= '
|
||||
if (t.HW_urn.value==\'\') {
|
||||
alert(\'input URN\');
|
||||
return false;
|
||||
}
|
||||
if (t.HW_key.value==\'\') {
|
||||
alert(\'input name\');
|
||||
alert(\'input Access Key Id\');
|
||||
return false;
|
||||
}
|
||||
if (t.HW_secret.value==\'\') {
|
||||
alert(\'input pwd\');
|
||||
alert(\'input Secret Access Key\');
|
||||
return false;
|
||||
}';
|
||||
$html .= '
|
||||
|
@ -426,7 +419,6 @@ function updateEnvironment($Envs, $HW_urn, $HW_key, $HW_secret)
|
|||
|
||||
function SetbaseConfig($Envs, $HW_urn, $HW_key, $HW_secret)
|
||||
{
|
||||
global $slash;
|
||||
//echo json_encode($Envs,JSON_PRETTY_PRINT);
|
||||
if ($Envs['ONEMANAGER_CONFIG_SAVE'] == 'file') $envs = Array( 'ONEMANAGER_CONFIG_SAVE' => 'file' );
|
||||
else {
|
||||
|
@ -469,8 +461,8 @@ function SetbaseConfig($Envs, $HW_urn, $HW_key, $HW_secret)
|
|||
return $response;
|
||||
}
|
||||
|
||||
$projectPath = splitlast(__DIR__, $slash)[0];
|
||||
$configPath = $projectPath . $slash . '.data' . $slash . 'config.php';
|
||||
$projectPath = splitlast(__DIR__, '/')[0];
|
||||
$configPath = $projectPath . '/.data/config.php';
|
||||
$s = file_get_contents($configPath);
|
||||
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
|
||||
if ($configs!='') $tmp_env = json_decode($configs, true);
|
||||
|
@ -525,39 +517,24 @@ function setConfigResponse($response)
|
|||
return json_decode( $response, true );
|
||||
}
|
||||
|
||||
function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
function OnekeyUpate($GitSource = 'Github', $auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
{
|
||||
$source = '/tmp/code.zip';
|
||||
$outPath = '/tmp/';
|
||||
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
if ($GitSource=='Github') {
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
} elseif ($GitSource=='HITGitlab') {
|
||||
$url = 'https://git.hit.edu.cn/' . $auth . '/' . $project . '/-/archive/' . urlencode($branch) . '/' . $project . '-' . urlencode($branch) . '.tar.gz';
|
||||
} else return json_encode(['error_code'=>'Error', 'error_msg'=>'Git Source input Error!']);
|
||||
$tarfile = '/tmp/github.tar.gz';
|
||||
file_put_contents($tarfile, file_get_contents($url));
|
||||
$phar = new PharData($tarfile);
|
||||
$html = $phar->extractTo($outPath, null, true);//路径 要解压的文件 是否覆盖
|
||||
|
||||
// 获取解压出的目录名
|
||||
/*
|
||||
@ob_start();
|
||||
passthru('ls /tmp | grep '.$auth.'-'.$project.'',$stat);
|
||||
$html.='状态:' . $stat . '
|
||||
结果:
|
||||
';
|
||||
$archivefolder = ob_get_clean();
|
||||
if (substr($archivefolder,-1)==PHP_EOL) $archivefolder = substr($archivefolder, 0, -1);
|
||||
$outPath .= $archivefolder;
|
||||
$html.=htmlspecialchars($archivefolder);
|
||||
//return $html;
|
||||
*/
|
||||
$tmp = scandir($outPath);
|
||||
$name = $auth.'-'.$project;
|
||||
foreach ($tmp as $f) {
|
||||
if ( substr($f, 0, strlen($name)) == $name) {
|
||||
$outPath .= $f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$outPath = findIndexPath($outPath);
|
||||
|
||||
// 放入配置文件
|
||||
file_put_contents($outPath . '/.data/config.php', file_get_contents(__DIR__ . '/../.data/config.php'));
|
||||
|
@ -592,7 +569,7 @@ function addFileToZip($zip, $rootpath, $path = '')
|
|||
}
|
||||
}
|
||||
}
|
||||
@closedir($path);
|
||||
@closedir($handler);
|
||||
}
|
||||
|
||||
|
||||
|
@ -602,6 +579,7 @@ function addFileToZip($zip, $rootpath, $path = '')
|
|||
|
||||
|
||||
|
||||
|
||||
define("BasicDateFormat", "Ymd\THis\Z");
|
||||
define("Algorithm", "SDK-HMAC-SHA256");
|
||||
define("HeaderXDate", "X-Sdk-Date");
|
||||
|
@ -872,3 +850,54 @@ class Signer
|
|||
function WaitFunction() {
|
||||
return true;
|
||||
}
|
||||
|
||||
function changeAuthKey() {
|
||||
if ($_POST['HW_key']!=''&&$_POST['HW_secret']!='') {
|
||||
$tmp['HW_key'] = $_POST['HW_key'];
|
||||
$tmp['HW_secret'] = $_POST['HW_secret'];
|
||||
$response = setConfigResponse( SetbaseConfig($tmp, getConfig('HW_urn'), $tmp['HW_key'], $tmp['HW_secret']) );
|
||||
if (api_error($response)) {
|
||||
$html = api_error_msg($response);
|
||||
$title = 'Error';
|
||||
return message($html, $title, 400);
|
||||
} else {
|
||||
$html = getconstStr('Success') . '
|
||||
<script>
|
||||
var status = "' . $response['DplStatus'] . '";
|
||||
var i = 0;
|
||||
var uploadList = setInterval(function(){
|
||||
if (document.getElementById("dis").style.display=="none") {
|
||||
console.log(i++);
|
||||
} else {
|
||||
clearInterval(uploadList);
|
||||
location.href = "' . path_format($_SERVER['base_path'] . '/') . '";
|
||||
}
|
||||
}, 1000);
|
||||
</script>';
|
||||
return message($html, $title, 201, 1);
|
||||
}
|
||||
}
|
||||
$html = '
|
||||
<form action="" method="post" onsubmit="return notnull(this);">
|
||||
<a href="https://console.huaweicloud.com/iam/#/mine/accessKey" target="_blank">点击链接</a>,新增访问密钥,
|
||||
在下载的credentials.csv文件中找到对应信息,填入:<br>
|
||||
<label>Access Key Id:<input name="HW_key" type="text" placeholder="" size=""></label><br>
|
||||
<label>Secret Access Key:<input name="HW_secret" type="password" placeholder="" size=""></label><br>
|
||||
<input type="submit" value="' . getconstStr('Submit') . '">
|
||||
</form>
|
||||
<script>
|
||||
function notnull(t)
|
||||
{
|
||||
if (t.HW_key.value==\'\') {
|
||||
alert(\'input Access Key Id\');
|
||||
return false;
|
||||
}
|
||||
if (t.HW_secret.value==\'\') {
|
||||
alert(\'input Secret Access Key\');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
</script>';
|
||||
return message($html, 'Change platform Auth token or key', 200);
|
||||
}
|
||||
|
|
|
@ -312,19 +312,23 @@ function setConfigResponse($response)
|
|||
return json_decode($response, true);
|
||||
}
|
||||
|
||||
function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
function OnekeyUpate($GitSource = 'Github', $auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
{
|
||||
$slash = '/';
|
||||
if (strpos(__DIR__, ':')) $slash = '\\';
|
||||
global $slash;
|
||||
// __DIR__ is xxx/platform
|
||||
$projectPath = splitlast(__DIR__, $slash)[0];
|
||||
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
if ($GitSource=='Github') {
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
} elseif ($GitSource=='HITGitlab') {
|
||||
$url = 'https://git.hit.edu.cn/' . $auth . '/' . $project . '/-/archive/' . urlencode($branch) . '/' . $project . '-' . urlencode($branch) . '.tar.gz';
|
||||
} else return 0;
|
||||
$tarfile = $projectPath . $slash .'github.tar.gz';
|
||||
$githubfile = file_get_contents($url);
|
||||
if (!$githubfile) return 0;
|
||||
file_put_contents($tarfile, $githubfile);
|
||||
|
||||
if (splitfirst(PHP_VERSION, '.')[0] > '5') {
|
||||
$phar = new PharData($tarfile); // need php5.3, 7, 8
|
||||
$phar->extractTo($projectPath, null, true);//路径 要解压的文件 是否覆盖
|
||||
|
@ -336,14 +340,7 @@ function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch =
|
|||
unlink($tarfile);
|
||||
|
||||
$outPath = '';
|
||||
$tmp = scandir($projectPath);
|
||||
$name = $auth . '-' . $project;
|
||||
foreach ($tmp as $f) {
|
||||
if ( substr($f, 0, strlen($name)) == $name) {
|
||||
$outPath = $projectPath . $slash . $f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
$outPath = findIndexPath($projectPath);
|
||||
//error_log1($outPath);
|
||||
if ($outPath=='') return 0;
|
||||
|
||||
|
@ -354,11 +351,12 @@ function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch =
|
|||
$tmp1['message'] = "Can not move " . $projectPath . $slash . '.data' . $slash . 'config.php' . " to " . $outPath . $slash . '.data' . $slash . 'config.php';
|
||||
return json_encode($tmp1);
|
||||
}
|
||||
return moveFolder($outPath, $projectPath, $slash);
|
||||
return moveFolder($outPath, $projectPath);
|
||||
}
|
||||
|
||||
function moveFolder($from, $to, $slash)
|
||||
function moveFolder($from, $to)
|
||||
{
|
||||
global $slash;
|
||||
if (substr($from, -1)==$slash) $from = substr($from, 0, -1);
|
||||
if (substr($to, -1)==$slash) $to = substr($to, 0, -1);
|
||||
if (!file_exists($to)) mkdir($to, 0777);
|
||||
|
@ -368,7 +366,7 @@ function moveFolder($from, $to, $slash)
|
|||
$fromfile = $from . $slash . $filename;
|
||||
$tofile = $to . $slash . $filename;
|
||||
if(is_dir($fromfile)){// 如果读取的某个对象是文件夹,则递归
|
||||
$response = moveFolder($fromfile, $tofile, $slash);
|
||||
$response = moveFolder($fromfile, $tofile);
|
||||
if (api_error(setConfigResponse($response))) return $response;
|
||||
}else{
|
||||
//if (file_exists($tofile)) unlink($tofile);
|
||||
|
@ -390,3 +388,7 @@ function moveFolder($from, $to, $slash)
|
|||
function WaitFunction() {
|
||||
return true;
|
||||
}
|
||||
|
||||
function changeAuthKey() {
|
||||
return message("Not need.", 'Change platform Auth token or key', 404);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,357 @@
|
|||
<?php
|
||||
|
||||
function getpath()
|
||||
{
|
||||
$_SERVER['firstacceptlanguage'] = strtolower(splitfirst(splitfirst($_SERVER['HTTP_ACCEPT_LANGUAGE'],';')[0],',')[0]);
|
||||
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
|
||||
if ($_SERVER['REQUEST_SCHEME']!='http'&&$_SERVER['REQUEST_SCHEME']!='https') {
|
||||
if ($_SERVER['HTTP_X_FORWARDED_PROTO']!='') {
|
||||
$tmp = explode(',', $_SERVER['HTTP_X_FORWARDED_PROTO'])[0];
|
||||
if ($tmp=='http'||$tmp=='https') $_SERVER['REQUEST_SCHEME'] = $tmp;
|
||||
}
|
||||
if ($_SERVER['HTTP_FLY_FORWARDED_PROTO']!='') $_SERVER['REQUEST_SCHEME'] = $_SERVER['HTTP_FLY_FORWARDED_PROTO'];
|
||||
}
|
||||
$_SERVER['host'] = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'];
|
||||
$_SERVER['referhost'] = explode('/', $_SERVER['HTTP_REFERER'])[2];
|
||||
$_SERVER['base_path'] = '/';
|
||||
if (isset($_SERVER['UNENCODED_URL'])) $_SERVER['REQUEST_URI'] = $_SERVER['UNENCODED_URL'];
|
||||
$p = strpos($_SERVER['REQUEST_URI'],'?');
|
||||
if ($p>0) $path = substr($_SERVER['REQUEST_URI'], 0, $p);
|
||||
else $path = $_SERVER['REQUEST_URI'];
|
||||
$path = path_format( substr($path, strlen($_SERVER['base_path'])) );
|
||||
return $path;
|
||||
}
|
||||
|
||||
function getGET()
|
||||
{
|
||||
if (!$_POST) {
|
||||
if (!!$HTTP_RAW_POST_DATA) {
|
||||
$tmpdata = $HTTP_RAW_POST_DATA;
|
||||
} else {
|
||||
$tmpdata = file_get_contents('php://input');
|
||||
}
|
||||
if (!!$tmpdata) {
|
||||
$postbody = explode("&", $tmpdata);
|
||||
foreach ($postbody as $postvalues) {
|
||||
$pos = strpos($postvalues,"=");
|
||||
$_POST[urldecode(substr($postvalues,0,$pos))]=urldecode(substr($postvalues,$pos+1));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isset($_SERVER['UNENCODED_URL'])) $_SERVER['REQUEST_URI'] = $_SERVER['UNENCODED_URL'];
|
||||
$p = strpos($_SERVER['REQUEST_URI'],'?');
|
||||
if ($p>0) {
|
||||
$getstr = substr($_SERVER['REQUEST_URI'], $p+1);
|
||||
$getstrarr = explode("&",$getstr);
|
||||
foreach ($getstrarr as $getvalues) {
|
||||
if ($getvalues != '') {
|
||||
$pos = strpos($getvalues, "=");
|
||||
//echo $pos;
|
||||
if ($pos > 0) {
|
||||
$getarry[urldecode(substr($getvalues, 0, $pos))] = urldecode(substr($getvalues, $pos + 1));
|
||||
} else {
|
||||
$getarry[urldecode($getvalues)] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isset($getarry)) {
|
||||
return $getarry;
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
function ReplitAPI($op, $key, $value = '') {
|
||||
//error_log1($op . '_' . $key . '_' . $value);
|
||||
$apiurl = getenv('REPLIT_DB_URL');
|
||||
//foreach (explode("\n", curl('GET', $apiurl . '?prefix')['body']) as $a) curl('DELETE', $apiurl . '/' . $a);
|
||||
if ($op === 'r') {
|
||||
if (!($config = getcache('REPLIT_CONFIG'))) {
|
||||
$config = json_decode(curl('GET', $apiurl . '/REPLIT_CONFIG')['body'], true);
|
||||
savecache('REPLIT_CONFIG', $config);
|
||||
}
|
||||
return ['stat'=>200, 'body'=>(is_array($config[$key])?json_encode($config[$key]):$config[$key])];
|
||||
} elseif ($op === 'w') {
|
||||
return curl('POST', $apiurl, 'REPLIT_CONFIG=' . $value, ["Content-Type"=>"application/x-www-form-urlencoded"]);
|
||||
} elseif ($op === 'd') {
|
||||
// not use
|
||||
return curl('DELETE', $apiurl . '/' . $key);
|
||||
} else {
|
||||
return ['stat'=>500, 'body'=>'error option input to function ReplitAPI().'];
|
||||
}
|
||||
}
|
||||
|
||||
function getConfig($str, $disktag = '')
|
||||
{
|
||||
if (isInnerEnv($str)) {
|
||||
if ($disktag=='') $disktag = $_SERVER['disktag'];
|
||||
$env = json_decode(ReplitAPI('r', $disktag)['body'], true);
|
||||
if (isset($env[$str])) {
|
||||
if (isBase64Env($str)) return base64y_decode($env[$str]);
|
||||
else return $env[$str];
|
||||
}
|
||||
} else {
|
||||
if (isBase64Env($str)) return base64y_decode(ReplitAPI('r', $str)['body']);
|
||||
else return ReplitAPI('r', $str)['body'];
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
function setConfig($arr, $disktag = '')
|
||||
{
|
||||
if (!($envs = getcache('REPLIT_CONFIG'))) {
|
||||
$envs = json_decode(curl('GET', getenv('REPLIT_DB_URL') . '/REPLIT_CONFIG')['body'], true);
|
||||
savecache('REPLIT_CONFIG', $envs);
|
||||
}
|
||||
if ($disktag=='') $disktag = $_SERVER['disktag'];
|
||||
$disktags = explode("|", getConfig('disktag'));
|
||||
$indisk = 0;
|
||||
$operatedisk = 0;
|
||||
foreach ($arr as $k => $v) {
|
||||
if (isCommonEnv($k)) {
|
||||
if (isBase64Env($k)) $envs[$k] = base64y_encode($v);
|
||||
else $envs[$k] = $v;
|
||||
} elseif (isInnerEnv($k)) {
|
||||
if (isBase64Env($k)) $envs[$disktag][$k] = base64y_encode($v);
|
||||
else $envs[$disktag][$k] = $v;
|
||||
$indisk = 1;
|
||||
} elseif ($k=='disktag_add') {
|
||||
array_push($disktags, $v);
|
||||
$operatedisk = 1;
|
||||
} elseif ($k=='disktag_del') {
|
||||
$disktags = array_diff($disktags, [ $v ]);
|
||||
$envs[$v] = '';
|
||||
$operatedisk = 1;
|
||||
} elseif ($k=='disktag_copy') {
|
||||
$newtag = $v . '_' . date("Ymd_His");
|
||||
$envs[$newtag] = $envs[$v];
|
||||
array_push($disktags, $newtag);
|
||||
$operatedisk = 1;
|
||||
} elseif ($k=='disktag_rename' || $k=='disktag_newname') {
|
||||
if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1;
|
||||
} else {
|
||||
$envs[$k] = $v;
|
||||
}
|
||||
}
|
||||
if ($indisk) {
|
||||
$diskconfig = $envs[$disktag];
|
||||
$diskconfig = array_filter($diskconfig, 'array_value_isnot_null');
|
||||
ksort($diskconfig);
|
||||
$envs[$disktag] = $diskconfig;
|
||||
}
|
||||
if ($operatedisk) {
|
||||
if (isset($arr['disktag_newname']) && $arr['disktag_newname']!='') {
|
||||
$tags = [];
|
||||
foreach ($disktags as $tag) {
|
||||
if ($tag==$arr['disktag_rename']) array_push($tags, $arr['disktag_newname']);
|
||||
else array_push($tags, $tag);
|
||||
}
|
||||
$envs['disktag'] = implode('|', $tags);
|
||||
$envs[$arr['disktag_newname']] = $envs[$arr['disktag_rename']];
|
||||
unset($envs[$arr['disktag_rename']]);
|
||||
} else {
|
||||
$disktags = array_unique($disktags);
|
||||
foreach ($disktags as $disktag) if ($disktag!='') $disktag_s .= $disktag . '|';
|
||||
if ($disktag_s!='') $envs['disktag'] = substr($disktag_s, 0, -1);
|
||||
else $envs['disktag'] = '';
|
||||
}
|
||||
}
|
||||
$envs = array_filter($envs, 'array_value_isnot_null');
|
||||
sortConfig($envs);
|
||||
$response = ReplitAPI('w', 'REPLIT_CONFIG', json_encode($envs));
|
||||
//error_log1(json_encode($arr, JSON_PRETTY_PRINT) . ' => tmp:' . json_encode($envs, JSON_PRETTY_PRINT));
|
||||
savecache('REPLIT_CONFIG', null, '', 0);
|
||||
if (api_error($response)) return ['stat'=>$response['stat'], 'body'=>$response['body'] . "<br>\nError in writting " . $key . "=" . $val];
|
||||
return $response;
|
||||
}
|
||||
|
||||
function install()
|
||||
{
|
||||
global $constStr;
|
||||
if ($_GET['install2']) {
|
||||
if ($_POST['admin']!='') {
|
||||
$tmp['admin'] = $_POST['admin'];
|
||||
//$tmp['language'] = $_COOKIE['language'];
|
||||
$tmp['timezone'] = $_COOKIE['timezone'];
|
||||
$response = setConfigResponse( setConfig($tmp) );
|
||||
if (api_error($response)) {
|
||||
$html = api_error_msg($response);
|
||||
$title = 'Error';
|
||||
return message($html, $title, 201);
|
||||
} else {
|
||||
return output('Jump
|
||||
<script>
|
||||
var expd = new Date();
|
||||
expd.setTime(expd.getTime()+(2*60*60*1000));
|
||||
var expires = "expires="+expd.toGMTString();
|
||||
document.cookie=\'language=; path=/; \'+expires;
|
||||
</script>
|
||||
<meta http-equiv="refresh" content="3;URL=' . path_format($_SERVER['base_path'] . '/') . '">', 302);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($_GET['install1']) {
|
||||
/*if (!ConfigWriteable()) {
|
||||
$html .= getconstStr('MakesuerWriteable');
|
||||
$title = 'Error';
|
||||
return message($html, $title, 201);
|
||||
}
|
||||
if (!RewriteEngineOn()) {
|
||||
$html .= getconstStr('MakesuerRewriteOn');
|
||||
$title = 'Error';
|
||||
return message($html, $title, 201);
|
||||
}*/
|
||||
$html .= '
|
||||
<form action="?install2" method="post" onsubmit="return notnull(this);">
|
||||
<input name="admin" type="password" placeholder="' . getconstStr('EnvironmentsDescription')['admin'] . '" size="' . strlen(getconstStr('EnvironmentsDescription')['admin']) . '"><br>
|
||||
<input id="submitbtn" type="submit" value="'.getconstStr('Submit').'">
|
||||
</form>
|
||||
<script>
|
||||
var nowtime= new Date();
|
||||
var timezone = 0-nowtime.getTimezoneOffset()/60;
|
||||
var expd = new Date();
|
||||
expd.setTime(expd.getTime()+(2*60*60*1000));
|
||||
var expires = "expires="+expd.toGMTString();
|
||||
document.cookie="timezone="+timezone+"; path=/; "+expires;
|
||||
function notnull(t)
|
||||
{
|
||||
if (t.admin.value==\'\') {
|
||||
alert(\''.getconstStr('SetAdminPassword').'\');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
</script>';
|
||||
$title = getconstStr('SetAdminPassword');
|
||||
return message($html, $title, 201);
|
||||
}
|
||||
if ($_GET['install0']) {
|
||||
$html .= '
|
||||
<form action="?install1" method="post">
|
||||
language:<br>';
|
||||
foreach ($constStr['languages'] as $key1 => $value1) {
|
||||
$html .= '
|
||||
<label><input type="radio" name="language" value="'.$key1.'" '.($key1==$constStr['language']?'checked':'').' onclick="changelanguage(\''.$key1.'\')">'.$value1.'</label><br>';
|
||||
}
|
||||
$html .= '
|
||||
<input type="submit" value="'.getconstStr('Submit').'">
|
||||
</form>
|
||||
<script>
|
||||
function changelanguage(str)
|
||||
{
|
||||
var expd = new Date();
|
||||
expd.setTime(expd.getTime()+(2*60*60*1000));
|
||||
var expires = "expires="+expd.toGMTString();
|
||||
document.cookie=\'language=\'+str+\'; path=/; \'+expires;
|
||||
location.href = location.href;
|
||||
}
|
||||
</script>';
|
||||
$title = getconstStr('SelectLanguage');
|
||||
return message($html, $title, 201);
|
||||
}
|
||||
|
||||
$title = 'Install';
|
||||
$html = '<a href="?install0">' . getconstStr('ClickInstall') . '</a>, ' . getconstStr('LogintoBind');
|
||||
return message($html, $title, 201);
|
||||
}
|
||||
|
||||
function ConfigWriteable()
|
||||
{
|
||||
$t = md5( md5(time()).rand(1000,9999) );
|
||||
$r = setConfig([ 'tmp' => $t ]);
|
||||
$tmp = getConfig('tmp');
|
||||
setConfig([ 'tmp' => '' ]);
|
||||
if ($tmp == $t) return true;
|
||||
if ($r) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
function api_error($response)
|
||||
{
|
||||
return !($response['stat']==200||$response['stat']==204||$response['stat']==404);
|
||||
//return isset($response['message']);
|
||||
}
|
||||
|
||||
function api_error_msg($response)
|
||||
{
|
||||
return '<pre>'. json_encode($response, JSON_PRETTY_PRINT).'</pre>' . '<br>
|
||||
<button onclick="location.href = location.href;">'.getconstStr('Refresh').'</button>';
|
||||
}
|
||||
|
||||
function setConfigResponse($response)
|
||||
{
|
||||
return $response;
|
||||
//return json_decode($response, true);
|
||||
}
|
||||
|
||||
function OnekeyUpate($GitSource = 'Github', $auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
{
|
||||
// __DIR__ is xxx/platform
|
||||
$projectPath = splitlast(__DIR__, '/')[0];
|
||||
|
||||
if ($GitSource=='Github') {
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
} elseif ($GitSource=='HITGitlab') {
|
||||
$url = 'https://git.hit.edu.cn/' . $auth . '/' . $project . '/-/archive/' . urlencode($branch) . '/' . $project . '-' . urlencode($branch) . '.tar.gz';
|
||||
} else return ['stat'=>500, 'body'=>'Git Source input Error!'];
|
||||
$tarfile = $projectPath . '/github.tar.gz';
|
||||
$githubfile = file_get_contents($url);
|
||||
if (!$githubfile) return ['stat'=>500, 'body'=>'download error from github.'];
|
||||
file_put_contents($tarfile, $githubfile);
|
||||
if (splitfirst(PHP_VERSION, '.')[0] > '5') {
|
||||
$phar = new PharData($tarfile); // need php5.3, 7, 8
|
||||
$phar->extractTo($projectPath, null, true);//路径 要解压的文件 是否覆盖
|
||||
} else {
|
||||
ob_start();
|
||||
passthru('tar -xzvf ' . $tarfile, $stat);
|
||||
ob_get_clean();
|
||||
}
|
||||
unlink($tarfile);
|
||||
|
||||
$outPath = '';
|
||||
$outPath = findIndexPath($projectPath);
|
||||
//error_log1($outPath);
|
||||
if ($outPath=='') return ['stat'=>500, 'body'=>'can\'t find folder after download from github.'];
|
||||
|
||||
return moveFolder($outPath, $projectPath);
|
||||
}
|
||||
|
||||
function moveFolder($from, $to)
|
||||
{
|
||||
if (substr($from, -1)=='/') $from = substr($from, 0, -1);
|
||||
if (substr($to, -1)=='/') $to = substr($to, 0, -1);
|
||||
if (!file_exists($to)) mkdir($to, 0777);
|
||||
$handler=opendir($from);
|
||||
while($filename=readdir($handler)) {
|
||||
if($filename != '.' && $filename != '..'){
|
||||
$fromfile = $from . '/' . $filename;
|
||||
$tofile = $to . '/' . $filename;
|
||||
if(is_dir($fromfile)){// 如果读取的某个对象是文件夹,则递归
|
||||
$response = moveFolder($fromfile, $tofile);
|
||||
if (api_error(setConfigResponse($response))) return $response;
|
||||
}else{
|
||||
if (file_exists($tofile)) unlink($tofile);
|
||||
$response = rename($fromfile, $tofile);
|
||||
if (!$response) {
|
||||
$tmp['code'] = "Move Failed";
|
||||
$tmp['message'] = "Can not move " . $fromfile . " to " . $tofile;
|
||||
return ['stat'=>500, 'body'=>json_encode($tmp)];
|
||||
}
|
||||
if (file_exists($fromfile)) unlink($fromfile);
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir($handler);
|
||||
rmdir($from);
|
||||
return ['stat'=>200, 'body'=>'success.'];
|
||||
}
|
||||
|
||||
function WaitFunction() {
|
||||
return true;
|
||||
}
|
||||
|
||||
function changeAuthKey() {
|
||||
return message("Not need.", 'Change platform Auth token or key', 404);
|
||||
}
|
|
@ -0,0 +1,379 @@
|
|||
<?php
|
||||
|
||||
function getpath()
|
||||
{
|
||||
$_SERVER['firstacceptlanguage'] = strtolower(splitfirst(splitfirst($_SERVER['HTTP_ACCEPT_LANGUAGE'],';')[0],',')[0]);
|
||||
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
|
||||
if ($_SERVER['REQUEST_SCHEME']!='http'&&$_SERVER['REQUEST_SCHEME']!='https') {
|
||||
if ($_SERVER['HTTP_X_FORWARDED_PROTO']!='') {
|
||||
$tmp = explode(',', $_SERVER['HTTP_X_FORWARDED_PROTO'])[0];
|
||||
if ($tmp=='http'||$tmp=='https') $_SERVER['REQUEST_SCHEME'] = $tmp;
|
||||
}
|
||||
if ($_SERVER['HTTP_FLY_FORWARDED_PROTO']!='') $_SERVER['REQUEST_SCHEME'] = $_SERVER['HTTP_FLY_FORWARDED_PROTO'];
|
||||
}
|
||||
$_SERVER['host'] = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'];
|
||||
$_SERVER['referhost'] = explode('/', $_SERVER['HTTP_REFERER'])[2];
|
||||
$_SERVER['base_path'] = '/';
|
||||
if (isset($_SERVER['UNENCODED_URL'])) $_SERVER['REQUEST_URI'] = $_SERVER['UNENCODED_URL'];
|
||||
$p = strpos($_SERVER['REQUEST_URI'],'?');
|
||||
if ($p>0) $path = substr($_SERVER['REQUEST_URI'], 0, $p);
|
||||
else $path = $_SERVER['REQUEST_URI'];
|
||||
$path = path_format( substr($path, strlen($_SERVER['base_path'])) );
|
||||
return $path;
|
||||
}
|
||||
|
||||
function getGET()
|
||||
{
|
||||
if (!$_POST) {
|
||||
if (!!$HTTP_RAW_POST_DATA) {
|
||||
$tmpdata = $HTTP_RAW_POST_DATA;
|
||||
} else {
|
||||
$tmpdata = file_get_contents('php://input');
|
||||
}
|
||||
if (!!$tmpdata) {
|
||||
$postbody = explode("&", $tmpdata);
|
||||
foreach ($postbody as $postvalues) {
|
||||
$pos = strpos($postvalues,"=");
|
||||
$_POST[urldecode(substr($postvalues,0,$pos))]=urldecode(substr($postvalues,$pos+1));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isset($_SERVER['UNENCODED_URL'])) $_SERVER['REQUEST_URI'] = $_SERVER['UNENCODED_URL'];
|
||||
$p = strpos($_SERVER['REQUEST_URI'],'?');
|
||||
if ($p>0) {
|
||||
$getstr = substr($_SERVER['REQUEST_URI'], $p+1);
|
||||
$getstrarr = explode("&",$getstr);
|
||||
foreach ($getstrarr as $getvalues) {
|
||||
if ($getvalues != '') {
|
||||
$pos = strpos($getvalues, "=");
|
||||
//echo $pos;
|
||||
if ($pos > 0) {
|
||||
$getarry[urldecode(substr($getvalues, 0, $pos))] = urldecode(substr($getvalues, $pos + 1));
|
||||
} else {
|
||||
$getarry[urldecode($getvalues)] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isset($getarry)) {
|
||||
return $getarry;
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
function ReplitAPI($op, $key, $value = '') {
|
||||
//error_log1($op . '_' . $key . '_' . $value);
|
||||
$apiurl = getenv('REPLIT_DB_URL');
|
||||
if ($op === 'r') {
|
||||
return curl('GET', $apiurl . '/' . $key);
|
||||
} elseif ($op === 'w') {
|
||||
return curl('POST', $apiurl, $key . '=' . $value, ["Content-Type"=>"application/x-www-form-urlencoded"]);
|
||||
} elseif ($op === 'd') {
|
||||
return curl('DELETE', $apiurl . '/' . $key);
|
||||
} else {
|
||||
return ['stat'=>500, 'body'=>'error option input to function ReplitAPI().'];
|
||||
}
|
||||
}
|
||||
|
||||
function getConfig($str, $disktag = '')
|
||||
{
|
||||
if (isInnerEnv($str)) {
|
||||
if ($disktag=='') $disktag = $_SERVER['disktag'];
|
||||
$env = json_decode(ReplitAPI('r', $disktag)['body'], true);
|
||||
if (isset($env[$str])) {
|
||||
if (isBase64Env($str)) return base64y_decode($env[$str]);
|
||||
else return $env[$str];
|
||||
}
|
||||
} else {
|
||||
if (isBase64Env($str)) return base64y_decode(ReplitAPI('r', $str)['body']);
|
||||
else return ReplitAPI('r', $str)['body'];
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
function setConfig($arr, $disktag = '')
|
||||
{
|
||||
if ($disktag=='') $disktag = $_SERVER['disktag'];
|
||||
$disktags = explode("|", getConfig('disktag'));
|
||||
if ($disktag!='') $diskconfig = json_decode(ReplitAPI('r', $disktag)['body'], true);
|
||||
$tmp = [];
|
||||
$indisk = 0;
|
||||
$operatedisk = 0;
|
||||
foreach ($arr as $k => $v) {
|
||||
if (isCommonEnv($k)) {
|
||||
if (isBase64Env($k)) $tmp[$k] = base64y_encode($v);
|
||||
else $tmp[$k] = $v;
|
||||
} elseif (isInnerEnv($k)) {
|
||||
if (isBase64Env($k)) $diskconfig[$k] = base64y_encode($v);
|
||||
else $diskconfig[$k] = $v;
|
||||
$indisk = 1;
|
||||
} elseif ($k=='disktag_add') {
|
||||
array_push($disktags, $v);
|
||||
$operatedisk = 1;
|
||||
} elseif ($k=='disktag_del') {
|
||||
$disktags = array_diff($disktags, [ $v ]);
|
||||
$tmp[$v] = '';
|
||||
$operatedisk = 1;
|
||||
} elseif ($k=='disktag_copy') {
|
||||
$newtag = $v . '_' . date("Ymd_His");
|
||||
$tmp[$newtag] = getConfig($v);
|
||||
array_push($disktags, $newtag);
|
||||
$operatedisk = 1;
|
||||
} elseif ($k=='disktag_rename' || $k=='disktag_newname') {
|
||||
if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1;
|
||||
} else {
|
||||
$tmp[$k] = json_encode($v);
|
||||
}
|
||||
}
|
||||
if ($indisk) {
|
||||
$diskconfig = array_filter($diskconfig, 'array_value_isnot_null');
|
||||
ksort($diskconfig);
|
||||
$tmp[$disktag] = json_encode($diskconfig);
|
||||
}
|
||||
if ($operatedisk) {
|
||||
if (isset($arr['disktag_newname']) && $arr['disktag_newname']!='') {
|
||||
$tags = [];
|
||||
foreach ($disktags as $tag) {
|
||||
if ($tag==$arr['disktag_rename']) array_push($tags, $arr['disktag_newname']);
|
||||
else array_push($tags, $tag);
|
||||
}
|
||||
$tmp['disktag'] = implode('|', $tags);
|
||||
$tmp[$arr['disktag_newname']] = getConfig($arr['disktag_rename']);
|
||||
$tmp[$arr['disktag_rename']] = null;
|
||||
} else {
|
||||
$disktags = array_unique($disktags);
|
||||
foreach ($disktags as $disktag) if ($disktag!='') $disktag_s .= $disktag . '|';
|
||||
if ($disktag_s!='') $tmp['disktag'] = substr($disktag_s, 0, -1);
|
||||
else $tmp['disktag'] = null;
|
||||
}
|
||||
}
|
||||
$response = null;
|
||||
foreach ($tmp as $key => $val) {
|
||||
if (!!$val) $response = ReplitAPI('w', $key, $val);
|
||||
else $response = ReplitAPI('d', $key);
|
||||
if (api_error($response)) return ['stat'=>$response['stat'], 'body'=>$response['body'] . "<br>\nError in writting " . $key . "=" . $val];
|
||||
}
|
||||
//error_log1(json_encode($arr, JSON_PRETTY_PRINT) . ' => tmp:' . json_encode($tmp, JSON_PRETTY_PRINT));
|
||||
return $response;
|
||||
}
|
||||
|
||||
function install()
|
||||
{
|
||||
global $constStr;
|
||||
if ($_GET['install2']) {
|
||||
if ($_POST['admin']!='') {
|
||||
$tmp['admin'] = $_POST['admin'];
|
||||
//$tmp['language'] = $_COOKIE['language'];
|
||||
$tmp['timezone'] = $_COOKIE['timezone'];
|
||||
$response = setConfigResponse( setConfig($tmp) );
|
||||
if (api_error($response)) {
|
||||
$html = api_error_msg($response);
|
||||
$title = 'Error';
|
||||
return message($html, $title, 201);
|
||||
} else {
|
||||
return output('Jump
|
||||
<script>
|
||||
var expd = new Date();
|
||||
expd.setTime(expd.getTime()+(2*60*60*1000));
|
||||
var expires = "expires="+expd.toGMTString();
|
||||
document.cookie=\'language=; path=/; \'+expires;
|
||||
</script>
|
||||
<meta http-equiv="refresh" content="3;URL=' . path_format($_SERVER['base_path'] . '/') . '">', 302);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($_GET['install1']) {
|
||||
if (!ConfigWriteable()) {
|
||||
$html .= getconstStr('MakesuerWriteable');
|
||||
$title = 'Error';
|
||||
return message($html, $title, 201);
|
||||
}
|
||||
/*if (!RewriteEngineOn()) {
|
||||
$html .= getconstStr('MakesuerRewriteOn');
|
||||
$title = 'Error';
|
||||
return message($html, $title, 201);
|
||||
}*/
|
||||
$html .= '<button id="checkrewritebtn" onclick="checkrewrite();">'.getconstStr('MakesuerRewriteOn').'</button>
|
||||
<div id="formdiv" style="display: none">
|
||||
<form action="?install2" method="post" onsubmit="return notnull(this);">
|
||||
<input name="admin" type="password" placeholder="' . getconstStr('EnvironmentsDescription')['admin'] . '" size="' . strlen(getconstStr('EnvironmentsDescription')['admin']) . '"><br>
|
||||
<input id="submitbtn" type="submit" value="'.getconstStr('Submit').'" disabled>
|
||||
</form>
|
||||
</div>
|
||||
<script>
|
||||
var nowtime= new Date();
|
||||
var timezone = 0-nowtime.getTimezoneOffset()/60;
|
||||
var expd = new Date();
|
||||
expd.setTime(expd.getTime()+(2*60*60*1000));
|
||||
var expires = "expires="+expd.toGMTString();
|
||||
document.cookie="timezone="+timezone+"; path=/; "+expires;
|
||||
function notnull(t)
|
||||
{
|
||||
if (t.admin.value==\'\') {
|
||||
alert(\''.getconstStr('SetAdminPassword').'\');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
function checkrewrite()
|
||||
{
|
||||
url=location.protocol + "//" + location.host;
|
||||
//if (location.port!="") url += ":" + location.port;
|
||||
url += location.pathname;
|
||||
if (url.substr(-1)!="/") url += "/";
|
||||
url += "app.json";
|
||||
url += "?" + Date.now();
|
||||
var xhr4 = new XMLHttpRequest();
|
||||
xhr4.open("GET", url);
|
||||
xhr4.setRequestHeader("x-requested-with","XMLHttpRequest");
|
||||
xhr4.send(null);
|
||||
xhr4.onload = function(e){
|
||||
console.log(xhr4.responseText+","+xhr4.status);
|
||||
if (xhr4.status==201) {
|
||||
document.getElementById("checkrewritebtn").style.display = "none";
|
||||
document.getElementById("submitbtn").disabled = false;
|
||||
document.getElementById("formdiv").style.display = "";
|
||||
} else {
|
||||
alert("' . getconstStr('MakesuerRewriteOn') . '?\nfalse\n\nUrl: " + url + "\nExpect http code 201, but received " + xhr4.status);
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>';
|
||||
$title = getconstStr('SetAdminPassword');
|
||||
return message($html, $title, 201);
|
||||
}
|
||||
if ($_GET['install0']) {
|
||||
$html .= '
|
||||
<form action="?install1" method="post">
|
||||
language:<br>';
|
||||
foreach ($constStr['languages'] as $key1 => $value1) {
|
||||
$html .= '
|
||||
<label><input type="radio" name="language" value="'.$key1.'" '.($key1==$constStr['language']?'checked':'').' onclick="changelanguage(\''.$key1.'\')">'.$value1.'</label><br>';
|
||||
}
|
||||
$html .= '
|
||||
<input type="submit" value="'.getconstStr('Submit').'">
|
||||
</form>
|
||||
<script>
|
||||
function changelanguage(str)
|
||||
{
|
||||
var expd = new Date();
|
||||
expd.setTime(expd.getTime()+(2*60*60*1000));
|
||||
var expires = "expires="+expd.toGMTString();
|
||||
document.cookie=\'language=\'+str+\'; path=/; \'+expires;
|
||||
location.href = location.href;
|
||||
}
|
||||
</script>';
|
||||
$title = getconstStr('SelectLanguage');
|
||||
return message($html, $title, 201);
|
||||
}
|
||||
|
||||
$title = 'Install';
|
||||
$html = '<a href="?install0">' . getconstStr('ClickInstall') . '</a>, ' . getconstStr('LogintoBind');
|
||||
return message($html, $title, 201);
|
||||
}
|
||||
|
||||
function ConfigWriteable()
|
||||
{
|
||||
$t = md5( md5(time()).rand(1000,9999) );
|
||||
$r = setConfig([ 'tmp' => $t ]);
|
||||
$tmp = getConfig('tmp');
|
||||
setConfig([ 'tmp' => '' ]);
|
||||
if ($tmp == $t) return true;
|
||||
if ($r) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
function api_error($response)
|
||||
{
|
||||
return !($response['stat']==200||$response['stat']==204||$response['stat']==404);
|
||||
//return isset($response['message']);
|
||||
}
|
||||
|
||||
function api_error_msg($response)
|
||||
{
|
||||
return '<pre>'. json_encode($response, JSON_PRETTY_PRINT).'</pre>' . '<br>
|
||||
<button onclick="location.href = location.href;">'.getconstStr('Refresh').'</button>';
|
||||
}
|
||||
|
||||
function setConfigResponse($response)
|
||||
{
|
||||
return $response;
|
||||
//return json_decode($response, true);
|
||||
}
|
||||
|
||||
function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
{
|
||||
$slash = '/';
|
||||
if (strpos(__DIR__, ':')) $slash = '\\';
|
||||
// __DIR__ is xxx/platform
|
||||
$projectPath = splitlast(__DIR__, $slash)[0];
|
||||
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
$tarfile = $projectPath . $slash .'github.tar.gz';
|
||||
$githubfile = file_get_contents($url);
|
||||
if (!$githubfile) return ['stat'=>500, 'body'=>'download error from github.'];
|
||||
file_put_contents($tarfile, $githubfile);
|
||||
if (splitfirst(PHP_VERSION, '.')[0] > '5') {
|
||||
$phar = new PharData($tarfile); // need php5.3, 7, 8
|
||||
$phar->extractTo($projectPath, null, true);//路径 要解压的文件 是否覆盖
|
||||
} else {
|
||||
ob_start();
|
||||
passthru('tar -xzvf ' . $tarfile, $stat);
|
||||
ob_get_clean();
|
||||
}
|
||||
unlink($tarfile);
|
||||
|
||||
$outPath = '';
|
||||
$tmp = scandir($projectPath);
|
||||
$name = $auth . '-' . $project;
|
||||
foreach ($tmp as $f) {
|
||||
if ( substr($f, 0, strlen($name)) == $name) {
|
||||
$outPath = $projectPath . $slash . $f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//error_log1($outPath);
|
||||
if ($outPath=='') return ['stat'=>500, 'body'=>'can\'t find folder after download from github.'];
|
||||
|
||||
return moveFolder($outPath, $projectPath, $slash);
|
||||
}
|
||||
|
||||
function moveFolder($from, $to, $slash)
|
||||
{
|
||||
if (substr($from, -1)==$slash) $from = substr($from, 0, -1);
|
||||
if (substr($to, -1)==$slash) $to = substr($to, 0, -1);
|
||||
if (!file_exists($to)) mkdir($to, 0777);
|
||||
$handler=opendir($from);
|
||||
while($filename=readdir($handler)) {
|
||||
if($filename != '.' && $filename != '..'){
|
||||
$fromfile = $from . $slash . $filename;
|
||||
$tofile = $to . $slash . $filename;
|
||||
if(is_dir($fromfile)){// 如果读取的某个对象是文件夹,则递归
|
||||
$response = moveFolder($fromfile, $tofile, $slash);
|
||||
if (api_error(setConfigResponse($response))) return $response;
|
||||
}else{
|
||||
if (file_exists($tofile)) unlink($tofile);
|
||||
$response = rename($fromfile, $tofile);
|
||||
if (!$response) {
|
||||
$tmp['code'] = "Move Failed";
|
||||
$tmp['message'] = "Can not move " . $fromfile . " to " . $tofile;
|
||||
return ['stat'=>500, 'body'=>json_encode($tmp)];
|
||||
}
|
||||
if (file_exists($fromfile)) unlink($fromfile);
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir($handler);
|
||||
rmdir($from);
|
||||
return ['stat'=>200, 'body'=>'success.'];
|
||||
}
|
||||
|
||||
function WaitFunction() {
|
||||
return true;
|
||||
}
|
||||
|
||||
function changeAuthKey() {
|
||||
return message("Not need.", 'Change platform Auth token or key', 404);
|
||||
}
|
|
@ -1,4 +1,7 @@
|
|||
<?php
|
||||
// https://cloud.tencent.com/document/product/583/33846
|
||||
// https://cloud.tencent.com/document/product/583/18581
|
||||
// https://cloud.tencent.com/document/product/583/18580
|
||||
|
||||
function printInput($event, $context)
|
||||
{
|
||||
|
@ -166,16 +169,24 @@ function install()
|
|||
var expires = "expires="+expd.toGMTString();
|
||||
document.cookie=\'language=; path=/; \'+expires;
|
||||
</script>
|
||||
<meta http-equiv="refresh" content="3;URL=' . $url . '">', 'Program updating', 201);
|
||||
<meta http-equiv="refresh" content="3;URL=' . $url . '">', 'Program updating', 201, 1);
|
||||
}
|
||||
return output('Jump
|
||||
return message(getconstStr('Success') . '
|
||||
<script>
|
||||
var expd = new Date();
|
||||
expd.setTime(expd.getTime()+(2*60*60*1000));
|
||||
var expires = "expires="+expd.toGMTString();
|
||||
document.cookie=\'language=; path=/; \'+expires;
|
||||
</script>
|
||||
<meta http-equiv="refresh" content="3;URL=' . path_format($_SERVER['base_path'] . '/') . '">', 302);
|
||||
var i = 0;
|
||||
var uploadList = setInterval(function(){
|
||||
if (document.getElementById("dis").style.display=="none") {
|
||||
console.log(i++);
|
||||
} else {
|
||||
clearInterval(uploadList);
|
||||
location.href = "' . path_format($_SERVER['base_path'] . '/') . '";
|
||||
}
|
||||
}, 1000);
|
||||
</script>', 201, 1);
|
||||
}
|
||||
if ($_GET['install1']) {
|
||||
$tmp['timezone'] = $_COOKIE['timezone'];
|
||||
|
@ -199,7 +210,7 @@ function install()
|
|||
if ($tmp['ONEMANAGER_CONFIG_SAVE'] == 'file') {
|
||||
$html = getconstStr('ONEMANAGER_CONFIG_SAVE_FILE') . '<br><a href="' . $_SERVER['base_path'] . '">' . getconstStr('Home') . '</a>';
|
||||
$title = 'Reinstall';
|
||||
return message($html, $title, 201);
|
||||
return message($html, $title, 201, 1);
|
||||
}
|
||||
$html .= '
|
||||
<form action="?install2" method="post" onsubmit="return notnull(this);">
|
||||
|
@ -217,7 +228,7 @@ function install()
|
|||
}
|
||||
</script>';
|
||||
$title = getconstStr('SetAdminPassword');
|
||||
return message($html, $title, 201);
|
||||
return message($html, $title, 201, 1);
|
||||
}
|
||||
}
|
||||
if ($_GET['install0']) {
|
||||
|
@ -228,10 +239,11 @@ language:<br>';
|
|||
$html .= '
|
||||
<label><input type="radio" name="language" value="'.$key1.'" '.($key1==$constStr['language']?'checked':'').' onclick="changelanguage(\''.$key1.'\')">'.$value1.'</label><br>';
|
||||
}
|
||||
if (getConfig('SecretId')==''||getConfig('SecretKey')=='') $html .= '
|
||||
//if (getConfig('SecretId')==''||getConfig('SecretKey')=='')
|
||||
$html .= '
|
||||
<a href="https://console.cloud.tencent.com/cam/capi" target="_blank">' . getconstStr('Create') . ' SecretId & SecretKey</a><br>
|
||||
<label>SecretId:<input name="SecretId" type="text" placeholder="" size=""></label><br>
|
||||
<label>SecretKey:<input name="SecretKey" type="text" placeholder="" size=""></label><br>';
|
||||
<label>SecretKey:<input name="SecretKey" type="password" placeholder="" size=""></label><br>';
|
||||
$html .= '
|
||||
<label><input type="radio" name="ONEMANAGER_CONFIG_SAVE" value="" ' . ('file'==getenv('ONEMANAGER_CONFIG_SAVE')?'':'checked') . '>' . getconstStr('ONEMANAGER_CONFIG_SAVE_ENV') . '</label><br>
|
||||
<label><input type="radio" name="ONEMANAGER_CONFIG_SAVE" value="file" ' . ('file'==getenv('ONEMANAGER_CONFIG_SAVE')?'checked':'') . '>' . getconstStr('ONEMANAGER_CONFIG_SAVE_FILE') . '</label><br>';
|
||||
|
@ -255,7 +267,8 @@ language:<br>';
|
|||
}
|
||||
function notnull(t)
|
||||
{';
|
||||
if (getConfig('SecretId')==''||getConfig('SecretKey')=='') $html .= '
|
||||
//if (getConfig('SecretId')==''||getConfig('SecretKey')=='')
|
||||
$html .= '
|
||||
if (t.SecretId.value==\'\') {
|
||||
alert(\'input SecretId\');
|
||||
return false;
|
||||
|
@ -547,29 +560,24 @@ function updateProgram($function_name, $Region, $Namespace, $SecretId, $SecretKe
|
|||
return curl('POST', 'https://'.$host, $payload, $headers)['body'];
|
||||
}
|
||||
|
||||
function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
function OnekeyUpate($GitSource = 'Github', $auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
{
|
||||
$source = '/tmp/code.zip';
|
||||
$outPath = '/tmp/';
|
||||
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
if ($GitSource=='Github') {
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
} elseif ($GitSource=='HITGitlab') {
|
||||
$url = 'https://git.hit.edu.cn/' . $auth . '/' . $project . '/-/archive/' . urlencode($branch) . '/' . $project . '-' . urlencode($branch) . '.tar.gz';
|
||||
} else return json_encode(['Response'=>['Error'=>['code'=>'Git Source input Error!']]]);
|
||||
$tarfile = '/tmp/github.tar.gz';
|
||||
file_put_contents($tarfile, file_get_contents($url));
|
||||
$phar = new PharData($tarfile);
|
||||
$html = $phar->extractTo($outPath, null, true);//路径 要解压的文件 是否覆盖
|
||||
|
||||
// 获取包中目录名
|
||||
$tmp = scandir('phar://'.$tarfile);
|
||||
$name = $auth.'-'.$project;
|
||||
foreach ($tmp as $f) {
|
||||
if ( substr($f, 0, strlen($name)) == $name) {
|
||||
$outPath .= $f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 放入配置文件
|
||||
file_put_contents($outPath . '/.data/config.php', file_get_contents(__DIR__ . '/../.data/config.php'));
|
||||
// 获取解压出的目录名
|
||||
$outPath = findIndexPath($outPath);
|
||||
|
||||
// 将目录中文件打包成zip
|
||||
//$zip=new ZipArchive();
|
||||
|
@ -601,5 +609,55 @@ function addFileToZip($zip, $rootpath, $path = '')
|
|||
}
|
||||
}
|
||||
}
|
||||
@closedir($path);
|
||||
@closedir($handler);
|
||||
}
|
||||
|
||||
function changeAuthKey() {
|
||||
if ($_POST['SecretId']!=''&&$_POST['SecretId']!='') {
|
||||
$tmp['SecretId'] = $_POST['SecretId'];
|
||||
$tmp['SecretKey'] = $_POST['SecretKey'];
|
||||
$response = setConfigResponse( SetbaseConfig($tmp, $_SERVER['function_name'], $_SERVER['Region'], $_SERVER['namespace'], $tmp['SecretId'], $tmp['SecretKey']) );
|
||||
if (api_error($response)) {
|
||||
$html = api_error_msg($response);
|
||||
$title = 'Error';
|
||||
return message($html, $title, 400);
|
||||
} else {
|
||||
$html = getconstStr('Success') . '
|
||||
<script>
|
||||
var status = "' . $response['DplStatus'] . '";
|
||||
var i = 0;
|
||||
var uploadList = setInterval(function(){
|
||||
if (document.getElementById("dis").style.display=="none") {
|
||||
console.log(i++);
|
||||
} else {
|
||||
clearInterval(uploadList);
|
||||
location.href = "' . path_format($_SERVER['base_path'] . '/') . '";
|
||||
}
|
||||
}, 1000);
|
||||
</script>';
|
||||
return message($html, $title, 201, 1);
|
||||
}
|
||||
}
|
||||
$html = '
|
||||
<form action="" method="post" onsubmit="return notnull(this);">
|
||||
<a href="https://console.cloud.tencent.com/cam/capi" target="_blank">' . getconstStr('Create') . ' SecretId & SecretKey</a><br>
|
||||
<label>SecretId:<input name="SecretId" type="text" placeholder="" size=""></label><br>
|
||||
<label>SecretKey:<input name="SecretKey" type="password" placeholder="" size=""></label><br>
|
||||
<input type="submit" value="' . getconstStr('Submit') . '">
|
||||
</form>
|
||||
<script>
|
||||
function notnull(t)
|
||||
{
|
||||
if (t.SecretId.value==\'\') {
|
||||
alert(\'input SecretId\');
|
||||
return false;
|
||||
}
|
||||
if (t.SecretKey.value==\'\') {
|
||||
alert(\'input SecretKey\');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
</script>';
|
||||
return message($html, 'Change platform Auth token or key', 200);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
<?php
|
||||
// https://cloud.tencent.com/document/product/583/33846
|
||||
// https://cloud.tencent.com/document/product/583/18581
|
||||
// https://cloud.tencent.com/document/product/583/18580
|
||||
|
||||
function printInput($event, $context)
|
||||
{
|
||||
|
@ -178,29 +181,31 @@ function install()
|
|||
var expires = "expires="+expd.toGMTString();
|
||||
document.cookie=\'language=; path=/; \'+expires;
|
||||
</script>
|
||||
<meta http-equiv="refresh" content="3;URL=' . $url . '">', 'Program updating', 201);
|
||||
<meta http-equiv="refresh" content="3;URL=' . $url . '">', 'Program updating', 201, 1);
|
||||
}
|
||||
return output('Jump
|
||||
return message(getconstStr('Success') . '
|
||||
<script>
|
||||
var expd = new Date();
|
||||
expd.setTime(expd.getTime()+(2*60*60*1000));
|
||||
var expires = "expires="+expd.toGMTString();
|
||||
document.cookie=\'language=; path=/; \'+expires;
|
||||
</script>
|
||||
<meta http-equiv="refresh" content="3;URL=' . path_format($_SERVER['base_path'] . '/') . '">', 302);
|
||||
var i = 0;
|
||||
var uploadList = setInterval(function(){
|
||||
if (document.getElementById("dis").style.display=="none") {
|
||||
console.log(i++);
|
||||
} else {
|
||||
clearInterval(uploadList);
|
||||
location.href = "' . path_format($_SERVER['base_path'] . '/') . '";
|
||||
}
|
||||
}, 1000);
|
||||
</script>', 201, 1);
|
||||
}
|
||||
if ($_GET['install1']) {
|
||||
$tmp['timezone'] = $_COOKIE['timezone'];
|
||||
$SecretId = getConfig('SecretId');
|
||||
if ($SecretId=='') {
|
||||
$SecretId = $_POST['SecretId'];
|
||||
$tmp['SecretId'] = $SecretId;
|
||||
}
|
||||
$SecretKey = getConfig('SecretKey');
|
||||
if ($SecretKey=='') {
|
||||
$SecretKey = $_POST['SecretKey'];
|
||||
$tmp['SecretKey'] = $SecretKey;
|
||||
}
|
||||
$SecretId = $_POST['SecretId'];
|
||||
$tmp['SecretId'] = $SecretId;
|
||||
$SecretKey = $_POST['SecretKey'];
|
||||
$tmp['SecretKey'] = $SecretKey;
|
||||
$tmp['ONEMANAGER_CONFIG_SAVE'] = $_POST['ONEMANAGER_CONFIG_SAVE'];
|
||||
$response = json_decode(SetbaseConfig($tmp, $_SERVER['function_name'], $_SERVER['Region'], $_SERVER['namespace'], $SecretId, $SecretKey), true)['Response'];
|
||||
if (api_error($response)) {
|
||||
|
@ -211,7 +216,7 @@ function install()
|
|||
if ($tmp['ONEMANAGER_CONFIG_SAVE'] != 'file') {
|
||||
$html = getconstStr('ONEMANAGER_CONFIG_SAVE_ENV') . '<br><a href="' . $_SERVER['base_path'] . '">' . getconstStr('Home') . '</a>';
|
||||
$title = 'Reinstall';
|
||||
return message($html, $title, 201);
|
||||
return message($html, $title, 201, 1);
|
||||
}
|
||||
$html .= '
|
||||
<form action="?install2" method="post" onsubmit="return notnull(this);">
|
||||
|
@ -229,7 +234,7 @@ function install()
|
|||
}
|
||||
</script>';
|
||||
$title = getconstStr('SetAdminPassword');
|
||||
return message($html, $title, 201);
|
||||
return message($html, $title, 201, 1);
|
||||
}
|
||||
}
|
||||
if ($_GET['install0']) {
|
||||
|
@ -240,10 +245,11 @@ language:<br>';
|
|||
$html .= '
|
||||
<label><input type="radio" name="language" value="'.$key1.'" '.($key1==$constStr['language']?'checked':'').' onclick="changelanguage(\''.$key1.'\')">'.$value1.'</label><br>';
|
||||
}
|
||||
if (getConfig('SecretId')==''||getConfig('SecretKey')=='') $html .= '
|
||||
//if (getConfig('SecretId')==''||getConfig('SecretKey')=='')
|
||||
$html .= '
|
||||
<a href="https://console.cloud.tencent.com/cam/capi" target="_blank">'.getconstStr('Create').' SecretId & SecretKey</a><br>
|
||||
<label>SecretId:<input name="SecretId" type="text" placeholder="" size=""></label><br>
|
||||
<label>SecretKey:<input name="SecretKey" type="text" placeholder="" size=""></label><br>';
|
||||
<label>SecretKey:<input name="SecretKey" type="password" placeholder="" size=""></label><br>';
|
||||
$html .= '
|
||||
<label><input type="radio" name="ONEMANAGER_CONFIG_SAVE" value="" ' . ('file'==getenv('ONEMANAGER_CONFIG_SAVE')?'':'checked') . '>' . getconstStr('ONEMANAGER_CONFIG_SAVE_ENV') . '</label><br>
|
||||
<label><input type="radio" name="ONEMANAGER_CONFIG_SAVE" value="file" ' . ('file'==getenv('ONEMANAGER_CONFIG_SAVE')?'checked':'') . '>' . getconstStr('ONEMANAGER_CONFIG_SAVE_FILE') . '</label><br>';
|
||||
|
@ -267,7 +273,8 @@ language:<br>';
|
|||
}
|
||||
function notnull(t)
|
||||
{';
|
||||
if (getConfig('SecretId')==''||getConfig('SecretKey')=='') $html .= '
|
||||
//if (getConfig('SecretId')==''||getConfig('SecretKey')=='')
|
||||
$html .= '
|
||||
if (t.SecretId.value==\'\') {
|
||||
alert(\'input SecretId\');
|
||||
return false;
|
||||
|
@ -588,27 +595,25 @@ function setConfigResponse($response)
|
|||
return json_decode( $response, true )['Response'];
|
||||
}
|
||||
|
||||
function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
function OnekeyUpate($GitSource = 'Github', $auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
{
|
||||
$source = '/tmp/code.zip';
|
||||
$outPath = '/tmp/';
|
||||
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
if ($GitSource=='Github') {
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
} elseif ($GitSource=='HITGitlab') {
|
||||
$url = 'https://git.hit.edu.cn/' . $auth . '/' . $project . '/-/archive/' . urlencode($branch) . '/' . $project . '-' . urlencode($branch) . '.tar.gz';
|
||||
} else return json_encode(['Response'=>['Error'=>['code'=>'Git Source input Error!']]]);
|
||||
$tarfile = '/tmp/github.tar.gz';
|
||||
file_put_contents($tarfile, file_get_contents($url));
|
||||
$phar = new PharData($tarfile);
|
||||
$html = $phar->extractTo($outPath, null, true);//路径 要解压的文件 是否覆盖
|
||||
|
||||
// 获取包中目录名
|
||||
$tmp = scandir('phar://'.$tarfile);
|
||||
$name = $auth.'-'.$project;
|
||||
foreach ($tmp as $f) {
|
||||
if ( substr($f, 0, strlen($name)) == $name) {
|
||||
$outPath .= $f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 获取解压出的目录名
|
||||
$outPath = findIndexPath($outPath);
|
||||
|
||||
// 放入配置文件
|
||||
file_put_contents($outPath . '/.data/config.php', file_get_contents(__DIR__ . '/../.data/config.php'));
|
||||
|
||||
|
@ -642,10 +647,60 @@ function addFileToZip($zip, $rootpath, $path = '')
|
|||
}
|
||||
}
|
||||
}
|
||||
@closedir($path);
|
||||
@closedir($handler);
|
||||
}
|
||||
|
||||
function WaitFunction() {
|
||||
if ( json_decode(getfunctioninfo($_SERVER['function_name'], $_SERVER['Region'], $_SERVER['namespace'], getConfig('SecretId'), getConfig('SecretKey')),true)['Response']['Status']=='Active' ) return true;
|
||||
else return false;
|
||||
}
|
||||
|
||||
function changeAuthKey() {
|
||||
if ($_POST['SecretId']!=''&&$_POST['SecretId']!='') {
|
||||
$tmp['SecretId'] = $_POST['SecretId'];
|
||||
$tmp['SecretKey'] = $_POST['SecretKey'];
|
||||
$response = setConfigResponse( SetbaseConfig($tmp, $_SERVER['function_name'], $_SERVER['Region'], $_SERVER['namespace'], $tmp['SecretId'], $tmp['SecretKey']) );
|
||||
if (api_error($response)) {
|
||||
$html = api_error_msg($response);
|
||||
$title = 'Error';
|
||||
return message($html, $title, 400);
|
||||
} else {
|
||||
$html = getconstStr('Success') . '
|
||||
<script>
|
||||
var status = "' . $response['DplStatus'] . '";
|
||||
var i = 0;
|
||||
var uploadList = setInterval(function(){
|
||||
if (document.getElementById("dis").style.display=="none") {
|
||||
console.log(i++);
|
||||
} else {
|
||||
clearInterval(uploadList);
|
||||
location.href = "' . path_format($_SERVER['base_path'] . '/') . '";
|
||||
}
|
||||
}, 1000);
|
||||
</script>';
|
||||
return message($html, $title, 201, 1);
|
||||
}
|
||||
}
|
||||
$html = '
|
||||
<form action="" method="post" onsubmit="return notnull(this);">
|
||||
<a href="https://console.cloud.tencent.com/cam/capi" target="_blank">' . getconstStr('Create') . ' SecretId & SecretKey</a><br>
|
||||
<label>SecretId:<input name="SecretId" type="text" placeholder="" size=""></label><br>
|
||||
<label>SecretKey:<input name="SecretKey" type="password" placeholder="" size=""></label><br>
|
||||
<input type="submit" value="' . getconstStr('Submit') . '">
|
||||
</form>
|
||||
<script>
|
||||
function notnull(t)
|
||||
{
|
||||
if (t.SecretId.value==\'\') {
|
||||
alert(\'input SecretId\');
|
||||
return false;
|
||||
}
|
||||
if (t.SecretKey.value==\'\') {
|
||||
alert(\'input SecretKey\');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
</script>';
|
||||
return message($html, 'Change platform Auth token or key', 200);
|
||||
}
|
||||
|
|
|
@ -151,6 +151,7 @@ function setConfig($arr, $disktag = '')
|
|||
}
|
||||
$envs = array_filter($envs, 'array_value_isnot_null');
|
||||
//ksort($envs);
|
||||
//sortConfig($envs);
|
||||
//error_log1(json_encode($arr, JSON_PRETTY_PRINT) . ' => tmp:' . json_encode($envs, JSON_PRETTY_PRINT));
|
||||
//echo json_encode($arr, JSON_PRETTY_PRINT) . ' => tmp:' . json_encode($envs, JSON_PRETTY_PRINT);
|
||||
return setVercelConfig($envs, getConfig('HerokuappId'), getConfig('APIKey'));
|
||||
|
@ -186,16 +187,24 @@ function install()
|
|||
$title = 'Error';
|
||||
return message($html, $title, 400);
|
||||
} else {
|
||||
/*$html = '<script>
|
||||
$html = getconstStr('Success') . '
|
||||
<script>
|
||||
var status = "' . $response['DplStatus'] . '";
|
||||
var i = 0;
|
||||
var expd = new Date();
|
||||
expd.setTime(expd.getTime()+1000);
|
||||
var expires = "expires="+expd.toGMTString();
|
||||
document.cookie=\'language=; path=/; \'+expires;
|
||||
var uploadList = setInterval(function(){
|
||||
if (document.getElementById("dis").style.display=="none") {
|
||||
console.log(i++);
|
||||
} else {
|
||||
clearInterval(uploadList);
|
||||
location.href = "' . path_format($_SERVER['base_path'] . '/') . '";
|
||||
}
|
||||
}, 1000);
|
||||
</script>';
|
||||
return message($html, $title, 201, 1);*/
|
||||
$data["dplId"] = $response['DplStatus'];
|
||||
return output(json_encode($data), 201);
|
||||
return message($html, $title, 201, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -207,10 +216,9 @@ language:<br>';
|
|||
$html .= '
|
||||
<label><input type="radio" name="language" value="'.$key1.'" '.($key1==$constStr['language']?'checked':'').' onclick="changelanguage(\''.$key1.'\')">'.$value1.'</label><br>';
|
||||
}
|
||||
//if (getConfig('APIKey')=='')
|
||||
$html .= '<br>
|
||||
<a href="https://vercel.com/account/tokens" target="_blank">' . getconstStr('Create') . ' token</a><br>
|
||||
<label>Token:<input name="APIKey" type="password" placeholder="" value="' . getConfig('APIKey') . '"></label><br>';
|
||||
<label>Token:<input name="APIKey" type="password" placeholder="" value=""></label><br>';
|
||||
$html .= '<br>
|
||||
<label>Set admin password:<input name="admin" type="password" placeholder="' . getconstStr('EnvironmentsDescription')['admin'] . '" size="' . strlen(getconstStr('EnvironmentsDescription')['admin']) . '"></label><br>';
|
||||
$html .= '
|
||||
|
@ -243,52 +251,7 @@ language:<br>';
|
|||
alert(\'input Token\');
|
||||
return false;
|
||||
}
|
||||
t.style.display = "none";
|
||||
errordiv.innerHTML = "' . getconstStr('Wait') . '";
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("POST", t.action);
|
||||
xhr.onload = function(e) {
|
||||
if (xhr.status==201) {
|
||||
var res = JSON.parse(xhr.responseText);
|
||||
getStatus(res.dplId, t.APIKey.value);
|
||||
} else {
|
||||
t.style.display = "";
|
||||
errordiv.innerHTML = xhr.status + "<br>" + xhr.responseText;
|
||||
}
|
||||
}
|
||||
xhr.send("admin=" + t.admin.value + "&APIKey=" + t.APIKey.value);
|
||||
|
||||
var x = "";
|
||||
var min = 0;
|
||||
function getStatus(id, VercelToken) {
|
||||
x += ".";
|
||||
min++;
|
||||
var xhr = new XMLHttpRequest();
|
||||
var url = "https://api.vercel.com/v11/now/deployments/" + id;
|
||||
xhr.open("GET", url);
|
||||
xhr.setRequestHeader("Authorization", "Bearer " + VercelToken);
|
||||
xhr.onload = function(e) {
|
||||
if (xhr.status==200) {
|
||||
var deployStat = JSON.parse(xhr.responseText).readyState;
|
||||
if (deployStat=="READY") {
|
||||
x = "";
|
||||
min = 0;
|
||||
errordiv.innerHTML = "Deploy done.";
|
||||
location.href = "/";
|
||||
} else {
|
||||
errordiv.innerHTML = deployStat + ", " + min + ".<br>' . getconstStr('Wait') . ' " + x;
|
||||
if (deployStat!=="ERROR") setTimeout(function() { getStatus(id, VercelToken) }, 1000);
|
||||
}
|
||||
} else {
|
||||
t.style.display = "";
|
||||
console.log(xhr.status);
|
||||
console.log(xhr.responseText);
|
||||
}
|
||||
}
|
||||
xhr.send(null);
|
||||
}
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
</script>';
|
||||
$title = getconstStr('SelectLanguage');
|
||||
|
@ -328,7 +291,7 @@ function copyFolder($from, $to)
|
|||
|
||||
function setVercelConfig($envs, $appId, $token)
|
||||
{
|
||||
//sortConfig($envs); cant view in vercel, not need sort.
|
||||
sortConfig($envs);
|
||||
$outPath = '/tmp/code/';
|
||||
$outPath_Api = $outPath . 'api/';
|
||||
$coderoot = __DIR__;
|
||||
|
@ -344,7 +307,8 @@ function setVercelConfig($envs, $appId, $token)
|
|||
|
||||
function VercelUpdate($appId, $token, $sourcePath = "")
|
||||
{
|
||||
$url = "https://api.vercel.com/v12/now/deployments";
|
||||
if (checkBuilding($appId, $token)) return '{"error":{"message":"Another building is in progress."}}';
|
||||
$url = "https://api.vercel.com/v13/deployments";
|
||||
$header["Authorization"] = "Bearer " . $token;
|
||||
$header["Content-Type"] = "application/json";
|
||||
$data["name"] = "OneManager";
|
||||
|
@ -366,6 +330,23 @@ function VercelUpdate($appId, $token, $sourcePath = "")
|
|||
return json_encode($result);
|
||||
}
|
||||
|
||||
function checkBuilding($projectId, $token)
|
||||
{
|
||||
$r = 0;
|
||||
$url = "https://api.vercel.com/v6/deployments/?projectId=" . $projectId;
|
||||
$header["Authorization"] = "Bearer " . $token;
|
||||
$header["Content-Type"] = "application/json";
|
||||
$response = curl("GET", $url, '', $header);
|
||||
//echo json_encode($response, JSON_PRETTY_PRINT) . " ,res<br>";
|
||||
$result = json_decode($response["body"], true);
|
||||
foreach ( $result['deployments'] as $deployment ) {
|
||||
if ($deployment['state']!=="READY") $r++;
|
||||
}
|
||||
return $r;
|
||||
//if ($r===0) return true;
|
||||
//else return false;
|
||||
}
|
||||
|
||||
function getEachFiles(&$file, $base, $path = "")
|
||||
{
|
||||
//if (substr($base, -1)=="/") $base = substr($base, 0, -1);
|
||||
|
@ -407,34 +388,33 @@ function setConfigResponse($response)
|
|||
return json_decode($response, true);
|
||||
}
|
||||
|
||||
function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
function OnekeyUpate($GitSource = 'Github', $auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
{
|
||||
$tmppath = '/tmp';
|
||||
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
if ($GitSource=='Github') {
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
} elseif ($GitSource=='HITGitlab') {
|
||||
$url = 'https://git.hit.edu.cn/' . $auth . '/' . $project . '/-/archive/' . urlencode($branch) . '/' . $project . '-' . urlencode($branch) . '.tar.gz';
|
||||
} else return json_encode(['error'=>['code'=>'Git Source input Error!']]);
|
||||
|
||||
$tarfile = $tmppath . '/github.tar.gz';
|
||||
$githubfile = file_get_contents($url);
|
||||
if (!$githubfile) return '{"error":{"message":"fail to download from github"}}';
|
||||
file_put_contents($tarfile, $githubfile);
|
||||
$phar = new PharData($tarfile); // need php5.3, 7, 8
|
||||
$phar->extractTo($tmppath, null, true);//路径 要解压的文件 是否覆盖
|
||||
file_put_contents($tarfile, file_get_contents($url));
|
||||
$phar = new PharData($tarfile);
|
||||
$html = $phar->extractTo($tmppath, null, true);//路径 要解压的文件 是否覆盖
|
||||
unlink($tarfile);
|
||||
|
||||
$outPath = '';
|
||||
$tmp = scandir($tmppath);
|
||||
$name = $auth . '-' . $project;
|
||||
// 获取解压出的目录名
|
||||
$outPath = findIndexPath($tmppath);
|
||||
|
||||
if ($outPath=='') return '{"error":{"message":"no outpath"}}';
|
||||
$name = $project . 'CODE';
|
||||
mkdir($tmppath . "/" . $name, 0777, 1);
|
||||
foreach ($tmp as $f) {
|
||||
if ( substr($f, 0, strlen($name)) == $name) {
|
||||
rename($tmppath . '/' . $f, $tmppath . "/" . $name . '/api');
|
||||
$outPath = $tmppath . "/" . $name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
rename($outPath, $tmppath . "/" . $name . '/api');
|
||||
$outPath = $tmppath . "/" . $name;
|
||||
//echo $outPath . "<br>";
|
||||
//error_log1($outPath);
|
||||
if ($outPath=='') return '{"error":{"message":"no outpath"}}';
|
||||
|
||||
// put in config
|
||||
$coderoot = __DIR__;
|
||||
|
@ -452,7 +432,7 @@ function WaitFunction($deployid = '') {
|
|||
}
|
||||
$header["Authorization"] = "Bearer " . getConfig('APIKey');
|
||||
$header["Content-Type"] = "application/json";
|
||||
$url = "https://api.vercel.com/v11/now/deployments/" . $deployid;
|
||||
$url = "https://api.vercel.com/v11/deployments/" . $deployid;
|
||||
$response = curl("GET", $url, "", $header);
|
||||
if ($response['stat']==200) {
|
||||
$result = json_decode($response['body'], true);
|
||||
|
@ -464,3 +444,48 @@ function WaitFunction($deployid = '') {
|
|||
return $response;
|
||||
}
|
||||
}
|
||||
|
||||
function changeAuthKey() {
|
||||
if ($_POST['APIKey']!='') {
|
||||
$APIKey = $_POST['APIKey'];
|
||||
$tmp['APIKey'] = $APIKey;
|
||||
$response = setConfigResponse( setVercelConfig($tmp, getConfig('HerokuappId'), $APIKey) );
|
||||
if (api_error($response)) {
|
||||
$html = api_error_msg($response);
|
||||
$title = 'Error';
|
||||
return message($html, $title, 400);
|
||||
} else {
|
||||
$html = getconstStr('Success') . '
|
||||
<script>
|
||||
var status = "' . $response['DplStatus'] . '";
|
||||
var i = 0;
|
||||
var uploadList = setInterval(function(){
|
||||
if (document.getElementById("dis").style.display=="none") {
|
||||
console.log(i++);
|
||||
} else {
|
||||
clearInterval(uploadList);
|
||||
location.href = "' . path_format($_SERVER['base_path'] . '/') . '";
|
||||
}
|
||||
}, 1000);
|
||||
</script>';
|
||||
return message($html, $title, 201, 1);
|
||||
}
|
||||
}
|
||||
$html = '
|
||||
<form action="" method="post" onsubmit="return notnull(this);">
|
||||
<a href="https://vercel.com/account/tokens" target="_blank">' . getconstStr('Create') . ' token</a><br>
|
||||
<label>Token:<input name="APIKey" type="password" placeholder="" value=""></label><br>
|
||||
<input type="submit" value="' . getconstStr('Submit') . '">
|
||||
</form>
|
||||
<script>
|
||||
function notnull(t)
|
||||
{
|
||||
if (t.APIKey.value==\'\') {
|
||||
alert(\'Input Token\');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
</script>';
|
||||
return message($html, 'Change platform Auth token or key', 200);
|
||||
}
|
||||
|
|
|
@ -163,9 +163,6 @@ function install()
|
|||
//$tmp['language'] = $_POST['language'];
|
||||
$tmp['timezone'] = $_COOKIE['timezone'];
|
||||
$APIKey = $_POST['APIKey'];
|
||||
//if ($APIKey=='') {
|
||||
// $APIKey = getConfig('APIKey');
|
||||
//}
|
||||
$tmp['APIKey'] = $APIKey;
|
||||
|
||||
$token = $APIKey;
|
||||
|
@ -184,16 +181,24 @@ function install()
|
|||
$title = 'Error';
|
||||
return message($html, $title, 400);
|
||||
} else {
|
||||
/*$html = '<script>
|
||||
$html = getconstStr('Success') . '
|
||||
<script>
|
||||
var status = "' . $response['DplStatus'] . '";
|
||||
var i = 0;
|
||||
var expd = new Date();
|
||||
expd.setTime(expd.getTime()+1000);
|
||||
var expires = "expires="+expd.toGMTString();
|
||||
document.cookie=\'language=; path=/; \'+expires;
|
||||
var uploadList = setInterval(function(){
|
||||
if (document.getElementById("dis").style.display=="none") {
|
||||
console.log(i++);
|
||||
} else {
|
||||
clearInterval(uploadList);
|
||||
location.href = "' . path_format($_SERVER['base_path'] . '/') . '";
|
||||
}
|
||||
}, 1000);
|
||||
</script>';
|
||||
return message($html, $title, 201, 1);*/
|
||||
$data["dplId"] = $response['DplStatus'];
|
||||
return output(json_encode($data), 201);
|
||||
return message($html, $title, 201, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -205,10 +210,9 @@ language:<br>';
|
|||
$html .= '
|
||||
<label><input type="radio" name="language" value="'.$key1.'" '.($key1==$constStr['language']?'checked':'').' onclick="changelanguage(\''.$key1.'\')">'.$value1.'</label><br>';
|
||||
}
|
||||
//if (getConfig('APIKey')=='')
|
||||
$html .= '<br>
|
||||
<a href="https://vercel.com/account/tokens" target="_blank">' . getconstStr('Create') . ' token</a><br>
|
||||
<label>Token:<input name="APIKey" type="password" placeholder="" value="' . getConfig('APIKey') . '"></label><br>';
|
||||
<label>Token:<input name="APIKey" type="password" placeholder="" value=""></label><br>';
|
||||
$html .= '<br>
|
||||
<label>Set admin password:<input name="admin" type="password" placeholder="' . getconstStr('EnvironmentsDescription')['admin'] . '" size="' . strlen(getconstStr('EnvironmentsDescription')['admin']) . '"></label><br>';
|
||||
$html .= '
|
||||
|
@ -241,52 +245,7 @@ language:<br>';
|
|||
alert(\'input Token\');
|
||||
return false;
|
||||
}
|
||||
t.style.display = "none";
|
||||
errordiv.innerHTML = "' . getconstStr('Wait') . '";
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open("POST", t.action);
|
||||
xhr.onload = function(e) {
|
||||
if (xhr.status==201) {
|
||||
var res = JSON.parse(xhr.responseText);
|
||||
getStatus(res.dplId, t.APIKey.value);
|
||||
} else {
|
||||
t.style.display = "";
|
||||
errordiv.innerHTML = xhr.status + "<br>" + xhr.responseText;
|
||||
}
|
||||
}
|
||||
xhr.send("admin=" + t.admin.value + "&APIKey=" + t.APIKey.value);
|
||||
|
||||
var x = "";
|
||||
var min = 0;
|
||||
function getStatus(id, VercelToken) {
|
||||
x += ".";
|
||||
min++;
|
||||
var xhr = new XMLHttpRequest();
|
||||
var url = "https://api.vercel.com/v11/now/deployments/" + id;
|
||||
xhr.open("GET", url);
|
||||
xhr.setRequestHeader("Authorization", "Bearer " + VercelToken);
|
||||
xhr.onload = function(e) {
|
||||
if (xhr.status==200) {
|
||||
var deployStat = JSON.parse(xhr.responseText).readyState;
|
||||
if (deployStat=="READY") {
|
||||
x = "";
|
||||
min = 0;
|
||||
errordiv.innerHTML = "Deploy done.";
|
||||
location.href = "/";
|
||||
} else {
|
||||
errordiv.innerHTML = deployStat + ", " + min + ".<br>' . getconstStr('Wait') . ' " + x;
|
||||
if (deployStat!=="ERROR") setTimeout(function() { getStatus(id, VercelToken) }, 1000);
|
||||
}
|
||||
} else {
|
||||
t.style.display = "";
|
||||
console.log(xhr.status);
|
||||
console.log(xhr.responseText);
|
||||
}
|
||||
}
|
||||
xhr.send(null);
|
||||
}
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
</script>';
|
||||
$title = getconstStr('SelectLanguage');
|
||||
|
@ -335,7 +294,8 @@ function setVercelConfig($envs, $appId, $token)
|
|||
|
||||
function VercelUpdate($appId, $token, $sourcePath = "")
|
||||
{
|
||||
$url = "https://api.vercel.com/v12/now/deployments";
|
||||
if (checkBuilding($appId, $token)) return '{"error":{"message":"Another building is in progress."}}';
|
||||
$url = "https://api.vercel.com/v13/deployments";
|
||||
$header["Authorization"] = "Bearer " . $token;
|
||||
$header["Content-Type"] = "application/json";
|
||||
$data["name"] = "OneManager";
|
||||
|
@ -357,6 +317,23 @@ function VercelUpdate($appId, $token, $sourcePath = "")
|
|||
return json_encode($result);
|
||||
}
|
||||
|
||||
function checkBuilding($projectId, $token)
|
||||
{
|
||||
$r = 0;
|
||||
$url = "https://api.vercel.com/v6/deployments/?projectId=" . $projectId;
|
||||
$header["Authorization"] = "Bearer " . $token;
|
||||
$header["Content-Type"] = "application/json";
|
||||
$response = curl("GET", $url, '', $header);
|
||||
//echo json_encode($response, JSON_PRETTY_PRINT) . " ,res<br>";
|
||||
$result = json_decode($response["body"], true);
|
||||
foreach ( $result['deployments'] as $deployment ) {
|
||||
if ($deployment['state']!=="READY") $r++;
|
||||
}
|
||||
return $r;
|
||||
//if ($r===0) return true;
|
||||
//else return false;
|
||||
}
|
||||
|
||||
function getEachFiles(&$file, $base, $path = "")
|
||||
{
|
||||
//if (substr($base, -1)=="/") $base = substr($base, 0, -1);
|
||||
|
@ -398,34 +375,33 @@ function setConfigResponse($response)
|
|||
return json_decode($response, true);
|
||||
}
|
||||
|
||||
function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
function OnekeyUpate($GitSource = 'Github', $auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||
{
|
||||
$tmppath = '/tmp';
|
||||
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
if ($GitSource=='Github') {
|
||||
// 从github下载对应tar.gz,并解压
|
||||
$url = 'https://github.com/' . $auth . '/' . $project . '/tarball/' . urlencode($branch) . '/';
|
||||
} elseif ($GitSource=='HITGitlab') {
|
||||
$url = 'https://git.hit.edu.cn/' . $auth . '/' . $project . '/-/archive/' . urlencode($branch) . '/' . $project . '-' . urlencode($branch) . '.tar.gz';
|
||||
} else return json_encode(['error'=>['code'=>'Git Source input Error!']]);
|
||||
|
||||
$tarfile = $tmppath . '/github.tar.gz';
|
||||
$githubfile = file_get_contents($url);
|
||||
if (!$githubfile) return '{"error":{"message":"fail to download from github"}}';
|
||||
file_put_contents($tarfile, $githubfile);
|
||||
$phar = new PharData($tarfile); // need php5.3, 7, 8
|
||||
$phar->extractTo($tmppath, null, true);//路径 要解压的文件 是否覆盖
|
||||
file_put_contents($tarfile, file_get_contents($url));
|
||||
$phar = new PharData($tarfile);
|
||||
$html = $phar->extractTo($tmppath, null, true);//路径 要解压的文件 是否覆盖
|
||||
unlink($tarfile);
|
||||
|
||||
$outPath = '';
|
||||
$tmp = scandir($tmppath);
|
||||
$name = $auth . '-' . $project;
|
||||
mkdir($tmppath . "/" . $name, 0777);
|
||||
foreach ($tmp as $f) {
|
||||
if ( substr($f, 0, strlen($name)) == $name) {
|
||||
rename($tmppath . '/' . $f, $tmppath . "/" . $name . '/api');
|
||||
$outPath = $tmppath . "/" . $name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 获取解压出的目录名
|
||||
$outPath = findIndexPath($tmppath);
|
||||
|
||||
if ($outPath=='') return '{"error":{"message":"no outpath"}}';
|
||||
$name = $project . 'CODE';
|
||||
mkdir($tmppath . "/" . $name, 0777, 1);
|
||||
rename($outPath, $tmppath . "/" . $name . '/api');
|
||||
$outPath = $tmppath . "/" . $name;
|
||||
//echo $outPath . "<br>";
|
||||
//error_log1($outPath);
|
||||
if ($outPath=='') return '{"error":{"message":"no outpath"}}';
|
||||
|
||||
return VercelUpdate(getConfig('HerokuappId'), getConfig('APIKey'), $outPath);
|
||||
}
|
||||
|
@ -438,7 +414,7 @@ function WaitFunction($deployid) {
|
|||
}
|
||||
$header["Authorization"] = "Bearer " . getConfig('APIKey');
|
||||
$header["Content-Type"] = "application/json";
|
||||
$url = "https://api.vercel.com/v11/now/deployments/" . $deployid;
|
||||
$url = "https://api.vercel.com/v11/deployments/" . $deployid;
|
||||
$response = curl("GET", $url, "", $header);
|
||||
if ($response['stat']==200) {
|
||||
$result = json_decode($response['body'], true);
|
||||
|
@ -450,3 +426,48 @@ function WaitFunction($deployid) {
|
|||
return $response;
|
||||
}
|
||||
}
|
||||
|
||||
function changeAuthKey() {
|
||||
if ($_POST['APIKey']!='') {
|
||||
$APIKey = $_POST['APIKey'];
|
||||
$tmp['APIKey'] = $APIKey;
|
||||
$response = json_decode(setVercelConfig($tmp, getConfig('HerokuappId'), $APIKey), true);
|
||||
if (api_error($response)) {
|
||||
$html = api_error_msg($response);
|
||||
$title = 'Error';
|
||||
return message($html, $title, 400);
|
||||
} else {
|
||||
$html = getconstStr('Success') . '
|
||||
<script>
|
||||
var status = "' . $response['DplStatus'] . '";
|
||||
var i = 0;
|
||||
var uploadList = setInterval(function(){
|
||||
if (document.getElementById("dis").style.display=="none") {
|
||||
console.log(i++);
|
||||
} else {
|
||||
clearInterval(uploadList);
|
||||
location.href = "' . path_format($_SERVER['base_path'] . '/') . '";
|
||||
}
|
||||
}, 1000);
|
||||
</script>';
|
||||
return message($html, $title, 201, 1);
|
||||
}
|
||||
}
|
||||
$html = '
|
||||
<form action="" method="post" onsubmit="return notnull(this);">
|
||||
<a href="https://vercel.com/account/tokens" target="_blank">' . getconstStr('Create') . ' token</a><br>
|
||||
<label>Token:<input name="APIKey" type="password" placeholder="" value=""></label><br>
|
||||
<input type="submit" value="' . getconstStr('Submit') . '">
|
||||
</form>
|
||||
<script>
|
||||
function notnull(t)
|
||||
{
|
||||
if (t.APIKey.value==\'\') {
|
||||
alert(\'Input Token\');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
</script>';
|
||||
return message($html, 'Change platform Auth token or key', 200);
|
||||
}
|
||||
|
|
93
readme.md
93
readme.md
|
@ -8,40 +8,6 @@
|
|||
|
||||
---
|
||||
|
||||
# Deploy to Heroku
|
||||
|
||||
### Official
|
||||
|
||||
https://heroku.com
|
||||
|
||||
### Demo
|
||||
|
||||
https://herooneindex.herokuapp.com/
|
||||
|
||||
### How to Install
|
||||
|
||||
> ~~Click the button [](https://heroku.com/deploy) to Deploy a new app~~(`"We couldn't deploy your app because the source code violates the Salesforce Acceptable Use and External-Facing Services Policy."`)
|
||||
>
|
||||
> Star this project, then Fork, create a app in Heroku, then turn to the Deploy tab, "Deployment method" via "Connect GitHub", select your github fork.
|
||||
|
||||
---
|
||||
|
||||
# Deploy to Glitch
|
||||
|
||||
### Official
|
||||
|
||||
https://glitch.com/
|
||||
|
||||
### Demo
|
||||
|
||||
https://onemanager.glitch.me/
|
||||
|
||||
### How to Install
|
||||
|
||||
[New Project] -> [Import form Github] -> paste "https://github.com/qkqpttgf/OneManager-php" , after done, [Show] -> [In a New Window].
|
||||
|
||||
---
|
||||
|
||||
# Deploy to Vercel
|
||||
|
||||
### Official
|
||||
|
@ -60,7 +26,64 @@
|
|||
|
||||
### How to Install
|
||||
|
||||
https://scfonedrive.github.io/Vercel/Deploy.html .
|
||||
> https://scfonedrive.github.io/Vercel/Deploy.html .
|
||||
|
||||
---
|
||||
|
||||
# Deploy to Replit
|
||||
|
||||
### Official
|
||||
|
||||
https://repl.it/
|
||||
https://replit.com/
|
||||
|
||||
### Demo
|
||||
|
||||
https://onemanager.qkqpttgf.repl.co/
|
||||
|
||||
### Notice
|
||||
|
||||
> `Import from Github` useing the `.replit` file in code files will cause an empty web page, may someone help me?
|
||||
|
||||
### How to Install
|
||||
|
||||
> 1. Click the "+" or "Create Repl", find template "PHP Web Server" (via input "php"), input a name for your project in "Title" or left it default, Click the "+ Create Repl".
|
||||
> 2. After done, input `git clone https://github.com/qkqpttgf/OneManager-php && mv -b OneManager-php/* ./ && mv -b OneManager-php/.[^.]* ./ && rm -rf *~ && rm -rf OneManager-php` to Console or Shell on the right, press "Enter" to run it.
|
||||
> 3. Click the green button "Run", it will show the web page on the right, you can open it in a new tab or window.
|
||||
|
||||
---
|
||||
|
||||
# Deploy to Heroku
|
||||
|
||||
### Official
|
||||
|
||||
https://heroku.com
|
||||
|
||||
### Demo
|
||||
|
||||
https://herooneindex.herokuapp.com/
|
||||
|
||||
### How to Install
|
||||
|
||||
> ~~Click the button [](https://heroku.com/deploy) to Deploy a new app~~(`"We couldn't deploy your app because the source code violates the Salesforce Acceptable Use and External-Facing Services Policy."`)
|
||||
>
|
||||
> Star this project, then Fork, create an app in Heroku, then turn to the Deploy tab, "Deployment method" via "Connect GitHub", select your github fork.
|
||||
|
||||
---
|
||||
|
||||
# Deploy to Glitch
|
||||
|
||||
### Official
|
||||
|
||||
https://glitch.com/
|
||||
|
||||
### Demo
|
||||
|
||||
https://onemanager.glitch.me/
|
||||
|
||||
### How to Install
|
||||
|
||||
[New Project] -> [Import form Github] -> paste "https://github.com/qkqpttgf/OneManager-php" , after done, [Show] -> [In a New Window].
|
||||
|
||||
---
|
||||
|
||||
|
|
69
readme_cn.md
69
readme_cn.md
|
@ -2,12 +2,59 @@
|
|||
|
||||
# 注意:
|
||||
|
||||
请关掉浏览器的翻译。
|
||||
|
||||
Releases只是当存档在用的,并不是最新代码。
|
||||
|
||||
请将设置中所有的设置项的说明都读一遍,有些问题就不用问了。
|
||||
|
||||
---
|
||||
|
||||
# 部署到 Vercel
|
||||
|
||||
### 官网
|
||||
|
||||
https://vercel.com/
|
||||
|
||||
### Demo
|
||||
|
||||
https://onemanager-php.vercel.app/
|
||||
|
||||
### 注意
|
||||
|
||||
> 1. 每次更改配置后都要等 30-50s 来确保部署成功;
|
||||
>
|
||||
> 2. Vercel 每天限制 100 次部署。
|
||||
|
||||
### 安装(英文)
|
||||
|
||||
https://scfonedrive.github.io/Vercel/Deploy.html
|
||||
|
||||
---
|
||||
|
||||
# 部署到 Replit
|
||||
|
||||
### 官网
|
||||
|
||||
https://repl.it/
|
||||
https://replit.com/
|
||||
|
||||
### Demo
|
||||
|
||||
https://onemanager.qkqpttgf.repl.co/
|
||||
|
||||
### 注意
|
||||
|
||||
> 直接`Import from Github`通过`.replit`文件指定php时,网页会空白,有人帮忙解决吗?
|
||||
|
||||
### 安装
|
||||
|
||||
> 1. 点右上的 "+" 或左上的 "+ Create Repl",template中输入php,点选"PHP Web Server",在"Title"里输入你想要的名称或者让它默认, 点下面的"+ Create Repl"。
|
||||
> 2. 结束后,在右边的Console或Shell里输入 `git clone https://github.com/qkqpttgf/OneManager-php && mv -b OneManager-php/* ./ && mv -b OneManager-php/.[^.]* ./ && rm -rf *~ && rm -rf OneManager-php` 敲回车运行。
|
||||
> 3. 点上方的绿色 "Run" 按钮,右边会显示一个网页,你要在新窗口打开它来安装,不然不能登录。
|
||||
|
||||
---
|
||||
|
||||
# 部署到 Heroku
|
||||
|
||||
### 官网
|
||||
|
@ -40,28 +87,6 @@
|
|||
|
||||
---
|
||||
|
||||
# 部署到 Vercel
|
||||
|
||||
### 官网
|
||||
|
||||
https://vercel.com/
|
||||
|
||||
### Demo
|
||||
|
||||
https://onemanager-php.vercel.app/
|
||||
|
||||
### 注意
|
||||
|
||||
> 1. 每次更改配置后都要等 30-50s 来确保部署成功;
|
||||
>
|
||||
> 2. Vercel 每天限制 100 次部署。
|
||||
|
||||
### 安装(英文)
|
||||
|
||||
https://scfonedrive.github.io/Vercel/Deploy.html
|
||||
|
||||
---
|
||||
|
||||
# 部署到腾讯无服务器云函数 Serverless Cloud Function (SCF)
|
||||
|
||||
### 官网
|
||||
|
|
|
@ -305,7 +305,7 @@
|
|||
<div>
|
||||
<div style="margin: 24px">
|
||||
<textarea id="url" title="url" rows="1" style="width: 100%; margin-top: 2px;" readonly><!--FileEncodeUrl--></textarea>
|
||||
<a href="<!--FileUrl-->"><ion-icon name="download" style="line-height: 16px;vertical-align: middle;"></ion-icon> <!--constStr@Download--></a>
|
||||
<a href="<!--FileEncodeUrl-->"><ion-icon name="download" style="line-height: 16px;vertical-align: middle;"></ion-icon> <!--constStr@Download--></a>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
|
@ -396,6 +396,7 @@
|
|||
<!--LoginEnd-->
|
||||
<script src="https://cdn.bootcss.com/jquery/2.1.1/jquery.min.js"></script>
|
||||
<script>
|
||||
<!--AdminStart-->
|
||||
window.onload = function ()
|
||||
{
|
||||
// 获取所有radios元素
|
||||
|
@ -448,6 +449,7 @@
|
|||
radios[i].setAttribute("currStatus", false);
|
||||
}
|
||||
}
|
||||
<!--AdminEnd-->
|
||||
function changelanguage(str)
|
||||
{
|
||||
if (str=='Language') str = '';
|
||||
|
@ -479,7 +481,10 @@
|
|||
<!--IsFileStart-->
|
||||
var $url = document.getElementById('url');
|
||||
if ($url) {
|
||||
$url.innerHTML = location.protocol + '//' + location.host + $url.innerHTML;
|
||||
//$url.innerHTML = location.protocol + '//' + location.host + $url.innerHTML;
|
||||
let url = location.href;
|
||||
url = url.substr(0, url.length-8);
|
||||
$url.innerHTML = url.replace(/&/g, '&amp;');
|
||||
$url.style.height = $url.scrollHeight + 'px';
|
||||
}
|
||||
<!--IsvideoFileStart-->
|
||||
|
|
|
@ -487,7 +487,7 @@
|
|||
<!--MdRequireStart--><link rel="stylesheet" href="//unpkg.zhimg.com/github-markdown-css@3.0.1/github-markdown.css">
|
||||
<script type="text/javascript" src="//unpkg.zhimg.com/marked@0.6.2/marked.min.js"></script><!--MdRequireEnd-->
|
||||
<!--GuestUploadStart--><script type="text/javascript" src="//cdn.bootcss.com/spark-md5/3.0.0/spark-md5.min.js"></script><!--GuestUploadEnd-->
|
||||
<!--AliyundriveUploadJsStart--><script src="https://cdn.bootcss.com/js-sha1/0.6.0/sha1.min.js"></script><!--AliyundriveUploadJsEnd-->
|
||||
<!--AliyundriveUploadJsStart--><script src="https://cdn.jsdelivr.net/npm/js-sha1@0.6.0/src/sha1.min.js"></script><!--AliyundriveUploadJsEnd-->
|
||||
<!--IsFileStart--><!--IspdfFileStart--><script src="//cdn.bootcss.com/pdf.js/2.3.200/pdf.min.js"></script><!--IspdfFileEnd--><!--IsFileEnd-->
|
||||
<!--ListEnd-->
|
||||
<script type="text/javascript">
|
||||
|
@ -785,6 +785,7 @@
|
|||
}
|
||||
function size_reformat(str) {
|
||||
if (str.substr(-1)==' ') str=str.substr(0,str.length-1);
|
||||
if (str.substr(-2)=='TB') num=str.substr(0,str.length-3)*1024*1024*1024*1024;
|
||||
if (str.substr(-2)=='GB') num=str.substr(0,str.length-3)*1024*1024*1024;
|
||||
if (str.substr(-2)=='MB') num=str.substr(0,str.length-3)*1024*1024;
|
||||
if (str.substr(-2)=='KB') num=str.substr(0,str.length-3)*1024;
|
||||
|
@ -1646,6 +1647,6 @@
|
|||
<!--EncryptedEnd-->
|
||||
</script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/ionicons@5.5.2/dist/ionicons/ionicons.js"></script>
|
||||
<!--LoginStart--><script src="https://cdn.bootcss.com/js-sha1/0.6.0/sha1.min.js"></script><!--LoginEnd-->
|
||||
<!--LoginStart--><script src="https://cdn.jsdelivr.net/npm/js-sha1@0.6.0/src/sha1.min.js"></script><!--LoginEnd-->
|
||||
<!--customScript-->
|
||||
</html>
|
||||
|
|
|
@ -558,7 +558,9 @@
|
|||
<!--IsFileStart-->
|
||||
var $url = document.getElementById('url');
|
||||
if ($url) {
|
||||
$url.innerHTML = location.protocol + '//' + location.host + $url.innerHTML;
|
||||
let url = location.href;
|
||||
url = url.substr(0, url.length-8);
|
||||
$url.innerHTML = url.replace(/&/g, '&amp;');
|
||||
$url.style.height = $url.scrollHeight + 'px';
|
||||
}
|
||||
<!--IsofficeFileStart-->
|
||||
|
|
|
@ -222,7 +222,7 @@
|
|||
<div style="margin: 12px 4px 4px; text-align: center">
|
||||
<div style="margin: 24px">
|
||||
<textarea id="url" title="url" rows="1" style="width: 100%; margin-top: 2px;" readonly><!--FileEncodeUrl--></textarea>
|
||||
<a href="<!--FileUrl-->"><ion-icon name="download" style="line-height: 16px;vertical-align: middle;"></ion-icon> <!--constStr@Download--></a>
|
||||
<a href="<!--FileEncodeUrl-->"><ion-icon name="download" style="line-height: 16px;vertical-align: middle;"></ion-icon> <!--constStr@Download--></a>
|
||||
</div>
|
||||
<div style="margin: 24px">
|
||||
<!--IsimgFileStart-->
|
||||
|
@ -717,7 +717,10 @@ return false;
|
|||
<!--IsFileStart-->
|
||||
var $url = document.getElementById('url');
|
||||
if ($url) {
|
||||
$url.innerHTML = location.protocol + '//' + location.host + $url.innerHTML;
|
||||
//$url.innerHTML = location.protocol + '//' + location.host + $url.innerHTML;
|
||||
let url = location.href;
|
||||
url = url.substr(0, url.length-8);
|
||||
$url.innerHTML = url.replace(/&/g, '&amp;');
|
||||
$url.style.height = $url.scrollHeight + 'px';
|
||||
}
|
||||
<!--IsofficeFileStart-->
|
||||
|
|
|
@ -479,7 +479,10 @@
|
|||
<!--IsFileStart-->
|
||||
var $url = document.getElementById('url');
|
||||
if ($url) {
|
||||
$url.innerHTML = location.protocol + '//' + location.host + $url.innerHTML;
|
||||
//$url.innerHTML = location.protocol + '//' + location.host + $url.innerHTML;
|
||||
let url = location.href;
|
||||
url = url.substr(0, url.length-8);
|
||||
$url.innerHTML = url.replace(/&/g, '&amp;');
|
||||
$url.style.height = $url.scrollHeight + 'px';
|
||||
}
|
||||
<!--IsofficeFileStart-->
|
||||
|
|
|
@ -179,7 +179,7 @@
|
|||
<div style="margin: 12px 4px 4px; text-align: center">
|
||||
<div style="margin: 24px">
|
||||
<textarea id="url" title="url" rows="1" style="width: 100%; margin-top: 2px;" readonly><!--FileEncodeUrl--></textarea>
|
||||
<a href="<!--FileUrl-->"><ion-icon name="download" style="line-height: 16px;vertical-align: middle;"></ion-icon> <!--constStr@Download--></a>
|
||||
<a href="<!--FileEncodeUrl-->"><ion-icon name="download" style="line-height: 16px;vertical-align: middle;"></ion-icon> <!--constStr@Download--></a>
|
||||
</div>
|
||||
<div style="margin: 24px">
|
||||
<!--IsimgFileStart-->
|
||||
|
@ -509,7 +509,10 @@
|
|||
<!--IsFileStart-->
|
||||
var $url = document.getElementById('url');
|
||||
if ($url) {
|
||||
$url.innerHTML = location.protocol + '//' + location.host + $url.innerHTML;
|
||||
//$url.innerHTML = location.protocol + '//' + location.host + $url.innerHTML;
|
||||
let url = location.href;
|
||||
url = url.substr(0, url.length-8);
|
||||
$url.innerHTML = url.replace(/&/g, '&amp;');
|
||||
$url.style.height = $url.scrollHeight + 'px';
|
||||
}
|
||||
<!--IsofficeFileStart-->
|
||||
|
|
|
@ -98,13 +98,9 @@
|
|||
<div class="mdui-drawer mdui-drawer-close" id="main-drawer">
|
||||
<div class="mdui-list" mdui-collapse="{accordion: true}">
|
||||
<!--LoginStart-->
|
||||
<li
|
||||
class="mdui-list-item mdui-ripple"
|
||||
href="javascript:void(0);"
|
||||
mdui-dialog="{target: '#login_input'}"
|
||||
>
|
||||
<a class="mdui-list-item-icon mdui-icon material-icons">account_circle</a
|
||||
><a class="mdui-list-item-content">登录</a>
|
||||
<li class="mdui-list-item mdui-ripple" href="?admin" >
|
||||
<a class="mdui-list-item-icon mdui-icon material-icons">account_circle</a>
|
||||
<a class="mdui-list-item-content" href="?admin">登录</a>
|
||||
</li>
|
||||
<!--LoginEnd-->
|
||||
<!--AdminStart-->
|
||||
|
|
|
@ -187,10 +187,10 @@
|
|||
</path></svg></div>
|
||||
<div style="padding:1px" id="top-div">
|
||||
<!--LoginStart-->
|
||||
<a class="login" href="?admin"><ion-icon name="ban-outline"></ion-icon></a><!--onclick="login();"-->
|
||||
<a class="login" href="?admin"><ion-icon name="add-circle-outline"></ion-icon></a><!--onclick="login();"-->
|
||||
<!--LoginEnd-->
|
||||
<!--AdminStart-->
|
||||
<li class="operate" id="opflow"><ion-icon name="ban-outline"></ion-icon><ul>
|
||||
<li class="operate" id="opflow"><ion-icon name="add-circle-outline"></ion-icon><ul>
|
||||
<!--IsFolderStart-->
|
||||
<li><a onclick="showdiv(event,'create','');"><ion-icon name="add-circle-outline"></ion-icon><!--constStr@Create--></a></li>
|
||||
<li><a onclick="showdiv(event,'encrypt','');"><ion-icon name="lock-closed-outline"></ion-icon><!--constStr@Encrypt--></a></li>
|
||||
|
@ -300,7 +300,9 @@
|
|||
var prePath = strFullPath.substring(0, pos);
|
||||
var width = window.innerWidth;
|
||||
// var postPath = strPath.substring(0, strPath.substr(1).indexOf('/') + 1);
|
||||
document.getElementById("url").value= prePath + "<!--FileEncodeUrl-->";
|
||||
let url = location.href;
|
||||
url = url.substr(0, url.length-8);
|
||||
document.getElementById("url").value= url;
|
||||
// document.getElementById("url").value= prePath + postPath + "<!--FileEncodeUrl-->";
|
||||
if(width < 495) {
|
||||
if(document.getElementById("office-a")) {
|
||||
|
@ -603,7 +605,7 @@
|
|||
<!--MdRequireStart--><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/github-markdown-css@4.0.0/github-markdown.min.css">
|
||||
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/marked@2.0.0/lib/marked.min.js"></script><!--MdRequireEnd-->
|
||||
<!--GuestUploadStart--><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/spark-md5@3.0.1/spark-md5.min.js"></script><!--GuestUploadEnd-->
|
||||
<!--AliyundriveUploadJsStart--><script src="https://cdn.jsdelivr.net/npm/sha1@1.1.1/sha1.min.js"></script><!--AliyundriveUploadJsEnd-->
|
||||
<!--AliyundriveUploadJsStart--><script src="https://cdn.jsdelivr.net/npm/js-sha1@0.6.0/src/sha1.min.js"></script><!--AliyundriveUploadJsEnd-->
|
||||
<!--IsFileStart--><!--IspdfFileStart--><script src="https://cdn.jsdelivr.net/npm/pdfjs-dist@2.8.335/build/pdf.min.js"></script><!--IspdfFileEnd--><!--IsFileEnd-->
|
||||
<!--ListEnd-->
|
||||
<script type="text/javascript">
|
||||
|
@ -642,11 +644,6 @@
|
|||
<!--LoginEnd-->
|
||||
<!--ListStart-->
|
||||
<!--IsFileStart-->
|
||||
var $url = document.getElementById('url').value;
|
||||
if ($url) {
|
||||
$url.innerHTML = location.protocol + '//' + location.host + $url.innerHTML;
|
||||
$url.style.height = $url.scrollHeight + 'px';
|
||||
}
|
||||
<!--IsofficeFileStart-->
|
||||
var $officearea=document.getElementById('office-a');
|
||||
if ($officearea) {
|
||||
|
@ -1807,6 +1804,6 @@ function size_format(num) {
|
|||
document.getElementById('password1').focus();
|
||||
<!--EncryptedEnd-->
|
||||
</script>
|
||||
<!--LoginStart--><script src="https://cdn.jsdelivr.net/npm/sha1@1.1.1/sha1.min.js"></script><!--LoginEnd-->
|
||||
<!--LoginStart--><script src="https://cdn.jsdelivr.net/npm/js-sha1@0.6.0/src/sha1.min.js"></script><!--LoginEnd-->
|
||||
<!--customScript-->
|
||||
</html>
|
||||
|
|
26
version
26
version
|
@ -1,7 +1,31 @@
|
|||
20211220-1100.42
|
||||
Add new platform Replit. Add a git source for update. sha1.js use jsdelivr cdn. fix some bugs.
|
||||
新增Replit平台。新增国内git源,以后国内可以选择从HIT源更新。sha1.js换成jsdelivr CDN。修复bug。
|
||||
|
||||
20211201-1602.41
|
||||
add a latent function, you can edit platform token(or API key) via '?setup=auth' when the token invalid, not need edit it in Environment(or Config Var) manually, (even in Vercel, config saved in file, and can't modiy it manually).
|
||||
新增隐藏功能,在平台操作代码的token或API key失效时,可以在 '?setup=auth' 修改它,不用去环境变量修改了(特别地,Vercel保存在代码中时都改不到)。
|
||||
20211129
|
||||
check if there is another deployment building when start deploy.
|
||||
Vercel部署时检测是否有另一个部署。
|
||||
20211104
|
||||
check if exist php-curl or not in php host and VPS.
|
||||
在VPS中检测是否有php-curl。
|
||||
20211021
|
||||
specialchars, fix: list folder, encrypt folder, preview files, rename, show in title, error on back link after login at specialchars folder, etc.
|
||||
针对特殊字符,解决目录的列表,目录的加密,文件的预览,目录与文件重命名,在网页标题的显示,在特殊字符处登录后跳转出错等问题。
|
||||
20211006
|
||||
oprate files by fileID, write a localStorage when login to anti CSRF.
|
||||
管理时对文件id操作,管理登录时写入一个localStorage预防CSRF。
|
||||
20210908
|
||||
add fileConduitSize&fileConduitCacheTime, little files can stream from program, better to show html/js as local file.
|
||||
增加fileConduitSize,fileConduitCacheTime,小文件可以从服务器中转,以对html/js本地化更好的支持。
|
||||
20210903
|
||||
add a latent function, you can run some command by '?setup=cmd', be care, please dont try "top", and set times by "ping -c 4".
|
||||
新增隐藏功能,你可以通过'?setup=cmd'来跑一些命令,注意不要试图跑top,另外ping请-c设置次数。
|
||||
20210820-1810.40
|
||||
because Vercel must redeploy after change Environment Variables, and it must <4k, so decide that, save config in code file. <font color=red>in Vercel, after update, please install again. if you want continue use Environment, please add a ( name: "ONEMANAGER_CONFIG_SAVE", value: "env" ) in Environment Variables in Project Settings before update.</font>
|
||||
因为Vercel修改环境变量也必须重新部署才生效,而且环境变量只能小于4k,所以决定将配置保存在代码文件中。<font color=red>升级更新后,用Vercel的请重新安装。如果还想继续使用环境变量,请在更新前,在Project Settings的Environment Variables中,新增一个( name: "ONEMANAGER_CONFIG_SAVE", value: "env" )的环境变量。</font>
|
||||
|
||||
20210817-2030.39
|
||||
fix bugs in Vercel. add wait function in operating. change update method in SCF. add payme in readme.
|
||||
修复一些Vercel上的bug。在操作完后添加等待功能,确认平台已经准备好。SCF的更新方式改变。在readme中添加讨饭链接。
|
||||
|
|
Loading…
Reference in New Issue