translate validate-sa.js
This commit is contained in:
parent
d3f1734be5
commit
c8cc23b90e
25
config.js
25
config.js
|
@ -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 }
|
|
||||||
|
|
|
@ -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
2
count
|
@ -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/all,all表示輸出所有文件json數據,最好與 -o 一起使用。不填則預設輸出命令列表格')
|
.describe('t', '統計結果輸出類型,可選值如下: html/tree/json/all,all表示輸出所有文件json數據,最好與 -o 一起使用。不填則預設輸出命令列表格')
|
||||||
.alias('o', 'output')
|
.alias('o', 'output')
|
||||||
.describe('o', '統計結果輸出文件,適合與 -t 一起使用')
|
.describe('o', '統計結果輸出文件,適合與 -t 一起使用')
|
||||||
.help('h')
|
.help('h')
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 208 KiB |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
After Width: | Height: | Size: 176 KiB |
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue