diff --git a/.replit b/.replit new file mode 100644 index 0000000..1dbf6d9 --- /dev/null +++ b/.replit @@ -0,0 +1,3 @@ +language = "php74" +run = "php -S 0.0.0.0:8000 index.php" +entrypoint = "index.php" diff --git a/common.php b/common.php index 672438d..13f6278 100644 --- a/common.php +++ b/common.php @@ -21,7 +21,7 @@ $EnvConfigs = [ 'admin' => 0b000, 'adminloginpage' => 0b010, - 'autoJumpFirstDisk' => 0b010, + //'autoJumpFirstDisk' => 0b010, 'background' => 0b011, 'backgroundm' => 0b011, 'disableShowThumb' => 0b010, @@ -38,6 +38,10 @@ $EnvConfigs = [ 'useBasicAuth' => 0b010, 'referrer' => 0b011, 'forceHttps' => 0b010, + 'globalHeadOmfUrl' => 0b011, + 'globalHeadMdUrl' => 0b011, + 'globalReadmeMdUrl' => 0b011, + 'globalFootOmfUrl' => 0b011, 'Driver' => 0b100, 'client_id' => 0b100, @@ -137,6 +141,7 @@ function main($path) $_SERVER['php_starttime'] = microtime(true); $path = path_format($path); $_SERVER['PHP_SELF'] = path_format($_SERVER['base_path'] . $path); + $_SERVER['base_disk_path'] = $_SERVER['base_path']; if (getConfig('forceHttps')&&$_SERVER['REQUEST_SCHEME']=='http') { if ($_GET) { $tmp = ''; @@ -166,14 +171,23 @@ function main($path) $_SERVER['timezone'] = getConfig('timezone'); if (isset($_COOKIE['timezone'])&&$_COOKIE['timezone']!='') $_SERVER['timezone'] = $_COOKIE['timezone']; if ($_SERVER['timezone']=='') $_SERVER['timezone'] = 0; + $_SERVER['sitename'] = getConfig('sitename'); + if (empty($_SERVER['sitename'])) $_SERVER['sitename'] = getconstStr('defaultSitename'); + 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'; } else { $adminloginpage = getConfig('adminloginpage'); } - if (isset($_GET[$adminloginpage])) { + if (isset($_GET['login'])&&$_GET['login']==$adminloginpage) { /*if (isset($_GET['preview'])) { $url = $_SERVER['PHP_SELF'] . '?preview'; } else { @@ -204,63 +218,6 @@ function main($path) $url = path_format($_SERVER['PHP_SELF'] . '/'); return output('', 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'); - $_SERVER['base_disk_path'] = $_SERVER['base_path']; - $disktags = explode("|", getConfig('disktag')); - // echo 'count$disk:'.count($disktags); - if (count($disktags)>1) { - if ($path=='/'||$path=='') { - $files['type'] = 'folder'; - $files['childcount'] = count($disktags); - $files['showname'] = 'root'; - foreach ($disktags as $disktag) { - $files['list'][$disktag]['type'] = 'folder'; - $files['list'][$disktag]['name'] = $disktag; - $files['list'][$disktag]['showname'] = getConfig('diskname', $disktag); - } - if ($_GET['json']) { - // return a json - return output(json_encode($files), 200, ['Content-Type' => 'application/json']); - } - if (getConfig('autoJumpFirstDisk')) return output('', 302, [ 'Location' => path_format($_SERVER['base_path'].'/'.$disktags[0].'/') ]); - } else { - $_SERVER['disktag'] = splitfirst( substr(path_format($path), 1), '/' )[0]; - //$pos = strpos($path, '/'); - //if ($pos>1) $_SERVER['disktag'] = substr($path, 0, $pos); - if (!in_array($_SERVER['disktag'], $disktags)) { - $tmp = path_format($_SERVER['base_path'] . '/' . $disktags[0] . '/' . $path); - if (!!$_GET) { - $tmp .= '?'; - foreach ($_GET as $k => $v) { - if ($v === true) $tmp .= $k . '&'; - else $tmp .= $k . '=' . $v . '&'; - } - $tmp = substr($tmp, 0, -1); - } - return output('Please visit ' . $tmp . '.', 302, [ 'Location' => $tmp ]); - //return message('Please visit from Home Page.', 'Error', 404); - } - $path = substr($path, strlen('/' . $_SERVER['disktag'])); - if ($_SERVER['disktag']!='') $_SERVER['base_disk_path'] = path_format($_SERVER['base_disk_path'] . '/' . $_SERVER['disktag'] . '/'); - } - } else $_SERVER['disktag'] = $disktags[0]; - // echo 'main.disktag:'.$_SERVER['disktag'].',path:'.$path.''; - $_SERVER['list_path'] = getListpath($_SERVER['HTTP_HOST']); - if ($_SERVER['list_path']=='') $_SERVER['list_path'] = '/'; - $path1 = path_format($_SERVER['list_path'] . path_format($path)); - if ($path1!='/' && substr($path1,-1)=='/') $path1 = substr($path1, 0, -1); - $_SERVER['is_guestup_path'] = is_guestup_path($path); - $_SERVER['ajax']=0; - if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) if ($_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest') $_SERVER['ajax']=1; // Add disk if (isset($_GET['AddDisk'])) { @@ -269,9 +226,10 @@ function main($path) return output('Please visit ' . $tmp . '.', 301, [ 'Location' => $tmp ]); } if ($_SERVER['admin']) { + if (!$_SERVER['disktag']) $_SERVER['disktag'] = ''; if (!class_exists($_GET['AddDisk'])) require 'disk' . $slash . $_GET['AddDisk'] . '.php'; - $drive = new $_GET['AddDisk']($_GET['disktag']); - return $drive->AddDisk(); + $drive = new $_GET['AddDisk']($_GET['disktag']); + return $drive->AddDisk(); } else { $url = $_SERVER['PHP_SELF']; /*if ($_GET) { @@ -291,20 +249,67 @@ function main($path) } } + $disktags = explode("|", getConfig('disktag')); + // echo 'count$disk:'.count($disktags); + if (count($disktags)>1) { + if ($path=='/'||$path=='') { + $files['type'] = 'folder'; + $files['childcount'] = count($disktags); + $files['showname'] = 'root'; + foreach ($disktags as $disktag) { + $files['list'][$disktag]['type'] = 'folder'; + $files['list'][$disktag]['name'] = $disktag; + $files['list'][$disktag]['showname'] = getConfig('diskname', $disktag); + } + if ($_GET['json']) { + // return a json + return output(json_encode($files), 200, ['Content-Type' => 'application/json']); + } + //if (getConfig('autoJumpFirstDisk')) return output('', 302, [ 'Location' => path_format($_SERVER['base_path'].'/'.$disktags[0].'/') ]); + } else { + $_SERVER['disktag'] = splitfirst( substr(path_format($path), 1), '/' )[0]; + //$pos = strpos($path, '/'); + //if ($pos>1) $_SERVER['disktag'] = substr($path, 0, $pos); + if (!in_array($_SERVER['disktag'], $disktags)) { + $tmp = path_format($_SERVER['base_path'] . '/' . $disktags[0] . '/' . $path); + if (!!$_GET) { + $tmp .= '?'; + foreach ($_GET as $k => $v) { + if ($v === true) $tmp .= $k . '&'; + else $tmp .= $k . '=' . $v . '&'; + } + $tmp = substr($tmp, 0, -1); + } + return output('Please visit ' . $tmp . '.', 302, [ 'Location' => $tmp ]); + //return message('Please visit from Home Page.', 'Error', 404); + } + //$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]; + // echo 'main.disktag:'.$_SERVER['disktag'].',path:'.$path.''; + $_SERVER['list_path'] = getListpath($_SERVER['HTTP_HOST']); + if ($_SERVER['list_path']=='') $_SERVER['list_path'] = '/'; + $path1 = path_format($_SERVER['list_path'] . path_format($path)); + if ($path1!='/' && substr($path1,-1)=='/') $path1 = substr($path1, 0, -1); + $_SERVER['is_guestup_path'] = is_guestup_path($path); + $_SERVER['ajax']=0; + if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) if ($_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest') $_SERVER['ajax']=1; + if (!isreferhost()) return message('Must visit from designated host', 'NOT_ALLOWED', 403); - // Show disks in root - if ($files['showname'] == 'root') return render_list($path, $files); - - if (!driveisfine($_SERVER['disktag'], $drive)) return render_list(); - // Operate if ($_SERVER['ajax']) { + //error_log1($_SERVER['REQUEST_METHOD']); if ($_GET['action']=='del_upload_cache') { // del '.tmp' without login. 无需登录即可删除.tmp后缀文件 + if (!driveisfine($_SERVER['disktag'], $drive)) return output('Not in drive, or disk [' . $_SERVER['disktag'] . '] error.', 403); + savecache('path_' . $path1, '', $_SERVER['disktag'], 1); // clear cache. return $drive->del_upload_cache($path); } if ($_GET['action']=='upbigfile') { + if (!driveisfine($_SERVER['disktag'], $drive)) return output('Not in drive, or disk [' . $_SERVER['disktag'] . '] error.', 403); if (!$_SERVER['admin']) { if (!$_SERVER['is_guestup_path']) return output('Not_Guest_Upload_Folder', 400); if (strpos($_GET['upbigfilename'], '../')!==false) return output('Not_Allow_Cross_Path', 400); @@ -323,6 +328,12 @@ function main($path) } else { if ($_SERVER['ajax']) return output(getconstStr('RefreshtoLogin'),401); } + + // Show disks in root + if ($files['showname'] == 'root') return render_list($path, $files); + + if (!driveisfine($_SERVER['disktag'], $drive)) return render_list(); + $_SERVER['ishidden'] = passhidden($path); if (isset($_GET['thumbnails'])) { if ($_SERVER['ishidden']<4) { @@ -350,7 +361,7 @@ function main($path) $files = json_decode('{"type":"folder"}', true); } elseif ($_SERVER['ishidden']==4) { if (!getConfig('downloadencrypt', $_SERVER['disktag'])) { - $files = json_decode('{"type":"folder"}', true); + $files = json_decode('{"type":"file"}', true); } else { $files = $drive->list_files($path1); if ($files['type']=='folder') $files = json_decode('{"type":"folder"}', true); @@ -358,7 +369,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(' @@ -552,7 +564,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),
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),
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 +630,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 +641,52 @@ function filecache($disktag) return $cache; } +function calcDownKey($filename, $key = '') { + if ($key) { + // check key + $tmp = splitfirst($key, '.'); + if ($tmp[1]!='') { + $timestamp = $tmp[0]; + if (time() > $timestamp) return false; + if (md5($timestamp . sha1($filename . getConfig('admin'))) == $tmp[1]) return true; + else return false; + } else return false; + } else { + // calc key + $timestamp = time() + 1*24*60*60; + return $timestamp . '.' . md5($timestamp . sha1($filename . getConfig('admin'))); + } +} + +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 +967,7 @@ function message($message, $title = 'Message', $statusCode = 200, $wainstat = 0) //setTimeout(function() { getStatus() }, 1000); } } else if (xhr.status==206) { - errordiv.innerHTML = min + "
' . getconstStr('Wait') . '" + x; + errordiv.innerHTML = "' . getconstStr('Wait') . '" + x + "
" + min; setTimeout(function() { getStatus() }, 1000); } else { errordiv.innerHTML = "ERROR
" + xhr.status + "
" + xhr.responseText; @@ -949,7 +999,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 +1133,7 @@ function adminform($name = '', $pass = '', $storage = '', $path = '') } } -'; +'; $html .= ''; return output($html, $statusCode); } @@ -1090,6 +1141,7 @@ function adminform($name = '', $pass = '', $storage = '', $path = '') function adminoperate($path) { global $drive; + if ($_SERVER['REQUEST_METHOD']=='POST') if (!driveisfine($_SERVER['disktag'], $drive)) return output('Not in drive, or disk [' . $_SERVER['disktag'] . '] error.', 403); $path1 = path_format($_SERVER['list_path'] . '/' . $path); if (substr($path1, -1)=='/') $path1=substr($path1, 0, -1); $tmpget = $_GET; @@ -1207,6 +1259,7 @@ function splitfirst($str, $split) $tmp[0] = ''; $tmp[1] = substr($str, $len); } + if ($tmp[1]===false) $tmp[1] = ''; return $tmp; } @@ -1224,6 +1277,7 @@ function splitlast($str, $split) $tmp[0] = ''; $tmp[1] = substr($str, $len); } + if ($tmp[1]===false) $tmp[1] = ''; return $tmp; } @@ -1251,7 +1305,7 @@ function EnvOpt($needUpdate = 0) $html = 'OneManager '.getconstStr('Setup').''; 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 +1445,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 .= ' -' . getconstStr('Back') . '
+' . getconstStr('Back') . '
+ '; if ($_GET['setup']==='cmd') { $statusCode = 200; $html .= ' +OneManager DIR: ' . __DIR__ . '
-
+
'; if ($_POST['cmd']!='') { @@ -1433,6 +1486,9 @@ output: '; return message($html, 'Run cmd', $statusCode); } + if ($_GET['setup']==='auth') { + return changeAuthKey(); + } if ($_GET['setup']==='platform') { $frame .= ' @@ -1599,11 +1655,9 @@ output: } '; } else { - //$_GET['disktag'] = ''; - $Driver_arr = scandir(__DIR__ . $slash . 'disk'); if (count($disktags)>1) { $frame .= ' - + +' . getconstStr('DragSort') . ': +
- - - '; + + '; $num = 0; foreach ($disktags as $disktag) { if ($disktag!='') { $num++; $frame .= ' - '; + '; } } $frame .= ' - - - - + +
' . $disktag . '
' . $num . ' ' . $disktag . '
' . getconstStr('DragSort') . '
+ + +
'; } + $Driver_arr = scandir(__DIR__ . $slash . 'disk'); $frame .= ' + Update from + - + + + @@ -1904,31 +2024,30 @@ output: } $html .= ' -
- '; +
'; if ($_GET['disktag']==''||$_GET['disktag']===true||!in_array($_GET['disktag'], $disktags)) { if ($_GET['setup']==='platform') $html .= ' -
- '; + ' . getconstStr('Home') . ' + ' . getconstStr('PlatformConfig') . ''; else $html .= ' - - '; + ' . getconstStr('Home') . ' + ' . getconstStr('PlatformConfig') . ''; } else $html .= ' - - '; + ' . getconstStr('Home') . ' + ' . getconstStr('PlatformConfig') . ''; foreach ($disktags as $disktag) { if ($disktag!='') { if ($_GET['disktag']===$disktag) $html .= ' - '; + ' . $disktag . ''; else $html .= ' - '; + ' . $disktag . ''; } } $html .= ' - -
' . getconstStr('Home') . '' . getconstStr('PlatformConfig') . '' . getconstStr('Home') . '' . getconstStr('PlatformConfig') . '' . getconstStr('Home') . '' . getconstStr('PlatformConfig') . '' . $disktag . '' . $disktag . '

'; +
'; $html .= $frame; $html .= ''; - return message($html, getconstStr('WaitJumpIndex'), 201, 1); + return message($html, getconstStr('Wait'), 201, 1); } } @@ -554,12 +554,13 @@ class Onedrive { $title = 'Select Driver'; $html = '
- -
'; + +
'; if ($sites[0]!='') foreach ($sites as $k => $v) { $html .= ' '; } $html .= ' @@ -576,22 +577,42 @@ class Onedrive {
- '; + } + function notnull(t) + { + if (t.DriveType.value==\'\') { + alert(\'Select a Disk\'); + return false; + } + if (t.DriveType.value==\'Custom\') { + if (t.sharepointSite.value==\'\') { + alert(\'sharepoint Site Address\'); + return false; + } + } + return true; + } + +'; return message($html, $title, 201); } @@ -611,6 +632,7 @@ class Onedrive { texta[i].style.height = texta[i].scrollHeight + \'px\'; } '; + $tmptoken['Driver'] = $_GET['AddDisk']; $tmptoken['refresh_token'] = $refresh_token; $tmptoken['token_expires'] = time()+7*24*60*60; $response = setConfigResponse( setConfig($tmptoken, $this->disktag) ); @@ -628,7 +650,7 @@ class Onedrive { console.log(i++); } else { clearInterval(uploadList); - location.href = "' . $url . '?AddDisk=' . get_class($this) . '&disktag=' . $_GET['disktag'] . '&SelectDrive"; + location.href = "' . $url . '?AddDisk=' . $_GET['AddDisk'] . '&disktag=' . $_GET['disktag'] . '&SelectDrive"; } }, 1000); '; @@ -640,7 +662,7 @@ class Onedrive { } if (isset($_GET['install1'])) { - if (get_class($this)=='Onedrive' || get_class($this)=='OnedriveCN') { + //if (get_class($this)=='Onedrive' || get_class($this)=='OnedriveCN') { return message(' ' . getconstStr('JumptoOffice') . ' ', getconstStr('Wait') . ' 1s', 201); - } else { - return message('Something error, retry after a few seconds.', 'Retry', 201); - } + //} else { + // return message('Something error, retry after a few seconds.', 'Retry', 201); + //} } if (isset($_GET['install0'])) { @@ -680,7 +702,8 @@ class Onedrive { //$this->disktag = $_POST['disktag_add']; $tmp['disktag_add'] = $_POST['disktag_add']; $tmp['diskname'] = $_POST['diskname']; - $tmp['Driver'] = $_POST['Drive_ver']; + //$tmp['Driver'] = $_POST['Drive_ver']; + $tmp['Driver'] = $_GET['AddDisk']; if ($_POST['Drive_ver']=='Sharelink') { $tmp['shareurl'] = $_POST['shareurl']; } else { @@ -700,7 +723,7 @@ class Onedrive { } else { $title = getconstStr('MayinEnv'); $html = getconstStr('Wait'); - if ($_POST['Drive_ver']!='Sharelink') $url .= '?install1&disktag=' . $_GET['disktag'] . '&AddDisk=' . $_POST['Drive_ver']; + if ($_POST['Drive_ver']!='Sharelink') $url .= '?install1&disktag=' . $_GET['disktag'] . '&AddDisk=' . $_GET['AddDisk']; $html .= ''; diff --git a/index.php b/index.php index a06dc76..807eed4 100644 --- a/index.php +++ b/index.php @@ -5,18 +5,19 @@ include 'vendor/autoload.php'; include 'conststr.php'; include 'common.php'; +date_default_timezone_set('UTC'); //echo '
'. json_encode($_SERVER, JSON_PRETTY_PRINT).'
'; //echo '
'. json_encode($_ENV, JSON_PRETTY_PRINT).'
'; if (isset($_SERVER['USER'])&&$_SERVER['USER']==='qcloud') { if (getenv('ONEMANAGER_CONFIG_SAVE')=='file') include 'platform/TencentSCF_file.php'; else include 'platform/TencentSCF_env.php'; -} elseif (isset($_SERVER['FC_SERVER_PATH'])&&$_SERVER['FC_SERVER_PATH']==='/var/fc/runtime/php7.2') { +} elseif (isset($_SERVER['FC_FUNC_CODE_PATH'])) { include 'platform/AliyunFC.php'; -} elseif ($_SERVER['_APP_SHARE_DIR']=='/var/share/CFF/processrouter') { +} elseif (isset($_SERVER['_APP_SHARE_DIR']) && $_SERVER['_APP_SHARE_DIR']=='/var/share/CFF/processrouter') { //if (getenv('ONEMANAGER_CONFIG_SAVE')=='file') include 'platform/HuaweiFG_file.php'; //else include 'platform/HuaweiFG_env.php'; echo 'FG' . PHP_EOL; -} elseif ($_SERVER['BCE_CFC_RUNTIME_NAME']=='php7') { +} elseif (isset($_SERVER['BCE_CFC_RUNTIME_NAME']) && $_SERVER['BCE_CFC_RUNTIME_NAME']=='php7') { include 'platform/BaiduCFC.php'; } elseif (isset($_SERVER['HEROKU_APP_DIR'])&&$_SERVER['HEROKU_APP_DIR']==='/app') { include 'platform/Heroku.php'; @@ -39,6 +40,22 @@ if (isset($_SERVER['USER'])&&$_SERVER['USER']==='qcloud') { //echo 'path:'. $path; $_GET = getGET(); //echo '
'. json_encode($_GET, JSON_PRETTY_PRINT).'
'; + $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 '
'. json_encode($_GET, JSON_PRETTY_PRINT).'
'; + $re = main($path); $sendHeaders = array(); foreach ($re['headers'] as $headerName => $headerVal) { @@ -56,7 +73,6 @@ if (isset($_SERVER['USER'])&&$_SERVER['USER']==='qcloud') { //echo 'path:'. $path; $_GET = getGET(); //echo '
'. json_encode($_GET, JSON_PRETTY_PRINT).'
'; - $re = main($path); $sendHeaders = array(); foreach ($re['headers'] as $headerName => $headerVal) { @@ -73,6 +89,9 @@ function main_handler($event, $context) $event = json_decode(json_encode($event), true); $context = json_decode(json_encode($context), true); printInput($event, $context); + if ( $event['requestContext']['serviceId'] === substr($event['headers']['host'], 0, strlen($event['requestContext']['serviceId'])) ) { + if ($event['path']==='/' . $context['function_name']) return output('add / at last.', 308, ['Location'=>'/'.$event['requestContext']['stage'].'/'.$context['function_name'].'/']); + } unset($_POST); unset($_GET); unset($_COOKIE); @@ -87,7 +106,7 @@ function main_handler($event, $context) // Aliyun FC & Huawei FG & Baidu CFC function handler($event, $context) { - if (isset($_SERVER['FC_SERVER_PATH'])&&$_SERVER['FC_SERVER_PATH']==='/var/fc/runtime/php7.2') { + if (isset($_SERVER['FC_FUNC_CODE_PATH'])) { // Aliyun FC set_error_handler("myErrorHandler"); $tmp = array( @@ -111,7 +130,7 @@ function handler($event, $context) $re = main($path); - return new RingCentral\Psr7\Response($re['statusCode'], $re['headers'], $re['isBase64Encoded']?base64_decode($re['body']):$re['body']); + return new RingCentral\Psr7\Response($re['statusCode'], $re['headers'], ($re['isBase64Encoded']?base64_decode($re['body']):$re['body'])); } elseif ($_SERVER['_APP_SHARE_DIR']=='/var/share/CFF/processrouter') { // Huawei FG diff --git a/platform/AliyunFC.php b/platform/AliyunFC.php index 2618d89..a32b650 100644 --- a/platform/AliyunFC.php +++ b/platform/AliyunFC.php @@ -67,7 +67,8 @@ function GetPathSetting($event, $context) $_SERVER['host'] = $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST']; $_SERVER['referhost'] = explode('/', $event['headers']['Referer'][0])[2]; $_SERVER['HTTP_IF_MODIFIED_SINCE'] = $event['headers']['If-Modified-Since'][0]; - $_SERVER['FC_SERVER_PATH'] = '/var/fc/runtime/php7.2'; + $_SERVER['FC_FUNC_CODE_PATH'] = getenv('FC_FUNC_CODE_PATH'); + $_SERVER['REQUEST_METHOD'] = $event['method']; return $path; //return spurlencode($path, '/'); } @@ -185,16 +186,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 +230,13 @@ language:
'; $html .= '
'; } - if (getConfig('AccessKeyID')==''||getConfig('AccessKeySecret')=='') $html .= ' - '.getconstStr('Create').' AccessKeyID & AccessKeySecret
-
-
'; + //if (getConfig('AccessKeyID')==''||getConfig('AccessKeySecret')=='') $html .= ' - + ' . getconstStr('Create') . ' AccessKeyID & AccessKeySecret
+
+
'; + $html .= ' + '; + return message($html, $title, 201, 1); + } + } + $html = ' +
+ ' . getconstStr('Create') . ' AccessKeyID & AccessKeySecret
+
+
+ +
+ '; + return message($html, 'Change platform Auth token or key', 200); +} diff --git a/platform/BaiduCFC.php b/platform/BaiduCFC.php index f2b21e6..d7e30b0 100644 --- a/platform/BaiduCFC.php +++ b/platform/BaiduCFC.php @@ -1,4 +1,6 @@ '; $html .= '
'; } - if (getConfig('SecretId')==''||getConfig('SecretKey')=='') $html .= ' - '.getconstStr('Create').' Access Key & Secret Key
-
-
'; + //if (getConfig('SecretId')==''||getConfig('SecretKey')=='') $html .= ' - + ' . getconstStr('Create') . ' Access Key & Secret Key
+
+
'; + $html .= ' + '; + return message($html, $title, 201, 1); + } + } + $html = ' +
+ ' . getconstStr('Create') . ' Access Key & Secret Key
+
+
+ +
+ '; + return message($html, 'Change platform Auth token or key', 200); +} diff --git a/platform/Heroku.php b/platform/Heroku.php index 971463e..b8887b3 100644 --- a/platform/Heroku.php +++ b/platform/Heroku.php @@ -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') . ' - ', 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); + '; + return message($html, $title, 201, 1); } - return message($html, $title, 201); } } if ($_GET['install0']) { @@ -218,9 +225,9 @@ language:
'; $html .= '
'; } - if (getConfig('APIKey')=='') $html .= ' - '.getconstStr('Create').' API Key
-
'; + $html .= ' + ' . getconstStr('Create') . ' API Key
+
'; $html .= '
'; $html .= ' @@ -247,7 +254,7 @@ language:
'; 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'] . '
'; } -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') . ' + '; + return message($html, $title, 201, 1); + } + } + $html = ' +
+ '.getconstStr('Create').' API Key
+
+ +
+ '; + return message($html, 'Change platform Auth token or key', 200); +} diff --git a/platform/HuaweiFG_env.php b/platform/HuaweiFG_env.php index d3cebd9..1ea9f51 100644 --- a/platform/HuaweiFG_env.php +++ b/platform/HuaweiFG_env.php @@ -1,4 +1,7 @@ '; $html .= '
'; } - if (getConfig('HW_urn')==''||getConfig('HW_key')==''||getConfig('HW_secret')=='') $html .= ' + //if (getConfig('HW_urn')==''||getConfig('HW_key')==''||getConfig('HW_secret')=='') + $html .= ' 在函数代码操作页上方找到URN,鼠标放上去后显示URN,复制填入:

