From 3e98fd4325675109e0fc24203cd5d218d4bf0c79 Mon Sep 17 00:00:00 2001 From: Kuingsmile <96409857+Kuingsmile@users.noreply.github.com> Date: Fri, 22 Aug 2025 15:02:34 +0800 Subject: [PATCH] :sparkles: Feature(custom): add log for cloud delete --- src/main/apis/delete/alist.ts | 13 +- src/main/apis/delete/alistplist.ts | 9 +- src/main/apis/delete/aliyun.ts | 9 +- src/main/apis/delete/github.ts | 9 +- src/main/apis/delete/imgur.ts | 9 +- src/main/apis/delete/lskyplist.ts | 9 +- src/main/apis/delete/piclist.ts | 9 +- src/main/apis/delete/qiniu.ts | 9 +- src/main/apis/delete/smms.ts | 9 +- src/main/apis/delete/tcyun.ts | 9 +- src/main/apis/delete/upyun.ts | 8 +- src/main/utils/deleteFunc.ts | 300 ++++++++++++++--------------- src/main/utils/deleteLog.ts | 6 +- 13 files changed, 177 insertions(+), 231 deletions(-) diff --git a/src/main/apis/delete/alist.ts b/src/main/apis/delete/alist.ts index 55d638fb..05ca4c6e 100644 --- a/src/main/apis/delete/alist.ts +++ b/src/main/apis/delete/alist.ts @@ -15,10 +15,8 @@ interface IConfigMap { } export default class AlistApi { - static async delete(configMap: IConfigMap): Promise { - const { fileName, config } = configMap + static async delete({ fileName, config: { version, url, uploadPath, token } }: IConfigMap): Promise { try { - const { version, url, uploadPath, token } = config if (String(version) === '2') { deleteLog(fileName, 'Alist', false, 'Alist version 2 is not supported, deletion is skipped') return true @@ -35,12 +33,9 @@ export default class AlistApi { names: [path.basename(fileName)] } }) - if (result.data.code === 200) { - deleteLog(fileName, 'Alist') - return true - } - deleteLog(fileName, 'Alist', false) - return false + const ok = result.data.code === 200 + deleteLog(fileName, 'Alist', ok) + return ok } catch (error: any) { deleteFailedLog(fileName, 'Alist', error) return false diff --git a/src/main/apis/delete/alistplist.ts b/src/main/apis/delete/alistplist.ts index 63c8b1f1..605deacd 100644 --- a/src/main/apis/delete/alistplist.ts +++ b/src/main/apis/delete/alistplist.ts @@ -50,12 +50,9 @@ export default class AListplistApi { names: [path.basename(fileName)] } }) - if (result.data.code === 200) { - deleteLog(fileName, 'Alist') - return true - } - deleteLog(fileName, 'Alist', false) - return false + const ok = result.data.code === 200 + deleteLog(fileName, 'Alist', ok) + return ok } catch (error: any) { deleteFailedLog(fileName, 'Alist', error) return false diff --git a/src/main/apis/delete/aliyun.ts b/src/main/apis/delete/aliyun.ts index c5ee6468..27ea73cf 100644 --- a/src/main/apis/delete/aliyun.ts +++ b/src/main/apis/delete/aliyun.ts @@ -19,12 +19,9 @@ export default class AliyunApi { const client = new OSS({ ...config, region: config.area }) const key = AliyunApi.#getKey(fileName, config.path) const result = await client.delete(key) - if (result.res.status === 204) { - deleteLog(fileName, 'Aliyun') - return true - } - deleteLog(fileName, 'Aliyun', false) - return false + const ok = result.res.status === 204 + deleteLog(fileName, 'Aliyun', ok) + return ok } catch (error: any) { deleteFailedLog(fileName, 'Aliyun', error) return false diff --git a/src/main/apis/delete/github.ts b/src/main/apis/delete/github.ts index 79357f0f..12f46d81 100644 --- a/src/main/apis/delete/github.ts +++ b/src/main/apis/delete/github.ts @@ -39,12 +39,9 @@ export default class GithubApi { sha: hash, branch }) - if (status === 200) { - deleteLog(fileName, 'GitHub') - return true - } - deleteLog(fileName, 'GitHub', false) - return false + const ok = status === 200 + deleteLog(fileName, 'GitHub', ok) + return ok } catch (error: any) { deleteFailedLog(fileName, 'GitHub', error) return false diff --git a/src/main/apis/delete/imgur.ts b/src/main/apis/delete/imgur.ts index 1d1d572f..22012ece 100644 --- a/src/main/apis/delete/imgur.ts +++ b/src/main/apis/delete/imgur.ts @@ -30,12 +30,9 @@ export default class ImgurApi { headers: { Authorization }, timeout: 30000 }) - if (response.status === 200) { - deleteLog(hash, 'Imgur') - return true - } - deleteLog(hash, 'Imgur', false) - return false + const ok = response.status === 200 + deleteLog(hash, 'Imgur', ok) + return ok } catch (error: any) { deleteFailedLog(hash, 'Imgur', error) return false diff --git a/src/main/apis/delete/lskyplist.ts b/src/main/apis/delete/lskyplist.ts index 51740edd..d22a9f67 100644 --- a/src/main/apis/delete/lskyplist.ts +++ b/src/main/apis/delete/lskyplist.ts @@ -33,12 +33,9 @@ export default class LskyplistApi { timeout: 30000, httpsAgent: requestAgent }) - if (response.status === 200 && response.data.status === true) { - deleteLog(hash, 'Lskyplist') - return true - } - deleteLog(hash, 'Lskyplist', false) - return false + const ok = response.status === 200 && response.data.status === true + deleteLog(hash, 'Lskyplist', ok) + return ok } catch (error: any) { deleteFailedLog(hash, 'Lskyplist', error) return false diff --git a/src/main/apis/delete/piclist.ts b/src/main/apis/delete/piclist.ts index a6ae31a9..589e5da6 100644 --- a/src/main/apis/delete/piclist.ts +++ b/src/main/apis/delete/piclist.ts @@ -20,12 +20,9 @@ export default class PiclistApi { const response: AxiosResponse = await axios.post(url, { list: [fullResult] }) - if (response.status === 200 && response.data?.success) { - deleteLog(fullResult, 'Piclist') - return true - } - deleteLog(fullResult, 'Piclist', false) - return false + const ok = response.status === 200 && response.data?.success + deleteLog(fullResult, 'Piclist', ok) + return ok } catch (error: any) { deleteFailedLog(fullResult, 'Piclist', error) return false diff --git a/src/main/apis/delete/qiniu.ts b/src/main/apis/delete/qiniu.ts index e35c56ff..99c57324 100644 --- a/src/main/apis/delete/qiniu.ts +++ b/src/main/apis/delete/qiniu.ts @@ -31,12 +31,9 @@ export default class QiniuApi { } }) })) as any - if (res?.respInfo?.statusCode === 200) { - deleteLog(fileName, 'Qiniu') - return true - } - deleteLog(fileName, 'Qiniu', false) - return false + const ok = res?.respInfo?.statusCode === 200 + deleteLog(fileName, 'Qiniu', ok) + return ok } catch (error: any) { deleteFailedLog(fileName, 'Qiniu', error) return false diff --git a/src/main/apis/delete/smms.ts b/src/main/apis/delete/smms.ts index b96f65bd..66025de0 100644 --- a/src/main/apis/delete/smms.ts +++ b/src/main/apis/delete/smms.ts @@ -31,12 +31,9 @@ export default class SmmsApi { }, timeout: 30000 }) - if (response.status === 200) { - deleteLog(hash, 'Smms') - return true - } - deleteLog(hash, 'Smms', false) - return false + const ok = response.status === 200 + deleteLog(hash, 'Smms', ok) + return ok } catch (error: any) { deleteFailedLog(hash, 'Smms', error) return false diff --git a/src/main/apis/delete/tcyun.ts b/src/main/apis/delete/tcyun.ts index 81e1b7b3..27a3c09c 100644 --- a/src/main/apis/delete/tcyun.ts +++ b/src/main/apis/delete/tcyun.ts @@ -32,12 +32,9 @@ export default class TcyunApi { Region: area, Key: key }) - if (result.statusCode === 204) { - deleteLog(fileName, 'Tcyun') - return true - } - deleteLog(fileName, 'Tcyun', false) - return false + const ok = result.statusCode === 204 + deleteLog(fileName, 'Tcyun', ok) + return ok } catch (error: any) { deleteFailedLog(fileName, 'Tcyun', error) return false diff --git a/src/main/apis/delete/upyun.ts b/src/main/apis/delete/upyun.ts index 71de37f2..6f567a85 100644 --- a/src/main/apis/delete/upyun.ts +++ b/src/main/apis/delete/upyun.ts @@ -24,12 +24,8 @@ export default class UpyunApi { key = `${path.replace(/^\/+|\/+$/, '')}/${fileName}` } const result = await client.deleteFile(key) - if (result) { - deleteLog(fileName, 'Upyun') - return true - } - deleteLog(fileName, 'Upyun', false) - return false + deleteLog(fileName, 'Upyun', !!result) + return !!result } catch (error: any) { deleteFailedLog(fileName, 'Upyun', error) return false diff --git a/src/main/utils/deleteFunc.ts b/src/main/utils/deleteFunc.ts index 4576d44d..cb99c509 100644 --- a/src/main/utils/deleteFunc.ts +++ b/src/main/utils/deleteFunc.ts @@ -89,144 +89,134 @@ async function getDogeToken(accessKey: string, secretKey: string): Promise item.name === bucketName || item.s3Bucket === bucketName) - const newConfigMap = { ...configMap } - newConfigMap.config = { - ...newConfigMap.config, - accessKeyID: token.Credentials?.accessKeyId, - secretAccessKey: token.Credentials?.secretAccessKey, - sessionToken: token.Credentials?.sessionToken, - endpoint: bucket?.s3Endpoint, - region: dogeRegionMap[bucket?.s3Endpoint?.split('.')[1] || 'ap-shanghai'], - bucketName: bucket?.s3Bucket - } - return await removeFileFromS3InMain(newConfigMap, true) - } catch (err: any) { - logger.error(err) - return false + const { + config: { bucketName, AccessKey, SecretKey } + } = configMap + const token = (await getDogeToken(AccessKey, SecretKey)) as DogecloudTokenFull + const bucket = token.Buckets?.find(item => item.name === bucketName || item.s3Bucket === bucketName) + const newConfigMap = { ...configMap } + newConfigMap.config = { + ...newConfigMap.config, + accessKeyID: token.Credentials?.accessKeyId, + secretAccessKey: token.Credentials?.secretAccessKey, + sessionToken: token.Credentials?.sessionToken, + endpoint: bucket?.s3Endpoint, + region: dogeRegionMap[bucket?.s3Endpoint?.split('.')[1] || 'ap-shanghai'], + bucketName: bucket?.s3Bucket } + return await removeFileFromS3InMain(newConfigMap, true) } function createHuaweiAuthorization( @@ -250,35 +240,25 @@ export async function removeFileFromHuaweiInMain(configMap: IStringKeyMap) { path = path === '/' ? '' : path const date = new Date().toUTCString() const authorization = createHuaweiAuthorization(bucketName, path, fileName, accessKeyId, accessKeySecret, date) - try { - const res = await axios.request({ - url: `https://${bucketName}.${endpoint}${encodeURI(path)}/${encodeURIComponent(fileName)}`, - method: 'DELETE', - responseType: 'json', - headers: { - Host: `${bucketName}.${endpoint}`, - Date: date, - Authorization: authorization - } - }) - return res.status === 204 - } catch (error: any) { - logger.error(error) - return false - } + const res = await axios.request({ + url: `https://${bucketName}.${endpoint}${encodeURI(path)}/${encodeURIComponent(fileName)}`, + method: 'DELETE', + responseType: 'json', + headers: { + Host: `${bucketName}.${endpoint}`, + Date: date, + Authorization: authorization + } + }) + return res.status === 204 } export async function removeFileFromSFTPInMain(config: ISftpPlistConfig, fileName: string) { - try { - const client = SSHClient.instance - await client.connect(config) - const uploadPath = `/${config.uploadPath || ''}/`.replace(/\/+/g, '/') - const remote = path.join(uploadPath, fileName) - const deleteResult = await client.deleteFileSFTP(config, remote) - client.close() - return deleteResult - } catch (err: any) { - logger.error(err) - return false - } + const client = SSHClient.instance + await client.connect(config) + const uploadPath = `/${config.uploadPath || ''}/`.replace(/\/+/g, '/') + const remote = path.join(uploadPath, fileName) + const deleteResult = await client.deleteFileSFTP(config, remote) + client.close() + return deleteResult } diff --git a/src/main/utils/deleteLog.ts b/src/main/utils/deleteLog.ts index f226df7a..c2c72652 100644 --- a/src/main/utils/deleteLog.ts +++ b/src/main/utils/deleteLog.ts @@ -1,8 +1,10 @@ +import logger from '@core/picgo/logger' + export const deleteLog = (fileName?: string, type?: string, isSuccess = true, msg?: string) => { - console.log(`Delete ${fileName} on ${type} ${isSuccess ? 'success' : 'failed'}, message: ${msg || ''}`) + logger.info(`Delete ${fileName} on ${type} ${isSuccess ? 'successfully' : 'failed'} ${msg ? 'msg: ' + msg : ''}`) } export const deleteFailedLog = (fileName: string, type: string, error: any) => { deleteLog(fileName, type, false) - console.error(error) + logger.error(error) }