signature FC use myself code
parent
a1381e7fcc
commit
36df71a77c
|
@ -2,8 +2,6 @@
|
||||||
// https://help.aliyun.com/document_detail/53252.html
|
// https://help.aliyun.com/document_detail/53252.html
|
||||||
// https://github.com/aliyun/fc-php-sdk/blob/master/src/AliyunFC/Client.php
|
// https://github.com/aliyun/fc-php-sdk/blob/master/src/AliyunFC/Client.php
|
||||||
|
|
||||||
use AliyunFC\Client;
|
|
||||||
|
|
||||||
function printInput($event, $context)
|
function printInput($event, $context)
|
||||||
{
|
{
|
||||||
if (strlen(json_encode($event['body']))>500) $event['body']=substr($event['body'],0,strpos($event['body'],'base64')+30) . '...Too Long!...' . substr($event['body'],-50);
|
if (strlen(json_encode($event['body']))>500) $event['body']=substr($event['body'],0,strpos($event['body'],'base64')+30) . '...Too Long!...' . substr($event['body'],-50);
|
||||||
|
@ -160,7 +158,7 @@ function install()
|
||||||
$AccessKeySecret = $_POST['AccessKeySecret'];
|
$AccessKeySecret = $_POST['AccessKeySecret'];
|
||||||
$tmp['AccessKeySecret'] = $AccessKeySecret;
|
$tmp['AccessKeySecret'] = $AccessKeySecret;
|
||||||
}
|
}
|
||||||
$response = SetbaseConfig($tmp, $_SERVER['accountId'], $_SERVER['region'], $_SERVER['service_name'], $_SERVER['function_name'], $AccessKeyID, $AccessKeySecret);
|
$response = setConfigResponse( SetbaseConfig($tmp, $_SERVER['accountId'], $_SERVER['region'], $_SERVER['service_name'], $_SERVER['function_name'], $AccessKeyID, $AccessKeySecret) );
|
||||||
if (api_error($response)) {
|
if (api_error($response)) {
|
||||||
$html = api_error_msg($response);
|
$html = api_error_msg($response);
|
||||||
$title = 'Error';
|
$title = 'Error';
|
||||||
|
@ -239,26 +237,71 @@ language:<br>';
|
||||||
return message($html, $title, 201);
|
return message($html, $title, 201);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getfunctioninfo($accountId, $region, $service_name, $function_name, $AccessKeyID, $AccessKeySecret)
|
function FCAPI2016($config, $Method, $data = '')
|
||||||
{
|
{
|
||||||
$fcClient = new Client([
|
$accountId = $config['accountId'];
|
||||||
"endpoint" => 'https://'.$accountId.'.'.$region.'.fc.aliyuncs.com',
|
$region = $config['region'];
|
||||||
"accessKeyID" => $AccessKeyID,
|
$service_name = $config['service_name'];
|
||||||
"accessKeySecret" => $AccessKeySecret
|
$function_name = $config['function_name'];
|
||||||
]);
|
$AccessKeyID = $config['AccessKeyID'];
|
||||||
return $fcClient->getFunction($service_name, $function_name);
|
$AccessKeySecret = $config['AccessKeySecret'];
|
||||||
|
|
||||||
|
$host = $accountId . '.' . $region . '-internal.fc.aliyuncs.com';
|
||||||
|
$path = '/2016-08-15/services/' . $service_name . '/functions/' . $function_name;
|
||||||
|
$url = 'https://' . $host . $path;
|
||||||
|
|
||||||
|
$ContentMd5 = '';
|
||||||
|
$ContentType = 'application/json';
|
||||||
|
date_default_timezone_set('UTC'); // unset last timezone setting
|
||||||
|
$Date = substr(gmdate("r", time()), 0, -5) . 'GMT';
|
||||||
|
$CanonicalizedFCHeaders = '';
|
||||||
|
$CanonicalizedResource = $path;
|
||||||
|
|
||||||
|
$signaturestr = $Method . "\n" . $ContentMd5 . "\n" . $ContentType . "\n" . $Date . "\n" . $CanonicalizedFCHeaders . $CanonicalizedResource;
|
||||||
|
$signature = base64_encode(hash_hmac('sha256', $signaturestr, $AccessKeySecret, true));
|
||||||
|
|
||||||
|
$header['Host'] = $host;
|
||||||
|
$header['Date'] = $Date;
|
||||||
|
$header['Content-Type'] = $ContentType;
|
||||||
|
$header['Authorization'] = 'FC ' . $AccessKeyID . ':' . $signature;
|
||||||
|
$header['Content-Length'] = strlen($data);
|
||||||
|
|
||||||
|
//return curl($Method, $url, $data, $header)['body'];
|
||||||
|
$p = 0;
|
||||||
|
while ($response['stat']==0 && $p<3) {
|
||||||
|
$response = curl($Method, $url, $data, $header);
|
||||||
|
$p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($response['stat']==0) {
|
||||||
|
$tmp['ErrorCode'] = 'Network Error';
|
||||||
|
$tmp['ErrorMessage'] = 'Can not connect ' . $host;
|
||||||
|
return json_encode($tmp);
|
||||||
|
}
|
||||||
|
if ($response['stat']!=200) {
|
||||||
|
$tmp = json_decode($response['body'], true);
|
||||||
|
$tmp['ErrorMessage'] .= '<br>' . $response['stat'] . '<br>' . $signaturestr . '<br>' . json_encode($header) . PHP_EOL;
|
||||||
|
return json_encode($tmp);
|
||||||
|
}
|
||||||
|
return $response['body'];
|
||||||
|
}
|
||||||
|
|
||||||
|
function getfunctioninfo($config)
|
||||||
|
{
|
||||||
|
return FCAPI2016($config, 'GET');
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateEnvironment($Envs, $accountId, $region, $service_name, $function_name, $AccessKeyID, $AccessKeySecret)
|
function updateEnvironment($Envs, $accountId, $region, $service_name, $function_name, $AccessKeyID, $AccessKeySecret)
|
||||||
{
|
{
|
||||||
//print_r($Envs);
|
//print_r($Envs);
|
||||||
$fcClient = new Client([
|
$config['accountId'] = $accountId;
|
||||||
"endpoint" => 'https://'.$accountId.'.'.$region.'.fc.aliyuncs.com',
|
$config['region'] = $region;
|
||||||
"accessKeyID" => $AccessKeyID,
|
$config['service_name'] = $service_name;
|
||||||
"accessKeySecret" => $AccessKeySecret
|
$config['function_name'] = $function_name;
|
||||||
]);
|
$config['AccessKeyID'] = $AccessKeyID;
|
||||||
$tmp = $fcClient->getFunction($service_name, $function_name)['data'];
|
$config['AccessKeySecret'] = $AccessKeySecret;
|
||||||
//$tmp = getfunctioninfo($accountId, $region, $service_name, $function_name, $AccessKeyID, $AccessKeySecret)['data'];
|
|
||||||
|
$tmp = json_decode(getfunctioninfo($config), true);
|
||||||
foreach ($tmp['environmentVariables'] as $key => $value ) {
|
foreach ($tmp['environmentVariables'] as $key => $value ) {
|
||||||
$tmp_env[$key] = $value;
|
$tmp_env[$key] = $value;
|
||||||
}
|
}
|
||||||
|
@ -268,27 +311,20 @@ function updateEnvironment($Envs, $accountId, $region, $service_name, $function_
|
||||||
$tmp_env = array_filter($tmp_env, 'array_value_isnot_null'); // remove null. 清除空值
|
$tmp_env = array_filter($tmp_env, 'array_value_isnot_null'); // remove null. 清除空值
|
||||||
ksort($tmp_env);
|
ksort($tmp_env);
|
||||||
|
|
||||||
$tmpdata['functionName'] = $tmp['functionName'];
|
|
||||||
$tmpdata['description'] = $tmp['description'];
|
|
||||||
$tmpdata['memorySize'] = $tmp['memorySize'];
|
|
||||||
$tmpdata['timeout'] = $tmp['timeout'];
|
|
||||||
$tmpdata['runtime'] = $tmp['runtime'];
|
|
||||||
$tmpdata['handler'] = $tmp['handler'];
|
|
||||||
$tmpdata['environmentVariables'] = $tmp_env;
|
$tmpdata['environmentVariables'] = $tmp_env;
|
||||||
$tmpdata['code']['zipFile'] = base64_encode( file_get_contents($fcClient->getFunctionCode($service_name, $function_name)['data']['url']) );
|
return FCAPI2016($config, 'PUT', json_encode($tmpdata));
|
||||||
return $fcClient->updateFunction($service_name, $function_name, $tmpdata);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function SetbaseConfig($Envs, $accountId, $region, $service_name, $function_name, $AccessKeyID, $AccessKeySecret)
|
function SetbaseConfig($Envs, $accountId, $region, $service_name, $function_name, $AccessKeyID, $AccessKeySecret)
|
||||||
{
|
{
|
||||||
//echo json_encode($Envs,JSON_PRETTY_PRINT);
|
$config['accountId'] = $accountId;
|
||||||
$fcClient = new Client([
|
$config['region'] = $region;
|
||||||
"endpoint" => 'https://'.$accountId.'.'.$region.'.fc.aliyuncs.com',
|
$config['service_name'] = $service_name;
|
||||||
"accessKeyID" => $AccessKeyID,
|
$config['function_name'] = $function_name;
|
||||||
"accessKeySecret" => $AccessKeySecret
|
$config['AccessKeyID'] = $AccessKeyID;
|
||||||
]);
|
$config['AccessKeySecret'] = $AccessKeySecret;
|
||||||
$tmp = $fcClient->getFunction($service_name, $function_name)['data'];
|
|
||||||
// $tmp = getfunctioninfo($accountId, $region, $service_name, $function_name, $AccessKeyID, $AccessKeySecret)['data'];
|
$tmp = json_decode(getfunctioninfo($config), true);
|
||||||
foreach ($tmp['environmentVariables'] as $key => $value ) {
|
foreach ($tmp['environmentVariables'] as $key => $value ) {
|
||||||
$tmp_env[$key] = $value;
|
$tmp_env[$key] = $value;
|
||||||
}
|
}
|
||||||
|
@ -298,59 +334,51 @@ function SetbaseConfig($Envs, $accountId, $region, $service_name, $function_name
|
||||||
$tmp_env = array_filter($tmp_env, 'array_value_isnot_null'); // remove null. 清除空值
|
$tmp_env = array_filter($tmp_env, 'array_value_isnot_null'); // remove null. 清除空值
|
||||||
ksort($tmp_env);
|
ksort($tmp_env);
|
||||||
|
|
||||||
$tmpdata['functionName'] = $function_name;
|
|
||||||
$tmpdata['description'] = 'Onedrive index and manager in Aliyun FC.';
|
$tmpdata['description'] = 'Onedrive index and manager in Aliyun FC.';
|
||||||
$tmpdata['memorySize'] = 128;
|
$tmpdata['memorySize'] = 128;
|
||||||
$tmpdata['timeout'] = 30;
|
$tmpdata['timeout'] = 30;
|
||||||
$tmpdata['runtime'] = 'php7.2';
|
|
||||||
$tmpdata['handler'] = 'index.handler';
|
|
||||||
$tmpdata['environmentVariables'] = $tmp_env;
|
$tmpdata['environmentVariables'] = $tmp_env;
|
||||||
$tmpdata['code']['zipFile'] = base64_encode( file_get_contents($fcClient->getFunctionCode($service_name, $function_name)['data']['url']) );
|
|
||||||
return $fcClient->updateFunction($service_name, $function_name, $tmpdata);
|
return FCAPI2016($config, 'PUT', json_encode($tmpdata));
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateProgram($accountId, $region, $service_name, $function_name, $AccessKeyID, $AccessKeySecret, $source)
|
function updateProgram($accountId, $region, $service_name, $function_name, $AccessKeyID, $AccessKeySecret, $source)
|
||||||
{
|
{
|
||||||
//WaitSCFStat();
|
$config['accountId'] = $accountId;
|
||||||
$fcClient = new Client([
|
$config['region'] = $region;
|
||||||
"endpoint" => 'https://'.$accountId.'.'.$region.'.fc.aliyuncs.com',
|
$config['service_name'] = $service_name;
|
||||||
"accessKeyID" => $AccessKeyID,
|
$config['function_name'] = $function_name;
|
||||||
"accessKeySecret" => $AccessKeySecret
|
$config['AccessKeyID'] = $AccessKeyID;
|
||||||
]);
|
$config['AccessKeySecret'] = $AccessKeySecret;
|
||||||
$tmp = $fcClient->getFunction($service_name, $function_name)['data'];
|
|
||||||
//$tmp = getfunctioninfo($accountId, $region, $service_name, $function_name, $AccessKeyID, $AccessKeySecret)['data'];
|
$tmp = json_decode(getfunctioninfo($config), true);
|
||||||
|
|
||||||
$tmpdata['functionName'] = $tmp['functionName'];
|
|
||||||
$tmpdata['description'] = $tmp['description'];
|
|
||||||
$tmpdata['memorySize'] = $tmp['memorySize'];
|
|
||||||
$tmpdata['timeout'] = $tmp['timeout'];
|
|
||||||
$tmpdata['runtime'] = $tmp['runtime'];
|
|
||||||
$tmpdata['handler'] = $tmp['handler'];
|
|
||||||
$tmpdata['environmentVariables'] = $tmp['environmentVariables'];
|
|
||||||
$tmpdata['code']['zipFile'] = base64_encode( file_get_contents($source) );
|
$tmpdata['code']['zipFile'] = base64_encode( file_get_contents($source) );
|
||||||
|
|
||||||
return $fcClient->updateFunction($service_name, $function_name, $tmpdata);
|
return FCAPI2016($config, 'PUT', json_encode($tmpdata));
|
||||||
}
|
}
|
||||||
|
|
||||||
function api_error($response)
|
function api_error($response)
|
||||||
{
|
{
|
||||||
return !isset($response['data']);
|
return isset($response['ErrorMessage']);
|
||||||
}
|
}
|
||||||
|
|
||||||
function api_error_msg($response)
|
function api_error_msg($response)
|
||||||
{
|
{
|
||||||
return $response;
|
return $response['ErrorCode'] . '<br>
|
||||||
return $response['Error']['Code'] . '<br>
|
' . $response['ErrorMessage'] . '<br><br>
|
||||||
' . $response['Error']['Message'] . '<br><br>
|
|
||||||
|
accountId:' . $_SERVER['accountId'] . '<br>
|
||||||
|
region:' . $_SERVER['region'] . '<br>
|
||||||
|
service_name:' . $_SERVER['service_name'] . '<br>
|
||||||
function_name:' . $_SERVER['function_name'] . '<br>
|
function_name:' . $_SERVER['function_name'] . '<br>
|
||||||
Region:' . $_SERVER['Region'] . '<br>
|
|
||||||
namespace:' . $_SERVER['namespace'] . '<br>
|
|
||||||
<button onclick="location.href = location.href;">'.getconstStr('Refresh').'</button>';
|
<button onclick="location.href = location.href;">'.getconstStr('Refresh').'</button>';
|
||||||
}
|
}
|
||||||
|
|
||||||
function setConfigResponse($response)
|
function setConfigResponse($response)
|
||||||
{
|
{
|
||||||
return $response;
|
return json_decode($response, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch = 'master')
|
||||||
|
|
Loading…
Reference in New Issue