From ba22154eda8e76fe677d7253c03667e583afd5fd Mon Sep 17 00:00:00 2001 From: qkqpttgf <45693631+qkqpttgf@users.noreply.github.com> Date: Sat, 18 Jan 2020 00:18:24 +0800 Subject: [PATCH] Add files via upload --- function/common.php | 2 +- function/heroku.php | 395 ++++++++++++++++++++++++++++++++++++++ function/scf.php | 450 ++++++++++++++++++++++++++++++++++++++------ index.php | 1 + version | 1 + 5 files changed, 791 insertions(+), 58 deletions(-) create mode 100644 function/heroku.php create mode 100644 version diff --git a/function/common.php b/function/common.php index 70f55f7..bf0429d 100644 --- a/function/common.php +++ b/function/common.php @@ -375,7 +375,7 @@ function main($path) } if (getConfig('admin')!='') { if ($_POST['password1']==getConfig('admin')) { - return adminform($_SERVER['function_name'].'admin',md5($_POST['password1']),$url); + return adminform('admin',md5($_POST['password1']),$url); } else return adminform(); } else { return output('', 302, [ 'Location' => $url ]); diff --git a/function/heroku.php b/function/heroku.php new file mode 100644 index 0000000..25d135d --- /dev/null +++ b/function/heroku.php @@ -0,0 +1,395 @@ +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 spurlencode($path, '/'); +} + +function getGET() +{ + $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 get_refresh_token() +{ + global $constStr; + $url = path_format($_SERVER['PHP_SELF'] . '/'); + if ($_GET['authorization_code'] && isset($_GET['code'])) { + $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'])) { + $tmptoken = $ret['refresh_token']; + $str = ' + refresh_token :
'; + /*for ($i=1;strlen($tmptoken)>0;$i++) { + $t['t' . $i] = substr($tmptoken,0,128); + $str .= ' + t' . $i . ':

'; + $tmptoken=substr($tmptoken,128); + } + $str .= ' + Add t1-t'.--$i.' to environments.*/ + $str .= ' +

+ Adding refresh_token to Config. + '; + setConfig([ 'refresh_token' => $tmptoken ]); + 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 (getConfig('Onedrive_ver')=='MS' || getConfig('Onedrive_ver')=='CN' || getConfig('Onedrive_ver')=='MSC') { + return message(' + '.getconstStr('JumptoOffice').' + + ', getconstStr('Wait').' 1s', 201); + } + } + if ($_GET['install2']) { + // echo $_POST['Onedrive_ver']; + if ($_POST['Onedrive_ver']=='MS' || $_POST['Onedrive_ver']=='CN' || $_POST['Onedrive_ver']=='MSC') { + $tmp['Onedrive_ver'] = $_POST['Onedrive_ver']; + if ($_POST['Onedrive_ver']=='MSC') { + $tmp['client_id'] = $_POST['client_id']; + $tmp['client_secret'] = $_POST['client_secret']; + } + $response = json_decode(setConfig($tmp)['body'], true); + $title = getconstStr('MayinEnv'); + $html = getconstStr('Wait') . ' 3s'; + if (isset($response['id'])&&isset($response['message'])) { + $html = $response['id'] . '
+' . $response['message'] . '

+function_name:' . $_SERVER['function_name'] . '
+'; + $title = 'Error'; + } + return message($html, $title, 201); + } + } + if ($_GET['install1']) { + if ($_POST['admin']!='') { + $tmp['admin'] = $_POST['admin']; + $tmp['language'] = $_POST['language']; + $APIKey = getConfig('APIKey'); + if ($APIKey=='') { + $APIKey = $_POST['APIKey']; + $tmp['APIKey'] = $APIKey; + } + $function_name = getConfig('function_name'); + if ($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'; + $tmp['function_name'] = $function_name; + } + $response = json_decode(setHerokuConfig($tmp, $function_name, $APIKey)['body'], true); + if (isset($response['id'])&&isset($response['message'])) { + $html = $response['id'] . '
+' . $response['message'] . '

+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 message($html, $title, 201); + } + } + if ($_GET['install0']) { + $html .= ' +
+language:
'; + foreach ($constStr['languages'] as $key1 => $value1) { + $html .= ' +
'; + } + if (getConfig('APIKey')=='') $html .= ' + '.getconstStr('Create').' API Key
+
'; + $html .= ' +
'; + $html .= ' + +
+ '; + $title = getconstStr('SelectLanguage'); + return message($html, $title, 201); + } + $html .= 'refresh_token not exist, click to install.'; + $title = 'Error'; + return message($html, $title, 201); +} + +function getConfig($str) +{ + return getenv($str); +} + +function array_value_isnot_null($arr) +{ + return $arr!==''; +} + +function setConfig($arr) +{ + return setHerokuConfig($arr, getConfig('function_name'), getConfig('APIKey')); +} + +function HerokuAPI($method, $url, $data = '', $apikey) +{ + if ($method=='PATCH') { + $headers['Content-Type'] = 'application/json'; + } + $headers['Authorization'] = 'Bearer ' . $apikey; + $headers['Accept'] = 'application/vnd.heroku+json; version=3'; + //if (!isset($headers['Accept'])) $headers['Accept'] = '*/*'; + //if (!isset($headers['Referer'])) $headers['Referer'] = $url; + $sendHeaders = array(); + foreach ($headers as $headerName => $headerVal) { + $sendHeaders[] = $headerName . ': ' . $headerVal; + } + error_log($method . $url . $data . $apikey); + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_CUSTOMREQUEST,$method); + curl_setopt($ch, CURLOPT_POSTFIELDS,$data); + curl_setopt($ch, CURLOPT_TIMEOUT, 5); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); + curl_setopt($ch, CURLOPT_HTTPHEADER, $sendHeaders); + $response['body'] = curl_exec($ch); + $response['stat'] = curl_getinfo($ch,CURLINFO_HTTP_CODE); + curl_close($ch); + error_log($response['stat'].' +'.$response['body'].' +'); + return $response; +} + +function getHerokuConfig($function_name, $apikey) +{ + return HerokuAPI('GET', 'https://api.heroku.com/apps/' . $function_name . '/config-vars', '', $apikey); +} + +function setHerokuConfig($env, $function_name, $apikey) +{ + $data = json_encode($env); + return HerokuAPI('PATCH', 'https://api.heroku.com/apps/' . $function_name . '/config-vars', $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); + $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'] . '

+function_name:' . $_SERVER['function_name'] . '
+Region:' . $_SERVER['Region'] . '
+namespace:' . $namespace . '
+'; + $title = 'Error'; + } else { + $html .= getconstStr('UpdateSuccess') . '
+'; + $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; + } + } + if ($tmp['domain_path']!='') { + $tmp1 = explode("|",$tmp['domain_path']); + $tmparr = []; + foreach ($tmp1 as $multidomain_paths){ + $pos = strpos($multidomain_paths,":"); + if ($pos>0) $tmparr[substr($multidomain_paths, 0, $pos)] = path_format(substr($multidomain_paths, $pos+1)); + } + $tmp['domain_path'] = $tmparr; + } + $response = setConfig($tmp); + if (!$response) { + $html = $response . '
+'; + $title = 'Error'; + } else { + $html .= ''; + } + } + if ($_GET['preview']) { + $preurl = $_SERVER['PHP_SELF'] . '?preview'; + } else { + $preurl = path_format($_SERVER['PHP_SELF'] . '/'); + } + $html .= ' + '.getconstStr('Back').'    + Github
'; + /*if ($needUpdate) { + $html .= '
' . $_SERVER['github_version'] . '
+
+ +
'; + } else { + $html .= getconstStr('NotNeedUpdate'); + }*/ + $html .= ' +
+ '; + foreach ($constEnv as $key) { + if ($key=='language') { + $html .= ' + + + + '; + } elseif ($key=='theme') { + $theme_arr = scandir('theme'); + $html .= ' + + + + '; + } elseif ($key=='domain_path') { + $tmp = getConfig($key); + $domain_path = ''; + foreach ($tmp as $k1 => $v1) { + $domain_path .= $k1 . ':' . $v1 . '|'; + } + $domain_path = substr($domain_path, 0, -1); + $html .= ' + + + + '; + } else $html .= ' + + + + '; + } + $html .= '
+ +
+ +
+ +
'; + return message($html, getconstStr('Setup')); +} diff --git a/function/scf.php b/function/scf.php index 5d1b236..a86a42d 100644 --- a/function/scf.php +++ b/function/scf.php @@ -28,6 +28,7 @@ function GetGlobalVariable($event) function GetPathSetting($event, $context) { $_SERVER['function_name'] = $context['function_name']; + $_SERVER['namespace'] = $context['namespace']; $host_name = $event['headers']['host']; $serviceId = $event['requestContext']['serviceId']; $public_path = path_format(getenv('public_path')); @@ -63,7 +64,7 @@ function GetPathSetting($event, $context) } else { $_SERVER['list_path'] = spurlencode($_SERVER['list_path'],'/') ; } - $_SERVER['is_imgup_path'] = is_imgup_path($path); + $_SERVER['is_guestup_path'] = is_guestup_path($path); $_SERVER['PHP_SELF'] = path_format($_SERVER['base_path'] . $path); $_SERVER['REMOTE_ADDR'] = $event['requestContext']['sourceIp']; $_SERVER['ajax']=0; @@ -84,24 +85,50 @@ function GetPathSetting($event, $context) return $path; } -function get_refresh_token($function_name, $Region, $Namespace) + +function getConfig($str) +{ + return getenv($str); +} + +function array_value_isnot_null($arr) +{ + return $arr!==''; +} + +function setConfig($arr) +{ + //$function_name, $Region, $Namespace, $SecretId, $SecretKey + $function_name = $_SERVER['function_name']; + $Region = $_SERVER['Region']; + $Namespace = $_SERVER['namespace']; + $SecretId = getConfig('SecretId'); + $SecretKey = getConfig('SecretKey'); + return updateEnvironment($arr, $function_name, $Region, $Namespace, $SecretId, $SecretKey); +} + +function get_refresh_token() { global $constStr; $url = path_format($_SERVER['PHP_SELF'] . '/'); if ($_GET['authorization_code'] && isset($_GET['code'])) { - $ret = json_decode(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']), true); + $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'])) { - $tmptoken=$ret['refresh_token']; + $tmptoken = $ret['refresh_token']; $str = ' refresh_token :
'; - for ($i=1;strlen($tmptoken)>0;$i++) { + /*for ($i=1;strlen($tmptoken)>0;$i++) { $t['t' . $i] = substr($tmptoken,0,128); $str .= ' t' . $i . ':

