summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api
diff options
context:
space:
mode:
authorかっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>2025-04-07 19:09:11 +0900
committerGitHub <noreply@github.com>2025-04-07 19:09:11 +0900
commit9d3f3264fdd059f47537da48fd125cdd2f4bad1e (patch)
treededbf1433d0e003465b37e805519c5635b135466 /packages/backend/src/server/api
parentUpdate CHANGELOG.md (diff)
downloadsharkey-9d3f3264fdd059f47537da48fd125cdd2f4bad1e.tar.gz
sharkey-9d3f3264fdd059f47537da48fd125cdd2f4bad1e.tar.bz2
sharkey-9d3f3264fdd059f47537da48fd125cdd2f4bad1e.zip
enhance: チャットの閲覧を無効化できるように (#15765)
* enhance: チャットの閲覧を無効化できるように * fix * fix * fix * readonlyの説明を追加 * enhance: チャットが無効な場合はチャット関連の設定も隠すように * fix * refactor: ChatServiceからApiに関するドメイン知識を排除
Diffstat (limited to 'packages/backend/src/server/api')
-rw-r--r--packages/backend/src/server/api/endpoints/chat/history.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/chat/messages/create-to-room.ts3
-rw-r--r--packages/backend/src/server/api/endpoints/chat/messages/create-to-user.ts3
-rw-r--r--packages/backend/src/server/api/endpoints/chat/messages/delete.ts3
-rw-r--r--packages/backend/src/server/api/endpoints/chat/messages/react.ts3
-rw-r--r--packages/backend/src/server/api/endpoints/chat/messages/room-timeline.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/chat/messages/search.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/chat/messages/show.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/chat/messages/unreact.ts3
-rw-r--r--packages/backend/src/server/api/endpoints/chat/messages/user-timeline.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/chat/rooms/create.ts3
-rw-r--r--packages/backend/src/server/api/endpoints/chat/rooms/delete.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/chat/rooms/invitations/create.ts3
-rw-r--r--packages/backend/src/server/api/endpoints/chat/rooms/invitations/ignore.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/chat/rooms/invitations/inbox.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/chat/rooms/invitations/outbox.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/chat/rooms/join.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/chat/rooms/joining.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/chat/rooms/leave.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/chat/rooms/members.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/chat/rooms/mute.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/chat/rooms/owned.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/chat/rooms/show.ts2
-rw-r--r--packages/backend/src/server/api/endpoints/chat/rooms/update.ts2
24 files changed, 48 insertions, 7 deletions
diff --git a/packages/backend/src/server/api/endpoints/chat/history.ts b/packages/backend/src/server/api/endpoints/chat/history.ts
index 7553a751e0..fdd9055106 100644
--- a/packages/backend/src/server/api/endpoints/chat/history.ts
+++ b/packages/backend/src/server/api/endpoints/chat/history.ts
@@ -46,6 +46,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatService: ChatService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'read');
+
const history = ps.room ? await this.chatService.roomHistory(me.id, ps.limit) : await this.chatService.userHistory(me.id, ps.limit);
const packedMessages = await this.chatEntityService.packMessagesDetailed(history, me);
diff --git a/packages/backend/src/server/api/endpoints/chat/messages/create-to-room.ts b/packages/backend/src/server/api/endpoints/chat/messages/create-to-room.ts
index a988dc60b9..ad2b82e219 100644
--- a/packages/backend/src/server/api/endpoints/chat/messages/create-to-room.ts
+++ b/packages/backend/src/server/api/endpoints/chat/messages/create-to-room.ts
@@ -16,7 +16,6 @@ export const meta = {
tags: ['chat'],
requireCredential: true,
- requiredRolePolicy: 'canChat',
prohibitMoved: true,
@@ -74,6 +73,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatService: ChatService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'write');
+
const room = await this.chatService.findRoomById(ps.toRoomId);
if (room == null) {
throw new ApiError(meta.errors.noSuchRoom);
diff --git a/packages/backend/src/server/api/endpoints/chat/messages/create-to-user.ts b/packages/backend/src/server/api/endpoints/chat/messages/create-to-user.ts
index bbaab8a6c3..fa34a7d558 100644
--- a/packages/backend/src/server/api/endpoints/chat/messages/create-to-user.ts
+++ b/packages/backend/src/server/api/endpoints/chat/messages/create-to-user.ts
@@ -16,7 +16,6 @@ export const meta = {
tags: ['chat'],
requireCredential: true,
- requiredRolePolicy: 'canChat',
prohibitMoved: true,
@@ -86,6 +85,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatService: ChatService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'write');
+
let file = null;
if (ps.fileId != null) {
file = await this.driveFilesRepository.findOneBy({
diff --git a/packages/backend/src/server/api/endpoints/chat/messages/delete.ts b/packages/backend/src/server/api/endpoints/chat/messages/delete.ts
index 25fc774d4f..63b75fb6a7 100644
--- a/packages/backend/src/server/api/endpoints/chat/messages/delete.ts
+++ b/packages/backend/src/server/api/endpoints/chat/messages/delete.ts
@@ -13,7 +13,6 @@ export const meta = {
tags: ['chat'],
requireCredential: true,
- requiredRolePolicy: 'canChat',
kind: 'write:chat',
@@ -43,6 +42,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatService: ChatService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'write');
+
const message = await this.chatService.findMyMessageById(me.id, ps.messageId);
if (message == null) {
throw new ApiError(meta.errors.noSuchMessage);
diff --git a/packages/backend/src/server/api/endpoints/chat/messages/react.ts b/packages/backend/src/server/api/endpoints/chat/messages/react.ts
index 0145e380be..5f61e7e992 100644
--- a/packages/backend/src/server/api/endpoints/chat/messages/react.ts
+++ b/packages/backend/src/server/api/endpoints/chat/messages/react.ts
@@ -13,7 +13,6 @@ export const meta = {
tags: ['chat'],
requireCredential: true,
- requiredRolePolicy: 'canChat',
kind: 'write:chat',
@@ -44,6 +43,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatService: ChatService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'write');
+
await this.chatService.react(ps.messageId, me.id, ps.reaction);
});
}
diff --git a/packages/backend/src/server/api/endpoints/chat/messages/room-timeline.ts b/packages/backend/src/server/api/endpoints/chat/messages/room-timeline.ts
index b6d3356196..c0e344b889 100644
--- a/packages/backend/src/server/api/endpoints/chat/messages/room-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/chat/messages/room-timeline.ts
@@ -54,6 +54,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatService: ChatService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'read');
+
const room = await this.chatService.findRoomById(ps.roomId);
if (room == null) {
throw new ApiError(meta.errors.noSuchRoom);
diff --git a/packages/backend/src/server/api/endpoints/chat/messages/search.ts b/packages/backend/src/server/api/endpoints/chat/messages/search.ts
index 4c989e5ca9..682597f76d 100644
--- a/packages/backend/src/server/api/endpoints/chat/messages/search.ts
+++ b/packages/backend/src/server/api/endpoints/chat/messages/search.ts
@@ -54,6 +54,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatService: ChatService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'read');
+
if (ps.roomId != null) {
const room = await this.chatService.findRoomById(ps.roomId);
if (room == null) {
diff --git a/packages/backend/src/server/api/endpoints/chat/messages/show.ts b/packages/backend/src/server/api/endpoints/chat/messages/show.ts
index 371f7a7071..9a2bbb8742 100644
--- a/packages/backend/src/server/api/endpoints/chat/messages/show.ts
+++ b/packages/backend/src/server/api/endpoints/chat/messages/show.ts
@@ -50,6 +50,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatEntityService: ChatEntityService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'read');
+
const message = await this.chatService.findMessageById(ps.messageId);
if (message == null) {
throw new ApiError(meta.errors.noSuchMessage);
diff --git a/packages/backend/src/server/api/endpoints/chat/messages/unreact.ts b/packages/backend/src/server/api/endpoints/chat/messages/unreact.ts
index b97bad8a9c..6784bb6ecf 100644
--- a/packages/backend/src/server/api/endpoints/chat/messages/unreact.ts
+++ b/packages/backend/src/server/api/endpoints/chat/messages/unreact.ts
@@ -13,7 +13,6 @@ export const meta = {
tags: ['chat'],
requireCredential: true,
- requiredRolePolicy: 'canChat',
kind: 'write:chat',
@@ -44,6 +43,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatService: ChatService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'write');
+
await this.chatService.unreact(ps.messageId, me.id, ps.reaction);
});
}
diff --git a/packages/backend/src/server/api/endpoints/chat/messages/user-timeline.ts b/packages/backend/src/server/api/endpoints/chat/messages/user-timeline.ts
index a35f121bb1..a057e2e088 100644
--- a/packages/backend/src/server/api/endpoints/chat/messages/user-timeline.ts
+++ b/packages/backend/src/server/api/endpoints/chat/messages/user-timeline.ts
@@ -56,6 +56,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private getterService: GetterService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'read');
+
const other = await this.getterService.getUser(ps.userId).catch(err => {
if (err.id === '15348ddd-432d-49c2-8a5a-8069753becff') throw new ApiError(meta.errors.noSuchUser);
throw err;
diff --git a/packages/backend/src/server/api/endpoints/chat/rooms/create.ts b/packages/backend/src/server/api/endpoints/chat/rooms/create.ts
index fa4cc8ceb4..68a53f0886 100644
--- a/packages/backend/src/server/api/endpoints/chat/rooms/create.ts
+++ b/packages/backend/src/server/api/endpoints/chat/rooms/create.ts
@@ -15,7 +15,6 @@ export const meta = {
tags: ['chat'],
requireCredential: true,
- requiredRolePolicy: 'canChat',
prohibitMoved: true,
@@ -52,6 +51,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatEntityService: ChatEntityService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'write');
+
const room = await this.chatService.createRoom(me, {
name: ps.name,
description: ps.description ?? '',
diff --git a/packages/backend/src/server/api/endpoints/chat/rooms/delete.ts b/packages/backend/src/server/api/endpoints/chat/rooms/delete.ts
index 1d77a06dd8..82a8e1f30d 100644
--- a/packages/backend/src/server/api/endpoints/chat/rooms/delete.ts
+++ b/packages/backend/src/server/api/endpoints/chat/rooms/delete.ts
@@ -42,6 +42,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatService: ChatService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'write');
+
const room = await this.chatService.findRoomById(ps.roomId);
if (room == null) {
throw new ApiError(meta.errors.noSuchRoom);
diff --git a/packages/backend/src/server/api/endpoints/chat/rooms/invitations/create.ts b/packages/backend/src/server/api/endpoints/chat/rooms/invitations/create.ts
index 5da4a1a772..b1f049f2b9 100644
--- a/packages/backend/src/server/api/endpoints/chat/rooms/invitations/create.ts
+++ b/packages/backend/src/server/api/endpoints/chat/rooms/invitations/create.ts
@@ -15,7 +15,6 @@ export const meta = {
tags: ['chat'],
requireCredential: true,
- requiredRolePolicy: 'canChat',
prohibitMoved: true,
@@ -57,6 +56,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatEntityService: ChatEntityService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'write');
+
const room = await this.chatService.findMyRoomById(me.id, ps.roomId);
if (room == null) {
throw new ApiError(meta.errors.noSuchRoom);
diff --git a/packages/backend/src/server/api/endpoints/chat/rooms/invitations/ignore.ts b/packages/backend/src/server/api/endpoints/chat/rooms/invitations/ignore.ts
index 8c017f7d01..b8a228089b 100644
--- a/packages/backend/src/server/api/endpoints/chat/rooms/invitations/ignore.ts
+++ b/packages/backend/src/server/api/endpoints/chat/rooms/invitations/ignore.ts
@@ -42,6 +42,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatService: ChatService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'write');
+
await this.chatService.ignoreRoomInvitation(me.id, ps.roomId);
});
}
diff --git a/packages/backend/src/server/api/endpoints/chat/rooms/invitations/inbox.ts b/packages/backend/src/server/api/endpoints/chat/rooms/invitations/inbox.ts
index 07337480fc..8a02d1c704 100644
--- a/packages/backend/src/server/api/endpoints/chat/rooms/invitations/inbox.ts
+++ b/packages/backend/src/server/api/endpoints/chat/rooms/invitations/inbox.ts
@@ -47,6 +47,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatService: ChatService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'read');
+
const invitations = await this.chatService.getReceivedRoomInvitationsWithPagination(me.id, ps.limit, ps.sinceId, ps.untilId);
return this.chatEntityService.packRoomInvitations(invitations, me);
});
diff --git a/packages/backend/src/server/api/endpoints/chat/rooms/invitations/outbox.ts b/packages/backend/src/server/api/endpoints/chat/rooms/invitations/outbox.ts
index 12d496e94b..0702ba086c 100644
--- a/packages/backend/src/server/api/endpoints/chat/rooms/invitations/outbox.ts
+++ b/packages/backend/src/server/api/endpoints/chat/rooms/invitations/outbox.ts
@@ -55,6 +55,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatEntityService: ChatEntityService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'read');
+
const room = await this.chatService.findMyRoomById(me.id, ps.roomId);
if (room == null) {
throw new ApiError(meta.errors.noSuchRoom);
diff --git a/packages/backend/src/server/api/endpoints/chat/rooms/join.ts b/packages/backend/src/server/api/endpoints/chat/rooms/join.ts
index dbd4d1ea5a..d561f9e03f 100644
--- a/packages/backend/src/server/api/endpoints/chat/rooms/join.ts
+++ b/packages/backend/src/server/api/endpoints/chat/rooms/join.ts
@@ -42,6 +42,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatService: ChatService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'write');
+
await this.chatService.joinToRoom(me.id, ps.roomId);
});
}
diff --git a/packages/backend/src/server/api/endpoints/chat/rooms/joining.ts b/packages/backend/src/server/api/endpoints/chat/rooms/joining.ts
index c4c6253236..ba9242c762 100644
--- a/packages/backend/src/server/api/endpoints/chat/rooms/joining.ts
+++ b/packages/backend/src/server/api/endpoints/chat/rooms/joining.ts
@@ -47,6 +47,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatEntityService: ChatEntityService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'read');
+
const memberships = await this.chatService.getMyMemberships(me.id, ps.limit, ps.sinceId, ps.untilId);
return this.chatEntityService.packRoomMemberships(memberships, me, {
diff --git a/packages/backend/src/server/api/endpoints/chat/rooms/leave.ts b/packages/backend/src/server/api/endpoints/chat/rooms/leave.ts
index 724ad61f7e..a3ad0c2d6f 100644
--- a/packages/backend/src/server/api/endpoints/chat/rooms/leave.ts
+++ b/packages/backend/src/server/api/endpoints/chat/rooms/leave.ts
@@ -42,6 +42,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatService: ChatService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'write');
+
await this.chatService.leaveRoom(me.id, ps.roomId);
});
}
diff --git a/packages/backend/src/server/api/endpoints/chat/rooms/members.ts b/packages/backend/src/server/api/endpoints/chat/rooms/members.ts
index 407bfe74f1..f5ffa21d32 100644
--- a/packages/backend/src/server/api/endpoints/chat/rooms/members.ts
+++ b/packages/backend/src/server/api/endpoints/chat/rooms/members.ts
@@ -54,6 +54,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatEntityService: ChatEntityService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'read');
+
const room = await this.chatService.findRoomById(ps.roomId);
if (room == null) {
throw new ApiError(meta.errors.noSuchRoom);
diff --git a/packages/backend/src/server/api/endpoints/chat/rooms/mute.ts b/packages/backend/src/server/api/endpoints/chat/rooms/mute.ts
index 5208b8a253..11cbe7b8b9 100644
--- a/packages/backend/src/server/api/endpoints/chat/rooms/mute.ts
+++ b/packages/backend/src/server/api/endpoints/chat/rooms/mute.ts
@@ -43,6 +43,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatService: ChatService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'write');
+
await this.chatService.muteRoom(me.id, ps.roomId, ps.mute);
});
}
diff --git a/packages/backend/src/server/api/endpoints/chat/rooms/owned.ts b/packages/backend/src/server/api/endpoints/chat/rooms/owned.ts
index 6516120bca..accf7e1bee 100644
--- a/packages/backend/src/server/api/endpoints/chat/rooms/owned.ts
+++ b/packages/backend/src/server/api/endpoints/chat/rooms/owned.ts
@@ -47,6 +47,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatService: ChatService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'read');
+
const rooms = await this.chatService.getOwnedRoomsWithPagination(me.id, ps.limit, ps.sinceId, ps.untilId);
return this.chatEntityService.packRooms(rooms, me);
});
diff --git a/packages/backend/src/server/api/endpoints/chat/rooms/show.ts b/packages/backend/src/server/api/endpoints/chat/rooms/show.ts
index 547618ee7d..50da210d81 100644
--- a/packages/backend/src/server/api/endpoints/chat/rooms/show.ts
+++ b/packages/backend/src/server/api/endpoints/chat/rooms/show.ts
@@ -47,6 +47,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatEntityService: ChatEntityService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'read');
+
const room = await this.chatService.findRoomById(ps.roomId);
if (room == null) {
throw new ApiError(meta.errors.noSuchRoom);
diff --git a/packages/backend/src/server/api/endpoints/chat/rooms/update.ts b/packages/backend/src/server/api/endpoints/chat/rooms/update.ts
index 6f2a9c10b5..0cd62cb040 100644
--- a/packages/backend/src/server/api/endpoints/chat/rooms/update.ts
+++ b/packages/backend/src/server/api/endpoints/chat/rooms/update.ts
@@ -49,6 +49,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private chatEntityService: ChatEntityService,
) {
super(meta, paramDef, async (ps, me) => {
+ await this.chatService.checkChatAvailability(me.id, 'write');
+
const room = await this.chatService.findMyRoomById(me.id, ps.roomId);
if (room == null) {
throw new ApiError(meta.errors.noSuchRoom);