pull/187/head
root 2021-01-15 11:10:08 +08:00
parent 372a42bc05
commit e8f1fd7175
26 changed files with 2652 additions and 13168 deletions

1530
common.php

File diff suppressed because it is too large Load Diff

View File

@ -335,12 +335,12 @@ $constStr = [
'zh-tw' => '修改標籤',
],
'AddDisk' => [
'en-us' => 'Add Onedrive Disk',
'zh-cn' => '添加Onedrive盘',
'zh-tw' => '新增Onedrive盤',
'ja' => 'Onedriveを追加',
'ko-kr' => 'Onedrive 추가',
'fa' => 'اضافه کردن دیسک Onedrive',
'en-us' => 'Add Disk',
'zh-cn' => '添加盘',
'zh-tw' => '新增盤',
'ja' => 'を追加',
'ko-kr' => '추가',
'fa' => 'اضافه کردن دیسک ',
],
'Home' => [
'en-us' => 'Home',
@ -788,21 +788,21 @@ $constStr = [
'ko-kr' => '사무실로 이동하여 로그인하여 refresh_token을 받으십시오.',
'fa' => 'وارد Office شوید و یک refresh_token دریافت کنید',
],
'OnedriveDiskTag' => [
'en-us' => 'Onedrive Disk Tag',
'zh-cn' => 'Onedrive 标签',
'zh-tw' => 'Onedrive 標籤',
'ja' => 'Onedriveタグ',
'ko-kr' => 'Onedrive 태그',
'fa' => 'برچسب دیسک Onedrive',
'DiskTag' => [
'en-us' => 'Disk Tag',
'zh-cn' => '标签',
'zh-tw' => '標籤',
'ja' => 'タグ',
'ko-kr' => '태그',
'fa' => 'برچسب دیسک ',
],
'OnedriveDiskName' => [
'en-us' => 'Onedrive Showed Name',
'zh-cn' => 'Onedrive 显示名称',
'zh-tw' => 'Onedrive 顯示名稱',
'ja' => 'Onedrive表示名',
'ko-kr' => 'Onedrive 표시 이름',
'fa' => 'نام نشان داده شده Onedrive',
'DiskName' => [
'en-us' => 'Showed Name',
'zh-cn' => '显示名称',
'zh-tw' => '顯示名稱',
'ja' => '表示名',
'ko-kr' => '표시 이름',
'fa' => 'نام نشان داده شده ',
],
'DriveVerMS' => [
'en-us' => 'Onedrive, Onedrive for business',
@ -824,13 +824,13 @@ $constStr = [
],
'UseShareLink' => [
'en-us' => 'Share a folder in Onedrive (enable EDIT for everyone), input the link url below.',
'zh-cn' => '对一个Onedrive文件夹共享允许所有人编辑然后将共享链接填在下方',
'zh-cn' => '<font color="red">只有国际版能用,</font>对一个Onedrive文件夹共享允许所有人编辑然后将共享链接填在下方',
'zh-tw' => '對一個Onedrive資料夾共享允許所有人編輯然後將共享連結填在下方',
],
'CustomIdSecret' => [
'en-us' => 'Use custom client id & secret instead of OneManager default',
'zh-cn' => '自己申请应用ID与机密不用OneManager默认的',
'zh-tw' => '自己申請應用ID與機密不用OneManager預設的',
'zh-cn' => '自己申请应用ID与机密不用OneManager默认的',
'zh-tw' => '自己申請應用ID與機密不用OneManager預設的',
'ja' => 'アプリケーションIDとシークレットを自分で申請する',
'ko-kr' => '응용 프로그램 ID 및 비밀 신청',
'fa' => 'به طور پیش فرض اما از شناسه برنامه و سکرت استفاده کنید',

715
disk/Aliyundrive.php Normal file
View File

@ -0,0 +1,715 @@
<?php
class Aliyundrive {
protected $access_token;
protected $disktag;
function __construct($tag) {
$this->disktag = $tag;
$this->auth_url = 'https://websv.aliyundrive.com/token/refresh';
$this->api_url = 'https://api.aliyundrive.com/v2';
$this->access_token = $this->get_access_token(getConfig('refresh_token', $tag));
$this->default_drive_id = getConfig('default_drive_id', $tag);
}
public function isfine()
{
if (!$this->access_token) return false;
else return true;
}
public function show_base_class()
{
return get_class();
//$tmp[0] = get_class();
//$tmp[1] = get_class($this);
//return $tmp;
}
public function list_files($path = '/')
{
$files = $this->list_path($path);
return $this->files_format($files);
}
protected function files_format($files)
{
//return $files;
if ($files['type']=='file') {
$tmp['type'] = 'file';
$tmp['id'] = $files['file_id'];
if (isset($files['name'])) $tmp['name'] = $files['name'];
elseif (isset($files['file_name'])) $tmp['name'] = $files['file_name'];
$tmp['time'] = $files['updated_at'];
$tmp['size'] = $files['size'];
$tmp['mime'] = $files['file']['mimeType'];
$tmp['url'] = $files['download_url'];
$tmp['content'] = $files['content'];
if (isset($files['exist'])) $tmp['exist'] = $files['exist'];
if (isset($files['rapid_upload'])) $tmp['rapid_upload'] = $files['rapid_upload'];
} elseif ($files['type']=='folder'||isset($files['items'])) {
$tmp['type'] = 'folder';
$tmp['id'] = $files['file_id'];
if (isset($files['name'])) $tmp['name'] = $files['name'];
elseif (isset($files['file_name'])) $tmp['name'] = $files['file_name'];
$tmp['time'] = $files['updated_at'];
$tmp['size'] = $files['size'];
//$tmp['page'] = $files['folder']['page'];
foreach ($files['items'] as $file) {
if ($file['type']=='file') {
$tmp['list'][$file['name']]['type'] = 'file';
$tmp['list'][$file['name']]['url'] = $file['download_url'];
$tmp['list'][$file['name']]['mime'] = $file['file']['content_type'];
} elseif ($file['type']=='folder') {
$tmp['list'][$file['name']]['type'] = 'folder';
}
//$tmp['id'] = $file['parent_file_id'];
$tmp['list'][$file['name']]['id'] = $file['file_id'];
$tmp['list'][$file['name']]['name'] = $file['name'];
$tmp['list'][$file['name']]['time'] = $file['updated_at'];
$tmp['list'][$file['name']]['size'] = $file['size'];
$tmp['childcount']++;
}
} elseif (isset($files['code'])) {
return $files;
}
//error_log(json_encode($tmp));
return $tmp;
}
protected function list_path($path = '/')
{
global $exts;
while (substr($path, -1)=='/') $path = substr($path, 0, -1);
//$files = getcache('path_' . $path, $this->disktag);
//if (!$files) {
//if (!($files = getcache('path_' . $path, $this->disktag))) {
if ($path == '/' || $path == '') {
$files = $this->fileList('root');
//error_log('root_id' . $files['id']);
$files['file_id'] = 'root';
$files['type'] = 'folder';
} else {
$tmp = splitlast($path, '/');
$parent_path = $tmp[0];
$filename = urldecode($tmp[1]);
$parent_folder = $this->list_path($parent_path);
foreach ($parent_folder['items'] as $item) {
if ($item['name']==$filename) {
if ($item['type']=='folder') {
$files = $this->fileList($item['file_id']);
$files['type'] = 'folder';
$files['file_id'] = $item['file_id'];
$files['name'] = $item['name'];
$files['time'] = $item['updated_at'];
$files['size'] = $item['size'];
} else $files = $item;
}
}
//echo $files['name'];
}
if ($files['type']=='file') {
if (in_array(splitlast($files['name'],'.')[1], $exts['txt'])) {
if (!(isset($files['content'])&&$files['content']['stat']==200)) {
$content1 = curl('GET', $files['download_url']);
$files['content'] = $content1;
savecache('path_' . $path, $files, $this->disktag);
}
}
}
if (!$files) {
$files['error']['code'] = 'Not Found';
$files['error']['message'] = 'Not Found';
$files['error']['stat'] = 404;
} elseif (isset($files['stat'])) {
$tmp['error']['stat'] = $files['stat'];
$files['error']['code'] = 'Error';
$files['error']['message'] = $files['body'];
} else {
savecache('path_' . $path, $files, $this->disktag, 600);
}
//}
//error_log('path:' . $path . ', files:' . json_encode($files));
return $files;
}
protected function fileGet($file_id)
{
$url = $this->api_url . '/file/get';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['drive_id'] = $this->default_drive_id;
$data['file_id'] = $file_id;
$res = curl('POST', $url, json_encode($data), $header);
if ($res['stat']==200) return json_decode($res['body'], true);
else return $res;
}
protected function fileList($parent_file_id)
{
$url = $this->api_url . '/file/list';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['limit'] = 50;
$data['marker'] = NULL;
$data['drive_id'] = $this->default_drive_id;
$data['parent_file_id'] = $parent_file_id;
$data['image_thumbnail_process'] = 'image/resize,w_160/format,jpeg';
$data['image_url_process'] = 'image/resize,w_1920/format,jpeg';
$data['video_thumbnail_process'] = 'video/snapshot,t_0,f_jpg,w_300';
$data['fields'] = '*';
$data['order_by'] = 'updated_at';
$data['order_direction'] = 'DESC';
$res = curl('POST', $url, json_encode($data), $header);
if ($res['stat']==200) return json_decode($res['body'], true);
else return $res;
}
public function Rename($file, $newname) {
$url = $this->api_url . '/file/update';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['check_name_mode'] = 'refuse';
$data['drive_id'] = $this->default_drive_id;
$data['file_id'] = $file['id'];
$data['name'] = $newname;
//$data['parent_file_id'] = 'root';
$result = curl('POST', $url, json_encode($data), $header);
//savecache('path_' . $file['path'], json_decode('{}',true), $this->disktag, 1);
//error_log('decode:' . json_encode($result));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
//return output($result['body'], $result['stat']);
}
public function Delete($file) {
$url = $this->api_url . '/batch';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['resource'] = 'file';
$data['requests'][0]['url'] = '/file/delete';
$data['requests'][0]['method'] = 'DELETE';
$data['requests'][0]['id'] = $file['id'];
$data['requests'][0]['headers']['Content-Type'] = 'application/json';
$data['requests'][0]['body']['drive_id'] = $this->default_drive_id;
$data['requests'][0]['body']['file_id'] = $file['id'];
$result = curl('POST', $url, json_encode($data), $header);
//savecache('path_' . $file['path'], json_decode('{}',true), $this->disktag, 1);
//error_log('result:' . json_encode($result));
//return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
$res = json_decode($result['body'], true)['responses'][0];
if (isset($res['status'])) return output($res['id'], $res['status']);
else return output($result['body'], $result['stat']);
}
public function Encrypt($folder, $passfilename, $pass) {
$existfile = $this->list_path($folder['path'] . '/' . $passfilename);
if (isset($existfile['type'])) { // 删掉原文件
$this->Delete(['id'=>$existfile['file_id']]);
}
if (!$folder['id']) {
$res = $this->list_path($folder['path']);
//error_log('res:' . json_encode($res));
$folder['id'] = $res['file_id'];
}
$tmp = '/tmp/' . $passfilename;
file_put_contents($tmp, $pass);
$result = $this->tmpfileCreate($folder['id'], $tmp, $passfilename);
if ($result['stat']==201) {
//error_log('1,url:' . $url .' res:' . json_encode($result));
$res = json_decode($result['body'], true);
$url = $res['part_info_list'][0]['upload_url'];
if (!$url) { // 无url应该算秒传
return output('no up url', 200);
}
$file_id = $res['file_id'];
$upload_id = $res['upload_id'];
$result = curl('PUT', $url, $pass, [], 1);
if ($result['stat']==200) { // 块1传好
$tmp1['part_number'] = 1;
$tmp1['etag'] = $result['returnhead']['ETag'];
$result = $this->fileComplete($file_id, $upload_id, [ $tmp1 ]);
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
}
//error_log('2,url:' . $url .' res:' . json_encode($result));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
public function Move($file, $folder) {
if (!$folder['id']) {
$res = $this->list_path($folder['path']);
//error_log('res:' . json_encode($res));
$folder['id'] = $res['file_id'];
}
$url = $this->api_url . '/batch';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['resource'] = 'file';
$data['requests'][0]['url'] = '/file/move';
$data['requests'][0]['method'] = 'POST';
$data['requests'][0]['id'] = $file['id'];
$data['requests'][0]['headers']['Content-Type'] = 'application/json';
$data['requests'][0]['body']['drive_id'] = $this->default_drive_id;
$data['requests'][0]['body']['file_id'] = $file['id'];
$data['requests'][0]['body']['auto_rename'] = true;
$data['requests'][0]['body']['to_parent_file_id'] = $folder['id'];
$result = curl('POST', $url, json_encode($data), $header);
//savecache('path_' . $file['path'], json_decode('{}',true), $this->disktag, 1);
//error_log('result:' . json_encode($result));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
public function Copy($file) {
if (!$file['id']) {
$oldfile = $this->list_path($file['path'] . '/' . $file['name']);
//error_log('res:' . json_encode($res));
//$file['id'] = $res['file_id'];
} else {
$oldfile = $this->fileGet($file['id']);
}
$url = $this->api_url . '/file/create';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['check_name_mode'] = 'auto_rename'; // ignore, auto_rename, refuse.
$data['content_hash'] = $oldfile['content_hash'];
$data['content_hash_name'] = 'sha1';
$data['content_type'] = $oldfile['content_type'];
$data['drive_id'] = $this->default_drive_id;
$data['ignoreError'] = false;
$data['name'] = $oldfile['name'];
$data['parent_file_id'] = $oldfile['parent_file_id'];
$data['part_info_list'][0]['part_number'] = 1;
$data['size'] = $oldfile['size'];
$data['type'] = 'file';
$result = curl('POST', $url, json_encode($data), $header);
if ($result['stat']==201) {
//error_log('1,url:' . $url .' res:' . json_encode($result));
$res = json_decode($result['body'], true);
$url = $res['part_info_list'][0]['upload_url'];
if (!$url) { // 无url应该算秒传
return output('no up url', 200);
} else {
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
/*$file_id = $res['file_id'];
$upload_id = $res['upload_id'];
$result = curl('PUT', $url, $content, [], 1);
if ($result['stat']==200) { // 块1传好
$etag = $result['returnhead']['ETag'];
$result = $this->fileComplete($file_id, $upload_id, $etag);
if ($result['stat']!=200) return output($result['body'], $result['stat']);
else return output('success', 0);
}*/
}
//error_log('2,url:' . $url .' res:' . json_encode($result));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
public function Edit($file, $content) {
$tmp = splitlast($file['path'], '/');
$folderpath = $tmp[0];
$filename = $tmp[1];
$existfile = $this->list_path($file['path']);
if (isset($existfile['type'])) { // 删掉原文件
$this->Delete(['id'=>$existfile['file_id']]);
}
$tmp1 = '/tmp/' . $filename;
file_put_contents($tmp1, $content);
$result = $this->tmpfileCreate($this->list_path($folderpath)['file_id'], $tmp1, $filename);
if ($result['stat']==201) {
//error_log('1,url:' . $url .' res:' . json_encode($result));
$res = json_decode($result['body'], true);
$url = $res['part_info_list'][0]['upload_url'];
if (!$url) { // 无url应该算秒传
return output('no up url', 0);
}
$file_id = $res['file_id'];
$upload_id = $res['upload_id'];
$result = curl('PUT', $url, $content, [], 1);
if ($result['stat']==200) { // 块1传好
$tmp2['part_number'] = 1;
$tmp2['etag'] = $result['returnhead']['ETag'];
$result = $this->fileComplete($file_id, $upload_id, [ $tmp2 ]);
if ($result['stat']!=200) return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
else return output('success', 0);
}
}
//error_log('2,url:' . $url .' res:' . json_encode($result));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
public function Create($folder, $type, $name, $content = '') {
if (!$folder['id']) {
$res = $this->list_path($folder['path']);
//error_log('res:' . json_encode($res));
$folder['id'] = $res['file_id'];
}
if ($type=='folder') {
$result = $this->folderCreate($folder['id'], $name);
//error_log('res:' . json_encode($result));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
if ($type=='file') {
$tmp = '/tmp/' . $name;
file_put_contents($tmp, $content);
$result = $this->tmpfileCreate($folder['id'], $tmp, $name);
if ($result['stat']==201) {
//error_log('1,url:' . $url .' res:' . json_encode($result));
$res = json_decode($result['body'], true);
if (isset($res['exist'])&&$res['exist']!=false) {
// 已经有
//error_log('exist:' . json_encode($res));
return output('{"type":"file","name":"' . $name . '", "exist":true}', 200);
}
if (isset($res['rapid_upload'])&&$res['rapid_upload']!=false) {
// 秒传
//error_log('rapid up:' . json_encode($res));
return output('{"type":"file","name":"' . $name . '", "rapid_upload":true}', 200);
}
$url = $res['part_info_list'][0]['upload_url'];
$file_id = $res['file_id'];
$upload_id = $res['upload_id'];
$result = curl('PUT', $url, $content, [], 1);
//error_log('2,url:' . $url .' res:' . json_encode($result));
if ($result['stat']==200) { // 块1传好
$tmp1['part_number'] = 1;
$tmp1['etag'] = $result['returnhead']['ETag'];
$result = $this->fileComplete($file_id, $upload_id, [ $tmp1 ]);
//error_log('3,url:' . $url .' res:' . json_encode($result));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
}
//error_log('4,url:' . $url .' res:' . json_encode($result));
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
return output('Type not folder or file.', 500);
}
protected function folderCreate($parentId, $folderName) {
if (strrpos($folderName, '/')) {
$tmp = splitlast($folderName, '/');
$parentId = json_decode($this->folderCreate($parentId, $tmp[0])['body'], true)['file_id'];
$folderName = $tmp[1];
}
$url = $this->api_url . '/file/create';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['check_name_mode'] = 'refuse'; // ignore, auto_rename, refuse.
$data['drive_id'] = $this->default_drive_id;
$data['name'] = $folderName;
$data['parent_file_id'] = $parentId;
$data['type'] = 'folder';
return curl('POST', $url, json_encode($data), $header);
}
protected function fileCreate($parentId, $fileName, $sha1, $size) {
$url = $this->api_url . '/file/create';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['check_name_mode'] = 'refuse'; // ignore, auto_rename, refuse.
$data['content_hash'] = $sha1;
$data['content_hash_name'] = 'sha1';
$data['content_type'] = '';
$data['drive_id'] = $this->default_drive_id;
$data['ignoreError'] = false;
$data['name'] = $fileName;
$data['parent_file_id'] = $parentId;
$data['part_info_list'][0]['part_number'] = 1;
$data['size'] = (int)$size;
$data['type'] = 'file';
return curl('POST', $url, json_encode($data), $header);
}
protected function tmpfileCreate($parentId, $tmpFilePath, $tofileName = '') {
$sha1 = sha1_file($tmpFilePath);
if ($tofileName == '') $tofileName = splitlast($tmpFilePath, '/')[1];
$url = $this->api_url . '/file/create';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['check_name_mode'] = 'refuse'; // ignore, auto_rename, refuse.
$data['content_hash'] = $sha1;
$data['content_hash_name'] = 'sha1';
$data['content_type'] = 'text/plain'; // now only txt
$data['drive_id'] = $this->default_drive_id;
$data['ignoreError'] = false;
$data['name'] = $tofileName;
$data['parent_file_id'] = $parentId;
$data['part_info_list'][0]['part_number'] = 1; // now only txt
$data['size'] = filesize($tmpFilePath);
$data['type'] = 'file';
return curl('POST', $url, json_encode($data), $header);
}
protected function fileComplete($file_id, $upload_id, $etags) {
$url = $this->api_url . '/file/complete';
$header["content-type"] = "application/json; charset=utf-8";
$header['authorization'] = 'Bearer ' . $this->access_token;
$data['drive_id'] = $this->default_drive_id;
$data['file_id'] = $file_id;
$data['ignoreError'] = false;
foreach ($etags as $etag) {
$data['part_info_list'][$etag['part_number'] - 1]['part_number'] = $etag['part_number'];
$data['part_info_list'][$etag['part_number'] - 1]['etag'] = $etag['etag'];
}
$data['upload_id'] = $upload_id;
return curl('POST', $url, json_encode($data), $header);
}
public function get_thumbnails_url($path = '/')
{
$res = $this->list_path($path);
$thumb_url = $res['thumbnail'];
return $thumb_url;
}
public function bigfileupload($path)
{
if (isset($_POST['uploadid'])) {
// Complete
$result = $this->fileComplete($_POST['fileid'], $_POST['uploadid'], $_POST['etag']);
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
} else {
if ($_POST['upbigfilename']=='') return output('error: no file name', 400);
if (!is_numeric($_POST['filesize'])) return output('error: no file size', 400);
if (!isset($_POST['filesha1'])) return output('error: no file sha1', 400);
$tmp = splitlast($_POST['upbigfilename'], '/');
if ($tmp[1]!='') {
$fileinfo['name'] = $tmp[1];
if ($_SERVER['admin']) $fileinfo['path'] = $tmp[0];
} else {
$fileinfo['name'] = $_POST['upbigfilename'];
}
$fileinfo['size'] = $_POST['filesize'];
$fileinfo['filelastModified'] = $_POST['filelastModified'];
if ($_SERVER['admin']) {
$filename = $fileinfo['name'];
} else {
$tmp1 = splitlast($fileinfo['name'], '.');
if ($tmp1[0]==''||$tmp1[1]=='') $filename = $_POST['filesha1'];
else $filename = $_POST['filesha1'] . '.' . $tmp1[1];
}
/*if ($fileinfo['size']>10*1024*1024) {
$cachefilename = spurlencode( $fileinfo['path'] . '/.' . $fileinfo['filelastModified'] . '_' . $fileinfo['size'] . '_' . $fileinfo['name'] . '.tmp', '/');
$getoldupinfo=$this->list_path(path_format($path . '/' . $cachefilename));
//echo json_encode($getoldupinfo, JSON_PRETTY_PRINT);
if ($getoldupinfo['type']=='file'&&$getoldupinfo['size']<5120) {
$getoldupinfo_j = curl('GET', $getoldupinfo['url']);
$getoldupinfo = json_decode($getoldupinfo_j['body'], true);
//if ( json_decode( curl('GET', $getoldupinfo['uploadUrl'])['body'], true)['@odata.context']!='' ) return output($getoldupinfo_j['body'], $getoldupinfo_j['stat']);
}
}*/
$parent = $this->list_path($path . '/' . $fileinfo['path']);
if (isset($parent['file_id'])) {
$parent_file_id = $parent['file_id'];
} else {
$res = $this->folderCreate($this->list_path($path)['file_id'], $fileinfo['path']);
//error_log($res['body']);
$parent_file_id = json_decode($res['body'], true)['file_id'];
}
$response = $this->fileCreate($parent_file_id, $filename, $_POST['filesha1'], $fileinfo['size']);
$res = json_decode($response['body'], true);
if (isset($res['exist'])) {
// 已经有
//error_log('exist:' . json_encode($res));
return output(json_encode($this->files_format(json_decode($response['body'], true))), $response['stat']);
//return output('{"type":"file","name":"' . $_POST['upbigfilename'] . '", "exist":true}', 200);
}
if (isset($res['rapid_upload'])&&$res['rapid_upload']!=false) {
// 秒传
//error_log('rapid up:' . json_encode($res));
return output(json_encode($this->files_format(json_decode($response['body'], true))), $response['stat']);
//return output('{"type":"file","name":"' . $_POST['upbigfilename'] . '", "rapid upload":true}', 200);
}
//if ($response['stat']<500) {
// $responsearry = json_decode($response['body'], true);
// if (isset($responsearry['error'])) return output($response['body'], $response['stat']);
// $fileinfo['uploadUrl'] = $responsearry['uploadUrl'];
// if ($fileinfo['size']>10*1024*1024) $this->MSAPI('PUT', path_format($path . '/' . $cachefilename), json_encode($fileinfo, JSON_PRETTY_PRINT), $this->access_token);
//}
return output($response['body'], $response['stat']);
}
}
public function AddDisk() {
global $constStr;
global $EnvConfigs;
$envs = '';
foreach ($EnvConfigs as $env => $v) if (isCommonEnv($env)) $envs .= '\'' . $env . '\', ';
$url = path_format($_SERVER['PHP_SELF'] . '/');
if (isset($_GET['install0']) && $_POST['disktag_add']!='') {
$_POST['disktag_add'] = preg_replace('/[^0-9a-zA-Z|_]/i', '', $_POST['disktag_add']);
$f = substr($_POST['disktag_add'], 0, 1);
if (strlen($_POST['disktag_add'])==1) $_POST['disktag_add'] .= '_';
if (isCommonEnv($_POST['disktag_add'])) {
return message('Do not input ' . $envs . '<br><button onclick="location.href = location.href;">'.getconstStr('Refresh').'</button>
<script>
var expd = new Date();
expd.setTime(expd.getTime()+1);
var expires = "expires="+expd.toGMTString();
document.cookie=\'disktag=; path=/; \'+expires;
</script>', 'Error', 201);
} elseif (!(('a'<=$f && $f<='z') || ('A'<=$f && $f<='Z'))) {
return message('Please start with letters<br><button onclick="location.href = location.href;">'.getconstStr('Refresh').'</button>
<script>
var expd = new Date();
expd.setTime(expd.getTime()+1);
var expires = "expires="+expd.toGMTString();
document.cookie=\'disktag=; path=/; \'+expires;
</script>', 'Error', 201);
}
$tmp['refresh_token'] = $_POST['refresh_token'];
$res = curl('POST', $this->auth_url, json_encode($tmp), ["content-type"=>"application/json; charset=utf-8"]);
//return output($res['body']);
if ($res['stat']!=200) {
return message($res['body'], $res['stat'], $res['stat']);
}
//var_dump($res['body']);
$result = json_decode($res['body'], true);
$tmp = null;
foreach ($EnvConfigs as $env => $v) if (isInnerEnv($env)) $tmp[$env] = '';
$tmp['refresh_token'] = $result['refresh_token'];
$tmp['default_drive_id'] = $result['default_drive_id'];
$tmp['default_sbox_drive_id'] = $result['default_sbox_drive_id'];
$tmp['token_expires'] = time()+7*24*60*60;
$tmp['Driver'] = 'Aliyundrive';
$tmp['disktag_add'] = $_POST['disktag_add'];
$tmp['diskname'] = $_POST['diskname'];
$response = setConfigResponse( setConfig($tmp, $this->disktag) );
if (api_error($response)) {
$html = api_error_msg($response);
$title = 'Error';
return message($html, $title, 201);
} else {
savecache('access_token', $result['access_token'], $this->disktag, $result['expires_in'] - 60);
$str .= '<meta http-equiv="refresh" content="5;URL=' . $url . '">
<script>
var expd = new Date();
expd.setTime(expd.getTime()+1);
var expires = "expires="+expd.toGMTString();
document.cookie=\'disktag=; path=/; \'+expires;
</script>';
return message($str, getconstStr('WaitJumpIndex'), 201);
}
/*$api = $this->api_url . '/user/get';
$header['authorization'] = 'Bearer ' . $this->access_token;
return json_encode(curl('GET', $api, '', $header));*/
}
$html = '
<div>
<form id="form1" action="" method="post" onsubmit="return notnull(this);">
' . getconstStr('DiskTag') . ': (' . getConfig('disktag') . ')
<input type="text" name="disktag_add" placeholder="' . getconstStr('EnvironmentsDescription')['disktag'] . '" style="width:100%"><br>
' . getconstStr('DiskName') . ':
<input type="text" name="diskname" placeholder="' . getconstStr('EnvironmentsDescription')['diskname'] . '" style="width:100%"><br>
<br>
<div>填入refresh_token:
<input type="text" name="refresh_token" placeholder="' . getconstStr(' ') . '" style="width:100%"><br>
</div>
<br>
<input type="submit" value="' . getconstStr('Submit') . '">
</form>
</div>
<script>
function notnull(t)
{
if (t.disktag_add.value==\'\') {
alert(\'' . getconstStr('DiskTag') . '\');
return false;
}
envs = [' . $envs . '];
if (envs.indexOf(t.disktag_add.value)>-1) {
alert("Do not input ' . $envs . '");
return false;
}
var reg = /^[a-zA-Z]([_a-zA-Z0-9]{1,20})$/;
if (!reg.test(t.disktag_add.value)) {
alert(\'' . getconstStr('TagFormatAlert') . '\');
return false;
}
if (t.refresh_token.value==\'\') {
alert(\'Input refresh_token\');
return false;
}
document.getElementById("form1").action="?install0&AddDisk=Aliyundrive";
var expd = new Date();
expd.setTime(expd.getTime()+(2*60*60*1000));
var expires = "expires="+expd.toGMTString();
document.cookie=\'disktag=\'+t.disktag_add.value+\'; path=/; \'+expires;
return true;
}
</script>';
$title = 'Select Account Type';
return message($html, $title, 201);
}
protected function get_access_token($refresh_token) {
if (!($this->access_token = getcache('access_token', $this->disktag))) {
$p=0;
$tmp1['refresh_token'] = $refresh_token;
while ($response['stat']==0&&$p<3) {
$response = curl('POST', $this->auth_url, json_encode($tmp1), ["content-type"=>"application/json; charset=utf-8"]);
$p++;
}
error_log(json_encode($response));
if ($response['stat']==200) $ret = json_decode($response['body'], true);
if (!isset($ret['access_token'])) {
error_log('failed to get [' . $this->disktag . '] access_token. response' . json_encode($ret));
$response['body'] = json_encode(json_decode($response['body']), JSON_PRETTY_PRINT);
$response['body'] .= '\nfailed to get [' . $this->disktag . '] access_token.';
return $response;
}
$tmp = $ret;
$tmp['access_token'] = '******';
$tmp['refresh_token'] = '******';
error_log('[' . $this->disktag . '] Get access token:' . json_encode($tmp, JSON_PRETTY_PRINT));
$this->access_token = $ret['access_token'];
savecache('access_token', $this->access_token, $this->disktag, $ret['expires_in'] - 300);
if (time()>getConfig('token_expires', $this->disktag)) setConfig([ 'refresh_token' => $ret['refresh_token'], 'token_expires' => time()+7*24*60*60 ], $this->disktag);
}
return $this->access_token;
}
}

915
disk/Onedrive.php Normal file
View File

@ -0,0 +1,915 @@
<?php
class Onedrive {
protected $access_token;
protected $disktag;
function __construct($tag) {
$this->disktag = $tag;
$this->redirect_uri = 'https://scfonedrive.github.io';
if (getConfig('client_id', $tag) && getConfig('client_secret', $tag)) {
$this->client_id = getConfig('client_id', $tag);
$this->client_secret = getConfig('client_secret', $tag);
} else {
$this->client_id = '734ef928-d74c-4555-8d1b-d942fa0a1a41';
$this->client_secret = ':EK[e0/4vQ@mQgma8LmnWb6j4_C1CSIW';
}
$this->oauth_url = 'https://login.microsoftonline.com/common/oauth2/v2.0/';
$this->api_url = 'https://graph.microsoft.com/v1.0';
$this->scope = 'https://graph.microsoft.com/Files.ReadWrite.All offline_access';
$this->access_token = $this->get_access_token(getConfig('refresh_token', $tag));
$this->client_secret = urlencode($this->client_secret);
$this->scope = urlencode($this->scope);
$this->DownurlStrName = '@microsoft.graph.downloadUrl';
$this->ext_api_url = '/me/drive/root';
}
public function isfine()
{
if (!$this->access_token) return false;
else return true;
}
public function show_base_class()
{
return get_class();
//$tmp[0] = get_class();
//$tmp[1] = get_class($this);
//return $tmp;
}
public function list_files($path = '/')
{
global $exts;
if (!($files = getcache('path_' . $path, $this->disktag))) {
// https://docs.microsoft.com/en-us/graph/api/driveitem-get?view=graph-rest-1.0
// https://docs.microsoft.com/zh-cn/graph/api/driveitem-put-content?view=graph-rest-1.0&tabs=http
// https://developer.microsoft.com/zh-cn/graph/graph-explorer
$pos = splitlast($path, '/');
$parentpath = $pos[0];
if ($parentpath=='') $parentpath = '/';
$filename = $pos[1];
if ($parentfiles = getcache('path_' . $parentpath, $this->disktag)) {
if (isset($parentfiles['children'][$filename][$this->DownurlStrName])) {
if (in_array(splitlast($filename,'.')[1], $exts['txt'])) {
if (!(isset($parentfiles['children'][$filename]['content'])&&$parentfiles['children'][$filename]['content']['stat']==200)) {
$content1 = curl('GET', $parentfiles['children'][$filename][$this->DownurlStrName]);
$parentfiles['children'][$filename]['content'] = $content1;
savecache('path_' . $parentpath, $parentfiles, $this->disktag);
}
}
return $this->files_format($parentfiles['children'][$filename]);
}
}
$url = $this->api_url . $this->ext_api_url;
if ($path !== '/') {
$url .= ':' . $path;
if (substr($url,-1)=='/') $url=substr($url,0,-1);
}
$url .= '?expand=children(select=id,name,size,file,folder,parentReference,lastModifiedDateTime,'.$this->DownurlStrName.')';
$retry = 0;
$arr = [];
while ($retry<3&&!$arr['stat']) {
$arr = curl('GET', $url, '', ['Authorization' => 'Bearer ' . $this->access_token], 1);
$retry++;
}
//echo $url . '<br><pre>' . json_encode($arr, JSON_PRETTY_PRINT) . '</pre>';
if ($arr['stat']<500) {
$files = json_decode($arr['body'], true);
//echo '<pre>' . json_encode($files, JSON_PRETTY_PRINT) . '</pre>';
if (isset($files['folder'])) {
if ($files['folder']['childCount']>200) {
// files num > 200 , then get nextlink
$page = $_POST['pagenum']==''?1:$_POST['pagenum'];
if ($page>1) if (!($files = getcache('path_' . $path . '_' . $page, $this->disktag))) {
$files = $this->fetch_files_children($files, $path, $page);
//$files['children'] = children_name($files['children']);
/*$url = $_SERVER['api_url'];
if ($path !== '/') {
$url .= ':' . $path;
if (substr($url,-1)=='/') $url=substr($url,0,-1);
$url .= ':/children?$top=9999&$select=id,name,size,file,folder,parentReference,lastModifiedDateTime,'.$this->DownurlStrName;
} else {
$url .= '/children?$top=9999&$select=id,name,size,file,folder,parentReference,lastModifiedDateTime,'.$this->DownurlStrName;
}
$children = json_decode(curl_request($url, false, ['Authorization' => 'Bearer ' . $this->access_token])['body'], true);
$files['children'] = $children['value'];*/
savecache('path_' . $path . '_' . $page, $files, $this->disktag);
}
} else {
// files num < 200 , then cache
//if (isset($files['children'])) {
//$files['children'] = children_name($files['children']);
//}
savecache('path_' . $path, $files, $this->disktag);
}
}
if (isset($files['file'])) {
if (in_array(splitlast($files['name'],'.')[1], $exts['txt'])) {
if (!(isset($files['content'])&&$files['content']['stat']==200)) {
$content1 = curl('GET', $files[$this->DownurlStrName]);
$files['content'] = $content1;
savecache('path_' . $path, $files, $this->disktag);
}
}
}
if (isset($files['error'])) {
$files['error']['stat'] = $arr['stat'];
}
} else {
//error_log($arr['body']);
$files = json_decode($arr['body'], true);
if (isset($files['error'])) {
$files['error']['stat'] = $arr['stat'];
} else {
$files['error']['stat'] = 503;
$files['error']['code'] = 'unknownError';
$files['error']['message'] = 'unknownError';
}
//$files = json_decode( '{"unknownError":{ "stat":'.$arr['stat'].',"message":"'.$arr['body'].'"}}', true);
//error_log(json_encode($files, JSON_PRETTY_PRINT));
}
}
//echo '<pre>' . json_encode($files, JSON_PRETTY_PRINT) . '</pre>';
return $this->files_format($files);
}
protected function files_format($files)
{
if (isset($files['file'])) {
$tmp['type'] = 'file';
$tmp['id'] = $files['id'];
$tmp['name'] = $files['name'];
$tmp['time'] = $files['lastModifiedDateTime'];
$tmp['size'] = $files['size'];
$tmp['mime'] = $files['file']['mimeType'];
$tmp['url'] = $files[$this->DownurlStrName];
$tmp['content'] = $files['content'];
} elseif (isset($files['folder'])) {
$tmp['type'] = 'folder';
$tmp['id'] = $files['id'];
$tmp['name'] = $files['name'];
$tmp['time'] = $files['lastModifiedDateTime'];
$tmp['size'] = $files['size'];
$tmp['childcount'] = $files['folder']['childCount'];
$tmp['page'] = $files['folder']['page'];
foreach ($files['children'] as $file) {
if (isset($file['file'])) {
$tmp['list'][$file['name']]['type'] = 'file';
//var_dump($file);
//echo $file['name'] . ':' . $this->DownurlStrName . ':' . $file[$this->DownurlStrName] . PHP_EOL;
$tmp['list'][$file['name']]['url'] = $file[$this->DownurlStrName];
$tmp['list'][$file['name']]['mime'] = $file['file']['mimeType'];
} elseif (isset($file['folder'])) {
$tmp['list'][$file['name']]['type'] = 'folder';
}
$tmp['list'][$file['name']]['id'] = $file['id'];
$tmp['list'][$file['name']]['name'] = $file['name'];
$tmp['list'][$file['name']]['time'] = $file['lastModifiedDateTime'];
$tmp['list'][$file['name']]['size'] = $file['size'];
}
} elseif (isset($files['error'])) {
return $files;
}
//error_log(json_encode($tmp));
return $tmp;
}
protected function fetch_files_children($files, $path, $page)
{
$cachefilename = '.SCFcache_'.$_SERVER['function_name'];
$maxpage = ceil($files['folder']['childCount']/200);
if (!($files['children'] = getcache('files_' . $path . '_page_' . $page, $this->disktag))) {
// down cache file get jump info. 下载cache文件获取跳页链接
$cachefile = $this->list_files(path_format($path . '/' .$cachefilename));
if ($cachefile['size']>0) {
$pageinfo = curl('GET', $cachefile[$this->DownurlStrName])['body'];
$pageinfo = json_decode($pageinfo,true);
for ($page4=1;$page4<$maxpage;$page4++) {
savecache('nextlink_' . $path . '_page_' . $page4, $pageinfo['nextlink_' . $path . '_page_' . $page4], $this->disktag);
$pageinfocache['nextlink_' . $path . '_page_' . $page4] = $pageinfo['nextlink_' . $path . '_page_' . $page4];
}
}
$pageinfochange=0;
for ($page1=$page;$page1>=1;$page1--) {
$page3=$page1-1;
$url = getcache('nextlink_' . $path . '_page_' . $page3, $this->disktag);
if ($url == '') {
if ($page1==1) {
$url = $this->api_url . $this->ext_api_url;
if ($path !== '/') {
$url .= ':' . $path;
if (substr($url,-1)=='/') $url=substr($url,0,-1);
$url .= ':';
}
$url .= '/children?$select=id,name,size,file,folder,parentReference,lastModifiedDateTime,'.$this->DownurlStrName;
$children = json_decode(curl('GET', $url, false, ['Authorization' => 'Bearer ' . $this->access_token])['body'], true);
// echo $url . '<br><pre>' . json_encode($children, JSON_PRETTY_PRINT) . '</pre>';
savecache('files_' . $path . '_page_' . $page1, $children['value'], $this->disktag);
$nextlink=getcache('nextlink_' . $path . '_page_' . $page1, $this->disktag);
if ($nextlink!=$children['@odata.nextLink']) {
savecache('nextlink_' . $path . '_page_' . $page1, $children['@odata.nextLink'], $this->disktag);
$pageinfocache['nextlink_' . $path . '_page_' . $page1] = $children['@odata.nextLink'];
$pageinfocache = clearbehindvalue($path,$page1,$maxpage,$pageinfocache);
$pageinfochange = 1;
}
$url = $children['@odata.nextLink'];
for ($page2=$page1+1;$page2<=$page;$page2++) {
sleep(1);
$children = json_decode(curl('GET', $url, false, ['Authorization' => 'Bearer ' . $this->access_token])['body'], true);
savecache('files_' . $path . '_page_' . $page2, $children['value'], $this->disktag);
$nextlink=getcache('nextlink_' . $path . '_page_' . $page2, $this->disktag);
if ($nextlink!=$children['@odata.nextLink']) {
savecache('nextlink_' . $path . '_page_' . $page2, $children['@odata.nextLink'], $this->disktag);
$pageinfocache['nextlink_' . $path . '_page_' . $page2] = $children['@odata.nextLink'];
$pageinfocache = clearbehindvalue($path,$page2,$maxpage,$pageinfocache);
$pageinfochange = 1;
}
$url = $children['@odata.nextLink'];
}
//echo $url . '<br><pre>' . json_encode($children, JSON_PRETTY_PRINT) . '</pre>';
$files['children'] = $children['value'];
$files['folder']['page']=$page;
$pageinfocache['filenum'] = $files['folder']['childCount'];
$pageinfocache['dirsize'] = $files['size'];
$pageinfocache['cachesize'] = $cachefile['size'];
$pageinfocache['size'] = $files['size']-$cachefile['size'];
if ($pageinfochange == 1) $this->MSAPI('PUT', path_format($path.'/'.$cachefilename), json_encode($pageinfocache, JSON_PRETTY_PRINT), $this->access_token)['body'];
return $files;
}
} else {
for ($page2=$page3+1;$page2<=$page;$page2++) {
sleep(1);
$children = json_decode(curl('GET', $url, false, ['Authorization' => 'Bearer ' . $this->access_token])['body'], true);
savecache('files_' . $path . '_page_' . $page2, $children['value'], $this->disktag, 3300);
$nextlink=getcache('nextlink_' . $path . '_page_' . $page2, $this->disktag);
if ($nextlink!=$children['@odata.nextLink']) {
savecache('nextlink_' . $path . '_page_' . $page2, $children['@odata.nextLink'], $this->disktag, 3300);
$pageinfocache['nextlink_' . $path . '_page_' . $page2] = $children['@odata.nextLink'];
$pageinfocache = clearbehindvalue($path,$page2,$maxpage,$pageinfocache);
$pageinfochange = 1;
}
$url = $children['@odata.nextLink'];
}
//echo $url . '<br><pre>' . json_encode($children, JSON_PRETTY_PRINT) . '</pre>';
$files['children'] = $children['value'];
$files['folder']['page']=$page;
$pageinfocache['filenum'] = $files['folder']['childCount'];
$pageinfocache['dirsize'] = $files['size'];
$pageinfocache['cachesize'] = $cachefile['size'];
$pageinfocache['size'] = $files['size']-$cachefile['size'];
if ($pageinfochange == 1) $this->MSAPI('PUT', path_format($path.'/'.$cachefilename), json_encode($pageinfocache, JSON_PRETTY_PRINT), $this->access_token)['body'];
return $files;
}
}
} else {
$files['folder']['page']=$page;
for ($page4=1;$page4<=$maxpage;$page4++) {
if (!($url = getcache('nextlink_' . $path . '_page_' . $page4, $this->disktag))) {
if ($files['folder'][$path.'_'.$page4]!='') savecache('nextlink_' . $path . '_page_' . $page4, $files['folder'][$path.'_'.$page4], $this->disktag);
} else {
$files['folder'][$path.'_'.$page4] = $url;
}
}
}
return $files;
}
public function Rename($file, $newname) {
$oldname = spurlencode($file['name']);
$oldname = path_format($file['path'] . '/' . $oldname);
$data = '{"name":"' . $newname . '"}';
//echo $oldname;
$result = $this->MSAPI('PATCH', $oldname, $data, $this->access_token);
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
}
public function Delete($file) {
$filename = spurlencode($file['name']);
$filename = path_format($file['path'] . '/' . $filename);
//echo $filename;
$result = $this->MSAPI('DELETE', $filename, '', $this->access_token);
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
return output($result['body'], $result['stat']);
}
public function Encrypt($folder, $passfilename, $pass) {
$filename = path_format($folder['path'] . '/' . urlencode($passfilename));
$result = $this->MSAPI('PUT', $filename, $pass, $this->access_token);
$path1 = $folder['path'];
if ($path1!='/'&&substr($path1, -1)=='/') $path1 = substr($path1, 0, -1);
savecache('path_' . $path1 . '/?password', '', $this->disktag, 1);
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
return output($result['body'], $result['stat']);
}
public function Move($file, $folder) {
$filename = spurlencode($file['name']);
$filename = path_format($file['path'] . '/' . $filename);
$data = '{"parentReference":{"path": "/drive/root:' . $folder['path'] . '"}}';
$result = $this->MSAPI('PATCH', $filename, $data, $this->access_token);
$path2 = spurlencode($folder['path'], '/');
if ($path2!='/'&&substr($path2, -1)=='/') $path2 = substr($path2, 0, -1);
savecache('path_' . $path2, json_decode('{}', true), $this->disktag, 1);
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
return output($result['body'], $result['stat']);
}
public function Copy($file) {
$filename = spurlencode($file['name']);
$filename = path_format($file['path'] . '/' . $filename);
$namearr = splitlast($file['name'], '.');
date_default_timezone_set('UTC');
if ($namearr[0]!='') {
$newname = $namearr[0] . ' (' . date("Ymd\THis\Z") . ')';
if ($namearr[1]!='') $newname .= '.' . $namearr[1];
} else {
$newname = '.' . $namearr[1] . ' (' . date("Ymd\THis\Z") . ')';
}
$data = '{ "name": "' . $newname . '" }';
$result = $this->MSAPI('copy', $filename, $data, $this->access_token);
/*$num = 0;
while ($result['stat']==409 && json_decode($result['body'], true)['error']['code']=='nameAlreadyExists') {
$num++;
if ($namearr[0]!='') {
$newname = $namearr[0] . ' (' . getconstStr('Copy') . ' ' . $num . ')';
if ($namearr[1]!='') $newname .= '.' . $namearr[1];
} else {
$newname = '.' . $namearr[1] . ' ('.getconstStr('Copy'). ' ' . $num .')';
}
//$newname = spurlencode($newname);
$data = '{ "name": "' . $newname . '" }';
$result = $this->MSAPI('copy', $filename, $data, $this->access_token);
}*/
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
return output($result['body'], $result['stat']);
}
public function Edit($file, $content) {
/*TXT一般不会超过4M不用二段上传
$filename = $path1 . ':/createUploadSession';
$response=MSAPI('POST',$filename,'{"item": { "@microsoft.graph.conflictBehavior": "replace" }}',$_SERVER['access_token']);
$uploadurl=json_decode($response,true)['uploadUrl'];
echo MSAPI('PUT',$uploadurl,$data,$_SERVER['access_token']);*/
$result = $this->MSAPI('PUT', $file['path'], $content, $this->access_token);
//return output($result['body'], $result['stat']);
//echo $result;
$resultarry = json_decode($result['body'],true);
if (isset($resultarry['error'])) return message($resultarry['error']['message']. '<hr><a href="javascript:history.back(-1)">'.getconstStr('Back').'</a>','Error', 403);
else return output('success', 0);
}
public function Create($parent, $type, $name, $content = '') {
if ($type=='file') {
$filename = spurlencode($name);
$filename = path_format($parent['path'] . '/' . $filename);
$result = $this->MSAPI('PUT', $filename, $content, $this->access_token);
}
if ($type=='folder') {
$data = '{ "name": "' . $name . '", "folder": { }, "@microsoft.graph.conflictBehavior": "rename" }';
$result = $this->MSAPI('children', $parent['path'], $data, $this->access_token);
}
//savecache('path_' . $path1, json_decode('{}',true), $_SERVER['disktag'], 1);
return output(json_encode($this->files_format(json_decode($result['body'], true))), $result['stat']);
return output($result['body'], $result['stat']);
}
public function AddDisk() {
global $constStr;
global $EnvConfigs;
$envs = '';
foreach ($EnvConfigs as $env => $v) if (isCommonEnv($env)) $envs .= '\'' . $env . '\', ';
$url = path_format($_SERVER['PHP_SELF'] . '/');
//$this->api_url = splitfirst($_SERVER['api_url'], '/v1.0')[0] . '/v1.0';
if (isset($_GET['install4'])) {
if ($this->access_token == '') {
$refresh_token = getConfig('refresh_token', $this->disktag);
if (!$refresh_token) {
$html = 'No refresh_token config, please AddDisk again or wait minutes.<br>' . $this->disktag;
$title = 'Error';
return message($html, $title, 201);
}
$response = $this->get_access_token($refresh_token);
if (isset($response['stat'])) return message($response['body'], 'Error', $response['stat']);
}
$tmp = null;
if ($_POST['DriveType']=='Onedrive') {
$api = $this->api_url . '/me';
$arr = curl('GET', $api, '', [ 'Authorization' => 'Bearer ' . $this->access_token ], 1);
if ($arr['stat']==200) {
$userid = json_decode($arr['body'], true)['id'];
$api = $this->api_url . '/users/' . $userid . '/drive';
$arr = curl('GET', $api, '', [ 'Authorization' => 'Bearer ' . $this->access_token ], 1);
if ($arr['stat']!=200) return message($arr['stat'] . '<br>' . $api . '<br>' . $arr['body'], 'Get User Drive ID', $arr['stat']);
$tmp['DriveId'] = json_decode($arr['body'], true)['id'];
} elseif ($arr['stat']==403||$arr['stat']==401) {
// 403世纪不让列me401个人也不给拿
$api = $this->api_url . '/me/drive';
} else {
return message($arr['stat'] . $arr['body'], 'Get User ID', $arr['stat']);
}
} elseif ($_POST['DriveType']=='Custom') {
// sitename计算siteid
$tmp1 = $this->get_siteid($_POST['sharepointSite']);
if (isset($tmp1['stat'])) return message($arr['stat'] . $tmp1['body'], 'Get Sharepoint Site ID ' . $_POST['sharepointSite'], $tmp1['stat']);
$siteid = $tmp1;
//$api = $this->api_url . '/sites/' . $siteid . '/drive/';
//$arr = curl('GET', $api, '', [ 'Authorization' => 'Bearer ' . $this->access_token ], 1);
//if ($arr['stat']!=200) return message($arr['stat'] . $arr['body'], 'Get Sharepoint Drive ID ' . $_POST['DriveType'], $arr['stat']);
$tmp['siteid'] = $siteid;
$tmp['sharepointSite'] = $_POST['sharepointSite'];
//$tmp['DriveId'] = json_decode($arr['body'], true)['id'];
if (get_class($this)=='Onedrive') $tmp['Driver'] = 'Sharepoint';
elseif (get_class($this)=='OnedriveCN') $tmp['Driver'] = 'SharepointCN';
} else {
// 直接是siteid
//$api = $this->api_url . '/sites/' . $_POST['DriveType'] . '/drive/';
//$arr = curl('GET', $api, '', [ 'Authorization' => 'Bearer ' . $this->access_token ], 1);
//if ($arr['stat']!=200) return message($arr['stat'] . $arr['body'], 'Get Sharepoint Drive ID ' . $_POST['DriveType'], $arr['stat']);
$tmp['siteid'] = $_POST['DriveType'];
$tmp['sharepointSite'] = $_POST['sharepointSiteUrl'];
//$tmp['DriveId'] = json_decode($arr['body'], true)['id'];
if (get_class($this)=='Onedrive') $tmp['Driver'] = 'Sharepoint';
elseif (get_class($this)=='OnedriveCN') $tmp['Driver'] = 'SharepointCN';
}
$response = setConfigResponse( setConfig($tmp, $this->disktag) );
if (api_error($response)) {
$html = api_error_msg($response);
$title = 'Error';
return message($html, $title, 201);
} else {
$str .= '<meta http-equiv="refresh" content="5;URL=' . $url . '">
<script>
var expd = new Date();
expd.setTime(expd.getTime()+1);
var expires = "expires="+expd.toGMTString();
document.cookie=\'disktag=; path=/; \'+expires;
</script>';
return message($str, getconstStr('WaitJumpIndex'), 201);
}
}
if (isset($_GET['install3'])) {
if ($this->access_token == '') {
$refresh_token = getConfig('refresh_token', $this->disktag);
if (!$refresh_token) {
$html = 'No refresh_token config, please AddDisk again or wait minutes.<br>' . $this->disktag;
$title = 'Error';
return message($html, $title, 201);
}
$response = $this->get_access_token($refresh_token);
if (isset($response['stat'])) return message($response['body'], 'Error', $response['stat']);
}
$api = $this->api_url . '/sites/root';
$arr = curl('GET', $api, '', [ 'Authorization' => 'Bearer ' . $this->access_token ]);
$Tenant = json_decode($arr['body'], true)['webUrl'];
$api = $this->api_url . '/me/followedSites';
$arr = curl('GET', $api, '', [ 'Authorization' => 'Bearer ' . $this->access_token ]);
if (!($arr['stat']==200||$arr['stat']==403||$arr['stat']==400)) return message($arr['stat'] . json_encode(json_decode($arr['body']), JSON_PRETTY_PRINT), 'Get followedSites', $arr['stat']);
error_log($arr['body']);
$sites = json_decode($arr['body'], true)['value'];
$title = 'Select Disk';
$html = '
<div>
<form action="?install4&AddDisk=' . get_class($this) . '" method="post" onsubmit="return notnull(this);">
<label><input type="radio" name="DriveType" value="Onedrive" checked>' . 'Use Onedrive ' . getconstStr(' ') . '</label><br>';
if ($sites[0]!='') foreach ($sites as $k => $v) {
$html .= '
<label>
<input type="radio" name="DriveType" value="' . $v['id'] . '" onclick="document.getElementById(\'sharepointSiteUrl\').value=\'' . $v['webUrl'] . '\';">' . 'Use Sharepoint: <br><div style="width:100%;margin:0px 35px">webUrl: ' . $v['webUrl'] . '<br>siteid: ' . $v['id'] . '</div>
</label>';
}
$html .= '
<input type="hidden" id="sharepointSiteUrl" name="sharepointSiteUrl" value="">
<label>
<input type="radio" name="DriveType" value="Custom" id="Custom">' . 'Use Other Sharepoint:' . getconstStr(' ') . '<br>
<div style="width:100%;margin:0px 35px"><a href="' . $Tenant . '/_layouts/15/sharepoint.aspx" target="_blank">' . getconstStr('GetSharepointSiteAddress') . '</a><br>
<input type="text" name="sharepointSite" style="width:100%;" placeholder="' . getconstStr('InputSharepointSiteAddress') . '" onclick="document.getElementById(\'Custom\').checked=\'checked\';">
</div>
</label><br>
';
$html .= '
<input type="submit" value="' . getconstStr('Submit') . '">
</form>
</div>
<script>
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;
}
</script>
';
return message($html, $title, 201);
}
if (isset($_GET['install2']) && isset($_GET['code'])) {
$tmp = curl('POST', $this->oauth_url . 'token', 'client_id=' . $this->client_id .'&client_secret=' . $this->client_secret . '&grant_type=authorization_code&requested_token_use=on_behalf_of&redirect_uri=' . $this->redirect_uri . '&code=' . $_GET['code']);
if ($tmp['stat']==200) $ret = json_decode($tmp['body'], true);
if (isset($ret['refresh_token'])) {
$refresh_token = $ret['refresh_token'];
$str = '
refresh_token :<br>';
$str .= '
<textarea readonly style="width: 95%">' . $refresh_token . '</textarea><br><br>
' . getconstStr('SavingToken') . '
<script>
var texta=document.getElementsByTagName(\'textarea\');
for(i=0;i<texta.length;i++) {
texta[i].style.height = texta[i].scrollHeight + \'px\';
}
</script>';
$tmptoken['refresh_token'] = $refresh_token;
$tmptoken['token_expires'] = time()+7*24*60*60;
$response = setConfigResponse( setConfig($tmptoken, $this->disktag) );
if (api_error($response)) {
$html = api_error_msg($response);
$title = 'Error';
return message($html, $title, 201);
} else {
savecache('access_token', $ret['access_token'], $this->disktag, $ret['expires_in'] - 60);
$str .= '
<meta http-equiv="refresh" content="3;URL=' . $url . '?AddDisk=' . get_class($this) . '&install3">';
return message($str, getconstStr('Wait') . ' 3s', 201);
}
}
return message('<pre>' . json_encode(json_decode($tmp['body']), JSON_PRETTY_PRINT) . '</pre>', $tmp['stat']);
//return message('<pre>' . json_encode($ret, JSON_PRETTY_PRINT) . '</pre>', 500);
}
if (isset($_GET['install1'])) {
if (get_class($this)=='Onedrive' || get_class($this)=='OnedriveCN') {
return message('
<a href="" id="a1">' . getconstStr('JumptoOffice') . '</a>
<script>
url=location.protocol + "//" + location.host + "' . $url . '?install2&AddDisk=' . get_class($this) . '";
url="' . $this->oauth_url . 'authorize?scope=' . $this->scope . '&response_type=code&client_id=' . $this->client_id . '&redirect_uri=' . $this->redirect_uri . '&state=' . '"+encodeURIComponent(url);
document.getElementById(\'a1\').href=url;
//window.open(url,"_blank");
location.href = url;
</script>
', getconstStr('Wait') . ' 1s', 201);
} else {
return message('Something error, retry after a few seconds.', 'Retry', 201);
}
}
if (isset($_GET['install0'])) {
if ($_POST['disktag_add']!='') {
$_POST['disktag_add'] = preg_replace('/[^0-9a-zA-Z|_]/i', '', $_POST['disktag_add']);
$f = substr($_POST['disktag_add'], 0, 1);
if (strlen($_POST['disktag_add'])==1) $_POST['disktag_add'] .= '_';
if (isCommonEnv($_POST['disktag_add'])) {
return message('Do not input ' . $envs . '<br><button onclick="location.href = location.href;">'.getconstStr('Refresh').'</button>
<script>
var expd = new Date();
expd.setTime(expd.getTime()+1);
var expires = "expires="+expd.toGMTString();
document.cookie=\'disktag=; path=/; \'+expires;
</script>', 'Error', 201);
} elseif (!(('a'<=$f && $f<='z') || ('A'<=$f && $f<='Z'))) {
return message('Please start with letters<br><button onclick="location.href = location.href;">'.getconstStr('Refresh').'</button>
<script>
var expd = new Date();
expd.setTime(expd.getTime()+1);
var expires = "expires="+expd.toGMTString();
document.cookie=\'disktag=; path=/; \'+expires;
</script>', 'Error', 201);
}
$tmp = null;
foreach ($EnvConfigs as $env => $v) if (isInnerEnv($env)) $tmp[$env] = '';
//$this->disktag = $_POST['disktag_add'];
$tmp['disktag_add'] = $_POST['disktag_add'];
$tmp['diskname'] = $_POST['diskname'];
$tmp['Driver'] = $_POST['Drive_ver'];
if ($_POST['Drive_ver']=='Sharelink') {
$tmp['shareurl'] = $_POST['shareurl'];
} else {
if ($_POST['Drive_ver']=='Onedrive' && $_POST['NT_Drive_custom']=='on') {
$tmp['client_id'] = $_POST['NT_client_id'];
$tmp['client_secret'] = $_POST['NT_client_secret'];
} elseif ($_POST['Drive_ver']=='OnedriveCN' && $_POST['CN_Drive_custom']=='on') {
$tmp['client_id'] = $_POST['CN_client_id'];
$tmp['client_secret'] = $_POST['CN_client_secret'];
}
}
$response = setConfigResponse( setConfig($tmp, $this->disktag) );
if (api_error($response)) {
$html = api_error_msg($response);
$title = 'Error';
} else {
$title = getconstStr('MayinEnv');
$html = getconstStr('Wait') . ' 3s<meta http-equiv="refresh" content="3;URL=' . $url . '?install1&AddDisk=' . $_POST['Drive_ver'] . '">';
if ($_POST['Drive_ver']=='Sharelink') $html = getconstStr('Wait') . ' 3s<meta http-equiv="refresh" content="3;URL=' . $url . '">';
}
return message($html, $title, 201);
}
}
$html = '
<div>
<form id="form1" action="" method="post" onsubmit="return notnull(this);">
' . getconstStr('DiskTag') . ': (' . getConfig('disktag') . ')
<input type="text" name="disktag_add" placeholder="' . getconstStr('EnvironmentsDescription')['disktag'] . '" style="width:100%"><br>
' . getconstStr('DiskName') . ':
<input type="text" name="diskname" placeholder="' . getconstStr('EnvironmentsDescription')['diskname'] . '" style="width:100%"><br>
<br>
<div>
<label><input type="radio" name="Drive_ver" value="Onedrive" onclick="document.getElementById(\'NT_custom\').style.display=\'\';document.getElementById(\'CN_custom\').style.display=\'none\';document.getElementById(\'inputshareurl\').style.display=\'none\';">MS: ' . getconstStr('DriveVerMS') . '</label><br>
<div id="NT_custom" style="display:none;margin:0px 35px">
<label><input type="checkbox" name="NT_Drive_custom" onclick="document.getElementById(\'NT_secret\').style.display=(this.checked?\'\':\'none\');">' . getconstStr('CustomIdSecret') . '</label><br>
<div id="NT_secret" style="display:none;margin:10px 35px">
<a href="https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps" target="_blank">' . getconstStr('GetSecretIDandKEY') . '</a><br>
return_uri(Reply URL):<br>https://scfonedrive.github.io/<br>
client_id:<input type="text" name="NT_client_id" style="width:100%" placeholder="a1b2c345-90ab-cdef-ghij-klmnopqrstuv"><br>
client_secret:<input type="text" name="NT_client_secret" style="width:100%"><br>
</div>
</div><br>
<label><input type="radio" name="Drive_ver" value="OnedriveCN" onclick="document.getElementById(\'CN_custom\').style.display=\'\';document.getElementById(\'NT_custom\').style.display=\'none\';document.getElementById(\'inputshareurl\').style.display=\'none\';">CN: ' . getconstStr('DriveVerCN') . '</label><br>
<div id="CN_custom" style="display:none;margin:0px 35px">
<label><input type="checkbox" name="CN_Drive_custom" onclick="document.getElementById(\'CN_secret\').style.display=(this.checked?\'\':\'none\');">' . getconstStr('CustomIdSecret') . '</label><br>
<div id="CN_secret" style="display:none;margin:10px 35px">
<a href="https://portal.azure.cn/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps" target="_blank">' . getconstStr('GetSecretIDandKEY') . '</a><br>
return_uri(Reply URL):<br>https://scfonedrive.github.io/<br>
client_id:<input type="text" name="CN_client_id" style="width:100%" placeholder="a1b2c345-90ab-cdef-ghij-klmnopqrstuv"><br>
client_secret:<input type="text" name="CN_client_secret" style="width:100%"><br>
</div>
</div><br>
<label><input type="radio" name="Drive_ver" value="Sharelink" onclick="document.getElementById(\'CN_custom\').style.display=\'none\';document.getElementById(\'inputshareurl\').style.display=\'\';document.getElementById(\'NT_custom\').style.display=\'none\';">Sharelink: ' . getconstStr('DriveVerShareurl') . '</label><br>
<div id="inputshareurl" style="display:none;margin:0px 35px">
' . getconstStr('UseShareLink') . '
<input type="text" name="shareurl" style="width:100%" placeholder="https://xxxx.sharepoint.com/:f:/g/personal/xxxxxxxx/mmmmmmmmm?e=XXXX"><br>
</div>
</div>
<br>';
if ($_SERVER['language']=='zh-cn') $html .= '你要理解 scfonedrive.github.io 是github上的静态网站<br>除非github真的挂掉了<br>不然,稍后你如果连不上,请检查你的运营商或其它“你懂的”问题!<br>';
$html .='
<input type="submit" value="' . getconstStr('Submit') . '">
</form>
</div>
<script>
function notnull(t)
{
if (t.disktag_add.value==\'\') {
alert(\'' . getconstStr('DiskTag') . '\');
return false;
}
envs = [' . $envs . '];
if (envs.indexOf(t.disktag_add.value)>-1) {
alert("Do not input ' . $envs . '");
return false;
}
var reg = /^[a-zA-Z]([_a-zA-Z0-9]{1,20})$/;
if (!reg.test(t.disktag_add.value)) {
alert(\'' . getconstStr('TagFormatAlert') . '\');
return false;
}
if (t.Drive_ver.value==\'\') {
alert(\'Select a Driver\');
return false;
}
if (t.Drive_ver.value==\'Sharelink\') {
if (t.shareurl.value==\'\') {
alert(\'shareurl\');
return false;
}
} else {
if ((t.Drive_ver.value==\'Onedrive\') && t.NT_Drive_custom.checked==true) {
if (t.NT_client_secret.value==\'\'||t.NT_client_id.value==\'\') {
alert(\'client_id & client_secret\');
return false;
}
}
if ((t.Drive_ver.value==\'OnedriveCN\') && t.CN_Drive_custom.checked==true) {
if (t.CN_client_secret.value==\'\'||t.CN_client_id.value==\'\') {
alert(\'client_id & client_secret\');
return false;
}
}
}
document.getElementById("form1").action="?install0&AddDisk=" + t.Drive_ver.value;
var expd = new Date();
expd.setTime(expd.getTime()+(2*60*60*1000));
var expires = "expires="+expd.toGMTString();
document.cookie=\'disktag=\'+t.disktag_add.value+\'; path=/; \'+expires;
return true;
}
</script>';
$title = 'Select Account Type';
return message($html, $title, 201);
}
protected function get_access_token($refresh_token) {
if (!($this->access_token = getcache('access_token', $this->disktag))) {
$p=0;
while ($response['stat']==0&&$p<3) {
$response = curl('POST', $this->oauth_url . 'token', 'client_id=' . $this->client_id . '&client_secret=' . $this->client_secret . '&grant_type=refresh_token&requested_token_use=on_behalf_of&refresh_token=' . $refresh_token );
$p++;
}
if ($response['stat']==200) $ret = json_decode($response['body'], true);
if (!isset($ret['access_token'])) {
error_log($this->oauth_url . 'token' . '?client_id=' . $this->client_id . '&client_secret=' . $this->client_secret . '&grant_type=refresh_token&requested_token_use=on_behalf_of&refresh_token=' . substr($refresh_token, 0, 20) . '******' . substr($refresh_token, -20));
error_log('failed to get [' . $this->disktag . '] access_token. response' . json_encode($ret));
$response['body'] = json_encode(json_decode($response['body']), JSON_PRETTY_PRINT);
$response['body'] .= '\nfailed to get [' . $this->disktag . '] access_token.';
return $response;
//throw new Exception($response['stat'].', failed to get ['.$this->disktag.'] access_token.'.$response['body']);
}
$tmp = $ret;
$tmp['access_token'] = '******';
$tmp['refresh_token'] = '******';
error_log('[' . $this->disktag . '] Get access token:' . json_encode($tmp, JSON_PRETTY_PRINT));
$this->access_token = $ret['access_token'];
savecache('access_token', $this->access_token, $this->disktag, $ret['expires_in'] - 300);
if (time()>getConfig('token_expires', $this->disktag)) setConfig([ 'refresh_token' => $ret['refresh_token'], 'token_expires' => time()+7*24*60*60 ], $this->disktag);
}
return $this->access_token;
}
protected function get_siteid($sharepointSite)
{
//$sharepointSite = getConfig('sharepointSite', $this->disktag);
while (substr($sharepointSite, -1)=='/') $sharepointSite = substr($sharepointSite, 0, -1);
$tmp = splitlast($sharepointSite, '/');
$sharepointname = urlencode($tmp[1]);
$tmp = splitlast($tmp[0], '/');
$sharepointname = $tmp[1] . '/' . $sharepointname;
if (getConfig('Driver', $this->disktag)=='Onedrive') $url = 'https://graph.microsoft.com/v1.0/sites/root:/' . $sharepointname;
if (getConfig('Driver', $this->disktag)=='OnedriveCN') $url = 'https://microsoftgraph.chinacloudapi.cn/v1.0/sites/root:/' . $sharepointname;
$i=0;
$response = [];
while ($url!=''&&$response['stat']!=200&&$i<4) {
$response = curl('GET', $url, false, ['Authorization' => 'Bearer ' . $this->access_token]);
$i++;
}
if ($response['stat']!=200) {
error_log('failed to get siteid. response' . json_encode($response));
$response['body'] .= '\nfailed to get siteid.';
return $response;
//throw new Exception($response['stat'].', failed to get siteid.'.$response['body']);
}
return json_decode($response['body'],true)['id'];
}
public function del_upload_cache()
{
error_log('del.tmp:GET,'.json_encode($_GET,JSON_PRETTY_PRINT));
$tmp = splitlast($_GET['filename'], '/');
if ($tmp[1]!='') {
$filename = $tmp[0] . '/.' . $_GET['filelastModified'] . '_' . $_GET['filesize'] . '_' . $tmp[1] . '.tmp';
} else {
$filename = '.' . $_GET['filelastModified'] . '_' . $_GET['filesize'] . '_' . $_GET['filename'] . '.tmp';
}
$filename = path_format( path_format($_SERVER['list_path'] . path_format($path)) . '/' . spurlencode($filename, '/') );
$tmp = $this->MSAPI('DELETE', $filename, '', $this->access_token);
$path1 = path_format($_SERVER['list_path'] . path_format($path));
if ($path1!='/'&&substr($path1,-1)=='/') $path1=substr($path1,0,-1);
savecache('path_' . $path1, json_decode('{}',true), $this->disktag, 1);
return output($tmp['body'],$tmp['stat']);
}
public function get_thumbnails_url($path = '/')
{
$thumb_url = getcache('thumb_'.$path, $this->disktag);
if ($thumb_url=='') {
$url = $this->api_url . $this->ext_api_url;
if ($path !== '/') {
$url .= ':' . $path;
if (substr($url,-1)=='/') $url=substr($url,0,-1);
}
$url .= ':/thumbnails/0/medium';
$files = json_decode(curl('GET', $url, false, ['Authorization' => 'Bearer ' . $this->access_token])['body'], true);
if (isset($files['url'])) {
savecache('thumb_' . $path, $files['url'], $this->disktag);
$thumb_url = $files['url'];
}
}
return $thumb_url;
}
public function bigfileupload($path)
{
if ($_POST['upbigfilename']=='') return output('error: no file name', 400);
if (!is_numeric($_POST['filesize'])) return output('error: no file size', 400);
if (!$_SERVER['admin']) if (!isset($_POST['filemd5'])) return output('error: no file md5', 400);
$tmp = splitlast($_POST['upbigfilename'], '/');
if ($tmp[1]!='') {
$fileinfo['name'] = $tmp[1];
if ($_SERVER['admin']) $fileinfo['path'] = $tmp[0];
} else {
$fileinfo['name'] = $_POST['upbigfilename'];
}
$fileinfo['size'] = $_POST['filesize'];
$fileinfo['filelastModified'] = $_POST['filelastModified'];
if ($_SERVER['admin']) {
$filename = spurlencode($_POST['upbigfilename'], '/');
} else {
$tmp1 = splitlast($fileinfo['name'], '.');
if ($tmp1[0]==''||$tmp1[1]=='') $filename = $_POST['filemd5'];
else $filename = $_POST['filemd5'] . '.' . $tmp1[1];
}
if ($fileinfo['size']>10*1024*1024) {
$cachefilename = spurlencode( $fileinfo['path'] . '/.' . $fileinfo['filelastModified'] . '_' . $fileinfo['size'] . '_' . $fileinfo['name'] . '.tmp', '/');
$getoldupinfo=$this->list_files(path_format($path . '/' . $cachefilename));
//echo json_encode($getoldupinfo, JSON_PRETTY_PRINT);
if (isset($getoldupinfo['file'])&&$getoldupinfo['size']<5120) {
$getoldupinfo_j = curl('GET', $getoldupinfo['url']);
$getoldupinfo = json_decode($getoldupinfo_j['body'], true);
if ( json_decode( curl('GET', $getoldupinfo['uploadUrl'])['body'], true)['@odata.context']!='' ) return output($getoldupinfo_j['body'], $getoldupinfo_j['stat']);
}
}
$response = $this->MSAPI('createUploadSession', path_format($path . '/' . $filename), '{"item": { "@microsoft.graph.conflictBehavior": "fail" }}', $this->access_token);
if ($response['stat']<500) {
$responsearry = json_decode($response['body'],true);
if (isset($responsearry['error'])) return output($response['body'], $response['stat']);
$fileinfo['uploadUrl'] = $responsearry['uploadUrl'];
if ($fileinfo['size']>10*1024*1024) $this->MSAPI('PUT', path_format($path . '/' . $cachefilename), json_encode($fileinfo, JSON_PRETTY_PRINT), $this->access_token);
}
return output($response['body'], $response['stat']);
}
protected function MSAPI($method, $path, $data = '', $access_token)
{
if (substr($path,0,7) == 'http://' or substr($path,0,8) == 'https://') {
$url=$path;
$lenth=strlen($data);
$headers['Content-Length'] = $lenth;
$lenth--;
$headers['Content-Range'] = 'bytes 0-' . $lenth . '/' . $headers['Content-Length'];
} else {
$url = $this->api_url . $this->ext_api_url;
if ($path=='' or $path=='/') {
$url .= '/';
} else {
$url .= ':' . $path;
if (substr($url,-1)=='/') $url=substr($url,0,-1);
}
if ($method=='PUT') {
if ($path=='' or $path=='/') {
$url .= 'content';
} else {
$url .= ':/content';
}
$headers['Content-Type'] = 'text/plain';
} elseif ($method=='PATCH') {
$headers['Content-Type'] = 'application/json';
} elseif ($method=='POST') {
$headers['Content-Type'] = 'application/json';
} elseif ($method=='DELETE') {
$headers['Content-Type'] = 'application/json';
} else {
if ($path=='' or $path=='/') {
$url .= $method;
} else {
$url .= ':/' . $method;
}
$method='POST';
$headers['Content-Type'] = 'application/json';
}
}
$headers['Authorization'] = 'Bearer ' . $access_token;
if (!isset($headers['Accept'])) $headers['Accept'] = '*/*';
//if (!isset($headers['Referer'])) $headers['Referer'] = $url;*
$sendHeaders = array();
foreach ($headers as $headerName => $headerVal) {
$sendHeaders[] = $headerName . ': ' . $headerVal;
}
$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_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $sendHeaders);
$response['body'] = curl_exec($ch);
$response['stat'] = curl_getinfo($ch,CURLINFO_HTTP_CODE);
//$response['Location'] = curl_getinfo($ch);
curl_close($ch);
error_log($response['stat'].'
'.$response['body'].'
'.$url.'
');
return $response;
}
}

27
disk/OnedriveCN.php Normal file
View File

@ -0,0 +1,27 @@
<?php
if (!class_exists('Onedrive')) require 'Onedrive.php';
class OnedriveCN extends Onedrive {
function __construct($tag) {
$this->disktag = $tag;
$this->redirect_uri = 'https://scfonedrive.github.io';
if (getConfig('client_id', $tag) && getConfig('client_secret', $tag)) {
$this->client_id = getConfig('client_id', $tag);
$this->client_secret = getConfig('client_secret', $tag);
} else {
$this->client_id = '31f3bed5-b9d9-4173-86a4-72c73d278617';
$this->client_secret = 'P5-ZNtFK-tT90J.We_-DcsuB8uV7AfjL8Y';
}
$this->oauth_url = 'https://login.partner.microsoftonline.cn/common/oauth2/v2.0/';
$this->api_url = 'https://microsoftgraph.chinacloudapi.cn/v1.0';
$this->scope = 'https://microsoftgraph.chinacloudapi.cn/Files.ReadWrite.All offline_access';
$this->access_token = getcache('access_token', $tag);
if (!$this->access_token) $this->access_token = $this->get_access_token(getConfig('refresh_token', $tag));
$this->client_secret = urlencode($this->client_secret);
$this->scope = urlencode($this->scope);
$this->DownurlStrName = '@microsoft.graph.downloadUrl';
$this->ext_api_url = '/me/drive/root';
}
}

60
disk/Sharelink.php Normal file
View File

@ -0,0 +1,60 @@
<?php
if (!class_exists('Onedrive')) require 'Onedrive.php';
class Sharelink extends Onedrive {
function __construct($tag) {
$this->disktag = $tag;
$this->redirect_uri = 'https://scfonedrive.github.io';
$this->api_url = getConfig('shareapiurl', $tag);
$this->access_token = $this->get_access_token(1);
//$this->ext_api_url = '/me/drive/root';
$this->DownurlStrName = '@content.downloadUrl';
}
protected function get_access_token($refresh_token) {
if (!($this->access_token = getcache('access_token', $this->disktag))) {
$shareurl = getConfig('shareurl', $this->disktag);
if (!($this->sharecookie = getcache('sharecookie', $this->disktag))) {
$this->sharecookie = curl('GET', $shareurl, false, [], 1)['returnhead']['Set-Cookie'];
//$tmp = curl_request($shareurl, false, [], 1);
//$tmp['body'] .= json_encode($tmp['returnhead'],JSON_PRETTY_PRINT);
//return $tmp;
//$_SERVER['sharecookie'] = $tmp['returnhead']['Set-Cookie'];
//if ($tmp['stat']==302) $url = $tmp['returnhead']['Location'];
//return curl('GET', $url, [ 'Accept' => 'application/json;odata=verbose', 'Content-Type' => 'application/json;odata=verbose', 'Cookie' => $_SERVER['sharecookie'] ]);
savecache('sharecookie', $this->sharecookie, $this->disktag);
}
$tmp1 = splitlast($shareurl, '/')[0];
$account = splitlast($tmp1, '/')[1];
$domain = splitlast($shareurl, '/:')[0];
$response = curl('POST',
$domain . "/personal/" . $account . "/_api/web/GetListUsingPath(DecodedUrl=@a1)/RenderListDataAsStream?@a1='" . urlencode("/personal/" . $account . "/Documents") . "'&RootFolder=" . urlencode("/personal/" . $account . "/Documents/") . "&TryNewExperienceSingle=TRUE",
'{"parameters":{"__metadata":{"type":"SP.RenderListDataParameters"},"RenderOptions":136967,"AllowMultipleValueFilterForTaxonomyFields":true,"AddRequiredFields":true}}',
[ 'Accept' => 'application/json;odata=verbose', 'Content-Type' => 'application/json;odata=verbose', 'origin' => $domain, 'Cookie' => $this->sharecookie ]
);
if ($response['stat']==200) $ret = json_decode($response['body'], true);
$this->access_token = splitlast($ret['ListSchema']['.driveAccessToken'],'=')[1];
$this->api_url = $ret['ListSchema']['.driveUrl'].'/root';
if (!$this->access_token) {
error_log($domain . "/personal/" . $account . "/_api/web/GetListUsingPath(DecodedUrl=@a1)/RenderListDataAsStream?@a1='" . urlencode("/personal/" . $account . "/Documents") . "'&RootFolder=" . urlencode("/personal/" . $account . "/Documents/") . "&TryNewExperienceSingle=TRUE");
error_log('failed to get share access_token. response' . json_encode($ret));
$response['body'] = json_encode(json_decode($response['body']), JSON_PRETTY_PRINT);
$response['body'] .= '\nfailed to get shareurl access_token.';
return $response;
//throw new Exception($response['stat'].', failed to get share access_token.'.$response['body']);
}
//$tmp = $ret;
//$tmp['access_token'] = '******';
//error_log('['.$this->disktag.'] Get access token:'.json_encode($tmp, JSON_PRETTY_PRINT));
savecache('access_token', $this->access_token, $this->disktag);
$tmp1 = null;
if (getConfig('shareapiurl', $this->disktag)!=$this->api_url) $tmp1['shareapiurl'] = $this->api_url;
//if (getConfig('sharecookie', $this->disktag)!=$this->sharecookie) $tmp1['sharecookie'] = $this->sharecookie;
if (!!$tmp1) setConfig($tmp1);
}
return $this->access_token;
}
}

27
disk/Sharepoint.php Normal file
View File

@ -0,0 +1,27 @@
<?php
if (!class_exists('Onedrive')) require 'Onedrive.php';
class Sharepoint extends Onedrive {
function __construct($tag) {
$this->disktag = $tag;
$this->redirect_uri = 'https://scfonedrive.github.io';
if (getConfig('client_id', $tag) && getConfig('client_secret', $tag)) {
$this->client_id = getConfig('client_id', $tag);
$this->client_secret = getConfig('client_secret', $tag);
} else {
$this->client_id = '734ef928-d74c-4555-8d1b-d942fa0a1a41';
$this->client_secret = ':EK[e0/4vQ@mQgma8LmnWb6j4_C1CSIW';
}
$this->oauth_url = 'https://login.microsoftonline.com/common/oauth2/v2.0/';
$this->api_url = 'https://graph.microsoft.com/v1.0';
$this->scope = 'https://graph.microsoft.com/Files.ReadWrite.All offline_access';
$this->access_token = getcache('access_token', $tag);
if (!$this->access_token) $this->access_token = $this->get_access_token(getConfig('refresh_token', $tag));
$this->client_secret = urlencode($this->client_secret);
$this->scope = urlencode($this->scope);
$this->DownurlStrName = '@microsoft.graph.downloadUrl';
$this->ext_api_url = '/sites/' . getConfig('siteid', $tag) . '/drive/root';
}
}

27
disk/SharepointCN.php Normal file
View File

@ -0,0 +1,27 @@
<?php
if (!class_exists('Onedrive')) require 'Onedrive.php';
class SharepointCN extends Onedrive {
function __construct($tag) {
$this->disktag = $tag;
$this->redirect_uri = 'https://scfonedrive.github.io';
if (getConfig('client_id', $tag) && getConfig('client_secret', $tag)) {
$this->client_id = getConfig('client_id', $tag);
$this->client_secret = getConfig('client_secret', $tag);
} else {
$this->client_id = '31f3bed5-b9d9-4173-86a4-72c73d278617';
$this->client_secret = 'P5-ZNtFK-tT90J.We_-DcsuB8uV7AfjL8Y';
}
$this->oauth_url = 'https://login.partner.microsoftonline.cn/common/oauth2/v2.0/';
$this->api_url = 'https://microsoftgraph.chinacloudapi.cn/v1.0';
$this->scope = 'https://microsoftgraph.chinacloudapi.cn/Files.ReadWrite.All offline_access';
$this->access_token = getcache('access_token', $tag);
if (!$this->access_token) $this->access_token = $this->get_access_token(getConfig('refresh_token', $tag));
$this->client_secret = urlencode($this->client_secret);
$this->scope = urlencode($this->scope);
$this->DownurlStrName = '@microsoft.graph.downloadUrl';
$this->ext_api_url = '/sites/' . getConfig('siteid', $tag) . '/drive/root';
}
}

View File

@ -57,17 +57,15 @@ function GetPathSetting($event, $context)
function getConfig($str, $disktag = '')
{
global $InnerEnv;
global $Base64Env;
if (in_array($str, $InnerEnv)) {
if (isInnerEnv($str)) {
if ($disktag=='') $disktag = $_SERVER['disktag'];
$env = json_decode(getenv($disktag), true);
if (isset($env[$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($env[$str]);
if (isBase64Env($str)) return base64y_decode($env[$str]);
else return $env[$str];
}
} else {
if (in_array($str, $Base64Env)) return base64y_decode(getenv($str));
if (isBase64Env($str)) return base64y_decode(getenv($str));
else return getenv($str);
}
return '';
@ -75,8 +73,6 @@ function getConfig($str, $disktag = '')
function setConfig($arr, $disktag = '')
{
global $InnerEnv;
global $Base64Env;
if ($disktag=='') $disktag = $_SERVER['disktag'];
$disktags = explode("|", getConfig('disktag'));
$diskconfig = json_decode(getenv($disktag), true);
@ -84,8 +80,8 @@ function setConfig($arr, $disktag = '')
$indisk = 0;
$operatedisk = 0;
foreach ($arr as $k => $v) {
if (in_array($k, $InnerEnv)) {
if (in_array($k, $Base64Env)) $diskconfig[$k] = base64y_encode($v);
if (isInnerEnv($k)) {
if (isBase64Env($k)) $diskconfig[$k] = base64y_encode($v);
else $diskconfig[$k] = $v;
$indisk = 1;
} elseif ($k=='disktag_add') {
@ -98,7 +94,7 @@ function setConfig($arr, $disktag = '')
} elseif ($k=='disktag_rename' || $k=='disktag_newname') {
if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1;
} else {
if (in_array($k, $Base64Env)) $tmp[$k] = base64y_encode($v);
if (isBase64Env($k)) $tmp[$k] = base64y_encode($v);
else $tmp[$k] = $v;
}
}
@ -245,7 +241,7 @@ language:<br>';
return message($html, $title, 201);
}
$html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind');
$title = 'Error';
$title = 'Install';
return message($html, $title, 201);
}
@ -321,7 +317,8 @@ function updateEnvironment($Envs, $accountId, $region, $service_name, $function_
$tmp_env[$key1] = $value1;
}
$tmp_env = array_filter($tmp_env, 'array_value_isnot_null'); // remove null. 清除空值
ksort($tmp_env);
//ksort($tmp_env);
sortConfig($tmp_env);
$tmpdata['environmentVariables'] = $tmp_env;
return FCAPI2016($config, 'PUT', json_encode($tmpdata));

View File

@ -47,17 +47,15 @@ function GetPathSetting($event, $context)
function getConfig($str, $disktag = '')
{
global $InnerEnv;
global $Base64Env;
if (in_array($str, $InnerEnv)) {
if (isInnerEnv($str)) {
if ($disktag=='') $disktag = $_SERVER['disktag'];
$env = json_decode(getenv($disktag), true);
if (isset($env[$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($env[$str]);
if (isBase64Env($str)) return base64y_decode($env[$str]);
else return $env[$str];
}
} else {
if (in_array($str, $Base64Env)) return base64y_decode(getenv($str));
if (isBase64Env($str)) return base64y_decode(getenv($str));
else return getenv($str);
}
return '';
@ -65,8 +63,6 @@ function getConfig($str, $disktag = '')
function setConfig($arr, $disktag = '')
{
global $InnerEnv;
global $Base64Env;
if ($disktag=='') $disktag = $_SERVER['disktag'];
$disktags = explode("|",getConfig('disktag'));
$diskconfig = json_decode(getenv($disktag), true);
@ -74,8 +70,8 @@ function setConfig($arr, $disktag = '')
$indisk = 0;
$operatedisk = 0;
foreach ($arr as $k => $v) {
if (in_array($k, $InnerEnv)) {
if (in_array($k, $Base64Env)) $diskconfig[$k] = base64y_encode($v);
if (isInnerEnv($k)) {
if (isBase64Env($k)) $diskconfig[$k] = base64y_encode($v);
else $diskconfig[$k] = $v;
$indisk = 1;
} elseif ($k=='disktag_add') {
@ -88,7 +84,7 @@ function setConfig($arr, $disktag = '')
} elseif ($k=='disktag_rename' || $k=='disktag_newname') {
if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1;
} else {
if (in_array($k, $Base64Env)) $tmp[$k] = base64y_encode($v);
if (isBase64Env($k)) $tmp[$k] = base64y_encode($v);
else $tmp[$k] = $v;
}
}
@ -232,7 +228,7 @@ language:<br>';
return message($html, $title, 201);
}
$html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind');
$title = 'Error';
$title = 'Install';
return message($html, $title, 201);
}
@ -302,7 +298,8 @@ function updateEnvironment($Envs, $SecretId, $SecretKey)
$tmp_env[$key1] = $value1;
}
$tmp_env = array_filter($tmp_env, 'array_value_isnot_null'); // remove null. 清除空值
ksort($tmp_env);
//ksort($tmp_env);
sortConfig($tmp_env);
$tmp['Environment']['Variables'] = $tmp_env;
$data = json_encode($tmp);

View File

@ -58,17 +58,15 @@ function getGET()
function getConfig($str, $disktag = '')
{
global $InnerEnv;
global $Base64Env;
if (in_array($str, $InnerEnv)) {
if (isInnerEnv($str)) {
if ($disktag=='') $disktag = $_SERVER['disktag'];
$env = json_decode(getenv($disktag), true);
if (isset($env[$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($env[$str]);
if (isBase64Env($str)) return base64y_decode($env[$str]);
else return $env[$str];
}
} else {
if (in_array($str, $Base64Env)) return base64y_decode(getenv($str));
if (isBase64Env($str)) return base64y_decode(getenv($str));
else return getenv($str);
}
return '';
@ -76,8 +74,6 @@ function getConfig($str, $disktag = '')
function setConfig($arr, $disktag = '')
{
global $InnerEnv;
global $Base64Env;
if ($disktag=='') $disktag = $_SERVER['disktag'];
$disktags = explode("|",getConfig('disktag'));
$diskconfig = json_decode(getenv($disktag), true);
@ -85,8 +81,8 @@ function setConfig($arr, $disktag = '')
$indisk = 0;
$operatedisk = 0;
foreach ($arr as $k => $v) {
if (in_array($k, $InnerEnv)) {
if (in_array($k, $Base64Env)) $diskconfig[$k] = base64y_encode($v);
if (isInnerEnv($k)) {
if (isBase64Env($k)) $diskconfig[$k] = base64y_encode($v);
else $diskconfig[$k] = $v;
$indisk = 1;
} elseif ($k=='disktag_add') {
@ -99,7 +95,7 @@ function setConfig($arr, $disktag = '')
} elseif ($k=='disktag_rename' || $k=='disktag_newname') {
if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1;
} else {
if (in_array($k, $Base64Env)) $tmp[$k] = base64y_encode($v);
if (isBase64Env($k)) $tmp[$k] = base64y_encode($v);
else $tmp[$k] = $v;
}
}
@ -214,7 +210,7 @@ language:<br>';
return message($html, $title, 201);
}
$html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind');
$title = 'Error';
$title = 'Install';
return message($html, $title, 201);
}
@ -259,6 +255,7 @@ function getHerokuConfig($function_name, $apikey)
function setHerokuConfig($env, $function_name, $apikey)
{
sortConfig($env);
$data = json_encode($env);
return HerokuAPI('PATCH', 'https://api.heroku.com/apps/' . $function_name . '/config-vars', $data, $apikey);
}

View File

@ -69,18 +69,16 @@ function GetPathSetting($event, $context)
function getConfig($str, $disktag = '')
{
global $InnerEnv;
global $Base64Env;
global $contextUserData;
if (in_array($str, $InnerEnv)) {
if (isInnerEnv($str)) {
if ($disktag=='') $disktag = $_SERVER['disktag'];
$env = json_decode($contextUserData->getUserData($disktag), true);
if (isset($env[$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($env[$str]);
if (isBase64Env($str)) return base64y_decode($env[$str]);
else return $env[$str];
}
} else {
if (in_array($str, $Base64Env)) return base64y_decode($contextUserData->getUserData($str));
if (isBase64Env($str)) return base64y_decode($contextUserData->getUserData($str));
else return $contextUserData->getUserData($str);
}
return '';
@ -88,8 +86,6 @@ function getConfig($str, $disktag = '')
function setConfig($arr, $disktag = '')
{
global $InnerEnv;
global $Base64Env;
global $contextUserData;
if ($disktag=='') $disktag = $_SERVER['disktag'];
$disktags = explode("|",getConfig('disktag'));
@ -98,8 +94,8 @@ function setConfig($arr, $disktag = '')
$indisk = 0;
$operatedisk = 0;
foreach ($arr as $k => $v) {
if (in_array($k, $InnerEnv)) {
if (in_array($k, $Base64Env)) $diskconfig[$k] = base64y_encode($v);
if (isInnerEnv($k)) {
if (isBase64Env($k)) $diskconfig[$k] = base64y_encode($v);
else $diskconfig[$k] = $v;
$indisk = 1;
} elseif ($k=='disktag_add') {
@ -112,7 +108,7 @@ function setConfig($arr, $disktag = '')
} elseif ($k=='disktag_rename' || $k=='disktag_newname') {
if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1;
} else {
if (in_array($k, $Base64Env)) $tmp[$k] = base64y_encode($v);
if (isBase64Env($k)) $tmp[$k] = base64y_encode($v);
else $tmp[$k] = $v;
}
}
@ -278,7 +274,7 @@ language:<br>';
return message($html, $title, 201);
}
$html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind');
$title = 'Error';
$title = 'Install';
return message($html, $title, 201);
}
@ -357,7 +353,8 @@ function updateEnvironment($Envs, $HW_urn, $HW_key, $HW_secret)
$tmp_env[$key1] = $value1;
}
$tmp_env = array_filter($tmp_env, 'array_value_isnot_null'); // remove null. 清除空值
ksort($tmp_env);
//ksort($tmp_env);
sortConfig($tmp_env);
$tmpdata['handler'] = 'index.handler';
$tmpdata['memory_size'] = $contextUserData->getMemorySize()+1-1;

View File

@ -69,23 +69,23 @@ function GetPathSetting($event, $context)
function getConfig($str, $disktag = '')
{
global $InnerEnv;
global $Base64Env;
//include 'config.php';
$s = file_get_contents(__DIR__ . '/../config.php');
//$configs = substr($s, 18, -2);
global $slash;
$projectPath = splitlast(__DIR__, $slash)[0];
$configPath = $projectPath . $slash . '.data' . $slash . 'config.php';
$s = file_get_contents($configPath);
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
if ($configs!='') {
$envs = json_decode($configs, true);
if (in_array($str, $InnerEnv)) {
if (isInnerEnv($str)) {
if ($disktag=='') $disktag = $_SERVER['disktag'];
if (isset($envs[$disktag][$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($envs[$disktag][$str]);
if (isBase64Env($str)) return base64y_decode($envs[$disktag][$str]);
else return $envs[$disktag][$str];
}
} else {
if (isset($envs[$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($envs[$str]);
if (isBase64Env($str)) return base64y_decode($envs[$str]);
else return $envs[$str];
}
}
@ -95,20 +95,20 @@ function getConfig($str, $disktag = '')
function setConfig($arr, $disktag = '')
{
global $InnerEnv;
global $Base64Env;
if ($disktag=='') $disktag = $_SERVER['disktag'];
//include 'config.php';
$s = file_get_contents(__DIR__ . '/../config.php');
//$configs = substr($s, 18, -2);
global $slash;
$projectPath = splitlast(__DIR__, $slash)[0];
$configPath = $projectPath . $slash . '.data' . $slash . 'config.php';
$s = file_get_contents($configPath);
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
if ($configs!='') $envs = json_decode($configs, true);
$disktags = explode("|",getConfig('disktag'));
$indisk = 0;
$operatedisk = 0;
foreach ($arr as $k => $v) {
if (in_array($k, $InnerEnv)) {
if (in_array($k, $Base64Env)) $envs[$disktag][$k] = base64y_encode($v);
if (isInnerEnv($k)) {
if (isBase64Env($k)) $envs[$disktag][$k] = base64y_encode($v);
else $envs[$disktag][$k] = $v;
$indisk = 1;
} elseif ($k=='disktag_add') {
@ -121,7 +121,7 @@ function setConfig($arr, $disktag = '')
} elseif ($k=='disktag_rename' || $k=='disktag_newname') {
if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1;
} else {
if (in_array($k, $Base64Env)) $envs[$k] = base64y_encode($v);
if (isBase64Env($k)) $envs[$k] = base64y_encode($v);
else $envs[$k] = $v;
}
}
@ -144,7 +144,7 @@ function setConfig($arr, $disktag = '')
}
}
$envs = array_filter($envs, 'array_value_isnot_null');
ksort($envs);
//ksort($envs);
$response = updateEnvironment($envs, getConfig('HW_urn'), getConfig('HW_key'), getConfig('HW_secret'));
return $response;
}
@ -288,7 +288,7 @@ language:<br>';
return message($html, $title, 201);
}
$html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind');
$title = 'Error';
$title = 'Install';
return message($html, $title, 201);
}
@ -377,9 +377,8 @@ function copyFolder($from, $to)
function updateEnvironment($Envs, $HW_urn, $HW_key, $HW_secret)
{
sortConfig($Envs);
//echo json_encode($Envs,JSON_PRETTY_PRINT);
global $contextUserData;
$source = '/tmp/code.zip';
$outPath = '/tmp/code/';
$oldcode = '/tmp/oldcode.zip';
@ -392,7 +391,7 @@ function updateEnvironment($Envs, $HW_urn, $HW_key, $HW_secret)
// 将配置写入
$prestr = '<?php $configs = \'' . PHP_EOL;
$aftstr = PHP_EOL . '\';';
file_put_contents($outPath . 'config.php', $prestr . json_encode($Envs, JSON_PRETTY_PRINT) . $aftstr);
file_put_contents($outPath . '.data/config.php', $prestr . json_encode($Envs, JSON_PRETTY_PRINT) . $aftstr);
// 将目录中文件打包成zip
//$zip=new ZipArchive();
@ -407,6 +406,7 @@ 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 {
@ -448,15 +448,17 @@ function SetbaseConfig($Envs, $HW_urn, $HW_key, $HW_secret)
if (api_error(setConfigResponse($response))) {
return $response;
}
$s = file_get_contents(__DIR__ . '/../config.php');
//$configs = substr($s, 18, -2);
$projectPath = splitlast(__DIR__, $slash)[0];
$configPath = $projectPath . $slash . '.data' . $slash . 'config.php';
$s = file_get_contents($configPath);
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
if ($configs!='') $tmp_env = json_decode($configs, true);
foreach ($Envs as $k => $v) {
$tmp_env[$k] = $v;
}
$tmp_env = array_filter($tmp_env, 'array_value_isnot_null');
ksort($tmp_env);
//ksort($tmp_env);
$response = updateEnvironment($tmp_env, $HW_urn, $HW_key, $HW_secret);
return $response;
}
@ -538,7 +540,7 @@ function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch =
}
// 放入配置文件
file_put_contents($outPath . '/config.php', file_get_contents(__DIR__.'/../config.php'));
file_put_contents($outPath . '/.data/config.php', file_get_contents(__DIR__ . '/../.data/config.php'));
// 将目录中文件打包成zip
//$zip=new ZipArchive();

View File

@ -58,27 +58,22 @@ function getGET()
function getConfig($str, $disktag = '')
{
global $InnerEnv;
global $Base64Env;
$slash = '/';
if (strpos(__DIR__, ':')) $slash = '\\';
global $slash;
$projectPath = splitlast(__DIR__, $slash)[0];
$configPath = $projectPath . $slash . '.data' . $slash . 'config.php';
$s = file_get_contents($configPath);
//$configs = substr($s, 18, -2);
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
if ($configs!='') {
$envs = json_decode($configs, true);
if (in_array($str, $InnerEnv)) {
if (isInnerEnv($str)) {
if ($disktag=='') $disktag = $_SERVER['disktag'];
if (isset($envs[$disktag][$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($envs[$disktag][$str]);
if (isBase64Env($str)) return base64y_decode($envs[$disktag][$str]);
else return $envs[$disktag][$str];
}
} else {
if (isset($envs[$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($envs[$str]);
if (isBase64Env($str)) return base64y_decode($envs[$str]);
else return $envs[$str];
}
}
@ -88,23 +83,19 @@ function getConfig($str, $disktag = '')
function setConfig($arr, $disktag = '')
{
global $InnerEnv;
global $Base64Env;
global $slash;
if ($disktag=='') $disktag = $_SERVER['disktag'];
$slash = '/';
if (strpos(__DIR__, ':')) $slash = '\\';
$projectPath = splitlast(__DIR__, $slash)[0];
$configPath = $projectPath . $slash . '.data' . $slash . 'config.php';
$s = file_get_contents($configPath);
//$configs = substr($s, 18, -2);
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
if ($configs!='') $envs = json_decode($configs, true);
$disktags = explode("|", getConfig('disktag'));
$indisk = 0;
$operatedisk = 0;
foreach ($arr as $k => $v) {
if (in_array($k, $InnerEnv)) {
if (in_array($k, $Base64Env)) $envs[$disktag][$k] = base64y_encode($v);
if (isInnerEnv($k)) {
if (isBase64Env($k)) $envs[$disktag][$k] = base64y_encode($v);
else $envs[$disktag][$k] = $v;
$indisk = 1;
} elseif ($k=='disktag_add') {
@ -117,7 +108,7 @@ function setConfig($arr, $disktag = '')
} elseif ($k=='disktag_rename' || $k=='disktag_newname') {
if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1;
} else {
if (in_array($k, $Base64Env)) $envs[$k] = base64y_encode($v);
if (isBase64Env($k)) $envs[$k] = base64y_encode($v);
else $envs[$k] = $v;
}
}
@ -140,7 +131,8 @@ function setConfig($arr, $disktag = '')
}
}
$envs = array_filter($envs, 'array_value_isnot_null');
ksort($envs);
//ksort($envs);
sortConfig($envs);
//echo '<pre>'. json_encode($envs, JSON_PRETTY_PRINT).'</pre>';
$prestr = '<?php $configs = \'' . PHP_EOL;
@ -260,7 +252,7 @@ language:<br>';
return message($html, $title, 201);
}
$html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind');
$title = 'Error';
$title = 'Install';
return message($html, $title, 201);
}

View File

@ -54,17 +54,15 @@ function GetPathSetting($event, $context)
function getConfig($str, $disktag = '')
{
global $InnerEnv;
global $Base64Env;
if (in_array($str, $InnerEnv)) {
if (isInnerEnv($str)) {
if ($disktag=='') $disktag = $_SERVER['disktag'];
$env = json_decode(getenv($disktag), true);
if (isset($env[$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($env[$str]);
if (isBase64Env($str)) return base64y_decode($env[$str]);
else return $env[$str];
}
} else {
if (in_array($str, $Base64Env)) return base64y_decode(getenv($str));
if (isBase64Env($str)) return base64y_decode(getenv($str));
else return getenv($str);
}
return '';
@ -72,8 +70,6 @@ function getConfig($str, $disktag = '')
function setConfig($arr, $disktag = '')
{
global $InnerEnv;
global $Base64Env;
if ($disktag=='') $disktag = $_SERVER['disktag'];
$disktags = explode("|",getConfig('disktag'));
$diskconfig = json_decode(getenv($disktag), true);
@ -81,8 +77,8 @@ function setConfig($arr, $disktag = '')
$indisk = 0;
$operatedisk = 0;
foreach ($arr as $k => $v) {
if (in_array($k, $InnerEnv)) {
if (in_array($k, $Base64Env)) $diskconfig[$k] = base64y_encode($v);
if (isInnerEnv($k)) {
if (isBase64Env($k)) $diskconfig[$k] = base64y_encode($v);
else $diskconfig[$k] = $v;
$indisk = 1;
} elseif ($k=='disktag_add') {
@ -95,7 +91,7 @@ function setConfig($arr, $disktag = '')
} elseif ($k=='disktag_rename' || $k=='disktag_newname') {
if ($arr['disktag_rename']!=$arr['disktag_newname']) $operatedisk = 1;
} else {
if (in_array($k, $Base64Env)) $tmp[$k] = base64y_encode($v);
if (isBase64Env($k)) $tmp[$k] = base64y_encode($v);
else $tmp[$k] = $v;
}
}
@ -256,7 +252,7 @@ language:<br>';
return message($html, $title, 201);
}
$html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind');
$title = 'Error';
$title = 'Install';
return message($html, $title, 201);
}
@ -324,7 +320,8 @@ function updateEnvironment($Envs, $function_name, $Region, $Namespace, $SecretId
}
$tmp_env = array_filter($tmp_env, 'array_value_isnot_null'); // remove null. 清除空值
//$tmp_env['Region'] = $Region;
ksort($tmp_env);
//ksort($tmp_env);
sortConfig($tmp_env);
$i = 0;
foreach ($tmp_env as $key1 => $value1) {

View File

@ -54,15 +54,13 @@ function GetPathSetting($event, $context)
function getConfig($str, $disktag = '')
{
global $InnerEnv;
global $Base64Env;
//include 'config.php';
$s = file_get_contents('config.php');
$s = file_get_contents('.data/config.php');
//$configs = substr($s, 18, -2);
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
if ($configs!='') {
$envs = json_decode($configs, true);
if (in_array($str, $InnerEnv)) {
if (isInnerEnv($str)) {
if ($disktag=='') $disktag = $_SERVER['disktag'];
if (isset($envs[$disktag][$str])) {
if (in_array($str, $Base64Env)) return base64y_decode($envs[$disktag][$str]);
@ -80,11 +78,9 @@ function getConfig($str, $disktag = '')
function setConfig($arr, $disktag = '')
{
global $InnerEnv;
global $Base64Env;
if ($disktag=='') $disktag = $_SERVER['disktag'];
//include 'config.php';
$s = file_get_contents('config.php');
$s = file_get_contents('.data/config.php');
//$configs = substr($s, 18, -2);
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
if ($configs!='') $envs = json_decode($configs, true);
@ -92,7 +88,7 @@ function setConfig($arr, $disktag = '')
$indisk = 0;
$operatedisk = 0;
foreach ($arr as $k => $v) {
if (in_array($k, $InnerEnv)) {
if (isInnerEnv($k)) {
if (in_array($k, $Base64Env)) $envs[$disktag][$k] = base64y_encode($v);
else $envs[$disktag][$k] = $v;
$indisk = 1;
@ -129,7 +125,7 @@ function setConfig($arr, $disktag = '')
}
}
$envs = array_filter($envs, 'array_value_isnot_null');
ksort($envs);
//ksort($envs);
$response = updateEnvironment($envs, $_SERVER['function_name'], $_SERVER['Region'], $_SERVER['namespace'], getConfig('SecretId'), getConfig('SecretKey'));
WaitSCFStat($_SERVER['function_name'], $_SERVER['Region'], $_SERVER['namespace'], getConfig('SecretId'), getConfig('SecretKey'));
return $response;
@ -268,7 +264,7 @@ language:<br>';
return message($html, $title, 201);
}
$html .= '<a href="?install0">'.getconstStr('ClickInstall').'</a>, '.getconstStr('LogintoBind');
$title = 'Error';
$title = 'Install';
return message($html, $title, 201);
}
@ -366,6 +362,7 @@ function copyFolder($from, $to)
function updateEnvironment($Envs, $function_name, $Region, $Namespace, $SecretId, $SecretKey)
{
sortConfig($Envs);
// 获取当前代码并解压
//$codeurl = json_decode(getfunctioncodeurl($function_name, $Region, $Namespace, $SecretId, $SecretKey), true)['Response']['Url'];
//$codezip = '/tmp/oldcode.zip';
@ -382,7 +379,7 @@ function updateEnvironment($Envs, $function_name, $Region, $Namespace, $SecretId
// 将配置写入
$prestr = '<?php $configs = \'' . PHP_EOL;
$aftstr = PHP_EOL . '\';';
file_put_contents($outPath . 'config.php', $prestr . json_encode($Envs, JSON_PRETTY_PRINT) . $aftstr);
file_put_contents($outPath . '.data/config.php', $prestr . json_encode($Envs, JSON_PRETTY_PRINT) . $aftstr);
// 将目录中文件打包成zip
$source = '/tmp/code.zip';
@ -451,7 +448,7 @@ function SetbaseConfig($Envs, $function_name, $Region, $Namespace, $SecretId, $S
}
WaitSCFStat($function_name, $Region, $Namespace, $SecretId, $SecretKey);
$s = file_get_contents('config.php');
$s = file_get_contents('.data/config.php');
//$configs = substr($s, 18, -2);
$configs = '{' . splitlast(splitfirst($s, '{')[1], '}')[0] . '}';
if ($configs!='') $envs = json_decode($configs, true);
@ -459,7 +456,7 @@ function SetbaseConfig($Envs, $function_name, $Region, $Namespace, $SecretId, $S
$envs[$k] = $v;
}
$envs = array_filter($envs, 'array_value_isnot_null');
ksort($envs);
//ksort($envs);
$response = updateEnvironment($envs, $function_name, $Region, $Namespace, $SecretId, $SecretKey);
return $response;
}
@ -593,7 +590,7 @@ function OnekeyUpate($auth = 'qkqpttgf', $project = 'OneManager-php', $branch =
}
}
// 放入配置文件
file_put_contents($outPath . '/config.php', file_get_contents(__DIR__.'/../config.php'));
file_put_contents($outPath . '/.data/config.php', file_get_contents(__DIR__ . '/../.data/config.php'));
// 将目录中文件打包成zip
//$zip=new ZipArchive();

View File

@ -249,7 +249,7 @@
</li>
<!--AdminEnd-->
<ion-icon name="folder"></ion-icon>
<a id="file_a<!--filenum-->" name="folderlist" href="<!--FileEncodeReplaceUrl-->/"><!--FileEncodeReplaceName--></a>
<a id="file_a<!--filenum-->" name="folderlist" href="<!--FileEncodeReplaceUrl-->/" fileid="<!--FileId-->"><!--FileEncodeReplaceName--></a>
</td>
<td class="updated_at" id="folder_time<!--filenum-->"><!--lastModifiedDateTime--></td>
<td class="size" id="folder_size<!--filenum-->"><!--size--></td>
@ -269,7 +269,7 @@
</li>
<!--AdminEnd-->
<ion-icon name="<!--IconValue-->"></ion-icon>
<a id="file_a<!--filenum-->" name="filelist" href="<!--FileEncodeReplaceUrl-->?preview" target=_blank><!--FileEncodeReplaceName--></a>
<a id="file_a<!--filenum-->" name="filelist" href="<!--FileEncodeReplaceUrl-->?preview" fileid="<!--FileId-->" target=_blank><!--FileEncodeReplaceName--></a>
<a class="download" href="<!--FileEncodeReplaceUrl-->"><ion-icon name="download"></ion-icon></a>
</td>
<td class="updated_at" id="file_time<!--filenum-->"><!--lastModifiedDateTime--></td>
@ -357,6 +357,7 @@
<label id="rename_label"></label><br><br><a onclick="operatediv_close('rename')" class="operatediv_close"><!--constStr@Close--></a>
<form id="rename_form" onsubmit="return submit_operate('rename');">
<input id="rename_sid" name="rename_sid" type="hidden" value="">
<input id="rename_fileid" name="rename_fileid" type="hidden" value="">
<input id="rename_hidden" name="rename_oldname" type="hidden" value="">
<input id="rename_input" name="rename_newname" type="text" value="">
<input name="operate_action" type="submit" value="<!--constStr@Rename-->">
@ -370,6 +371,7 @@
<form id="delete_form" onsubmit="return submit_operate('delete');">
<label id="delete_input"><!--constStr@Delete-->?</label>
<input id="delete_sid" name="delete_sid" type="hidden" value="">
<input id="delete_fileid" name="delete_fileid" type="hidden" value="">
<input id="delete_hidden" name="delete_name" type="hidden" value="">
<input name="operate_action" type="submit" value="<!--constStr@Submit-->">
</form>
@ -380,6 +382,7 @@
<label id="encrypt_label"></label><br><br><a onclick="operatediv_close('encrypt')" class="operatediv_close"><!--constStr@Close--></a>
<form id="encrypt_form" onsubmit="return submit_operate('encrypt');">
<input id="encrypt_sid" name="encrypt_sid" type="hidden" value="">
<input id="encrypt_fileid" name="encrypt_fileid" type="hidden" value="">
<input id="encrypt_hidden" name="encrypt_folder" type="hidden" value="">
<input id="encrypt_input" name="encrypt_newpass" type="text" value="" placeholder="<!--constStr@InputPasswordUWant-->">
<!--EncryptBtnStart--><input name="operate_action" type="submit" value="<!--constStr@Encrypt-->"><!--EncryptBtnEnd--><!--EncryptAlertStart--><br><label><!--constStr@SetpassfileBfEncrypt--></label><!--EncryptAlertEnd-->
@ -391,6 +394,7 @@
<label id="copy_label"></label><br><br><a onclick="operatediv_close('copy')" class="operatediv_close"><!--constStr@Close--></a>
<form id="copy_form" onsubmit="return submit_operate('copy');">
<input id="copy_sid" name="copy_sid" type="hidden" value="">
<input id="copy_fileid" name="copy_fileid" type="hidden" value="">
<input id="copy_hidden" name="copy_name" type="hidden" value="">
<input id="copy_input" name="copy_input" type="hidden" value="">
<input name="operate_action" type="submit" value="<!--constStr@Copy-->">
@ -402,6 +406,7 @@
<label id="move_label"></label><br><br><a onclick="operatediv_close('move')" class="operatediv_close"><!--constStr@Close--></a>
<form id="move_form" onsubmit="return submit_operate('move');">
<input id="move_sid" name="move_sid" type="hidden" value="">
<input id="move_fileid" name="move_fileid" type="hidden" value="">
<input id="move_hidden" name="move_name" type="hidden" value="">
<select id="move_input" name="move_folder">
<!--MoveRootStart-->
@ -420,6 +425,7 @@
<a onclick="operatediv_close('create')" class="operatediv_close"><!--constStr@Close--></a>
<form id="create_form" onsubmit="return submit_operate('create');">
<input id="create_sid" name="create_sid" type="hidden" value="">
<input id="create_fileid" name="create_fileid" type="hidden" value="">
<input id="create_hidden" type="hidden" value="">
<table>
<tr>
@ -472,6 +478,7 @@
<!--MdRequireStart--><link rel="stylesheet" href="//unpkg.zhimg.com/github-markdown-css@3.0.1/github-markdown.css">
<script type="text/javascript" src="//unpkg.zhimg.com/marked@0.6.2/marked.min.js"></script><!--MdRequireEnd-->
<!--GuestUploadStart--><script type="text/javascript" src="//cdn.bootcss.com/spark-md5/3.0.0/spark-md5.min.js"></script><!--GuestUploadEnd-->
<!--AliyundriveUploadJsStart--><script src="//cdn.bootcdn.net/ajax/libs/js-sha1/0.6.0/sha1.min.js"></script><!--AliyundriveUploadJsEnd-->
<!--IsFileStart--><!--IspdfFileStart--><script src="//cdn.bootcss.com/pdf.js/2.3.200/pdf.min.js"></script><!--IspdfFileEnd--><!--IsFileEnd-->
<!--ListEnd-->
<script type="text/javascript">
@ -485,27 +492,7 @@
location.href = location.href;
}
<!--ListStart-->
/*var root = '<!--base_disk_path-->';
function path_format(path) {
path = '/' + path + '/';
while (path.indexOf('//') !== -1) {
path = path.replace('//', '/')
}
return path
}
document.querySelectorAll('.table-header').forEach(function (e) {
var path = e.innerText;
if (path.substr(path.length-1)=='/') path = path.substr(0, path.length-1);
var paths = path.split('/');
e.innerHTML = '/ ';
if (paths <= 2) return;
for (var i = 1; i < paths.length - 1; i++) {
var to = path_format(root + paths.slice(0, i + 1).join('/'));
e.innerHTML += '<a href="' + to + '">' + paths[i] + '</a> / '
}
e.innerHTML += paths[paths.length - 1];
e.innerHTML = e.innerHTML.replace(/\s\/\s$/, '')
});*/
<!--IsFileStart-->
var $url = document.getElementById('url');
if ($url) {
@ -796,6 +783,24 @@
alert(tmptextarea.innerHTML+"<!--constStr@Success-->");
}
<!--UploadJsStart-->
function size_format(num) {
if (num>1024) {
num=num/1024;
} else {
return num.toFixed(2) + ' B';
}
if (num>1024) {
num=num/1024;
} else {
return num.toFixed(2) + ' KB';
}
if (num>1024) {
num=num/1024;
} else {
return num.toFixed(2) + ' MB';
}
return num.toFixed(2) + ' GB';
}
function uploadbuttonhide() {
document.getElementById('upload_btns').style.display='none';
/*document.getElementById('upload_submit').disabled='disabled';
@ -810,6 +815,8 @@
document.getElementById('upload_submit').style.display='';
document.getElementById('upload_file').style.display='';*/
}
<!--UploadJsEnd-->
<!--OnedriveUploadJsStart-->
function preup() {
uploadbuttonhide();
var files=document.getElementById('upload_file').files;
@ -849,6 +856,7 @@
return;
}
upbigfilename = encodeURIComponent((file.webkitRelativePath||file.name));
var filemd5='';
<!--GuestStart-->
function getext(str) {
strarry=str.split('.');
@ -880,13 +888,13 @@
if (asize < file.size) {
readblob(asize);
} else {
var filemd5 = spark.end();
filemd5 = spark.end();
td2.innerHTML='md5: '+filemd5;
upbigfilename = filemd5+ext;
<!--GuestEnd-->
td2.innerHTML='<!--constStr@GetUploadLink--> ...';
var xhr1 = new XMLHttpRequest();
xhr1.open("GET", '?action=upbigfile&upbigfilename='+ upbigfilename +'&filesize='+ file.size +'&lastModified='+ file.lastModified);
xhr1.open("POST", '?action=upbigfile');
xhr1.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr1.onprogress = function(e){
td2.innerHTML+='.';
@ -921,7 +929,7 @@
getuplink(i);
}
}
xhr1.send(null);
xhr1.send('upbigfilename='+ upbigfilename +'&filesize='+ file.size +'&filelastModified='+ file.lastModified +'&filemd5='+ filemd5);
<!--GuestStart-->
}
}
@ -929,24 +937,7 @@
}
uploadbuttonshow();
}
function size_format(num) {
if (num>1024) {
num=num/1024;
} else {
return num.toFixed(2) + ' B';
}
if (num>1024) {
num=num/1024;
} else {
return num.toFixed(2) + ' KB';
}
if (num>1024) {
num=num/1024;
} else {
return num.toFixed(2) + ' MB';
}
return num.toFixed(2) + ' GB';
}
function binupfile(file,url,tdnum,filename){
var label=document.getElementById('upfile_td2_'+tdnum);
var reader = new FileReader();
@ -1052,7 +1043,193 @@
}
}
}
<!--UploadJsEnd-->
<!--OnedriveUploadJsEnd-->
<!--AliyundriveUploadJsStart-->
function preup() {
uploadbuttonhide();
var files=document.getElementById('upload_file').files;
if (files.length<1) {
uploadbuttonshow();
return;
};
var table1=document.createElement('table');
document.getElementById('upload_div').appendChild(table1);
table1.setAttribute('class','list-table');
var timea=new Date().getTime();
var i=0;
getuplink(i);
function getuplink(i, r=0) {
var file=files[i];
var td1;
var td2;
if (r==0) {
var tr1=document.createElement('tr');
table1.appendChild(tr1);
tr1.setAttribute('data-to',1);
td1=document.createElement('td');
tr1.appendChild(td1);
td1.setAttribute('style','width:30%;word-break:break-word;');
td1.setAttribute('id','upfile_td1_'+timea+'_'+i);
td1.innerHTML=(file.webkitRelativePath||file.name)+'<br>'+size_format(file.size);
td2=document.createElement('td');
tr1.appendChild(td2);
td2.setAttribute('id','upfile_td2_'+timea+'_'+i);
}
var tdnum = timea+'_'+i;
td1=document.getElementById('upfile_td1_'+tdnum);
td2=document.getElementById('upfile_td2_'+tdnum);
if (file.size>100*1024*1024*1024) {
td2.innerHTML='<font color="red"><!--constStr@UpFileTooLarge--></font>';
uploadbuttonshow();
return;
}
upbigfilename = encodeURIComponent((file.webkitRelativePath||file.name));
td2.innerHTML='计算SHA1 ...';
var reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = function(e){
var filesha1 = sha1(this.result);
td2.innerHTML='<!--constStr@GetUploadLink--> ...';
var xhr1 = new XMLHttpRequest();
xhr1.open("POST", '?action=upbigfile');
xhr1.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr1.onload = function(e){
//console.log(xhr1.status+xhr1.responseText);
td2.innerHTML='<font color="red">'+xhr1.responseText+'</font>';
if (xhr1.status==201) {
if (xhr1.responseText=='') {
getuplink(i,1);
return;
}
var html=JSON.parse(xhr1.responseText);
//console.log(html);
if (!html['part_info_list']) {
if (html.name!='') {
if (html.exist==true) td2.innerHTML=html.name+' 文件名已有';
else if (html.rapid_upload==true) td2.innerHTML=html.name+' 秒传';
else td2.innerHTML='<font color="red">'+xhr1.responseText+'</font><br>';
td1.innerHTML='<div style="color:green"><a href="<!--base_disk_path--><!--Path-->'+html.name+'?preview" id="upfile_a_'+tdnum+'" target="_blank">'+td1.innerHTML+'</a><br><a href="<!--base_disk_path--><!--Path-->'+html.name+'" id="upfile_a1_'+tdnum+'"></a><!--constStr@UploadComplete--><button onclick="CopyAllDownloadUrl(\'#upfile_a1_'+tdnum+'\');" id="upfile_cpbt_'+tdnum+'" <!--AdminStart--> style="display:none"<!--AdminEnd--> ><!--constStr@CopyUrl--></button></div>';
} else {
td2.innerHTML='<font color="red">'+xhr1.responseText+'</font><br>';
}
} else {
td2.innerHTML='<!--constStr@UploadStart--> ...';
console.log(html['part_info_list'][0]['upload_url']);
binupfile(file,html['part_info_list'][0]['upload_url'],timea+'_'+i, upbigfilename, filesha1,html['file_id'],html['upload_id']);
}
}
if (i<files.length-1) {
i++;
getuplink(i);
}
}
xhr1.send('upbigfilename='+ upbigfilename +'&filesize='+ file.size +'&filelastModified='+ file.lastModified + '&filesha1=' + filesha1);
}
}
uploadbuttonshow();
}
function binupfile(file,url,tdnum,filename,filesha1,fileid,uploadid){
// xhr.getResponseHeader
var label=document.getElementById('upfile_td2_'+tdnum);
var reader = new FileReader();
var StartStr='';
var MiddleStr='';
var StartTime;
var EndTime;
var newstartsize = 0;
if(!!file){
var asize=0;
var totalsize=file.size;
var newstartsize=0;
StartTime = new Date();
asize = newstartsize;
if (newstartsize==0) {
StartStr='<!--constStr@UploadStartAt-->:' +StartTime.toLocaleString()+'<br>' ;
} else {
StartStr='<!--constStr@LastUpload-->'+size_format(newstartsize)+ '<br><!--constStr@ThisTime--><!--constStr@UploadStartAt-->:' +StartTime.toLocaleString()+'<br>' ;
}
//var chunksize=5*1024*1024; // chunk size, max 60M. 每小块上传大小
//if (totalsize>200*1024*1024) chunksize=10*1024*1024;
function readblob(start) {
//var end=start+chunksize;
//var blob = file.slice(start,end);
//reader.readAsArrayBuffer(blob);
reader.readAsArrayBuffer(file);
}
readblob(asize);
reader.onload = function(e){
var binary = this.result;
var xhr = new XMLHttpRequest();
xhr.open("PUT", url, true);
//xhr.setRequestHeader('x-requested-with','XMLHttpRequest');
bsize=asize+e.loaded-1;
xhr.setRequestHeader('Content-Range', 'bytes ' + asize + '-' + bsize +'/'+ totalsize);
xhr.upload.onprogress = function(e){
if (e.lengthComputable) {
var tmptime = new Date();
var tmpspeed = e.loaded*1000/(tmptime.getTime()-C_starttime.getTime());
var remaintime = (totalsize-asize-e.loaded)/tmpspeed;
label.innerHTML=StartStr+'<!--constStr@Upload--> ' +size_format(asize+e.loaded)+ ' / '+size_format(totalsize) + ' = ' + ((asize+e.loaded)*100/totalsize).toFixed(2) + '% <!--constStr@AverageSpeed-->:'+size_format((asize+e.loaded-newstartsize)*1000/(tmptime.getTime()-StartTime.getTime()))+'/s<br><!--constStr@CurrentSpeed--> '+size_format(tmpspeed)+'/s <!--constStr@Expect--> '+remaintime.toFixed(1)+'s';
}
}
var C_starttime = new Date();
xhr.onload = function(e){
if (xhr.status<500) {
//console.log(xhr.responseText);
//console.log(xhr.getResponseHeader('ETag'));
//var response=JSON.parse(xhr.responseText);
if (xhr.responseText==''&&xhr.getResponseHeader('ETag')!='') {
// 有ETag说明上传成功
var xhr1 = new XMLHttpRequest();
xhr1.open("POST", '?action=upbigfile');
//xhr1.open("GET", '?action=del_upload_cache&filelastModified='+file.lastModified+'&filesize='+file.size+'&filename='+filename);
xhr1.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr1.send('uploadid='+ uploadid +'&fileid='+ fileid +'&etag='+ xhr.getResponseHeader('ETag'));
xhr1.onload = function(e){
console.log(xhr1.responseText+','+xhr1.status);
<!--AdminStart-->
var html=JSON.parse(xhr1.responseText);
//response.name=file.webkitRelativePath||response.name;
addelement(html);
<!--AdminEnd-->
}
if (totalsize>10*1024*1024) {
var xhr3 = new XMLHttpRequest();
xhr3.open("GET", '?action=del_upload_cache&filelastModified='+file.lastModified+'&filesize='+file.size+'&filename='+filename);
xhr3.setRequestHeader('x-requested-with','XMLHttpRequest');
xhr3.send(null);
xhr3.onload = function(e){
console.log(xhr3.responseText+','+xhr3.status);
}
}
EndTime=new Date();
MiddleStr = '<!--constStr@EndAt-->:'+EndTime.toLocaleString()+'<br>';
if (newstartsize==0) {
MiddleStr += '<!--constStr@AverageSpeed-->:'+size_format(totalsize*1000/(EndTime.getTime()-StartTime.getTime()))+'/s<br>';
} else {
MiddleStr += '<!--constStr@ThisTime--><!--constStr@AverageSpeed-->:'+size_format((totalsize-newstartsize)*1000/(EndTime.getTime()-StartTime.getTime()))+'/s<br>';
}
while (filename.indexOf('%2F')>0) filename = filename.replace('%2F', '/');
document.getElementById('upfile_td1_'+tdnum).innerHTML='<div style="color:green"><a href="<!--base_disk_path--><!--Path-->'+filename+'?preview" id="upfile_a_'+tdnum+'" target="_blank">'+document.getElementById('upfile_td1_'+tdnum).innerHTML+'</a><br><a href="<!--base_disk_path--><!--Path-->'+filename+'" id="upfile_a1_'+tdnum+'"></a><!--constStr@UploadComplete--><button onclick="CopyAllDownloadUrl(\'#upfile_a1_'+tdnum+'\');" id="upfile_cpbt_'+tdnum+'" <!--AdminStart--> style="display:none"<!--AdminEnd--> ><!--constStr@CopyUrl--></button></div>';
label.innerHTML=StartStr+MiddleStr;
label.style.color='green';
// uploadbuttonshow();
} else {
if (!response['nextExpectedRanges']) {
label.innerHTML='<font color="red">'+xhr.responseText+'</font><br>';
} else {
var a=response['nextExpectedRanges'][0];
asize=Number( a.slice(0,a.indexOf("-")) );
readblob(asize);
}
} } else readblob(asize);
}
xhr.send(binary);
}
}
}
<!--AliyundriveUploadJsEnd-->
<!--ListEnd-->
function operatediv_close(operate) {
document.getElementById(operate+'_div').style.display='none';
@ -1060,7 +1237,10 @@
}
<!--AdminStart-->
function logout() {
document.cookie = "admin=; path=/";
var expd = new Date();
expd.setTime(expd.getTime()+1000);
var expires = "expires="+expd.toGMTString();
document.cookie = "admin=; path=/; "+expires;
location.href = location.href;
}
<!--IsFolderStart-->
@ -1074,16 +1254,19 @@
document.getElementById('mask').style.height=document.documentElement.scrollHeight<window.innerHeight?window.innerHeight:document.documentElement.scrollHeight+'px';
if (num=='') {
var str='';
var fileid='';
} else {
var str=decodeURIComponent(document.getElementById('file_a'+num).href);
if (str.substr(-1)==' ') str=str.substr(0, str.length-1);
if (str.substr(-1)=='/') str=str.substr(0, str.length-1);
if (str.substr(-8)=='?preview') str=str.substr(0, str.length-8);
if (str.lastIndexOf('/')>-1) str=str.substr(str.lastIndexOf('/')+1);
var fileid=document.getElementById('file_a'+num).attributes['fileid'].nodeValue;
}
document.getElementById(action + '_div').style.display='';
document.getElementById(action + '_label').innerText=str;//.replace(/&/,'&amp;');
document.getElementById(action + '_sid').value=num;
document.getElementById(action + '_fileid').value=fileid;
document.getElementById(action + '_hidden').value=str;
if (action=='rename') document.getElementById(action + '_input').value=str;
var $e = event || window.event;
@ -1129,6 +1312,7 @@
html=JSON.parse(xhr.responseText);
addelement(html);
}
//alert('success');
} else alert(xhr.status+'\n'+xhr.responseText);
document.getElementById(str+'_div').style.display='none';
document.getElementById('mask').style.display='none';
@ -1147,15 +1331,16 @@
a1.target='_blank';
var td2=document.createElement('td');
td2.setAttribute('class','updated_at');
td2.innerText=html.lastModifiedDateTime.replace(/T/,' ').replace(/Z/,'');
if (!!html.time) td2.innerText=html.time.replace(/T/,' ').replace(/Z/,'');
var td3=document.createElement('td');
td3.setAttribute('class','size');
td3.innerText=size_format(html.size);
if (!!html.folder) {
if (!!html.size) td3.innerText=size_format(html.size);
else td3.innerText='0 B';
if (html.type=='folder') {
a1.href+='/';
document.getElementById('tr0').parentNode.insertBefore(tr1,document.getElementById('tr0').nextSibling);
}
if (!!html.file) {
if (html.type=='file') {
a1.href+='?preview';
a1.name='filelist';
document.getElementById('tr0').parentNode.appendChild(tr1);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff