Feature: add antileechtoken and expiretime for upyun manage

This commit is contained in:
萌萌哒赫萝
2023-08-29 07:13:37 -07:00
parent 2daae921ff
commit ea61614ddd
8 changed files with 53 additions and 4 deletions

View File

@@ -42,16 +42,29 @@ class UpyunApi {
bucket: string
operator: string
password: string
antiLeechToken: string
expireTime: number
stopMarker = 'g2gCZAAEbmV4dGQAA2VvZg'
logger: ManageLogger
constructor (bucket: string, operator: string, password: string, logger: ManageLogger) {
constructor (bucket: string, operator: string, password: string, logger: ManageLogger, antiLeechToken?: string, expireTime?: number) {
this.ser = new Upyun.Service(bucket, operator, password)
this.cli = new Upyun.Client(this.ser)
this.bucket = bucket
this.operator = operator
this.password = password
this.logger = logger
this.antiLeechToken = antiLeechToken || ''
this.expireTime = expireTime || 24 * 60 * 60
}
getAntiLeechParam (key: string): string {
const uri = `/${encodeURIComponent(key)}`.replace(/%2F/g, '/').replace(/^\/+/g, '/')
const now = Math.round(new Date().getTime() / 1000)
const expire = this.expireTime ? now + parseInt(this.expireTime.toString(), 10) : now + 1800
const sign = md5(`${this.antiLeechToken}&${expire}&${uri}`, 'hex')
const upt = `${sign.substring(12, 20)}${expire}`
return `_upt=${upt}`
}
formatFolder (item: any, slicedPrefix: string) {
@@ -72,6 +85,10 @@ class UpyunApi {
formatFile (item: any, slicedPrefix: string, urlPrefix: string) {
const key = `${slicedPrefix}${item.name}`
let url = `${urlPrefix}/${key}`
if (this.antiLeechToken) {
url = `${url}?${this.getAntiLeechParam(key)}`
}
return {
...item,
fileName: item.name,
@@ -81,7 +98,7 @@ class UpyunApi {
checked: false,
match: false,
isImage: isImage(item.name),
url: `${urlPrefix}/${key}`,
url,
key
}
}

View File

@@ -73,7 +73,7 @@ export class ManageApi extends EventEmitter implements ManageApiType {
case 'tcyun':
return new API.TcyunApi(this.currentPicBedConfig.secretId, this.currentPicBedConfig.secretKey, this.logger)
case 'upyun':
return new API.UpyunApi(this.currentPicBedConfig.bucketName, this.currentPicBedConfig.operator, this.currentPicBedConfig.password, this.logger)
return new API.UpyunApi(this.currentPicBedConfig.bucketName, this.currentPicBedConfig.operator, this.currentPicBedConfig.password, this.logger, this.currentPicBedConfig.antiLeechToken, this.currentPicBedConfig.expireTime)
case 'webdavplist':
return new API.WebdavplistApi(this.currentPicBedConfig.endpoint, this.currentPicBedConfig.username, this.currentPicBedConfig.password, this.currentPicBedConfig.sslEnabled, this.currentPicBedConfig.proxy, this.logger)
default:

View File

@@ -685,6 +685,8 @@ async function transUpToManage (config: IUploaderConfigListItem, picBedName: str
operator: config.operator,
password: config.password,
bucketName: config.bucket,
antiLeechToken: config.antiLeechToken,
expireTime: config.expireTime,
baseDir: '/',
customUrl: config.url,
transformedConfig: JSON.stringify({

View File

@@ -494,6 +494,20 @@ export const supportedPicBedList: IStringKeyMap = {
}
]
},
antiLeechToken: {
required: false,
description: $T('MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_DESC'),
placeholder: $T('MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_PLACEHOLDER'),
type: 'string',
default: '',
tooltip: $T('MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_TOOLTIP')
},
expireTime: {
required: false,
description: $T('MANAGE_CONSTANT_UPYUN_EXPIRE_TIME_DESC'),
type: 'number',
default: 0
},
paging: {
required: true,
description: $T('MANAGE_CONSTANT_UPYUN_PAGING'),
@@ -511,7 +525,7 @@ export const supportedPicBedList: IStringKeyMap = {
}
},
explain: $T('MANAGE_CONSTANT_UPYUN_EXPLAIN'),
options: ['alias', 'bucketName', 'operator', 'password', 'baseDir', 'customUrl', 'paging', 'itemsPerPage'],
options: ['alias', 'bucketName', 'operator', 'password', 'baseDir', 'customUrl', 'paging', 'itemsPerPage', 'antiLeechToken', 'expireTime'],
refLink: 'https://piclist.cn/manage.html#%E5%8F%88%E6%8B%8D%E4%BA%91',
referenceText: $T('MANAGE_CONSTANT_UPYUN_REFER_TEXT')
},

View File

@@ -492,6 +492,10 @@ interface ILocales {
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_PLACEHOLDER: string
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_A: string
MANAGE_CONSTANT_UPYUN_IS_AUTO_CUSTOM_URL_RULE_MESSAGE_B: string
MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_DESC: string
MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_PLACEHOLDER: string
MANAGE_CONSTANT_UPYUN_ANTI_LEECH_TOKEN_TOOLTIP: string
MANAGE_CONSTANT_UPYUN_EXPIRE_TIME_DESC: string
MANAGE_CONSTANT_UPYUN_PAGING: string
MANAGE_CONSTANT_UPYUN_ITEMS_PAGE: string
MANAGE_CONSTANT_UPYUN_EXPLAIN: string