translate validate-sa.js

This commit is contained in:
Jack Liao 2020-07-15 14:36:39 +08:00
parent d3f1734be5
commit c8cc23b90e
8 changed files with 32 additions and 28 deletions

View File

@ -1,27 +1,24 @@
// 单次请求多少毫秒未响应以后超时(基准值,若连续超时则下次调整为上次的2倍 // 單次請求多少毫秒無回應以後超時(基準值,若連續超時則下次調整為上次的2倍
const TIMEOUT_BASE = 7000 const TIMEOUT_BASE = 7000
// 最大超时设置比如某次请求第一次7s超时第二次14s第三次28s第四次56s第五次不是112s而是60s后续同理 // 最大超時設置比如某次請求第一次7s超時第二次14s第三次28s第四次56s第五次不是112s而是60s後續同理
const TIMEOUT_MAX = 60000 const TIMEOUT_MAX = 60000
const LOG_DELAY = 5000 // 日志输出时间间隔,单位毫秒 const LOG_DELAY = 5000 // 日志輸出時間間隔,單位毫秒
const PAGE_SIZE = 1000 // 每次网络请求读取目录下的文件数,数值越大,越有可能超时,不得超过1000 const PAGE_SIZE = 1000 // 每次網絡請求讀取目錄下的文件數,數值越大,越有可能超時,不得超過1000
const RETRY_LIMIT = 7 // 如果某次请求失败,允许其重试的最大次数 const RETRY_LIMIT = 7 // 如果某次請求失敗,允許其重試的最大次數
const PARALLEL_LIMIT = 20 // 网络请求的并行数量,可根据网络环境调整 const PARALLEL_LIMIT = 20 // 網絡請求的並行數量,可根據網絡環境調整(即多線程之線程數量)
const DEFAULT_TARGET = '' // 必填,拷贝默认目的地ID如果不指定target则会复制到此处建议填写团队盘ID const DEFAULT_TARGET = '' // 必填,copy時預設的dstID建議填寫小組雲端硬碟ID
const AUTH = { // 如果您拥有service account的json授权文件可将其拷贝至 sa 目录中以代替 client_id/secret/refrest_token const AUTH = { // 如果您擁有SA的json授權文件可將其拷貝至 sa 目錄中以代替 client_id/secret/refrest_token 這裡建議使用自己的client_id, 具體參考說明文件#個人帳號配置
client_id: 'your_client_id', client_id: 'your_client_id',
client_secret: 'your_client_secret', client_secret: 'your_client_secret',
refresh_token: 'your_refrest_token', refresh_token: 'your_refrest_token',
expires: 0, // 可以留空 expires: 0, // 可以留空
access_token: '', // 可以留空 access_token: '', // 可以留空
tg_token: 'bot_token', // 你的 telegram robot 的 token获取方法参见 https://core.telegram.org/bots#6-botfather tg_token: 'bot_token', // 你的 telegram robot 的 token獲取方法參見 https://core.telegram.org/bots#6-botfather
tg_whitelist: ['your_tg_username'] // 你的tg username(t.me/username)bot只会执行这个列表里的用户所发送的指令 tg_whitelist: ['your_tg_username'] // 你的tg username(t.me/username)bot只會執行這個列表中的用戶所發送的指令
} }
//-------------------MOD------------------- module.exports = { AUTH, PARALLEL_LIMIT, RETRY_LIMIT, TIMEOUT_BASE, TIMEOUT_MAX, LOG_DELAY, PAGE_SIZE, DEFAULT_TARGET }
const SA_PATH = '../sa' //sa路徑配置, 給定絕對路徑或是以src為當前路徑給定相對路徑, 預設為'../sa'
const BUTTON_LEVEL = 1 //預設為1, 填入大於2皆視為2
module.exports = { AUTH, PARALLEL_LIMIT, RETRY_LIMIT, TIMEOUT_BASE, TIMEOUT_MAX, LOG_DELAY, PAGE_SIZE, DEFAULT_TARGET, SA_PATH, BUTTON_LEVEL }

5
config_mod.js Normal file
View File

@ -0,0 +1,5 @@
//-------------------MOD-------------------
const SA_PATH = '../sa' //sa路徑配置, 給定絕對路徑或是以src為當前路徑給定相對路徑, 預設為'../sa'
const BUTTON_LEVEL = 1 //預設為1, 填入大於2皆視為2
module.exports = { SA_PATH, BUTTON_LEVEL }

2
count
View File

