From 9f92652973fcc181afa09de8c61509d185577be0 Mon Sep 17 00:00:00 2001 From: qkqpttgf <45693631+qkqpttgf@users.noreply.github.com> Date: Thu, 20 Feb 2020 12:10:55 +0800 Subject: [PATCH] multy disks, can update with oneclick. --- function/heroku.php | 301 ++++++++++++++++++++++++++++++++------------ 1 file changed, 218 insertions(+), 83 deletions(-) diff --git a/function/heroku.php b/function/heroku.php index 63eeafe..98fed15 100644 --- a/function/heroku.php +++ b/function/heroku.php @@ -1,5 +1,17 @@ 0) $path = substr($_SERVER['REQUEST_URI'], 0, $p); else $path = $_SERVER['REQUEST_URI']; $path = path_format( substr($path, strlen($_SERVER['base_path'])) ); - return $path; + return substr($path, 1); //return spurlencode($path, '/'); } @@ -37,11 +49,63 @@ function getGET() } } +function getConfig($str, $disktag = '') +{ + global $innerEnv; + if ($disktag=='') $disktag = $_SERVER['disktag']; + if (in_array($str, $innerEnv)) { + return json_decode(getenv($disktag), true)[$str]; + } + return getenv($str); +} + +function setConfig($arr, $disktag = '') +{ + global $innerEnv; + if ($disktag=='') $disktag = $_SERVER['disktag']; + $disktags = explode("|",getConfig('disktag')); + $diskconfig = json_decode(getenv($disktag), true); + $tmp = []; + $indisk = 0; + $oparetdisk = 0; + foreach ($arr as $k => $v) { + if (in_array($k, $innerEnv)) { + $diskconfig[$k] = $v; + $indisk = 1; + } elseif ($k=='disktag_add') { + array_push($disktags, $v); + $oparetdisk = 1; + } elseif ($k=='disktag_del') { + $disktags = array_diff($disktags, [ $v ]); + $tmp[$v] = ''; + $oparetdisk = 1; + } else { + $tmp[$k] = $v; + } + } + if ($indisk) { + $diskconfig = array_filter($diskconfig, 'array_value_isnot_null'); + ksort($diskconfig); + $tmp[$disktag] = json_encode($diskconfig); + } + if ($oparetdisk) { + $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'] = ''; + } +// echo '正式设置:'.json_encode($tmp,JSON_PRETTY_PRINT).' +//'; + return setHerokuConfig($tmp, getConfig('function_name'), getConfig('APIKey')); +} + function get_refresh_token() { global $constStr; $url = path_format($_SERVER['PHP_SELF'] . '/'); if ($_GET['authorization_code'] && isset($_GET['code'])) { + $_SERVER['disktag'] = $_COOKIE['disktag']; + config_oauth(); $tmp = curl_request($_SERVER['oauth_url'] . 'token', 'client_id=' . $_SERVER['client_id'] .'&client_secret=' . $_SERVER['client_secret'] . '&grant_type=authorization_code&requested_token_use=on_behalf_of&redirect_uri=' . $_SERVER['redirect_uri'] .'&code=' . $_GET['code']); if ($tmp['stat']==200) $ret = json_decode($tmp['body'], true); if (isset($ret['refresh_token'])) { @@ -58,24 +122,28 @@ function get_refresh_token() Add t1-t'.--$i.' to environments.*/ $str .= '

