diff --git a/.config/example.yml b/.config/example.yml index 29f4a62290..f19693cdb7 100644 --- a/.config/example.yml +++ b/.config/example.yml @@ -185,6 +185,10 @@ id: 'aid' # connnectOverProxy: false # setPublicReadOnUpload: true # s3ForcePathStyle: true +#gifbox: +# managed: true +# authKey: '' +# # !!!!!!!!!! # >>>>>> AGAIN, NORMAL SELF-HOSTERS, STAY AWAY! <<<<<< diff --git a/package.json b/package.json index 8ab92436c6..9dcad8161e 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "calckey-js": "^0.0.20", "eslint": "^8.31.0", "execa": "5.1.1", + "gifbox.js": "^0.9.0", "gulp": "4.0.2", "gulp-cssnano": "2.1.3", "gulp-rename": "2.0.0", diff --git a/packages/backend/migration/1672854439804-Gifbox.js b/packages/backend/migration/1672854439804-Gifbox.js new file mode 100644 index 0000000000..10acf70e6a --- /dev/null +++ b/packages/backend/migration/1672854439804-Gifbox.js @@ -0,0 +1,11 @@ +export class gifboxIntegration1672854439804 { + constructor() { + this.name = 'gifboxIntegration1672854439804'; + } + async up(queryRunner) { + await queryRunner.query(`ALTER TABLE "meta" ADD "deeplAuthKey" character varying(128)`); + } + async down(queryRunner) { + await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "deeplAuthKey"`); + } +} diff --git a/packages/backend/src/config/types.ts b/packages/backend/src/config/types.ts index 9872b0eeb3..45bb200812 100644 --- a/packages/backend/src/config/types.ts +++ b/packages/backend/src/config/types.ts @@ -97,6 +97,10 @@ export type Source = { setPublicReadOnUpload?: boolean; s3ForcePathStyle?: boolean; }; + gifbox: { + managed?: boolean; + authKey?: string; + }; summalyProxyUrl?: string; }; diff --git a/packages/backend/src/models/entities/meta.ts b/packages/backend/src/models/entities/meta.ts index c24936c034..c5fa98b594 100644 --- a/packages/backend/src/models/entities/meta.ts +++ b/packages/backend/src/models/entities/meta.ts @@ -381,6 +381,12 @@ export class Meta { }) public deeplIsPro: boolean; + @Column('varchar', { + length: 128, + nullable: true, + }) + public gifboxAuthKey: string | null; + @Column('varchar', { length: 512, nullable: true, diff --git a/packages/backend/src/server/api/endpoints/admin/accounts/hosted.ts b/packages/backend/src/server/api/endpoints/admin/accounts/hosted.ts index 07cd984b07..1c417708a1 100644 --- a/packages/backend/src/server/api/endpoints/admin/accounts/hosted.ts +++ b/packages/backend/src/server/api/endpoints/admin/accounts/hosted.ts @@ -91,6 +91,9 @@ export default define(meta, paramDef, async (ps, me) => { if (config.summalyProxyUrl !== undefined) { set.summalyProxy = config.summalyProxyUrl; } + if (config.gifbox.managed != null && config.gifbox.managed === true) { + set.gifboxAuthKey = config.gifbox.authKey; + } await db.transaction(async transactionalEntityManager => { const metas = await transactionalEntityManager.find(Meta, { order: { diff --git a/packages/backend/src/server/api/endpoints/admin/meta.ts b/packages/backend/src/server/api/endpoints/admin/meta.ts index 71a217d935..c49579f636 100644 --- a/packages/backend/src/server/api/endpoints/admin/meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/meta.ts @@ -422,6 +422,7 @@ export default define(meta, paramDef, async (ps, me) => { enableDiscordIntegration: instance.enableDiscordIntegration, enableServiceWorker: instance.enableServiceWorker, translatorAvailable: instance.deeplAuthKey != null, + gifboxAvailable: instance.gifboxAuthKey != null, pinnedPages: instance.pinnedPages, pinnedClipId: instance.pinnedClipId, cacheRemoteFiles: instance.cacheRemoteFiles, @@ -471,6 +472,7 @@ export default define(meta, paramDef, async (ps, me) => { objectStorageS3ForcePathStyle: instance.objectStorageS3ForcePathStyle, deeplAuthKey: instance.deeplAuthKey, deeplIsPro: instance.deeplIsPro, + gifboxAuthKey: instance.gifboxAuthKey, enableIpLogging: instance.enableIpLogging, enableActiveEmailValidation: instance.enableActiveEmailValidation, }; diff --git a/packages/backend/src/server/api/endpoints/admin/update-meta.ts b/packages/backend/src/server/api/endpoints/admin/update-meta.ts index 61a1338f2f..7539f99fc4 100644 --- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts @@ -80,6 +80,7 @@ export const paramDef = { summalyProxy: { type: 'string', nullable: true }, deeplAuthKey: { type: 'string', nullable: true }, deeplIsPro: { type: 'boolean' }, + gifboxAuthKey: { type: 'string', nullable: true }, enableTwitterIntegration: { type: 'boolean' }, twitterConsumerKey: { type: 'string', nullable: true }, twitterConsumerSecret: { type: 'string', nullable: true }, @@ -465,6 +466,14 @@ export default define(meta, paramDef, async (ps, me) => { set.deeplIsPro = ps.deeplIsPro; } + if (ps.gifboxAuthKey !== undefined) { + if (ps.gifboxAuthKey === '') { + set.gifboxAuthKey = null; + } else { + set.gifboxAuthKey = ps.gifboxAuthKey; + } + } + if (ps.enableIpLogging !== undefined) { set.enableIpLogging = ps.enableIpLogging; } diff --git a/packages/backend/src/server/api/endpoints/meta.ts b/packages/backend/src/server/api/endpoints/meta.ts index f61236fa0b..ddf289ac5a 100644 --- a/packages/backend/src/server/api/endpoints/meta.ts +++ b/packages/backend/src/server/api/endpoints/meta.ts @@ -401,6 +401,7 @@ export default define(meta, paramDef, async (ps, me) => { enableServiceWorker: instance.enableServiceWorker, translatorAvailable: instance.deeplAuthKey != null, + gifboxAvailable: instance.gifboxAuthKey != null, ...(ps.detail ? { pinnedPages: instance.privateMode && !me ? [] : instance.pinnedPages, diff --git a/packages/client/src/pages/admin/settings.vue b/packages/client/src/pages/admin/settings.vue index 1715908130..dc64f1ed37 100644 --- a/packages/client/src/pages/admin/settings.vue +++ b/packages/client/src/pages/admin/settings.vue @@ -167,6 +167,15 @@ + + + + + + + + + @@ -217,6 +226,7 @@ let swPublicKey: any = $ref(null); let swPrivateKey: any = $ref(null); let deeplAuthKey: string = $ref(''); let deeplIsPro: boolean = $ref(false); +let gifboxAuthKey: string = $ref(''); async function init() { const meta = await os.api('admin/meta'); @@ -249,6 +259,7 @@ async function init() { swPrivateKey = meta.swPrivateKey; deeplAuthKey = meta.deeplAuthKey; deeplIsPro = meta.deeplIsPro; + gifboxAuthKey = meta.gifboxAuthKey; } function save() { @@ -282,6 +293,7 @@ function save() { swPrivateKey, deeplAuthKey, deeplIsPro, + gifboxAuthKey, }).then(() => { fetchInstance(); }); diff --git a/yarn.lock b/yarn.lock index 7020edd7d7..a504f3a544 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3840,6 +3840,7 @@ __metadata: cypress: 10.11.0 eslint: ^8.31.0 execa: 5.1.1 + gifbox.js: ^0.9.0 gulp: 4.0.2 gulp-cssnano: 2.1.3 gulp-rename: 2.0.0 @@ -7395,6 +7396,16 @@ __metadata: languageName: node linkType: hard +"gifbox.js@npm:^0.9.0": + version: 0.9.0 + resolution: "gifbox.js@npm:0.9.0" + dependencies: + axios: ^0.24.0 + form-data: ^4.0.0 + checksum: 0e13566249c1f3ee366ca32e451c7926b50658190da3f15f5e0dc7e094167bc1c43621142245b1dbf16b5008a26996bc36799d3c81f78c5418541fe9eaa24892 + languageName: node + linkType: hard + "github-from-package@npm:0.0.0": version: 0.0.0 resolution: "github-from-package@npm:0.0.0"