@ -15,7 +15,7 @@ const { argv } = require('yargs')
.alias('s', 'sort') .alias('s', 'sort')
.describe('s', '統計結果排序方法,可選值如下: name 或 size不填則預設根據文件數量降冪排列') .describe('s', '統計結果排序方法,可選值如下: name 或 size不填則預設根據文件數量降冪排列')
.alias('t', 'type') .alias('t', 'type')
.describe('t', '統計結果輸出類型,可選值如下: html/json/allall表示輸出所有文件json數據最好與 -o 一起使用。不填則預設輸出命令列表格') .describe('t', '統計結果輸出類型,可選值如下: html/tree/json/allall表示輸出所有文件json數據最好與 -o 一起使用。不填則預設輸出命令列表格')
.alias('o', 'output') .alias('o', 'output')
.describe('o', '統計結果輸出文件,適合與 -t 一起使用') .describe('o', '統計結果輸出文件,適合與 -t 一起使用')
.help('h') .help('h')

BIN
static/colab.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

1
static/tree.min.css vendored Normal file

File diff suppressed because one or more lines are too long

1
static/tree.min.js vendored Normal file

File diff suppressed because one or more lines are too long

BIN
static/tree.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

View File

@ -1,7 +1,7 @@
#!/usr/bin/env node #!/usr/bin/env node
const { argv } = require('yargs') const { argv } = require('yargs')
.usage('用法: ./$0 folder-id [options]\nfolder-id 是你想检测SA是否对其有阅读权限的目录ID') .usage('用法: ./$0 folder-id\nfolder-id 是你想檢測SA是否對其有閱讀權限的目錄ID')
.help('h') .help('h')
.alias('h', 'help') .alias('h', 'help')
@ -28,18 +28,18 @@ main()
async function main () { async function main () {
const [fid] = argv._ const [fid] = argv._
if (validate_fid(fid)) { if (validate_fid(fid)) {
console.log('开始检测', SA_TOKENS.length, '个SA帐号') console.log('開始檢測', SA_TOKENS.length, '個SA帳號')
const invalid_sa = await get_invalid_sa(SA_TOKENS, fid) const invalid_sa = await get_invalid_sa(SA_TOKENS, fid)
if (!invalid_sa.length) return console.log('已检测', SA_TOKENS.length, '个SA未检测到无效帐号') if (!invalid_sa.length) return console.log('已檢測', SA_TOKENS.length, '個SA未檢測到無效帳號')
const choice = await choose(invalid_sa.length) const choice = await choose(invalid_sa.length)
if (choice === 'yes') { if (choice === 'yes') {
mv_sa(invalid_sa) mv_sa(invalid_sa)
console.log('成功移') console.log('成功移')
} else { } else {
console.log('成功退出,无效的SA记录', invalid_sa) console.log('成功退出,無效的SA記錄', invalid_sa)
} }
} else { } else {
console.warn('目录ID缺失或格式错误') console.warn('目錄ID缺失或格式錯誤')
} }
} }
@ -55,9 +55,9 @@ async function choose (count) {
const answer = await prompts({ const answer = await prompts({
type: 'select', type: 'select',
name: 'value', name: 'value',
message: `检测到 ${count} 个无效的SA是否将它们移动到 sa/invalid 目录下?`, message: `檢測到 ${count} 個無效的SA是否將它們移動到 sa/invalid 目錄下?`,
choices: [ choices: [
{ title: 'Yes', description: '确认移动', value: 'yes' }, { title: 'Yes', description: '確認移動', value: 'yes' },
{ title: 'No', description: '不做更改,直接退出', value: 'no' } { title: 'No', description: '不做更改,直接退出', value: 'no' }
], ],
initial: 0 initial: 0
@ -66,13 +66,13 @@ async function choose (count) {
} }
async function get_invalid_sa (arr, fid) { async function get_invalid_sa (arr, fid) {
if (!fid) throw new Error('请指定要检测权限的目录ID') if (!fid) throw new Error('請指定要檢測權限的目錄ID')
const fails = [] const fails = []
let flag = 0 let flag = 0
let good = 0 let good = 0
for (const v of arr) { for (const v of arr) {
console.log('检测进度', `${flag++}/${arr.length}`) console.log('檢測進度', `${flag++}/${arr.length}`)
console.log('正常/常', `${good}/${fails.length}`) console.log('正常/常', `${good}/${fails.length}`)
const {gtoken, filename} = v const {gtoken, filename} = v
try { try {
const access_token = await get_sa_token(gtoken) const access_token = await get_sa_token(gtoken)
@ -80,11 +80,11 @@ async function get_invalid_sa (arr, fid) {
good++ good++
} catch (e) { } catch (e) {
const status = e && e.response && e.response.status const status = e && e.response && e.response.status
if (Number(status) === 400) fails.push(filename) // access_token 获取失败 if (Number(status) === 400) fails.push(filename) // access_token 獲取失敗
const data = e && e.response && e.response.data const data = e && e.response && e.response.data
const code = data && data.error && data.error.code const code = data && data.error && data.error.code
if (Number(code) === 404) fails.push(filename) // 读取文件夹信息失败 if (Number(code) === 404) fails.push(filename) // 讀取資料夾訊息失敗
} }
} }
return fails return fails