diff options
| author | Acid Chicken (硫酸鶏) <root@acid-chicken.com> | 2020-05-05 10:22:49 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-05 10:22:49 +0900 |
| commit | 4cccdb8a98ffd69584c7139545ecd17bfb3b7a3e (patch) | |
| tree | 8bad0d079776b8fd3e20cfe65b44f205a0763287 /src/server | |
| parent | chore: Update dependencies :rocket: (diff) | |
| parent | Update hcaptcha.d.ts (diff) | |
| download | misskey-4cccdb8a98ffd69584c7139545ecd17bfb3b7a3e.tar.gz misskey-4cccdb8a98ffd69584c7139545ecd17bfb3b7a3e.tar.bz2 misskey-4cccdb8a98ffd69584c7139545ecd17bfb3b7a3e.zip | |
Merge pull request #6303 from syuilo/features/hcaptcha
Add support for hCaptcha
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/api/endpoints/admin/update-meta.ts | 33 | ||||
| -rw-r--r-- | src/server/api/endpoints/meta.ts | 4 | ||||
| -rw-r--r-- | src/server/api/private/signup.ts | 30 | ||||
| -rw-r--r-- | src/server/nodeinfo.ts | 1 | ||||
| -rw-r--r-- | src/server/web/views/info.pug | 3 |
5 files changed, 63 insertions, 8 deletions
diff --git a/src/server/api/endpoints/admin/update-meta.ts b/src/server/api/endpoints/admin/update-meta.ts index 1bc20029ef..dffe7ffe7f 100644 --- a/src/server/api/endpoints/admin/update-meta.ts +++ b/src/server/api/endpoints/admin/update-meta.ts @@ -145,6 +145,27 @@ export const meta = { } }, + enableHcaptcha: { + validator: $.optional.bool, + desc: { + 'ja-JP': 'hCaptchaを使用するか否か' + } + }, + + hcaptchaSiteKey: { + validator: $.optional.nullable.str, + desc: { + 'ja-JP': 'hCaptcha site key' + } + }, + + hcaptchaSecretKey: { + validator: $.optional.nullable.str, + desc: { + 'ja-JP': 'hCaptcha secret key' + } + }, + enableRecaptcha: { validator: $.optional.bool, desc: { @@ -472,6 +493,18 @@ export default define(meta, async (ps, me) => { set.proxyRemoteFiles = ps.proxyRemoteFiles; } + if (ps.enableHcaptcha !== undefined) { + set.enableHcaptcha = ps.enableHcaptcha; + } + + if (ps.hcaptchaSiteKey !== undefined) { + set.hcaptchaSiteKey = ps.hcaptchaSiteKey; + } + + if (ps.hcaptchaSecretKey !== undefined) { + set.hcaptchaSecretKey = ps.hcaptchaSecretKey; + } + if (ps.enableRecaptcha !== undefined) { set.enableRecaptcha = ps.enableRecaptcha; } diff --git a/src/server/api/endpoints/meta.ts b/src/server/api/endpoints/meta.ts index 179355489b..eefc370124 100644 --- a/src/server/api/endpoints/meta.ts +++ b/src/server/api/endpoints/meta.ts @@ -122,6 +122,8 @@ export default define(meta, async (ps, me) => { driveCapacityPerRemoteUserMb: instance.remoteDriveCapacityMb, cacheRemoteFiles: instance.cacheRemoteFiles, proxyRemoteFiles: instance.proxyRemoteFiles, + enableHcaptcha: instance.enableHcaptcha, + hcaptchaSiteKey: instance.hcaptchaSiteKey, enableRecaptcha: instance.enableRecaptcha, recaptchaSiteKey: instance.recaptchaSiteKey, swPublickey: instance.swPublicKey, @@ -149,6 +151,7 @@ export default define(meta, async (ps, me) => { localTimeLine: !instance.disableLocalTimeline, globalTimeLine: !instance.disableGlobalTimeline, elasticsearch: config.elasticsearch ? true : false, + hcaptcha: instance.enableHcaptcha, recaptcha: instance.enableRecaptcha, objectStorage: instance.useObjectStorage, twitter: instance.enableTwitterIntegration, @@ -164,6 +167,7 @@ export default define(meta, async (ps, me) => { response.pinnedUsers = instance.pinnedUsers; response.hiddenTags = instance.hiddenTags; response.blockedHosts = instance.blockedHosts; + response.hcaptchaSecretKey = instance.hcaptchaSecretKey; response.recaptchaSecretKey = instance.recaptchaSecretKey; response.proxyAccountId = instance.proxyAccountId; response.twitterConsumerKey = instance.twitterConsumerKey; diff --git a/src/server/api/private/signup.ts b/src/server/api/private/signup.ts index 79ee74389c..6dc252ac45 100644 --- a/src/server/api/private/signup.ts +++ b/src/server/api/private/signup.ts @@ -1,5 +1,6 @@ import * as Koa from 'koa'; import { fetchMeta } from '../../../misc/fetch-meta'; +import { verify } from 'hcaptcha'; import * as recaptcha from 'recaptcha-promise'; import { Users, RegistrationTickets } from '../../../models'; import { signup } from '../common/signup'; @@ -9,17 +10,30 @@ export default async (ctx: Koa.Context) => { const instance = await fetchMeta(true); - // Verify recaptcha + // Verify *Captcha // ただしテスト時はこの機構は障害となるため無効にする - if (process.env.NODE_ENV !== 'test' && instance.enableRecaptcha && instance.recaptchaSecretKey) { - recaptcha.init({ - secret_key: instance.recaptchaSecretKey - }); + if (process.env.NODE_ENV !== 'test') { + if (instance.enableHcaptcha && instance.hcaptchaSecretKey) { + const success = await verify(instance.hcaptchaSecretKey, body['hcaptcha-response']).then( + ({ success }) => success, + () => false, + ); + + if (!success) { + ctx.throw(400, 'hcaptcha-failed'); + } + } + + if (instance.enableRecaptcha && instance.recaptchaSecretKey) { + recaptcha.init({ + secret_key: instance.recaptchaSecretKey + }); - const success = await recaptcha(body['g-recaptcha-response']); + const success = await recaptcha(body['g-recaptcha-response']); - if (!success) { - ctx.throw(400, 'recaptcha-failed'); + if (!success) { + ctx.throw(400, 'recaptcha-failed'); + } } } diff --git a/src/server/nodeinfo.ts b/src/server/nodeinfo.ts index 2ff924e68d..442e946df3 100644 --- a/src/server/nodeinfo.ts +++ b/src/server/nodeinfo.ts @@ -65,6 +65,7 @@ const nodeinfo2 = async () => { disableRegistration: meta.disableRegistration, disableLocalTimeline: meta.disableLocalTimeline, disableGlobalTimeline: meta.disableGlobalTimeline, + enableHcaptcha: meta.enableHcaptcha, enableRecaptcha: meta.enableRecaptcha, maxNoteTextLength: meta.maxNoteTextLength, enableTwitterIntegration: meta.enableTwitterIntegration, diff --git a/src/server/web/views/info.pug b/src/server/web/views/info.pug index 992e652a60..4553d2e2b9 100644 --- a/src/server/web/views/info.pug +++ b/src/server/web/views/info.pug @@ -107,6 +107,9 @@ html th Registration td= !meta.disableRegistration ? 'yes' : 'no' tr + th hCaptcha enabled + td= meta.enableHcaptcha ? 'enabled' : 'disabled' + tr th reCAPTCHA enabled td= meta.enableRecaptcha ? 'enabled' : 'disabled' tr |