点击链接,新增访问密钥, 在下载的credentials.csv文件中找到对应信息,填入:

-
'; +
'; $html .= '

'; @@ -273,7 +269,8 @@ language:
'; } 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 +430,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 +479,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') . ' + '; + return message($html, $title, 201, 1); + } + } + $html = ' +
+ 点击链接,新增访问密钥, + 在下载的credentials.csv文件中找到对应信息,填入:
+
+
+ +
+ '; + return message($html, 'Change platform Auth token or key', 200); +} diff --git a/platform/HuaweiFG_file.php b/platform/HuaweiFG_file.php index 64e6199..ca34546 100644 --- a/platform/HuaweiFG_file.php +++ b/platform/HuaweiFG_file.php @@ -1,4 +1,7 @@ '; $html .= '
'; } - if (getConfig('HW_urn')==''||getConfig('HW_key')==''||getConfig('HW_secret')=='') $html .= ' + //if (getConfig('HW_urn')==''||getConfig('HW_key')==''||getConfig('HW_secret')=='') + $html .= ' 在函数代码操作页上方找到URN,鼠标放上去后显示URN,复制填入:

点击链接,新增访问密钥, 在下载的credentials.csv文件中找到对应信息,填入:

-
'; +
'; $html .= '

'; @@ -287,17 +280,18 @@ language:
'; } 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 +420,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 +462,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 +518,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 +570,7 @@ function addFileToZip($zip, $rootpath, $path = '') } } } - @closedir($path); + @closedir($handler); } @@ -602,6 +580,7 @@ function addFileToZip($zip, $rootpath, $path = '') + define("BasicDateFormat", "Ymd\THis\Z"); define("Algorithm", "SDK-HMAC-SHA256"); define("HeaderXDate", "X-Sdk-Date"); @@ -872,3 +851,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') . ' + '; + return message($html, $title, 201, 1); + } + } + $html = ' +
+ 点击链接,新增访问密钥, + 在下载的credentials.csv文件中找到对应信息,填入:
+
+
+ +
+ '; + return message($html, 'Change platform Auth token or key', 200); +} diff --git a/platform/Normal.php b/platform/Normal.php index 5002b19..2cb9e4c 100644 --- a/platform/Normal.php +++ b/platform/Normal.php @@ -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); +} diff --git a/platform/Replit.php b/platform/Replit.php new file mode 100644 index 0000000..a682197 --- /dev/null +++ b/platform/Replit.php @@ -0,0 +1,357 @@ +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'] . "
\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 + + ', 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 .= ' +
+
+ +
+ '; + $title = getconstStr('SetAdminPassword'); + return message($html, $title, 201); + } + if ($_GET['install0']) { + $html .= ' +
+language:
'; + foreach ($constStr['languages'] as $key1 => $value1) { + $html .= ' +
'; + } + $html .= ' + +
+ '; + $title = getconstStr('SelectLanguage'); + return message($html, $title, 201); + } + + $title = 'Install'; + $html = '' . getconstStr('ClickInstall') . ', ' . 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 '
'. json_encode($response, JSON_PRETTY_PRINT).'
' . '
+'; +} + +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); +} diff --git a/platform/Replit_old.php b/platform/Replit_old.php new file mode 100644 index 0000000..572c150 --- /dev/null +++ b/platform/Replit_old.php @@ -0,0 +1,379 @@ +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'] . "
\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 + + ', 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 .= ' + + '; + $title = getconstStr('SetAdminPassword'); + return message($html, $title, 201); + } + if ($_GET['install0']) { + $html .= ' +
+language:
'; + foreach ($constStr['languages'] as $key1 => $value1) { + $html .= ' +
'; + } + $html .= ' + +
+ '; + $title = getconstStr('SelectLanguage'); + return message($html, $title, 201); + } + + $title = 'Install'; + $html = '' . getconstStr('ClickInstall') . ', ' . 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 '
'. json_encode($response, JSON_PRETTY_PRINT).'
' . '
+'; +} + +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); +} diff --git a/platform/TencentSCF_env.php b/platform/TencentSCF_env.php index c8084ae..ff5fd4f 100644 --- a/platform/TencentSCF_env.php +++ b/platform/TencentSCF_env.php @@ -1,4 +1,7 @@ - ', 'Program updating', 201); + ', 'Program updating', 201, 1); } - return output('Jump + return message(getconstStr('Success') . ' - ', 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); + ', 201, 1); } if ($_GET['install1']) { $tmp['timezone'] = $_COOKIE['timezone']; @@ -199,7 +211,7 @@ function install() if ($tmp['ONEMANAGER_CONFIG_SAVE'] == 'file') { $html = getconstStr('ONEMANAGER_CONFIG_SAVE_FILE') . '
' . getconstStr('Home') . ''; $title = 'Reinstall'; - return message($html, $title, 201); + return message($html, $title, 201, 1); } $html .= '
@@ -217,7 +229,7 @@ function install() } '; $title = getconstStr('SetAdminPassword'); - return message($html, $title, 201); + return message($html, $title, 201, 1); } } if ($_GET['install0']) { @@ -228,10 +240,11 @@ language:
'; $html .= '
'; } - if (getConfig('SecretId')==''||getConfig('SecretKey')=='') $html .= ' + //if (getConfig('SecretId')==''||getConfig('SecretKey')=='') + $html .= ' ' . getconstStr('Create') . ' SecretId & SecretKey

