iceshrimp-legacy/packages/backend/src/server/api/endpoints/admin/accounts/hosted.ts

113 lines
3.7 KiB
TypeScript
Raw Normal View History

import config from '@/config/index.js';
import { Meta } from '@/models/entities/meta.js';
import { insertModerationLog } from '@/services/insert-moderation-log.js';
import { db } from '@/db/postgre.js';
import define from '../../../define.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireAdmin: true,
} as const;
export const paramDef = {
type: 'object',
properties: {},
required: [],
} as const;
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const hostedConfig = config.isManagedHosting;
const hosted = (hostedConfig != null && hostedConfig === true);
if (hosted) {
const set = {} as Partial<Meta>;
if (config.deepl.managed != null && config.deepl.managed === true) {
if (typeof config.deepl.authKey === 'boolean') {
set.deeplAuthKey = config.deepl.authKey;
}
if (typeof config.deepl.isPro === 'boolean') {
set.deeplIsPro = config.deepl.isPro;
}
}
if (config.email.managed != null && config.email.managed === true) {
set.enableEmail = true;
if (typeof config.email.address === 'string') {
set.email = config.email.address;
}
if (typeof config.email.host === 'string') {
set.smtpHost = config.email.host;
}
if (typeof config.email.port === 'number') {
set.smtpPort = config.email.port;
}
if (typeof config.email.user === 'string') {
set.smtpUser = config.email.user;
}
if (typeof config.email.pass === 'string') {
set.smtpPass = config.email.pass;
}
if (typeof config.email.useImplicitSslTls === 'boolean') {
set.smtpSecure = config.email.useImplicitSslTls;
}
}
if (config.objectStorage.managed != null && config.objectStorage.managed === true) {
set.useObjectStorage = true;
if (typeof config.objectStorage.baseUrl === 'string') {
set.objectStorageBaseUrl = config.objectStorage.baseUrl;
}
if (typeof config.objectStorage.bucket === 'string') {
set.objectStorageBucket = config.objectStorage.bucket;
}
if (typeof config.objectStorage.prefix === 'string') {
set.objectStoragePrefix = config.objectStorage.prefix;
}
if (typeof config.objectStorage.endpoint === 'string') {
set.objectStorageEndpoint = config.objectStorage.endpoint;
}
if (typeof config.objectStorage.region === 'string') {
set.objectStorageRegion = config.objectStorage.region;
}
if (typeof config.objectStorage.accessKey === 'string') {
set.objectStorageAccessKey = config.objectStorage.accessKey;
}
if (typeof config.objectStorage.secretKey === 'string') {
set.objectStorageSecretKey = config.objectStorage.secretKey;
}
if (typeof config.objectStorage.useSsl === 'boolean') {
set.objectStorageUseSSL = config.objectStorage.useSsl;
}
if (typeof config.objectStorage.connnectOverProxy === 'boolean') {
set.objectStorageUseProxy = config.objectStorage.connnectOverProxy;
}
if (typeof config.objectStorage.setPublicReadOnUpload === 'boolean') {
set.objectStorageSetPublicRead = config.objectStorage.setPublicReadOnUpload;
}
if (typeof config.objectStorage.s3ForcePathStyle === 'boolean') {
set.objectStorageS3ForcePathStyle = config.objectStorage.s3ForcePathStyle;
}
}
if (config.summalyProxyUrl !== undefined) {
set.summalyProxy = config.summalyProxyUrl;
}
await db.transaction(async transactionalEntityManager => {
const metas = await transactionalEntityManager.find(Meta, {
order: {
id: 'DESC',
},
});
const meta = metas[0];
if (meta) {
await transactionalEntityManager.update(Meta, meta.id, set);
} else {
await transactionalEntityManager.save(Meta, set);
}
});
insertModerationLog(me, 'updateMeta');
}
return hosted;
});