summaryrefslogtreecommitdiff
path: root/packages/backend/src
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-03-13 17:52:24 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-03-13 17:52:24 +0900
commit5d1ccb9bdcbe3949a52f0b6f2b057a53b6652579 (patch)
treed77f06e5a2fc9e574b4b295b11a47aa996e6984d /packages/backend/src
parentfeat: sensitive word (diff)
downloadsharkey-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')
-rw-r--r--packages/backend/src/core/RoleService.ts3
-rw-r--r--packages/backend/src/server/api/endpoints/notes/search.ts13
2 files changed, 16 insertions, 0 deletions
diff --git a/packages/backend/src/core/RoleService.ts b/packages/backend/src/core/RoleService.ts
index 7149591198..4775196c6f 100644
--- a/packages/backend/src/core/RoleService.ts
+++ b/packages/backend/src/core/RoleService.ts
@@ -21,6 +21,7 @@ export type RolePolicies = {
canPublicNote: boolean;
canInvite: boolean;
canManageCustomEmojis: boolean;
+ canSearchNotes: boolean;
canHideAds: boolean;
driveCapacityMb: number;
pinLimit: number;
@@ -40,6 +41,7 @@ export const DEFAULT_POLICIES: RolePolicies = {
canPublicNote: true,
canInvite: false,
canManageCustomEmojis: false,
+ canSearchNotes: false,
canHideAds: false,
driveCapacityMb: 100,
pinLimit: 5,
@@ -264,6 +266,7 @@ export class RoleService implements OnApplicationShutdown {
canPublicNote: calc('canPublicNote', vs => vs.some(v => v === true)),
canInvite: calc('canInvite', vs => vs.some(v => v === true)),
canManageCustomEmojis: calc('canManageCustomEmojis', vs => vs.some(v => v === true)),
+ canSearchNotes: calc('canSearchNotes', vs => vs.some(v => v === true)),
canHideAds: calc('canHideAds', vs => vs.some(v => v === true)),
driveCapacityMb: calc('driveCapacityMb', vs => Math.max(...vs)),
pinLimit: calc('pinLimit', vs => Math.max(...vs)),
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) {