-
'; +
'; $html .= '

'; @@ -255,7 +268,8 @@ language:
'; } 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 +561,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 +610,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') . ' + '; + return message($html, $title, 201, 1); + } + } + $html = ' + + ' . getconstStr('Create') . ' SecretId & SecretKey
+
+
+ +
+ '; + return message($html, 'Change platform Auth token or key', 200); } diff --git a/platform/TencentSCF_file.php b/platform/TencentSCF_file.php index 78e8600..606481f 100644 --- a/platform/TencentSCF_file.php +++ b/platform/TencentSCF_file.php @@ -1,4 +1,7 @@ - ', 'Program updating', 201); + ', 'Program updating', 201, 1); } - return output('Jump + return message(getconstStr('Success') . ' - ', 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); + ', 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 +217,7 @@ function install() if ($tmp['ONEMANAGER_CONFIG_SAVE'] != 'file') { $html = getconstStr('ONEMANAGER_CONFIG_SAVE_ENV') . '
' . getconstStr('Home') . ''; $title = 'Reinstall'; - return message($html, $title, 201); + return message($html, $title, 201, 1); } $html .= '
@@ -229,7 +235,7 @@ function install() } '; $title = getconstStr('SetAdminPassword'); - return message($html, $title, 201); + return message($html, $title, 201, 1); } } if ($_GET['install0']) { @@ -240,10 +246,11 @@ language:
'; $html .= '
'; } - if (getConfig('SecretId')==''||getConfig('SecretKey')=='') $html .= ' + //if (getConfig('SecretId')==''||getConfig('SecretKey')=='') + $html .= ' '.getconstStr('Create').' SecretId & SecretKey

