summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-01-14 08:04:38 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-01-14 08:04:38 +0900
commitd1807ee5dc9d7677cf60ad5139b490b6307807ce (patch)
tree02ce6e02961abfa18fa3f0f07573840edc762be4 /packages/backend/src/server/api
parentrefactor: pagination/date-separated-list系処理を良い感じに? (#8209) (diff)
downloadsharkey-d1807ee5dc9d7677cf60ad5139b490b6307807ce.tar.gz
sharkey-d1807ee5dc9d7677cf60ad5139b490b6307807ce.tar.bz2
sharkey-d1807ee5dc9d7677cf60ad5139b490b6307807ce.zip
enhance: ハードワードミュートの最大文字数を設定可能に
Resolve #7574
Diffstat (limited to 'packages/backend/src/server/api')
-rw-r--r--packages/backend/src/server/api/endpoints/i/update.ts14
1 files changed, 14 insertions, 0 deletions
diff --git a/packages/backend/src/server/api/endpoints/i/update.ts b/packages/backend/src/server/api/endpoints/i/update.ts
index c2231f5f75..ef5ab16bc4 100644
--- a/packages/backend/src/server/api/endpoints/i/update.ts
+++ b/packages/backend/src/server/api/endpoints/i/update.ts
@@ -17,6 +17,7 @@ import { UserFollowingService } from '@/core/UserFollowingService.js';
import { AccountUpdateService } from '@/core/AccountUpdateService.js';
import { HashtagService } from '@/core/HashtagService.js';
import { DI } from '@/di-symbols.js';
+import { RoleService } from '@/core/RoleService.js';
import { ApiError } from '../../error.js';
export const meta = {
@@ -62,6 +63,12 @@ export const meta = {
code: 'INVALID_REGEXP',
id: '0d786918-10df-41cd-8f33-8dec7d9a89a5',
},
+
+ tooManyMutedWords: {
+ message: 'Too many muted words.',
+ code: 'TOO_MANY_MUTED_WORDS',
+ id: '010665b1-a211-42d2-bc64-8f6609d79785',
+ },
},
res: {
@@ -144,6 +151,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
private userFollowingService: UserFollowingService,
private accountUpdateService: AccountUpdateService,
private hashtagService: HashtagService,
+ private roleService: RoleService,
) {
super(meta, paramDef, async (ps, _user, token) => {
const user = await this.usersRepository.findOneByOrFail({ id: _user.id });
@@ -163,6 +171,12 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
if (ps.avatarId !== undefined) updates.avatarId = ps.avatarId;
if (ps.bannerId !== undefined) updates.bannerId = ps.bannerId;
if (ps.mutedWords !== undefined) {
+ // TODO: ちゃんと数える
+ const length = JSON.stringify(ps.mutedWords).length;
+ if (length > (await this.roleService.getUserRoleOptions(user.id)).antennaLimit) {
+ throw new ApiError(meta.errors.tooManyMutedWords);
+ }
+
// validate regular expression syntax
ps.mutedWords.filter(x => !Array.isArray(x)).forEach(x => {
const regexp = x.match(/^\/(.+)\/(.*)$/);