summaryrefslogtreecommitdiff
path: root/packages/backend/src/server
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-09-16 17:05:17 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-09-16 17:05:17 +0900
commit814e28459ed70665b63a15f1d6e8152976cd6412 (patch)
treef7f64523e0a30ad9da0448adb9a6245dc44da245 /packages/backend/src/server
parentUpdate vite.config.ts (diff)
downloadmisskey-814e28459ed70665b63a15f1d6e8152976cd6412.tar.gz
misskey-814e28459ed70665b63a15f1d6e8152976cd6412.tar.bz2
misskey-814e28459ed70665b63a15f1d6e8152976cd6412.zip
enhance(backend): improve server icon setting
Resolve #11481 Resolve #10901
Diffstat (limited to 'packages/backend/src/server')
-rw-r--r--packages/backend/src/server/api/endpoints/admin/meta.ts15
-rw-r--r--packages/backend/src/server/api/endpoints/admin/update-meta.ts15
-rw-r--r--packages/backend/src/server/web/ClientServerService.ts96
-rw-r--r--packages/backend/src/server/web/views/base.pug2
4 files changed, 82 insertions, 46 deletions
diff --git a/packages/backend/src/server/api/endpoints/admin/meta.ts b/packages/backend/src/server/api/endpoints/admin/meta.ts
index 9b6dee296e..fe9c134d84 100644
--- a/packages/backend/src/server/api/endpoints/admin/meta.ts
+++ b/packages/backend/src/server/api/endpoints/admin/meta.ts
@@ -85,6 +85,14 @@ export const meta = {
type: 'string',
optional: false, nullable: true,
},
+ app192IconUrl: {
+ type: 'string',
+ optional: false, nullable: true,
+ },
+ app512IconUrl: {
+ type: 'string',
+ optional: false, nullable: true,
+ },
enableEmail: {
type: 'boolean',
optional: false, nullable: false,
@@ -278,6 +286,10 @@ export const meta = {
type: 'boolean',
optional: false, nullable: false,
},
+ manifestJsonOverride: {
+ type: 'string',
+ optional: true, nullable: false,
+ },
policies: {
type: 'object',
optional: false, nullable: false,
@@ -331,6 +343,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
notFoundImageUrl: instance.notFoundImageUrl,
infoImageUrl: instance.infoImageUrl,
iconUrl: instance.iconUrl,
+ app192IconUrl: instance.app192IconUrl,
+ app512IconUrl: instance.app512IconUrl,
backgroundImageUrl: instance.backgroundImageUrl,
logoImageUrl: instance.logoImageUrl,
defaultLightTheme: instance.defaultLightTheme,
@@ -383,6 +397,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
enableServerMachineStats: instance.enableServerMachineStats,
enableIdenticonGeneration: instance.enableIdenticonGeneration,
policies: { ...DEFAULT_POLICIES, ...instance.policies },
+ manifestJsonOverride: instance.manifestJsonOverride,
};
});
}
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 17d5a1f918..65b7736d1a 100644
--- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts
+++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts
@@ -39,6 +39,8 @@ export const paramDef = {
infoImageUrl: { type: 'string', nullable: true },
notFoundImageUrl: { type: 'string', nullable: true },
iconUrl: { type: 'string', nullable: true },
+ app192IconUrl: { type: 'string', nullable: true },
+ app512IconUrl: { type: 'string', nullable: true },
backgroundImageUrl: { type: 'string', nullable: true },
logoImageUrl: { type: 'string', nullable: true },
name: { type: 'string', nullable: true },
@@ -104,6 +106,7 @@ export const paramDef = {
enableIdenticonGeneration: { type: 'boolean' },
serverRules: { type: 'array', items: { type: 'string' } },
preservedUsernames: { type: 'array', items: { type: 'string' } },
+ manifestJsonOverride: { type: 'string' },
},
required: [],
} as const;
@@ -153,6 +156,14 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
set.iconUrl = ps.iconUrl;
}
+ if (ps.app192IconUrl !== undefined) {
+ set.app192IconUrl = ps.app192IconUrl;
+ }
+
+ if (ps.app512IconUrl !== undefined) {
+ set.app512IconUrl = ps.app512IconUrl;
+ }
+
if (ps.serverErrorImageUrl !== undefined) {
set.serverErrorImageUrl = ps.serverErrorImageUrl;
}
@@ -421,6 +432,10 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
set.preservedUsernames = ps.preservedUsernames;
}
+ if (ps.manifestJsonOverride !== undefined) {
+ set.manifestJsonOverride = ps.manifestJsonOverride;
+ }
+
await this.metaService.update(set);
this.moderationLogService.insertModerationLog(me, 'updateMeta');
});
diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts
index a8c420e57d..7b1dd92d73 100644
--- a/packages/backend/src/server/web/ClientServerService.ts
+++ b/packages/backend/src/server/web/ClientServerService.ts
@@ -51,45 +51,6 @@ const assets = `${_dirname}/../../../../../built/_frontend_dist_/`;
const swAssets = `${_dirname}/../../../../../built/_sw_dist_/`;
const viteOut = `${_dirname}/../../../../../built/_vite_/`;
-const manifest = {
- 'short_name': 'Misskey',
- 'name': 'Misskey',
- 'start_url': '/',
- 'display': 'standalone',
- 'background_color': '#313a42',
- 'theme_color': '#86b300',
- 'icons': [
- {
- 'src': '/static-assets/icons/192.png',
- 'sizes': '192x192',
- 'type': 'image/png',
- 'purpose': 'maskable',
- },
- {
- 'src': '/static-assets/icons/512.png',
- 'sizes': '512x512',
- 'type': 'image/png',
- 'purpose': 'maskable',
- },
- {
- 'src': '/static-assets/splash.png',
- 'sizes': '300x300',
- 'type': 'image/png',
- 'purpose': 'any',
- },
- ],
- 'share_target': {
- 'action': '/share/',
- 'method': 'GET',
- 'enctype': 'application/x-www-form-urlencoded',
- 'params': {
- 'title': 'title',
- 'text': 'text',
- 'url': 'url',
- },
- },
-};
-
@Injectable()
export class ClientServerService {
private logger: Logger;
@@ -148,16 +109,60 @@ export class ClientServerService {
@bindThis
private async manifestHandler(reply: FastifyReply) {
- const res = deepClone(manifest);
-
const instance = await this.metaService.fetch(true);
- res.short_name = instance.name ?? 'Misskey';
- res.name = instance.name ?? 'Misskey';
- if (instance.themeColor) res.theme_color = instance.themeColor;
+ let manifest = {
+ // 空文字列の場合右辺を使いたいため
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
+ 'short_name': instance.name || 'Misskey',
+ // 空文字列の場合右辺を使いたいため
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
+ 'name': instance.name || 'Misskey',
+ 'start_url': '/',
+ 'display': 'standalone',
+ 'background_color': '#313a42',
+ // 空文字列の場合右辺を使いたいため
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
+ 'theme_color': instance.themeColor || '#86b300',
+ 'icons': [{
+ // 空文字列の場合右辺を使いたいため
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
+ 'src': instance.app192IconUrl || '/static-assets/icons/192.png',
+ 'sizes': '192x192',
+ 'type': 'image/png',
+ 'purpose': 'maskable',
+ }, {
+ // 空文字列の場合右辺を使いたいため
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
+ 'src': instance.app512IconUrl || '/static-assets/icons/512.png',
+ 'sizes': '512x512',
+ 'type': 'image/png',
+ 'purpose': 'maskable',
+ }, {
+ 'src': '/static-assets/splash.png',
+ 'sizes': '300x300',
+ 'type': 'image/png',
+ 'purpose': 'any',
+ }],
+ 'share_target': {
+ 'action': '/share/',
+ 'method': 'GET',
+ 'enctype': 'application/x-www-form-urlencoded',
+ 'params': {
+ 'title': 'title',
+ 'text': 'text',
+ 'url': 'url',
+ },
+ },
+ };
+
+ manifest = {
+ ...manifest,
+ ...JSON.parse(instance.manifestJsonOverride === '' ? '{}' : instance.manifestJsonOverride),
+ };
reply.header('Cache-Control', 'max-age=300');
- return (res);
+ return (manifest);
}
@bindThis
@@ -165,6 +170,7 @@ export class ClientServerService {
return {
instanceName: meta.name ?? 'Misskey',
icon: meta.iconUrl,
+ appleTouchIcon: meta.app512IconUrl,
themeColor: meta.themeColor,
serverErrorImageUrl: meta.serverErrorImageUrl ?? 'https://xn--931a.moe/assets/error.jpg',
infoImageUrl: meta.infoImageUrl ?? 'https://xn--931a.moe/assets/info.jpg',
diff --git a/packages/backend/src/server/web/views/base.pug b/packages/backend/src/server/web/views/base.pug
index c2053517d6..ab74a1f7f4 100644
--- a/packages/backend/src/server/web/views/base.pug
+++ b/packages/backend/src/server/web/views/base.pug
@@ -28,7 +28,7 @@ html
meta(property='og:site_name' content= instanceName || 'Misskey')
meta(name='viewport' content='width=device-width, initial-scale=1')
link(rel='icon' href= icon || '/favicon.ico')
- link(rel='apple-touch-icon' href= icon || '/apple-touch-icon.png')
+ link(rel='apple-touch-icon' href= appleTouchIcon || '/apple-touch-icon.png')
link(rel='manifest' href='/manifest.json')
link(rel='search' type='application/opensearchdescription+xml' title=(title || "Misskey") href=`${url}/opensearch.xml`)
link(rel='prefetch' href=serverErrorImageUrl)