-
'; +
'; $html .= '

'; @@ -267,7 +274,8 @@ language:
'; } 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 +596,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 +648,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') . ' + '; + return message($html, $title, 201, 1); + } + } + $html = ' + + ' . getconstStr('Create') . ' SecretId & SecretKey
+
+
+ +
+ '; + return message($html, 'Change platform Auth token or key', 200); +} diff --git a/platform/Vercel.php b/platform/Vercel.php index 6a65b2f..aa4a4f8 100644 --- a/platform/Vercel.php +++ b/platform/Vercel.php @@ -151,7 +151,7 @@ function setConfig($arr, $disktag = '') } $envs = array_filter($envs, 'array_value_isnot_null'); //ksort($envs); - sortConfig($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')); @@ -187,16 +187,24 @@ function install() $title = 'Error'; return message($html, $title, 400); } else { - /*$html = ''; - return message($html, $title, 201, 1);*/ - $data["dplId"] = $response['DplStatus']; - return output(json_encode($data), 201); + return message($html, $title, 201, 1); } } } @@ -208,10 +216,9 @@ language:
'; $html .= '
'; } - //if (getConfig('APIKey')=='') $html .= '
' . getconstStr('Create') . ' token
-
'; +
'; $html .= '

'; $html .= ' @@ -244,52 +251,7 @@ language:
'; 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 + "
" + 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 + ".
' . 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; } '; $title = getconstStr('SelectLanguage'); @@ -329,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__; @@ -345,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"; @@ -367,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
"; + $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); @@ -408,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 . "
"; //error_log1($outPath); - if ($outPath=='') return '{"error":{"message":"no outpath"}}'; // put in config $coderoot = __DIR__; @@ -453,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); @@ -465,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') . ' + '; + return message($html, $title, 201, 1); + } + } + $html = ' +
+ ' . getconstStr('Create') . ' token
+
+ +
+ '; + return message($html, 'Change platform Auth token or key', 200); +} diff --git a/platform/Vercel_env.php b/platform/Vercel_env.php index 4ebd486..c0f3607 100644 --- a/platform/Vercel_env.php +++ b/platform/Vercel_env.php @@ -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 = ''; - 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:
'; $html .= '
'; } - //if (getConfig('APIKey')=='') $html .= '
' . getconstStr('Create') . ' token
-
'; +
'; $html .= '

