summaryrefslogtreecommitdiff
path: root/packages/backend/src
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-01-14 17:38:16 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-01-14 17:38:16 +0900
commit76c049522e2fb506915f9fad0cd763236245f45c (patch)
tree32a19e1239698d01a3571508e8fcd87c78597398 /packages/backend/src
parentrefactor(client): use css modules (diff)
downloadmisskey-76c049522e2fb506915f9fad0cd763236245f45c.tar.gz
misskey-76c049522e2fb506915f9fad0cd763236245f45c.tar.bz2
misskey-76c049522e2fb506915f9fad0cd763236245f45c.zip
enhance: ユーザーリストおよびユーザーリスト内のユーザーの作成可能数を設定可能に
Diffstat (limited to 'packages/backend/src')
-rw-r--r--packages/backend/src/core/RoleService.ts6
-rw-r--r--packages/backend/src/core/UserListService.ts11
-rw-r--r--packages/backend/src/queue/processors/ImportUserListsProcessorService.ts4
-rw-r--r--packages/backend/src/server/api/endpoints/users/lists/create.ts18
-rw-r--r--packages/backend/src/server/api/endpoints/users/lists/push.ts2
5 files changed, 37 insertions, 4 deletions
diff --git a/packages/backend/src/core/RoleService.ts b/packages/backend/src/core/RoleService.ts
index 39413e2a55..0ddcb44ca1 100644
--- a/packages/backend/src/core/RoleService.ts
+++ b/packages/backend/src/core/RoleService.ts
@@ -25,6 +25,8 @@ export type RoleOptions = {
webhookLimit: number;
clipLimit: number;
noteEachClipsLimit: number;
+ userListLimit: number;
+ userEachUserListsLimit: number;
};
export const DEFAULT_ROLE: RoleOptions = {
@@ -39,6 +41,8 @@ export const DEFAULT_ROLE: RoleOptions = {
webhookLimit: 3,
clipLimit: 10,
noteEachClipsLimit: 200,
+ userListLimit: 10,
+ userEachUserListsLimit: 50,
};
@Injectable()
@@ -212,6 +216,8 @@ export class RoleService implements OnApplicationShutdown {
webhookLimit: Math.max(...getOptionValues('webhookLimit')),
clipLimit: Math.max(...getOptionValues('clipLimit')),
noteEachClipsLimit: Math.max(...getOptionValues('noteEachClipsLimit')),
+ userListLimit: Math.max(...getOptionValues('userListLimit')),
+ userEachUserListsLimit: Math.max(...getOptionValues('userEachUserListsLimit')),
};
}
diff --git a/packages/backend/src/core/UserListService.ts b/packages/backend/src/core/UserListService.ts
index 054387ff8e..18c9787fa8 100644
--- a/packages/backend/src/core/UserListService.ts
+++ b/packages/backend/src/core/UserListService.ts
@@ -10,6 +10,7 @@ import { DI } from '@/di-symbols.js';
import { UserEntityService } from '@/core/entities/UserEntityService.js';
import { ProxyAccountService } from '@/core/ProxyAccountService.js';
import { bindThis } from '@/decorators.js';
+import { RoleService } from '@/core/RoleService.js';
@Injectable()
export class UserListService {
@@ -23,13 +24,21 @@ export class UserListService {
private userEntityService: UserEntityService,
private idService: IdService,
private userFollowingService: UserFollowingService,
+ private roleService: RoleService,
private globalEventServie: GlobalEventService,
private proxyAccountService: ProxyAccountService,
) {
}
@bindThis
- public async push(target: User, list: UserList) {
+ public async push(target: User, list: UserList, me: User) {
+ const currentCount = await this.userListJoiningsRepository.countBy({
+ userListId: list.id,
+ });
+ if (currentCount > (await this.roleService.getUserRoleOptions(me.id)).userEachUserListsLimit) {
+ throw new Error('Too many users');
+ }
+
await this.userListJoiningsRepository.insert({
id: this.idService.genId(),
createdAt: new Date(),
diff --git a/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts b/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts
index 1bec77b837..a9672250c8 100644
--- a/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts
+++ b/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts
@@ -10,10 +10,10 @@ import { DownloadService } from '@/core/DownloadService.js';
import { UserListService } from '@/core/UserListService.js';
import { IdService } from '@/core/IdService.js';
import { UtilityService } from '@/core/UtilityService.js';
+import { bindThis } from '@/decorators.js';
import { QueueLoggerService } from '../QueueLoggerService.js';
import type Bull from 'bull';
import type { DbUserImportJobData } from '../types.js';
-import { bindThis } from '@/decorators.js';
@Injectable()
export class ImportUserListsProcessorService {
@@ -102,7 +102,7 @@ export class ImportUserListsProcessorService {
if (await this.userListJoiningsRepository.findOneBy({ userListId: list!.id, userId: target.id }) != null) continue;
- this.userListService.push(target, list!);
+ this.userListService.push(target, list!, user);
} catch (e) {
this.logger.warn(`Error in line:${linenum} ${e}`);
}
diff --git a/packages/backend/src/server/api/endpoints/users/lists/create.ts b/packages/backend/src/server/api/endpoints/users/lists/create.ts
index 99f0751ea8..810c9909b2 100644
--- a/packages/backend/src/server/api/endpoints/users/lists/create.ts
+++ b/packages/backend/src/server/api/endpoints/users/lists/create.ts
@@ -5,6 +5,8 @@ import type { UserList } from '@/models/entities/UserList.js';
import { Endpoint } from '@/server/api/endpoint-base.js';
import { UserListEntityService } from '@/core/entities/UserListEntityService.js';
import { DI } from '@/di-symbols.js';
+import { ApiError } from '@/server/api/error';
+import { RoleService } from '@/core/RoleService.js';
export const meta = {
tags: ['lists'],
@@ -20,6 +22,14 @@ export const meta = {
optional: false, nullable: false,
ref: 'UserList',
},
+
+ errors: {
+ tooManyUserLists: {
+ message: 'You cannot create user list any more.',
+ code: 'TOO_MANY_USERLISTS',
+ id: '0cf21a28-7715-4f39-a20d-777bfdb8d138',
+ },
+ },
} as const;
export const paramDef = {
@@ -39,8 +49,16 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
private userListEntityService: UserListEntityService,
private idService: IdService,
+ private roleService: RoleService,
) {
super(meta, paramDef, async (ps, me) => {
+ const currentCount = await this.userListsRepository.countBy({
+ userId: me.id,
+ });
+ if (currentCount > (await this.roleService.getUserRoleOptions(me.id)).userListLimit) {
+ throw new ApiError(meta.errors.tooManyUserLists);
+ }
+
const userList = await this.userListsRepository.insert({
id: this.idService.genId(),
createdAt: new Date(),
diff --git a/packages/backend/src/server/api/endpoints/users/lists/push.ts b/packages/backend/src/server/api/endpoints/users/lists/push.ts
index 96be7e11e8..3a079ee1ab 100644
--- a/packages/backend/src/server/api/endpoints/users/lists/push.ts
+++ b/packages/backend/src/server/api/endpoints/users/lists/push.ts
@@ -111,7 +111,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
}
// Push the user
- await this.userListService.push(user, userList);
+ await this.userListService.push(user, userList, me);
});
}
}