summaryrefslogtreecommitdiff
path: root/packages/backend/src/core/UtilityService.ts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-12-24 15:23:56 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-12-24 15:23:56 +0900
commit6fce36374d8756f47f96c7a04cd388c994bd047f (patch)
tree5f3f57dbed32e56a109d8e5a7bc503f5871129a1 /packages/backend/src/core/UtilityService.ts
parentci: Get api.json from Misskeyでupload-artifact@v4で同名artifactでエラ... (diff)
downloadsharkey-6fce36374d8756f47f96c7a04cd388c994bd047f.tar.gz
sharkey-6fce36374d8756f47f96c7a04cd388c994bd047f.tar.bz2
sharkey-6fce36374d8756f47f96c7a04cd388c994bd047f.zip
enhance(backend): センシティブワードの設定がハッシュタグトレンドにも適用されるように
Diffstat (limited to 'packages/backend/src/core/UtilityService.ts')
-rw-r--r--packages/backend/src/core/UtilityService.ts28
1 files changed, 28 insertions, 0 deletions
diff --git a/packages/backend/src/core/UtilityService.ts b/packages/backend/src/core/UtilityService.ts
index b95e41167b..5dec36c89e 100644
--- a/packages/backend/src/core/UtilityService.ts
+++ b/packages/backend/src/core/UtilityService.ts
@@ -6,6 +6,7 @@
import { URL } from 'node:url';
import { toASCII } from 'punycode';
import { Inject, Injectable } from '@nestjs/common';
+import RE2 from 're2';
import { DI } from '@/di-symbols.js';
import type { Config } from '@/config.js';
import { bindThis } from '@/decorators.js';
@@ -42,6 +43,33 @@ export class UtilityService {
}
@bindThis
+ public isSensitiveWordIncluded(text: string, sensitiveWords: string[]): boolean {
+ if (sensitiveWords.length === 0) return false;
+ if (text === '') return false;
+
+ const regexpregexp = /^\/(.+)\/(.*)$/;
+
+ const matched = sensitiveWords.some(filter => {
+ // represents RegExp
+ const regexp = filter.match(regexpregexp);
+ // This should never happen due to input sanitisation.
+ if (!regexp) {
+ const words = filter.split(' ');
+ return words.every(keyword => text.includes(keyword));
+ }
+ try {
+ // TODO: RE2インスタンスをキャッシュ
+ return new RE2(regexp[1], regexp[2]).test(text);
+ } catch (err) {
+ // This should never happen due to input sanitisation.
+ return false;
+ }
+ });
+
+ return matched;
+ }
+
+ @bindThis
public extractDbHost(uri: string): string {
const url = new URL(uri);
return this.toPuny(url.hostname);