- Adding refresh_token to Config. + '.getconstStr('SavingToken').' '; - setConfig([ 'refresh_token' => $tmptoken, 'token_expires' => time()+30*24*60*60 ]); + setConfig([ 'refresh_token' => $tmptoken, 'token_expires' => time()+30*24*60*60 ], $_COOKIE['disktag']); savecache('access_token', $ret['access_token'], $ret['expires_in'] - 60); $str .= ' - '; + '; return message($str, getconstStr('WaitJumpIndex')); } return message('
' . $tmp['body'] . '
', $tmp['stat']); //return message('
' . json_encode($ret, JSON_PRETTY_PRINT) . '
', 500); } - if ($_GET['install3']) { + if ($_GET['install1']) { + $_SERVER['disk_oprating'] = $_COOKIE['disktag']; + $_SERVER['disktag'] = $_COOKIE['disktag']; + config_oauth(); if (getConfig('Onedrive_ver')=='MS' || getConfig('Onedrive_ver')=='CN' || getConfig('Onedrive_ver')=='MSC') { return message(' '.getconstStr('JumptoOffice').' @@ -89,17 +157,20 @@ function get_refresh_token() ', getconstStr('Wait').' 1s', 201); } } - if ($_GET['install2']) { - // echo $_POST['Onedrive_ver']; - if ($_POST['Onedrive_ver']=='MS' || $_POST['Onedrive_ver']=='CN' || $_POST['Onedrive_ver']=='MSC') { + if ($_GET['install0']) { + if ($_POST['disktag_add']!='' && ($_POST['Onedrive_ver']=='MS' || $_POST['Onedrive_ver']=='CN' || $_POST['Onedrive_ver']=='MSC')) { + $_SERVER['disktag'] = $_COOKIE['disktag']; + $tmp['disktag_add'] = $_POST['disktag_add']; + $tmp['diskname'] = $_POST['diskname']; $tmp['Onedrive_ver'] = $_POST['Onedrive_ver']; if ($_POST['Onedrive_ver']=='MSC') { $tmp['client_id'] = $_POST['client_id']; - $tmp['client_secret'] = $_POST['client_secret']; + $tmp['client_secret'] = equal_replace(base64_encode($_POST['client_secret'])); + //$_POST['client_secret']; } - $response = json_decode(setConfig($tmp)['body'], true); + $response = json_decode( setConfig($tmp, $_COOKIE['disktag']), true )['Response']; $title = getconstStr('MayinEnv'); - $html = getconstStr('Wait') . ' 3s'; + $html = getconstStr('Wait') . ' 3s'; if (isset($response['id'])&&isset($response['message'])) { $html = $response['id'] . '
' . $response['message'] . '

@@ -110,6 +181,52 @@ function_name:' . $_SERVER['function_name'] . '
return message($html, $title, 201); } } + + if ($constStr['language']!='zh-cn') { + $linklang='en-us'; + } else $linklang='zh-cn'; + $ru = "https://developer.microsoft.com/".$linklang."/graph/quick-start?appID=_appId_&appName=_appName_&redirectUrl=".$_SERVER['redirect_uri']."&platform=option-php"; + $deepLink = "/quickstart/graphIO?publicClientSupport=false&appName=OneManager&redirectUrl=".$_SERVER['redirect_uri']."&allowImplicitFlow=false&ru=".urlencode($ru); + $app_url = "https://apps.dev.microsoft.com/?deepLink=".urlencode($deepLink); + $html = ' +
+ '.getconstStr('OnedriveDiskTag').':
+ '.getconstStr('OnedriveDiskName').':
+ Onedrive_Ver:
+
+
+
+ +
+ '; + $title = 'Bind Onedrive'; + return message($html, $title, 201); +} + +function install() +{ + global $constStr; if ($_GET['install1']) { if ($_POST['admin']!='') { $tmp['admin'] = $_POST['admin']; @@ -124,7 +241,7 @@ function_name:' . $_SERVER['function_name'] . '
$tmp1 = substr($_SERVER['HTTP_HOST'], 0, strrpos($_SERVER['HTTP_HOST'], '.')); $maindomain = substr($tmp1, strrpos($tmp1, '.')+1); if ($maindomain=='herokuapp') $function_name = substr($tmp1, 0, strrpos($tmp1, '.')); - else $function_name = 'visit from x.herokuapp.com'; + else $function_name = 'visit from xxxx.herokuapp.com'; $tmp['function_name'] = $function_name; } $response = json_decode(setHerokuConfig($tmp, $function_name, $APIKey)['body'], true); @@ -135,27 +252,7 @@ function_name:' . $_SERVER['function_name'] . '
'; $title = 'Error'; } else { - if ($constStr['language']!='zh-cn') { - $linklang='en-us'; - } else $linklang='zh-cn'; - $ru = "https://developer.microsoft.com/".$linklang."/graph/quick-start?appID=_appId_&appName=_appName_&redirectUrl=".$_SERVER['redirect_uri']."&platform=option-php"; - $deepLink = "/quickstart/graphIO?publicClientSupport=false&appName=OneManager&redirectUrl=".$_SERVER['redirect_uri']."&allowImplicitFlow=false&ru=".urlencode($ru); - $app_url = "https://apps.dev.microsoft.com/?deepLink=".urlencode($deepLink); - $html = ' -
- Onedrive_Ver:
-
-
-
- -
'; - $title = 'Install'; + return output('Jump', 302); } return message($html, $title, 201); } @@ -172,7 +269,7 @@ language:
'; '.getconstStr('Create').' API Key

