diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2023-12-24 15:23:56 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2023-12-24 15:23:56 +0900 |
| commit | 6fce36374d8756f47f96c7a04cd388c994bd047f (patch) | |
| tree | 5f3f57dbed32e56a109d8e5a7bc503f5871129a1 /packages/backend/src/core/UtilityService.ts | |
| parent | ci: Get api.json from Misskeyでupload-artifact@v4で同名artifactでエラ... (diff) | |
| download | sharkey-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.ts | 28 |
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); |