'; $html .= ' @@ -241,52 +245,7 @@ language:
'; 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 + "
" + 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 + ".
' . 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; } '; $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
"; + $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 . "
"; //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') . ' + '; + return message($html, $title, 201, 1); + } + } + $html = ' +
+ ' . getconstStr('Create') . ' token
+
+ +
+ '; + return message($html, 'Change platform Auth token or key', 200); +} diff --git a/readme.md b/readme.md index 3f12e7d..4bd5dca 100644 --- a/readme.md +++ b/readme.md @@ -8,40 +8,6 @@ --- -# Deploy to Heroku - -### Official - - https://heroku.com - -### Demo - - https://herooneindex.herokuapp.com/ - -### How to Install - -> ~~Click the button [![Deploy](https://www.herokucdn.com/deploy/button.svg)](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 [![Deploy](https://www.herokucdn.com/deploy/button.svg)](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]. --- diff --git a/readme_cn.md b/readme_cn.md index 3419aa9..380215e 100644 --- a/readme_cn.md +++ b/readme_cn.md @@ -12,6 +12,51 @@ --- +# 部署到 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 ### 官网 @@ -44,28 +89,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) ### 官网 diff --git a/theme/Onedrive-dev.html b/theme/Onedrive-dev.html index 995a818..ac58e13 100644 --- a/theme/Onedrive-dev.html +++ b/theme/Onedrive-dev.html @@ -305,7 +305,7 @@
-   +  
@@ -396,6 +396,7 @@ - + - + 萌ICP备20220244号 diff --git a/theme/flatcard.html b/theme/flatcard.html index 16e4224..739f008 100644 --- a/theme/flatcard.html +++ b/theme/flatcard.html @@ -558,7 +558,9 @@ 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'; } diff --git a/theme/nchyn_grey.html b/theme/nchyn_grey.html index b9493d6..e153f42 100644 --- a/theme/nchyn_grey.html +++ b/theme/nchyn_grey.html @@ -222,7 +222,7 @@
-   +  
@@ -717,7 +717,10 @@ return false; 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'; } diff --git a/theme/onemoe.html b/theme/onemoe.html index 76a3308..78a6001 100644 --- a/theme/onemoe.html +++ b/theme/onemoe.html @@ -479,7 +479,10 @@ 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'; } diff --git a/theme/purecool.html b/theme/purecool.html index 3582fa3..419829f 100644 --- a/theme/purecool.html +++ b/theme/purecool.html @@ -179,7 +179,7 @@
-   +  
@@ -509,7 +509,10 @@ 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'; } diff --git a/theme/renexmoe.html b/theme/renexmoe.html index ab8b520..21e87f2 100644 --- a/theme/renexmoe.html +++ b/theme/renexmoe.html @@ -98,13 +98,9 @@
-
  • - account_circle登录 +
  • + account_circle + 登录
  • diff --git a/theme/tfo.html b/theme/tfo.html index cc6aa5c..0e2ca1e 100644 --- a/theme/tfo.html +++ b/theme/tfo.html @@ -187,10 +187,10 @@
    - + -
    • +
      • @@ -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 + ""; + let url = location.href; + url = url.substr(0, url.length-8); + document.getElementById("url").value= url; // document.getElementById("url").value= prePath + postPath + ""; if(width < 495) { if(document.getElementById("office-a")) { @@ -603,7 +605,7 @@ - + - + diff --git a/version b/version index 8241a53..2c2075c 100644 --- a/version +++ b/version @@ -1,7 +1,34 @@ +20220127-1234.43 +change login page, default not '?admin' but '?login=admin' now! and if set adminloginpage, it will be '?login=[value]'. rm JumpFirstDisk, 403 in operating root, change sorting disk, remake disktags tab, add global md config. Allow Preview when enable downloadencrypt. some change in adding Onedrive disk. show upload progress in table background. fix some bugs. +更改登录地址,默认不再是'?admin'而是'?login=admin',如果设置了adminloginpage,那登录地址会是'?login=值'。移除 JumpFirstDisk,在root操作时返回403,更改盘排序,重做盘符排列,添加全局md配置。在开启downloadencrypt后可以网页预览了。添加onedrive盘时稍做修改。上传时以背景做进度条。修复其它bug。 + +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. 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. 因为Vercel修改环境变量也必须重新部署才生效,而且环境变量只能小于4k,所以决定将配置保存在代码文件中。升级更新后,用Vercel的请重新安装。如果还想继续使用环境变量,请在更新前,在Project Settings的Environment Variables中,新增一个( name: "ONEMANAGER_CONFIG_SAVE", value: "env" )的环境变量。 - 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中添加讨饭链接。