'; $html .= ' -
'; +
'; $html .= ' @@ -189,12 +286,8 @@ language:
'; return false; }'; if (getConfig('APIKey')=='') $html .= ' - if (t.SecretId.value==\'\') { - alert(\'input SecretId\'); - return false; - } - if (t.SecretKey.value==\'\') { - alert(\'input SecretKey\'); + if (t.APIKey.value==\'\') { + alert(\'input API Key\'); return false; }'; $html .= ' @@ -204,24 +297,14 @@ language:
'; $title = getconstStr('SelectLanguage'); return message($html, $title, 201); } - $html .= 'refresh_token not exist, click to install.'; + $html .= ''.getconstStr('ClickInstall').', '.getconstStr('LogintoBind'); $title = 'Error'; return message($html, $title, 201); } -function getConfig($str) -{ - return getenv($str); -} - -function setConfig($arr) -{ - return setHerokuConfig($arr, getConfig('function_name'), getConfig('APIKey')); -} - function HerokuAPI($method, $url, $data = '', $apikey) { - if ($method=='PATCH') { + if ($method=='PATCH'||$method=='POST') { $headers['Content-Type'] = 'application/json'; } $headers['Authorization'] = 'Bearer ' . $apikey; @@ -264,26 +347,29 @@ function setHerokuConfig($env, $function_name, $apikey) return HerokuAPI('PATCH', 'https://api.heroku.com/apps/' . $function_name . '/config-vars', $data, $apikey); } +function updateHerokuapp($function_name, $apikey) +{ + $tmp['source_blob']['url'] = 'https://github.com/qkqpttgf/OneManager-php/tarball/master/'; + $data = json_encode($tmp); + return HerokuAPI('POST', 'https://api.heroku.com/apps/' . $function_name . '/builds', $data, $apikey); +} + function EnvOpt($function_name, $needUpdate = 0) { global $constStr; - $constEnv = [ - //'admin', - 'adminloginpage', 'domain_path', 'guestup_path', 'passfile', - //'private_path', - 'public_path', 'sitename', 'language', 'theme' - ]; - asort($constEnv); + global $commonEnv; + global $innerEnv; + global $ShowedinnerEnv; + asort($commonEnv); + asort($ShowedinnerEnv); $html = 'OneManager '.getconstStr('Setup').''; - /*if ($_POST['updateProgram']==getconstStr('updateProgram')) { - $response = json_decode(updataProgram($function_name, $Region, $namespace), true)['Response']; - if (isset($response['Error'])) { - $html = $response['Error']['Code'] . '
-' . $response['Error']['Message'] . '

+ if ($_POST['updateProgram']==getconstStr('updateProgram')) { + $response = json_decode(updateHerokuapp(getConfig('function_name'), getConfig('APIKey'))['body'], true); + if (isset($response['id'])&&isset($response['message'])) { + $html = $response['id'] . '
+' . $response['message'] . '

function_name:' . $_SERVER['function_name'] . '
-Region:' . $_SERVER['Region'] . '
-namespace:' . $namespace . '
-'; +'; $title = 'Error'; } else { $html .= getconstStr('UpdateSuccess') . '
@@ -291,13 +377,23 @@ namespace:' . $namespace . '
$title = getconstStr('Setup'); } return message($html, $title); - }*/ + } if ($_POST['submit1']) { foreach ($_POST as $k => $v) { if (in_array($k, $constEnv)) { if (!(getConfig($k)==''&&$v=='')) $tmp[$k] = $v; } } + $_SERVER['disk_oprating'] = ''; + foreach ($_POST as $k => $v) { + if (in_array($k, $commonEnv)) { + if (!(getConfig($k)==''&&$v=='')) $tmp[$k] = $v; + } + if (in_array($k, $innerEnv)||$k=='disktag_del' || $k=='disktag_add') { + $tmp[$k] = $v; + } + if ($k == 'disk') $_SERVER['disk_oprating'] = $v; + } /*if ($tmp['domain_path']!='') { $tmp1 = explode("|",$tmp['domain_path']); $tmparr = []; @@ -307,10 +403,12 @@ namespace:' . $namespace . '
} $tmp['domain_path'] = $tmparr; }*/ - $response = setConfig($tmp); - if (!$response) { - $html = $response . '
-'; + $response = json_decode(setConfig($tmp, $_SERVER['disk_oprating'])['body'], true); + if (isset($response['id'])&&isset($response['message'])) { + $html = $response['id'] . '
+' . $response['message'] . '

+function_name:' . $_SERVER['function_name'] . '
+'; $title = 'Error'; } else { $html .= ''; @@ -322,20 +420,23 @@ namespace:' . $namespace . '
$preurl = path_format($_SERVER['PHP_SELF'] . '/'); } $html .= ' - '.getconstStr('Back').'    + '.getconstStr('Back').'   '.getconstStr('Back').getconstStr('Home').'
Github
'; - /*if ($needUpdate) { + if ($needUpdate) { $html .= '
' . $_SERVER['github_version'] . '
'; } else { $html .= getconstStr('NotNeedUpdate'); - }*/ - $html .= ' -
- '; - foreach ($constEnv as $key) { + } + $html .= '
+
+ + + + '; + foreach ($commonEnv as $key) { if ($key=='language') { $html .= ' @@ -357,7 +458,7 @@ namespace:' . $namespace . '
'; } - $html .= '
'.getconstStr('PlatformConfig').'
- -
'; + $html .= ' + + +
'; + foreach (explode("|",getConfig('disktag')) as $disktag) { + if ($disktag!='') { + $html .= ' + + + + + + '; + if (getConfig('refresh_token', $disktag)!='') { + $html .= ' + + '; + foreach ($ShowedinnerEnv as $key) { + $html .= ' + + + + '; + } + $html .= ' + + '; + } + $html .= ' +
'.$disktag.': + + +

'; + } + } + $html .= ' + '.getconstStr('AddDisk').''; return message($html, getconstStr('Setup')); }