Skip to content
This repository has been archived by the owner on May 14, 2022. It is now read-only.

Commit

Permalink
新增 google drive 和 scf 模块
Browse files Browse the repository at this point in the history
  • Loading branch information
ukuq committed Oct 31, 2019
1 parent a9eb89a commit 222df84
Show file tree
Hide file tree
Showing 6 changed files with 147 additions and 33 deletions.
19 changes: 15 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,22 @@

## 目前实现

目前仅开发了onedrive 的调用函数。
目前仅开发了onedrive,

google drive 的调用函数。

和一个 scf 服务器 文件列出函数。

如果想要使用其他网盘,参考文档:
如果想要使用其他网盘,参考 [这里]( https://www.onesrc.cn/p/onepoint-api-documentation.html)

## 更新日志


- 191031: 修复了文件名含有空格的无法访问的 bug。增加了 linux_scf 和 google drive 两个模块。
- 191029: 调整架构, 分离数据和界面, 支持多种 api
- ...
- 191005: 首次发布, 支持文件列表, 直链下载

https://www.onesrc.cn/p/onepoint-api-documentation.html

## Demo

Expand All @@ -40,7 +49,9 @@ https://service-8pduizwk-1255607810.ap-hongkong.apigateway.myqcloud.com/release/

修改 config.js 文件里面的 DRIVE_MAP 即可。

部署参考: [OnePoint 的配置](https://www.onesrc.cn/p/onepoint-configuration-process.html)
[onedrive 之 sharepoint 版本配置](https://www.onesrc.cn/p/onepoint-configuration-process.html)

[google drive 之 goindex 版本配置](https://www.onesrc.cn/p/google-drive-for-one-point-configuration.html)

## Thanks

Expand Down
17 changes: 15 additions & 2 deletions config.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
let { MS_OD } = require("./lib/ms_od");
const MS_OD = require("./lib/ms_od_sharepoint").func;
const GOO_GD = require("./lib/goo_gd_goindex").func;
const OTH_SCF = require("./lib/oth_linux_scf").func;
let render = require("./views/render").render;
exports.RENDER = render;
exports.G_CONFIG = {
Expand All @@ -23,6 +25,17 @@ exports.DRIVE_MAP = {
spConfig: {
shareUrl: 'https://lovelearn-my.sharepoint.com/:f:/g/personal/admin_share_onesrc_cc/EkEBAXfrK01JiBdQUQKm7O0BlHt50NS45RP9WKSCvEY9Sg?e=bkFrDs'
}
},
'/linux/': {
func: OTH_SCF
},
'/GDrive/': {
func: GOO_GD,
spConfig: {
password: "index",
cfurl: 'goindex.onesrc.workers.dev'
}
}

};
exports.DOMAIN_MAP={};
exports.DOMAIN_MAP = {};
3 changes: 3 additions & 0 deletions function.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,9 @@ function urlSpCharEncode(s) {
case '#':
res += '%23';
break;
case ' ':
res += '%20';
break;
default:
res += ch;
}
Expand Down
82 changes: 82 additions & 0 deletions lib/goo_gd_goindex.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
const { Msg_file, Msg_info, Msg_list, formatSize, formatDate, getExtByName, urlSpCharEncode } = require('../function').funcs;

const https = require("https");
/**
* 空格 url
* 文件列表
* @param {*} p2
* @param {*} cfurl
* @param {*} pass
*/
function proxy(p2, cfurl, pass) {
return new Promise((resolve) => {
const req = https.request({ method: "post", hostname: cfurl, path: encodeURI(p2) },
(res) => {
console.log(`Got response: ${res.statusCode}`);//默认utf8
if (res.statusCode !== 200) {
resolve(Msg_info(500, `别问, 问就是 ${res.statusCode} !`));
return;
}
let data = "";
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
//console.log(data);
if (!data) {
resolve(Msg_info(404, "404 一片空白"));
} else {
let jsonData = JSON.parse(data);
let p2_encode = urlSpCharEncode(p2);
if (!jsonData.files) {//文件
let e = jsonData;
if (e['size'] === undefined) {//其实是 文件夹节点信息
resolve(Msg_info(403, "请规范化文件夹路径"));
}
let fileinfo = {
downloadUrl: '//' + cfurl + p2_encode,
nodeType: 0,//type: 0_file
name: e['name'],//文件名
fileType: getExtByName(e['name']),//文件类型,不带点
url_p2: p2_encode,//以p2为基准的根目录
size: formatSize(e['size']),//文件大小xx.xx MB, 保留两位小数,中间空格不可少
modified: formatDate(e['modifiedTime']),//最近修改日期,固定格式
otherInfo: {}//此项不用,留给开发者存放其他信息 可为 undefined
};
resolve(Msg_file(fileinfo));
} else {//dir
let rDatas = [];
jsonData.files.forEach(e => {
let rData = {
nodeType: 0,
name: e['name'],//文件名
fileType: getExtByName(e['name']),//文件类型,不带点
url_p2: p2_encode + urlSpCharEncode(e['name']),//以p2为基准的根目录
size: formatSize(e['size']) || 'x items',//文件大小xx.xx MB, 保留两位小数,中间空格不可少
modified: formatDate(e['modifiedTime']),//最近修改日期,固定格式
otherInfo: {}//此项不用,留给开发者存放其他信息 可为 undefined
};
if (e['mimeType'].endsWith('folder')) {
rData.nodeType = 1;
rData.url_p2 += '/';
}
rDatas.push(rData);
});
resolve(Msg_list(rDatas));
}
}
});
});
req.write(JSON.stringify({ "password": pass }));
req.end();
});
}
exports.func = async (spConfig, cache, p2, query, body) => {
if (!cache['listCache']) cache['listCache'] = {};
if (!query['refresh'] && cache['listCache'][p2]) return cache['listCache'][p2];
let res = await proxy(p2, spConfig['cfurl'], spConfig['password']);
if (res.statusCode === 200) cache['listCache'][p2] = res;
console.log(JSON.stringify(res, null, 2));
return res;
}
exports.func({ password: "index", cfurl: 'goindex.onesrc.workers.dev' }, {}, '/Getting%20%20started', {});
2 changes: 1 addition & 1 deletion lib/ms_od.js → lib/ms_od_sharepoint.js
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ function nextInfoFilter(url) {
}


exports.MS_OD = async (spConfig, cache, p2, query, body) => {
exports.func = async (spConfig, cache, p2, query, body) => {
if (!cache['dataCache']) cache['dataCache'] = {};
dataCache = cache['dataCache'];
if (!cache['cookieMap']) cache['cookieMap'] = {};
Expand Down
57 changes: 31 additions & 26 deletions lib/oth_scf.js → lib/oth_linux_scf.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,39 @@ const fs = require("fs");
const { Msg_file, Msg_info, Msg_list, formatSize, formatDate, getExtByName, urlSpCharEncode } = require('../function').funcs;


exports.OTH_SCF = async (spConfig, cache, p2, query, body) => {
let rpath = p2;
let content = [];
return new Promise((resolve,reject) => {
fs.stat(rpath, (err, stats) => {
if (err) resolve(Msg_info(404, "Not Found"));
console.log(stats.isFile());
console.log(stats.isDirectory());
console.log(stats.isBlockDevice());
console.log(stats.isCharacterDevice());
console.log(stats);
exports.func = async (spConfig, cache, p2, query, body) => {
return new Promise((resolve) => {
fs.stat(p2, (err, stats) => {
if (err) {
resolve(Msg_info(403, "403"));
return;
}
let p2_encode = urlSpCharEncode(p2);
//console.log(stats);
if (stats.isDirectory()) {
console.log("查看" + rpath + "目录");
fs.readdir(rpath, (err, files)=> {
if (err) Msg_info(500, "something wrong");
if (!rpath.endsWith('/')) rpath += '/';
console.log("查看" + p2 + "目录");
fs.readdir(p2, (err, files) => {
if (err) {
resolve(Msg_info(500, "something wrong"));
return;
}
if (!p2.endsWith('/')) {
p2 += '/';
p2_encode += '/';
}
//files.length @暂不支持下一页
let len = files.length;
if (len === 0) resolve(Msg_list([]))
let counter = 0;
files.forEach( (file)=> {
console.log(rpath + file);
fs.stat(rpath + file, (err, st) => {
if (err) resolve(Msg_info(404, "Not Found"));
let content = [];
files.forEach((file) => {
fs.stat(p2 + file, (err, st) => {
if (err) resolve(Msg_info(500, "500 something wrong"));
let nodeData = {
nodeType: 0,//type: 0_file
name: file,//文件名
fileType: getExtByName(file),//文件类型,不带点
url_p2: rpath + file,//以p2为基准的根目录
url_p2: p2_encode + file,//以p2为基准的根目录
size: formatSize(st.size),//文件大小xx.xx MB, 保留两位小数,中间空格不可少
modified: formatDate(st.ctime),//最近修改日期,固定格式
otherInfo: {}//此项不用,留给开发者存放其他信息 可为 undefined
Expand All @@ -40,28 +45,28 @@ exports.OTH_SCF = async (spConfig, cache, p2, query, body) => {
}
content.push(nodeData);
counter++;
if(counter===len)resolve(Msg_list(content));
if (counter === len) resolve(Msg_list(content));
});
});
});
} else if (stats.isFile()) {
let tname = rpath.slice(rpath.lastIndexOf('/') + 1);
let tname = p2.slice(p2.lastIndexOf('/') + 1);
let fileInfo = {
downloadUrl: "rpath?download&",
downloadUrl: "//none",
nodeType: 0,//type: 0_file
name: tname,//文件名
fileType: getExtByName(tname),//文件类型,不带点
url_p2: rpath,//以p2为基准的根目录
url_p2: p2_encode,//以p2为基准的根目录
size: formatSize(stats.size),//文件大小xx.xx MB, 保留两位小数,中间空格不可少
modified: formatDate(stats.ctime),//最近修改日期,固定格式
otherInfo: {}//此项不用,留给开发者存放其他信息 可为 undefined
};
resolve(Msg_file(fileInfo));
} else {
resolve(Msg_info(403, "403"));
resolve(Msg_info(403, "403 设备文件"));
}
});
});
}

//exports.func({},{},'/');

0 comments on commit 222df84

Please sign in to comment.