summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/web
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-09-24 18:21:31 +0900
committerGitHub <noreply@github.com>2023-09-24 18:21:31 +0900
commitf32915b515f4cbc3b1a877cfb8e8e35bf6a31efa (patch)
tree0f6f098cbb282e4b6619152b14b9e6f57e6b448f /packages/backend/src/server/web
parentMerge pull request #11384 from misskey-dev/develop (diff)
parent2023.9.0 (diff)
downloadmisskey-f32915b515f4cbc3b1a877cfb8e8e35bf6a31efa.tar.gz
misskey-f32915b515f4cbc3b1a877cfb8e8e35bf6a31efa.tar.bz2
misskey-f32915b515f4cbc3b1a877cfb8e8e35bf6a31efa.zip
Merge pull request #11874 from misskey-dev/develop
Release: 2023.9.0
Diffstat (limited to 'packages/backend/src/server/web')
-rw-r--r--packages/backend/src/server/web/ClientLoggerService.ts5
-rw-r--r--packages/backend/src/server/web/ClientServerService.ts85
-rw-r--r--packages/backend/src/server/web/FeedService.ts14
-rw-r--r--packages/backend/src/server/web/UrlPreviewService.ts5
-rw-r--r--packages/backend/src/server/web/bios.css6
-rw-r--r--packages/backend/src/server/web/bios.js5
-rw-r--r--packages/backend/src/server/web/boot.js5
-rw-r--r--packages/backend/src/server/web/cli.css6
-rw-r--r--packages/backend/src/server/web/cli.js5
-rw-r--r--packages/backend/src/server/web/error.css6
-rw-r--r--packages/backend/src/server/web/style.css6
-rw-r--r--packages/backend/src/server/web/views/base.pug10
-rw-r--r--packages/backend/src/server/web/views/oauth.pug9
13 files changed, 139 insertions, 28 deletions
diff --git a/packages/backend/src/server/web/ClientLoggerService.ts b/packages/backend/src/server/web/ClientLoggerService.ts
index 6a882aa766..213266f59c 100644
--- a/packages/backend/src/server/web/ClientLoggerService.ts
+++ b/packages/backend/src/server/web/ClientLoggerService.ts
@@ -1,3 +1,8 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and other misskey contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
import { Injectable } from '@nestjs/common';
import type Logger from '@/logger.js';
import { LoggerService } from '@/core/LoggerService.js';
diff --git a/packages/backend/src/server/web/ClientServerService.ts b/packages/backend/src/server/web/ClientServerService.ts
index 363cca8feb..1faff24201 100644
--- a/packages/backend/src/server/web/ClientServerService.ts
+++ b/packages/backend/src/server/web/ClientServerService.ts
@@ -1,3 +1,8 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and other misskey contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
import { randomUUID } from 'node:crypto';
import { dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
@@ -26,13 +31,12 @@ import { PageEntityService } from '@/core/entities/PageEntityService.js';
import { GalleryPostEntityService } from '@/core/entities/GalleryPostEntityService.js';
import { ClipEntityService } from '@/core/entities/ClipEntityService.js';
import { ChannelEntityService } from '@/core/entities/ChannelEntityService.js';
-import type { ChannelsRepository, ClipsRepository, FlashsRepository, GalleryPostsRepository, Meta, NotesRepository, PagesRepository, UserProfilesRepository, UsersRepository } from '@/models/index.js';
+import type { ChannelsRepository, ClipsRepository, FlashsRepository, GalleryPostsRepository, MiMeta, NotesRepository, PagesRepository, UserProfilesRepository, UsersRepository } from '@/models/_.js';
import type Logger from '@/logger.js';
import { deepClone } from '@/misc/clone.js';
import { bindThis } from '@/decorators.js';
import { FlashEntityService } from '@/core/entities/FlashEntityService.js';
import { RoleService } from '@/core/RoleService.js';
-import manifest from './manifest.json' assert { type: 'json' };
import { FeedService } from './FeedService.js';
import { UrlPreviewService } from './UrlPreviewService.js';
import { ClientLoggerService } from './ClientLoggerService.js';
@@ -105,23 +109,68 @@ 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.shortName || instance.name || this.config.host,
+ // 空文字列の場合右辺を使いたいため
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
+ 'name': instance.name || this.config.host,
+ '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
- private generateCommonPugData(meta: Meta) {
+ private generateCommonPugData(meta: MiMeta) {
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',
@@ -138,21 +187,23 @@ export class ClientServerService {
// Authenticate
fastify.addHook('onRequest', async (request, reply) => {
- if (request.url === bullBoardPath || request.url.startsWith(bullBoardPath + '/')) {
+ // %71ueueとかでリクエストされたら困るため
+ const url = decodeURI(request.url);
+ if (url === bullBoardPath || url.startsWith(bullBoardPath + '/')) {
const token = request.cookies.token;
if (token == null) {
- reply.code(401);
- throw new Error('login required');
+ reply.code(401).send('Login required');
+ return;
}
const user = await this.usersRepository.findOneBy({ token });
if (user == null) {
- reply.code(403);
- throw new Error('no such user');
+ reply.code(403).send('No such user');
+ return;
}
const isAdministrator = await this.roleService.isAdministrator(user);
if (!isAdministrator) {
- reply.code(403);
- throw new Error('access denied');
+ reply.code(403).send('Access denied');
+ return;
}
}
});
@@ -677,7 +728,7 @@ export class ClientServerService {
fastify.setErrorHandler(async (error, request, reply) => {
const errId = randomUUID();
- this.clientLoggerService.logger.error(`Internal error occured in ${request.routerPath}: ${error.message}`, {
+ this.clientLoggerService.logger.error(`Internal error occurred in ${request.routerPath}: ${error.message}`, {
path: request.routerPath,
params: request.params,
query: request.query,
diff --git a/packages/backend/src/server/web/FeedService.ts b/packages/backend/src/server/web/FeedService.ts
index 0bd0d3c692..78551e800b 100644
--- a/packages/backend/src/server/web/FeedService.ts
+++ b/packages/backend/src/server/web/FeedService.ts
@@ -1,10 +1,15 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and other misskey contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
import { Inject, Injectable } from '@nestjs/common';
import { In, IsNull } from 'typeorm';
import { Feed } from 'feed';
import { DI } from '@/di-symbols.js';
-import type { DriveFilesRepository, NotesRepository, UserProfilesRepository, UsersRepository } from '@/models/index.js';
+import type { DriveFilesRepository, NotesRepository, UserProfilesRepository } from '@/models/_.js';
import type { Config } from '@/config.js';
-import type { User } from '@/models/entities/User.js';
+import type { MiUser } from '@/models/User.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { DriveFileEntityService } from '@/core/entities/DriveFileEntityService.js';
import { bindThis } from '@/decorators.js';
@@ -15,9 +20,6 @@ export class FeedService {
@Inject(DI.config)
private config: Config,
- @Inject(DI.usersRepository)
- private usersRepository: UsersRepository,
-
@Inject(DI.userProfilesRepository)
private userProfilesRepository: UserProfilesRepository,
@@ -33,7 +35,7 @@ export class FeedService {
}
@bindThis
- public async packFeed(user: User) {
+ public async packFeed(user: MiUser) {
const author = {
link: `${this.config.url}/@${user.username}`,
name: user.name ?? user.username,
diff --git a/packages/backend/src/server/web/UrlPreviewService.ts b/packages/backend/src/server/web/UrlPreviewService.ts
index e61e92c623..d590244e34 100644
--- a/packages/backend/src/server/web/UrlPreviewService.ts
+++ b/packages/backend/src/server/web/UrlPreviewService.ts
@@ -1,3 +1,8 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and other misskey contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
import { Inject, Injectable } from '@nestjs/common';
import { summaly } from 'summaly';
import { DI } from '@/di-symbols.js';
diff --git a/packages/backend/src/server/web/bios.css b/packages/backend/src/server/web/bios.css
index b0da3ee39b..c934a55fa9 100644
--- a/packages/backend/src/server/web/bios.css
+++ b/packages/backend/src/server/web/bios.css
@@ -1,3 +1,9 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and other misskey contributors
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
* {
font-family: Fira code, Fira Mono, Consolas, Menlo, Courier, monospace;
}
diff --git a/packages/backend/src/server/web/bios.js b/packages/backend/src/server/web/bios.js
index 51899dd3a3..029eb92aad 100644
--- a/packages/backend/src/server/web/bios.js
+++ b/packages/backend/src/server/web/bios.js
@@ -1,3 +1,8 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and other misskey contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
'use strict';
window.onload = async () => {
diff --git a/packages/backend/src/server/web/boot.js b/packages/backend/src/server/web/boot.js
index 38ae8ad2e5..48939ef7a0 100644
--- a/packages/backend/src/server/web/boot.js
+++ b/packages/backend/src/server/web/boot.js
@@ -1,3 +1,8 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and other misskey contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
/**
* BOOT LOADER
* サーバーからレスポンスされるHTMLに埋め込まれるスクリプトで、以下の役割を持ちます。
diff --git a/packages/backend/src/server/web/cli.css b/packages/backend/src/server/web/cli.css
index 07cd27830b..b7737c3f21 100644
--- a/packages/backend/src/server/web/cli.css
+++ b/packages/backend/src/server/web/cli.css
@@ -1,3 +1,9 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and other misskey contributors
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
* {
font-family: Fira code, Fira Mono, Consolas, Menlo, Courier, monospace;
}
diff --git a/packages/backend/src/server/web/cli.js b/packages/backend/src/server/web/cli.js
index 5bb576a27b..e63a80327c 100644
--- a/packages/backend/src/server/web/cli.js
+++ b/packages/backend/src/server/web/cli.js
@@ -1,3 +1,8 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and other misskey contributors
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
'use strict';
window.onload = async () => {
diff --git a/packages/backend/src/server/web/error.css b/packages/backend/src/server/web/error.css
index ab913f7a9f..ea3056bdaf 100644
--- a/packages/backend/src/server/web/error.css
+++ b/packages/backend/src/server/web/error.css
@@ -1,3 +1,9 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and other misskey contributors
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
* {
font-family: BIZ UDGothic, Roboto, HelveticaNeue, Arial, sans-serif;
}
diff --git a/packages/backend/src/server/web/style.css b/packages/backend/src/server/web/style.css
index d59f00fe16..952be9bf0b 100644
--- a/packages/backend/src/server/web/style.css
+++ b/packages/backend/src/server/web/style.css
@@ -1,3 +1,9 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and other misskey contributors
+ *
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
html {
background-color: var(--bg);
color: var(--fg);
diff --git a/packages/backend/src/server/web/views/base.pug b/packages/backend/src/server/web/views/base.pug
index 2b61c6bc2f..71bcf9462f 100644
--- a/packages/backend/src/server/web/views/base.pug
+++ b/packages/backend/src/server/web/views/base.pug
@@ -7,15 +7,15 @@ doctype html
//
-
- _____ _ _
- | |_|___ ___| |_ ___ _ _
+ _____ _ _
+ | |_|___ ___| |_ ___ _ _
| | | | |_ -|_ -| '_| -_| | |
|_|_|_|_|___|___|_,_|___|_ |
|___|
Thank you for using Misskey!
If you are reading this message... how about joining the development?
https://github.com/misskey-dev/misskey
-
+
html
@@ -28,14 +28,14 @@ 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)
link(rel='prefetch' href=infoImageUrl)
link(rel='prefetch' href=notFoundImageUrl)
//- https://github.com/misskey-dev/misskey/issues/9842
- link(rel='stylesheet' href='/assets/tabler-icons/tabler-icons.min.css?v2.25.0')
+ link(rel='stylesheet' href='/assets/tabler-icons/tabler-icons.min.css?v2.35.0')
link(rel='modulepreload' href=`/vite/${clientEntry.file}`)
if !config.clientManifestExists
diff --git a/packages/backend/src/server/web/views/oauth.pug b/packages/backend/src/server/web/views/oauth.pug
new file mode 100644
index 0000000000..1470dbfbdf
--- /dev/null
+++ b/packages/backend/src/server/web/views/oauth.pug
@@ -0,0 +1,9 @@
+extends ./base
+
+block meta
+ //- Should be removed by the page when it loads, so that it won't needlessly
+ //- stay when user navigates away via the navigation bar
+ //- XXX: Remove navigation bar in auth page?
+ meta(name='misskey:oauth:transaction-id' content=transactionId)
+ meta(name='misskey:oauth:client-name' content=clientName)
+ meta(name='misskey:oauth:scope' content=scope)