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
// 最大超时设置比如某次请求第一次7s超时第二次14s第三次28s第四次56s第五次不是112s而是60s后续同理
// 最大超時設置比如某次請求第一次7s超時第二次14s第三次28s第四次56s第五次不是112s而是60s後續同理
const TIMEOUT_MAX = 60000
const LOG_DELAY = 5000 // 日志输出时间间隔,单位毫秒
const PAGE_SIZE = 1000 // 每次网络请求读取目录下的文件数,数值越大,越有可能超时,不得超过1000
const LOG_DELAY = 5000 // 日志輸出時間間隔,單位毫秒
const PAGE_SIZE = 1000 // 每次網絡請求讀取目錄下的文件數,數值越大,越有可能超時,不得超過1000
const RETRY_LIMIT = 7 // 如果某次请求失败,允许其重试的最大次数
const PARALLEL_LIMIT = 20 // 网络请求的并行数量,可根据网络环境调整
const RETRY_LIMIT = 7 // 如果某次請求失敗,允許其重試的最大次數
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_secret: 'your_client_secret',
refresh_token: 'your_refrest_token',
expires: 0, // 可以留空
access_token: '', // 可以留空
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_token: 'bot_token', // 你的 telegram robot 的 token獲取方法參見 https://core.telegram.org/bots#6-botfather
tg_whitelist: ['your_tg_username'] // 你的tg username(t.me/username)bot只會執行這個列表中的用戶所發送的指令
}
//-------------------MOD-------------------
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 }
module.exports = { AUTH, PARALLEL_LIMIT, RETRY_LIMIT, TIMEOUT_BASE, TIMEOUT_MAX, LOG_DELAY, PAGE_SIZE, DEFAULT_TARGET }

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')
.describe('s', '統計結果排序方法,可選值如下: name 或 size不填則預設根據文件數量降冪排列')
.alias('t', 'type')
.describe('t', '統計結果輸出類型,可選值如下: html/json/allall表示輸出所有文件json數據最好與 -o 一起使用。不填則預設輸出命令列表格')
.describe('t', '統計結果輸出類型,可選值如下: html/tree/json/allall表示輸出所有文件json數據最好與 -o 一起使用。不填則預設輸出命令列表格')
.alias('o', 'output')
.describe('o', '統計結果輸出文件,適合與 -t 一起使用')
.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
const { argv } = require('yargs')
.usage('用法: ./$0 folder-id [options]\nfolder-id 是你想检测SA是否对其有阅读权限的目录ID')
.usage('用法: ./$0 folder-id\nfolder-id 是你想檢測SA是否對其有閱讀權限的目錄ID')
.help('h')
.alias('h', 'help')
@ -28,18 +28,18 @@ main()
async function main () {
const [fid] = argv._
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)
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)
if (choice === 'yes') {
mv_sa(invalid_sa)
console.log('成功移')
console.log('成功移')
} else {
console.log('成功退出,无效的SA记录', invalid_sa)
console.log('成功退出,無效的SA記錄', invalid_sa)
}
} else {
console.warn('目录ID缺失或格式错误')
console.warn('目錄ID缺失或格式錯誤')
}
}
@ -55,9 +55,9 @@ async function choose (count) {
const answer = await prompts({
type: 'select',
name: 'value',
message: `检测到 ${count} 个无效的SA是否将它们移动到 sa/invalid 目录下?`,
message: `檢測到 ${count} 個無效的SA是否將它們移動到 sa/invalid 目錄下?`,
choices: [
{ title: 'Yes', description: '确认移动', value: 'yes' },
{ title: 'Yes', description: '確認移動', value: 'yes' },
{ title: 'No', description: '不做更改,直接退出', value: 'no' }
],
initial: 0
@ -66,13 +66,13 @@ async function choose (count) {
}
async function get_invalid_sa (arr, fid) {
if (!fid) throw new Error('请指定要检测权限的目录ID')
if (!fid) throw new Error('請指定要檢測權限的目錄ID')
const fails = []
let flag = 0
let good = 0
for (const v of arr) {
console.log('检测进度', `${flag++}/${arr.length}`)
console.log('正常/常', `${good}/${fails.length}`)
console.log('檢測進度', `${flag++}/${arr.length}`)
console.log('正常/常', `${good}/${fails.length}`)
const {gtoken, filename} = v
try {
const access_token = await get_sa_token(gtoken)
@ -80,11 +80,11 @@ async function get_invalid_sa (arr, fid) {
good++
} catch (e) {
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 code = data && data.error && data.error.code
if (Number(code) === 404) fails.push(filename) // 读取文件夹信息失败
if (Number(code) === 404) fails.push(filename) // 讀取資料夾訊息失敗
}
}
return fails