diff options
| author | Chocolate Pie <106949016+chocolate-pie@users.noreply.github.com> | 2024-01-06 20:14:33 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-06 20:14:33 +0900 |
| commit | 072f67d6e71af3d7fa6f5f4c73ae460d6844f511 (patch) | |
| tree | 551589eed9eb21a0b177546f7859b9bead107990 /packages/backend/src/core/CaptchaService.ts | |
| parent | refactor(frontend): `scripts/form.ts`の型定義を修正してTS2344/TS2345... (diff) | |
| download | sharkey-072f67d6e71af3d7fa6f5f4c73ae460d6844f511.tar.gz sharkey-072f67d6e71af3d7fa6f5f4c73ae460d6844f511.tar.bz2 sharkey-072f67d6e71af3d7fa6f5f4c73ae460d6844f511.zip | |
feat: Add support for mCaptcha (#12905)
* feat: Add support for mCaptcha
* fix: Fix docker compose configuration
* chore(frontend/docs): update changelog & fix eslint errors
* `@mcaptcha/vanilla-glue`をダイナミックインポートするように
* chore: Add missing prefix to CHANGELOG
* refactor(backend): 適当につけた変数の名前を変更
Diffstat (limited to 'packages/backend/src/core/CaptchaService.ts')
| -rw-r--r-- | packages/backend/src/core/CaptchaService.ts | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/packages/backend/src/core/CaptchaService.ts b/packages/backend/src/core/CaptchaService.ts index f64196f4fc..6c5ee4835d 100644 --- a/packages/backend/src/core/CaptchaService.ts +++ b/packages/backend/src/core/CaptchaService.ts @@ -73,6 +73,37 @@ export class CaptchaService { } } + // https://codeberg.org/Gusted/mCaptcha/src/branch/main/mcaptcha.go + @bindThis + public async verifyMcaptcha(secret: string, siteKey: string, instanceHost: string, response: string | null | undefined): Promise<void> { + if (response == null) { + throw new Error('mcaptcha-failed: no response provided'); + } + + const endpointUrl = new URL('/api/v1/pow/siteverify', instanceHost); + const result = await this.httpRequestService.send(endpointUrl.toString(), { + method: 'POST', + body: JSON.stringify({ + key: siteKey, + secret: secret, + token: response, + }), + headers: { + 'Content-Type': 'application/json', + }, + }); + + if (result.status !== 200) { + throw new Error('mcaptcha-failed: mcaptcha didn\'t return 200 OK'); + } + + const resp = (await result.json()) as { valid: boolean }; + + if (!resp.valid) { + throw new Error('mcaptcha-request-failed'); + } + } + @bindThis public async verifyTurnstile(secret: string, response: string | null | undefined): Promise<void> { if (response == null) { |