'; $tmptoken=substr($tmptoken,128); } $str .= ' - Add t1-t'.--$i.' to environments. + Add t1-t'.--$i.' to environments.*/ + $str .= ' +

+ Adding refresh_token to Config. '; - if (getenv('SecretId')!='' && getenv('SecretKey')!='') { - echo updataEnvironment($t, $function_name, $Region, $Namespace); - $str .= ' + setConfig([ 'refresh_token' => $tmptoken ]); + savecache('access_token', $ret['access_token'], $ret['expires_in'] - 60); + $str .= ' '; - } - return message($str, $constStr['WaitJumpIndex'][$constStr['language']]); + return message($str, getconstStr('WaitJumpIndex')); } - return message('
' . json_encode($ret, JSON_PRETTY_PRINT) . '
', 500); + return message('
' . $tmp['body'] . '
', $tmp['stat']); + //return message('
' . json_encode($ret, JSON_PRETTY_PRINT) . '
', 500); } - if ($_GET['install2']) { - if (getenv('Onedrive_ver')=='MS' || getenv('Onedrive_ver')=='CN' || getenv('Onedrive_ver')=='MSC') { + if ($_GET['install3']) { + if (getConfig('Onedrive_ver')=='MS' || getConfig('Onedrive_ver')=='CN' || getConfig('Onedrive_ver')=='MSC') { return message(' - '.$constStr['JumptoOffice'][$constStr['language']].' + '.getconstStr('JumptoOffice').' - ', $constStr['Wait'][$constStr['language']].' 1s', 201); + ', getconstStr('Wait').' 1s', 201); } } - if ($_GET['install1']) { + if ($_GET['install2']) { // echo $_POST['Onedrive_ver']; if ($_POST['Onedrive_ver']=='MS' || $_POST['Onedrive_ver']=='CN' || $_POST['Onedrive_ver']=='MSC') { $tmp['Onedrive_ver'] = $_POST['Onedrive_ver']; - $tmp['language'] = $_COOKIE['language']; - $tmp['client_id'] = $_POST['client_id']; - $tmp['client_secret'] = equal_replace(base64_encode($_POST['client_secret'])); - $response = json_decode(updataEnvironment($tmp, $_SERVER['function_name'], $_SERVER['Region'], $Namespace), true)['Response']; - sleep(2); - $title = $constStr['MayinEnv'][$constStr['language']]; - $html = $constStr['Wait'][$constStr['language']] . ' 3s'; + if ($_POST['Onedrive_ver']=='MSC') { + $tmp['client_id'] = $_POST['client_id']; + $tmp['client_secret'] = $_POST['client_secret']; + } + $response = setConfig($tmp); + $title = getconstStr('MayinEnv'); + $html = getconstStr('Wait') . ' 3s'; if (isset($response['Error'])) { $html = $response['Error']['Code'] . '
' . $response['Error']['Message'] . '

function_name:' . $_SERVER['function_name'] . '
Region:' . $_SERVER['Region'] . '
namespace:' . $Namespace . '
-'; +'; $title = 'Error'; } return message($html, $title, 201); } } - if ($_GET['install0']) { - if (getenv('SecretId')=='' || getenv('SecretKey')=='') return message($constStr['SetSecretsFirst'][$constStr['language']].'
'.'('.$constStr['Create'][$constStr['language']].' SecretId & SecretKey)', 'Error', 500); - $response = json_decode(SetConfig($_SERVER['function_name'], $_SERVER['Region'], $Namespace), true)['Response']; - if (isset($response['Error'])) { - $html = $response['Error']['Code'] . '
+ if ($_GET['install1']) { + if ($_POST['admin']!='') { + $tmp['admin'] = $_POST['admin']; + $tmp['language'] = $_POST['language']; + $SecretId = getConfig('SecretId'); + if ($SecretId=='') { + $SecretId = $_POST['SecretId']; + $tmp['SecretId'] = $SecretId; + } + $SecretKey = getConfig('SecretKey'); + if ($SecretKey=='') { + $SecretKey = $_POST['SecretKey']; + $tmp['SecretKey'] = $SecretKey; + } + echo SetbaseConfig($_SERVER['function_name'], $_SERVER['Region'], $_SERVER['namespace'], $SecretId, $SecretKey); + $response = updateEnvironment($tmp, $_SERVER['function_name'], $_SERVER['Region'], $_SERVER['namespace'], $SecretId, $SecretKey); + if (isset($response['Error'])) { + $html = $response['Error']['Code'] . '
' . $response['Error']['Message'] . '

function_name:' . $_SERVER['function_name'] . '
Region:' . $_SERVER['Region'] . '
namespace:' . $Namespace . '
-'; - $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=one_scf&redirectUrl=".$_SERVER['redirect_uri']."&allowImplicitFlow=false&ru=".urlencode($ru); - $app_url = "https://apps.dev.microsoft.com/?deepLink=".urlencode($deepLink); - $html = ' -
+'; + $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:
-
-
-