diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2023-03-13 17:52:24 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2023-03-13 17:52:24 +0900 |
| commit | 5d1ccb9bdcbe3949a52f0b6f2b057a53b6652579 (patch) | |
| tree | d77f06e5a2fc9e574b4b295b11a47aa996e6984d /packages/backend/src/server/api/endpoints | |
| parent | feat: sensitive word (diff) | |
| download | sharkey-5d1ccb9bdcbe3949a52f0b6f2b057a53b6652579.tar.gz sharkey-5d1ccb9bdcbe3949a52f0b6f2b057a53b6652579.tar.bz2 sharkey-5d1ccb9bdcbe3949a52f0b6f2b057a53b6652579.zip | |
enhance: make configurable to whether notes search available by role
Resolve #10318
Diffstat (limited to 'packages/backend/src/server/api/endpoints')
| -rw-r--r-- | packages/backend/src/server/api/endpoints/notes/search.ts | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/packages/backend/src/server/api/endpoints/notes/search.ts b/packages/backend/src/server/api/endpoints/notes/search.ts index ef47a3004d..5db5b6267f 100644 --- a/packages/backend/src/server/api/endpoints/notes/search.ts +++ b/packages/backend/src/server/api/endpoints/notes/search.ts @@ -6,6 +6,8 @@ import { NoteEntityService } from '@/core/entities/NoteEntityService.js'; import type { Config } from '@/config.js'; import { DI } from '@/di-symbols.js'; import { sqlLikeEscape } from '@/misc/sql-like-escape.js'; +import { RoleService } from '@/core/RoleService.js'; +import { ApiError } from '../../error.js'; export const meta = { tags: ['notes'], @@ -23,6 +25,11 @@ export const meta = { }, errors: { + unavailable: { + message: 'Search of notes unavailable.', + code: 'UNAVAILABLE', + id: '0b44998d-77aa-4427-80d0-d2c9b8523011', + }, }, } as const; @@ -59,8 +66,14 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { private noteEntityService: NoteEntityService, private queryService: QueryService, + private roleService: RoleService, ) { super(meta, paramDef, async (ps, me) => { + const policies = await this.roleService.getUserPolicies(me ? me.id : null); + if (!policies.canSearchNotes) { + throw new ApiError(meta.errors.unavailable); + } + const query = this.queryService.makePaginationQuery(this.notesRepository.createQueryBuilder('note'), ps.sinceId, ps.untilId); if (ps.userId) { |