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 = '
+
+ ';
+ $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 = '
- ';
- $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 .= '
-