@prosopo/provider 5.19.4 → 5.20.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build$colon$cjs.log +40 -36
- package/.turbo/turbo-build$colon$tsc.log +28 -28
- package/.turbo/turbo-build.log +43 -36
- package/CHANGELOG.md +155 -0
- package/dist/api/admin/apiClearAllCountersEndpoint.js.map +1 -1
- package/dist/api/admin/apiGetAllDecisionMachinesEndpoint.js.map +1 -1
- package/dist/api/admin/apiGetDecisionMachineEndpoint.js.map +1 -1
- package/dist/api/admin/apiGetSessionEndpoint.js.map +1 -1
- package/dist/api/admin/apiRemoveAllDecisionMachinesEndpoint.js.map +1 -1
- package/dist/api/admin/apiRemoveDecisionMachineEndpoint.js.map +1 -1
- package/dist/api/admin/apiRemoveSiteKeyEndpoint.js.map +1 -1
- package/dist/api/admin/apiRemoveSiteKeysEndpoint.js.map +1 -1
- package/dist/api/admin/apiReplaceDetectorPoolEndpoint.js.map +1 -1
- package/dist/api/admin/apiUpdateDecisionMachineEndpoint.js.map +1 -1
- package/dist/api/blacklistRequestInspector.d.ts.map +1 -1
- package/dist/api/blacklistRequestInspector.js +9 -8
- package/dist/api/blacklistRequestInspector.js.map +1 -1
- package/dist/api/captcha/checkSpamEmail.d.ts.map +1 -1
- package/dist/api/captcha/checkSpamEmail.js +19 -26
- package/dist/api/captcha/checkSpamEmail.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js +11 -2
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js +6 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.js.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.d.ts.map +1 -1
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js +20 -25
- package/dist/api/captcha/getFrictionlessCaptchaChallenge/handler.js.map +1 -1
- package/dist/api/captcha/getImageCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/getImageCaptchaChallenge.js +32 -43
- package/dist/api/captcha/getImageCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/getPoWCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/getPoWCaptchaChallenge.js +27 -32
- package/dist/api/captcha/getPoWCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/interactiveCaptchaChallenge.d.ts.map +1 -1
- package/dist/api/captcha/interactiveCaptchaChallenge.js +27 -32
- package/dist/api/captcha/interactiveCaptchaChallenge.js.map +1 -1
- package/dist/api/captcha/interactiveCaptchaSolution.d.ts.map +1 -1
- package/dist/api/captcha/interactiveCaptchaSolution.js +18 -24
- package/dist/api/captcha/interactiveCaptchaSolution.js.map +1 -1
- package/dist/api/captcha/submitImageCaptchaSolution.d.ts.map +1 -1
- package/dist/api/captcha/submitImageCaptchaSolution.js +18 -24
- package/dist/api/captcha/submitImageCaptchaSolution.js.map +1 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.d.ts.map +1 -1
- package/dist/api/captcha/submitPoWCaptchaSolution.js +23 -25
- package/dist/api/captcha/submitPoWCaptchaSolution.js.map +1 -1
- package/dist/api/domainMiddleware.d.ts.map +1 -1
- package/dist/api/domainMiddleware.js +39 -47
- package/dist/api/domainMiddleware.js.map +1 -1
- package/dist/api/errorCodeForReason.d.ts +3 -0
- package/dist/api/errorCodeForReason.d.ts.map +1 -0
- package/dist/api/errorCodeForReason.js +22 -0
- package/dist/api/errorCodeForReason.js.map +1 -0
- package/dist/api/headerCheckMiddleware.d.ts.map +1 -1
- package/dist/api/headerCheckMiddleware.js +14 -9
- package/dist/api/headerCheckMiddleware.js.map +1 -1
- package/dist/api/ipInfoMiddleware.d.ts +1 -1
- package/dist/api/ipInfoMiddleware.d.ts.map +1 -1
- package/dist/api/ipInfoMiddleware.js +5 -1
- package/dist/api/ipInfoMiddleware.js.map +1 -1
- package/dist/api/metrics.d.ts.map +1 -1
- package/dist/api/metrics.js +9 -1
- package/dist/api/metrics.js.map +1 -1
- package/dist/api/public.d.ts.map +1 -1
- package/dist/api/public.js +6 -2
- package/dist/api/public.js.map +1 -1
- package/dist/api/rateLimitHandler.d.ts +4 -0
- package/dist/api/rateLimitHandler.d.ts.map +1 -0
- package/dist/api/rateLimitHandler.js +20 -0
- package/dist/api/rateLimitHandler.js.map +1 -0
- package/dist/api/startProviderApi.d.ts +1 -0
- package/dist/api/startProviderApi.d.ts.map +1 -1
- package/dist/api/startProviderApi.js +8 -17
- package/dist/api/startProviderApi.js.map +1 -1
- package/dist/api/validateAddress.d.ts +3 -4
- package/dist/api/validateAddress.d.ts.map +1 -1
- package/dist/api/validateAddress.js +13 -19
- package/dist/api/validateAddress.js.map +1 -1
- package/dist/api/verify.d.ts.map +1 -1
- package/dist/api/verify.js +73 -96
- package/dist/api/verify.js.map +1 -1
- package/dist/cjs/api/blacklistRequestInspector.cjs +9 -8
- package/dist/cjs/api/captcha/checkSpamEmail.cjs +18 -25
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/accessPolicy.cjs +11 -2
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/decisionMachine.cjs +6 -1
- package/dist/cjs/api/captcha/getFrictionlessCaptchaChallenge/handler.cjs +19 -24
- package/dist/cjs/api/captcha/getImageCaptchaChallenge.cjs +31 -42
- package/dist/cjs/api/captcha/getPoWCaptchaChallenge.cjs +26 -31
- package/dist/cjs/api/captcha/interactiveCaptchaChallenge.cjs +26 -31
- package/dist/cjs/api/captcha/interactiveCaptchaSolution.cjs +17 -23
- package/dist/cjs/api/captcha/submitImageCaptchaSolution.cjs +17 -23
- package/dist/cjs/api/captcha/submitPoWCaptchaSolution.cjs +22 -24
- package/dist/cjs/api/domainMiddleware.cjs +38 -46
- package/dist/cjs/api/errorCodeForReason.cjs +22 -0
- package/dist/cjs/api/headerCheckMiddleware.cjs +13 -8
- package/dist/cjs/api/ipInfoMiddleware.cjs +5 -1
- package/dist/cjs/api/metrics.cjs +9 -1
- package/dist/cjs/api/public.cjs +5 -1
- package/dist/cjs/api/rateLimitHandler.cjs +20 -0
- package/dist/cjs/api/startProviderApi.cjs +8 -16
- package/dist/cjs/api/validateAddress.cjs +12 -18
- package/dist/cjs/api/verify.cjs +72 -95
- package/dist/cjs/index.cjs +1 -0
- package/dist/cjs/tasks/captchaManager.cjs +6 -8
- package/dist/cjs/tasks/client/clientTasks.cjs +26 -13
- package/dist/cjs/tasks/dataset/datasetTasksUtils.cjs +28 -8
- package/dist/cjs/tasks/decisionMachine/decisionMachineRunner.cjs +21 -19
- package/dist/cjs/tasks/frictionless/routingMachine.cjs +13 -4
- package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasks.cjs +89 -40
- package/dist/cjs/tasks/imgCaptcha/imgCaptchaTasksUtils.cjs +18 -8
- package/dist/cjs/tasks/interactiveCaptcha/interactiveCaptchaManager.cjs +21 -13
- package/dist/cjs/tasks/powCaptcha/backgroundWrites.cjs +24 -0
- package/dist/cjs/tasks/powCaptcha/powTasks.cjs +44 -19
- package/dist/cjs/tasks/powCaptcha/powTasksUtils.cjs +14 -10
- package/dist/cjs/tasks/signatureCheck.cjs +12 -0
- package/dist/cjs/tasks/tasks.cjs +6 -1
- package/dist/cjs/util/usageCounters.cjs +26 -3
- package/dist/cjs/util.cjs +14 -3
- package/dist/errorSites.d.ts +98 -0
- package/dist/errorSites.d.ts.map +1 -0
- package/dist/errorSites.js +2 -0
- package/dist/errorSites.js.map +1 -0
- package/dist/fingerprint/dist/merkle.js +69 -0
- package/dist/fingerprint/dist/proof.js +95 -0
- package/dist/fingerprint/dist/summary.js +73 -0
- package/dist/index.js +2 -2
- package/dist/tasks/captchaManager.d.ts +2 -3
- package/dist/tasks/captchaManager.d.ts.map +1 -1
- package/dist/tasks/captchaManager.js +6 -7
- package/dist/tasks/captchaManager.js.map +1 -1
- package/dist/tasks/client/clientTasks.d.ts.map +1 -1
- package/dist/tasks/client/clientTasks.js +27 -14
- package/dist/tasks/client/clientTasks.js.map +1 -1
- package/dist/tasks/dataset/datasetTasksUtils.d.ts.map +1 -1
- package/dist/tasks/dataset/datasetTasksUtils.js +29 -9
- package/dist/tasks/dataset/datasetTasksUtils.js.map +1 -1
- package/dist/tasks/decisionMachine/decisionMachineRunner.d.ts +1 -3
- package/dist/tasks/decisionMachine/decisionMachineRunner.d.ts.map +1 -1
- package/dist/tasks/decisionMachine/decisionMachineRunner.js +21 -19
- package/dist/tasks/decisionMachine/decisionMachineRunner.js.map +1 -1
- package/dist/tasks/frictionless/routingMachine.d.ts.map +1 -1
- package/dist/tasks/frictionless/routingMachine.js +13 -4
- package/dist/tasks/frictionless/routingMachine.js.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.d.ts.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.js +91 -42
- package/dist/tasks/imgCaptcha/imgCaptchaTasks.js.map +1 -1
- package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js +19 -9
- package/dist/tasks/imgCaptcha/imgCaptchaTasksUtils.js.map +1 -1
- package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.d.ts.map +1 -1
- package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.js +22 -14
- package/dist/tasks/interactiveCaptcha/interactiveCaptchaManager.js.map +1 -1
- package/dist/tasks/powCaptcha/backgroundWrites.d.ts +7 -0
- package/dist/tasks/powCaptcha/backgroundWrites.d.ts.map +1 -0
- package/dist/tasks/powCaptcha/backgroundWrites.js +24 -0
- package/dist/tasks/powCaptcha/backgroundWrites.js.map +1 -0
- package/dist/tasks/powCaptcha/powTasks.d.ts +3 -3
- package/dist/tasks/powCaptcha/powTasks.d.ts.map +1 -1
- package/dist/tasks/powCaptcha/powTasks.js +45 -20
- package/dist/tasks/powCaptcha/powTasks.js.map +1 -1
- package/dist/tasks/powCaptcha/powTasksUtils.d.ts.map +1 -1
- package/dist/tasks/powCaptcha/powTasksUtils.js +15 -11
- package/dist/tasks/powCaptcha/powTasksUtils.js.map +1 -1
- package/dist/tasks/signatureCheck.d.ts +2 -0
- package/dist/tasks/signatureCheck.d.ts.map +1 -0
- package/dist/tasks/signatureCheck.js +12 -0
- package/dist/tasks/signatureCheck.js.map +1 -0
- package/dist/tasks/tasks.d.ts.map +1 -1
- package/dist/tasks/tasks.js +7 -2
- package/dist/tasks/tasks.js.map +1 -1
- package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js +3 -1
- package/dist/tests/integration/api/admin/apiRegisterSiteKeyEndpoint.integration.test.js.map +1 -1
- package/dist/tests/integration/api/admin/apiRegisterSiteKeysEndpoint.integration.test.js +6 -2
- package/dist/tests/integration/api/admin/apiRegisterSiteKeysEndpoint.integration.test.js.map +1 -1
- package/dist/tests/integration/escalationPeekBeforeConsume.integration.test.js +1 -1
- package/dist/tests/integration/escalationPeekBeforeConsume.integration.test.js.map +1 -1
- package/dist/tests/integration/imgCaptcha.integration.test.js +6 -5
- package/dist/tests/integration/imgCaptcha.integration.test.js.map +1 -1
- package/dist/tests/integration/ipValidation.integration.test.js +1 -1
- package/dist/tests/integration/ipValidation.integration.test.js.map +1 -1
- package/dist/tests/integration/powCaptcha.integration.test.js +2 -2
- package/dist/tests/integration/powCaptcha.integration.test.js.map +1 -1
- package/dist/tests/integration/routingDecisionMachines.integration.test.js.map +1 -1
- package/dist/tests/integration/testUtils.d.ts +2 -2
- package/dist/tests/integration/testUtils.d.ts.map +1 -1
- package/dist/tests/integration/testUtils.js +1 -1
- package/dist/tests/integration/testUtils.js.map +1 -1
- package/dist/tests/integration/webBotAuthAuthenticated.integration.test.js +3 -1
- package/dist/tests/integration/webBotAuthAuthenticated.integration.test.js.map +1 -1
- package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js +26 -10
- package/dist/tests/unit/api/blacklistRequestInspector.unit.test.js.map +1 -1
- package/dist/tests/unit/api/captcha/checkSpamEmail.unit.test.js +4 -4
- package/dist/tests/unit/api/captcha/checkSpamEmail.unit.test.js.map +1 -1
- package/dist/tests/unit/api/captcha/submitSolutionBadSignature.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/captcha/submitSolutionBadSignature.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/captcha/submitSolutionBadSignature.unit.test.js +153 -0
- package/dist/tests/unit/api/captcha/submitSolutionBadSignature.unit.test.js.map +1 -0
- package/dist/tests/unit/api/domainMiddlewareErrorBody.unit.test.js +6 -2
- package/dist/tests/unit/api/domainMiddlewareErrorBody.unit.test.js.map +1 -1
- package/dist/tests/unit/api/errorCodeForReason.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/errorCodeForReason.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/errorCodeForReason.unit.test.js +23 -0
- package/dist/tests/unit/api/errorCodeForReason.unit.test.js.map +1 -0
- package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js +6 -1
- package/dist/tests/unit/api/getFrictionlessCaptchaChallenge.unit.test.js.map +1 -1
- package/dist/tests/unit/api/headerCheckMiddleware.unit.test.js +16 -7
- package/dist/tests/unit/api/headerCheckMiddleware.unit.test.js.map +1 -1
- package/dist/tests/unit/api/ipInfoMiddleware.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/ipInfoMiddleware.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/ipInfoMiddleware.unit.test.js +46 -0
- package/dist/tests/unit/api/ipInfoMiddleware.unit.test.js.map +1 -0
- package/dist/tests/unit/api/public.unit.test.js +45 -10
- package/dist/tests/unit/api/public.unit.test.js.map +1 -1
- package/dist/tests/unit/api/rateLimitHandler.unit.test.d.ts +2 -0
- package/dist/tests/unit/api/rateLimitHandler.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/api/rateLimitHandler.unit.test.js +39 -0
- package/dist/tests/unit/api/rateLimitHandler.unit.test.js.map +1 -0
- package/dist/tests/unit/api/validateAddress.unit.test.js +41 -115
- package/dist/tests/unit/api/validateAddress.unit.test.js.map +1 -1
- package/dist/tests/unit/api/verifyMalformedToken.unit.test.js +3 -3
- package/dist/tests/unit/api/verifyMalformedToken.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/captchaManager.unit.test.js +22 -18
- package/dist/tests/unit/tasks/captchaManager.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/client/clientTasks.unit.test.js +25 -0
- package/dist/tests/unit/tasks/client/clientTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js +25 -20
- package/dist/tests/unit/tasks/dataset/datasetTasksUtils.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/decisionMachine/decisionMachineRunner.unit.test.js +31 -0
- package/dist/tests/unit/tasks/decisionMachine/decisionMachineRunner.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/frictionless/fingerprintBucketFlow.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/frictionless/fingerprintBucketFlow.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/frictionless/fingerprintBucketFlow.unit.test.js +80 -0
- package/dist/tests/unit/tasks/frictionless/fingerprintBucketFlow.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/frictionless/routingMachine.unit.test.js +48 -0
- package/dist/tests/unit/tasks/frictionless/routingMachine.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js +20 -28
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js +2 -2
- package/dist/tests/unit/tasks/imgCaptcha/imgCaptchaTasksUtils.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/powCaptcha/backgroundWrites.unit.test.d.ts +2 -0
- package/dist/tests/unit/tasks/powCaptcha/backgroundWrites.unit.test.d.ts.map +1 -0
- package/dist/tests/unit/tasks/powCaptcha/backgroundWrites.unit.test.js +44 -0
- package/dist/tests/unit/tasks/powCaptcha/backgroundWrites.unit.test.js.map +1 -0
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js +78 -43
- package/dist/tests/unit/tasks/powCaptcha/powTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js +7 -6
- package/dist/tests/unit/tasks/powCaptcha/powTasksUtils.unit.test.js.map +1 -1
- package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.js +2 -2
- package/dist/tests/unit/tasks/puzzleCaptcha/puzzleTasks.unit.test.js.map +1 -1
- package/dist/tests/unit/util/usageCounters.unit.test.js +20 -0
- package/dist/tests/unit/util/usageCounters.unit.test.js.map +1 -1
- package/dist/tests/unit/util.unit.test.js +7 -7
- package/dist/tests/unit/util.unit.test.js.map +1 -1
- package/dist/util/usageCounters.d.ts +1 -1
- package/dist/util/usageCounters.d.ts.map +1 -1
- package/dist/util/usageCounters.js +26 -3
- package/dist/util/usageCounters.js.map +1 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +15 -4
- package/dist/util.js.map +1 -1
- package/package.json +44 -43
|
@@ -20,11 +20,11 @@ var domainMiddleware = (env) => {
|
|
|
20
20
|
if (!cachedTasks) cachedTasks = new require_tasks.Tasks(env);
|
|
21
21
|
const tasks = cachedTasks;
|
|
22
22
|
const siteKey = req.headers["prosopo-site-key"];
|
|
23
|
-
if (!siteKey) throw siteKeyNotRegisteredError(
|
|
23
|
+
if (!siteKey) throw siteKeyNotRegisteredError("No sitekey provided");
|
|
24
24
|
try {
|
|
25
25
|
(0, _prosopo_util_crypto.validateAddress)(siteKey, false, 42);
|
|
26
26
|
} catch (err) {
|
|
27
|
-
throw invalidSiteKeyError(
|
|
27
|
+
throw invalidSiteKeyError(siteKey);
|
|
28
28
|
}
|
|
29
29
|
if (require_testSiteKey.isReservedTestSiteKey(siteKey)) {
|
|
30
30
|
require_metrics.recordDomainValidation("test_key");
|
|
@@ -32,32 +32,34 @@ var domainMiddleware = (env) => {
|
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
34
|
const clientSettings = await tasks.db.getClientRecord(siteKey);
|
|
35
|
-
if (!clientSettings) throw siteKeyNotRegisteredError(
|
|
35
|
+
if (!clientSettings) throw siteKeyNotRegisteredError(siteKey);
|
|
36
36
|
const allowedDomains = clientSettings.settings?.domains;
|
|
37
|
-
if (!allowedDomains) throw siteKeyInvalidDomainError(
|
|
37
|
+
if (!allowedDomains) throw siteKeyInvalidDomainError(siteKey, req.hostname);
|
|
38
38
|
const origin = req.headers.origin;
|
|
39
|
-
if (!origin) throw unauthorizedOriginError(
|
|
39
|
+
if (!origin) throw unauthorizedOriginError(void 0);
|
|
40
40
|
const candidateOrigins = [origin, ...googleTranslateOrigins(origin)];
|
|
41
41
|
for (const candidate of candidateOrigins) for (const domain of allowedDomains) if (tasks.clientTaskManager.domainPatternMatcher(candidate, domain)) {
|
|
42
42
|
require_metrics.recordDomainValidation("allowed");
|
|
43
43
|
next();
|
|
44
44
|
return;
|
|
45
45
|
}
|
|
46
|
-
throw unauthorizedOriginError(
|
|
46
|
+
throw unauthorizedOriginError(origin);
|
|
47
47
|
} catch (err) {
|
|
48
48
|
require_metrics.recordDomainValidation("rejected");
|
|
49
|
-
if (
|
|
50
|
-
|
|
51
|
-
req.logger.error(() => ({
|
|
52
|
-
err,
|
|
53
|
-
msg: "Domain middleware error"
|
|
54
|
-
}));
|
|
55
|
-
res.status(401).json({
|
|
56
|
-
error: "Unauthorized",
|
|
57
|
-
message: "Unauthorized"
|
|
58
|
-
});
|
|
49
|
+
if ((0, _prosopo_common.isProsopoError)(err) || err instanceof zod.ZodError || err instanceof SyntaxError) {
|
|
50
|
+
(0, _prosopo_api_express_router.handleErrors)(err, req, res, next);
|
|
59
51
|
return;
|
|
60
52
|
}
|
|
53
|
+
req.logger.error(() => ({
|
|
54
|
+
err,
|
|
55
|
+
msg: "Domain middleware error"
|
|
56
|
+
}));
|
|
57
|
+
const error = new _prosopo_common.ProsopoError({
|
|
58
|
+
code: "UNAUTHORIZED",
|
|
59
|
+
errorSite: "PROV-85",
|
|
60
|
+
cause: err
|
|
61
|
+
});
|
|
62
|
+
res.status(error.status).json({ error: (0, _prosopo_common.toPublicError)(error, "BACKEND_ERROR") });
|
|
61
63
|
}
|
|
62
64
|
};
|
|
63
65
|
};
|
|
@@ -71,46 +73,36 @@ var googleTranslateOrigins = (origin) => {
|
|
|
71
73
|
return [];
|
|
72
74
|
}
|
|
73
75
|
};
|
|
74
|
-
var siteKeyNotRegisteredError = (
|
|
75
|
-
return new _prosopo_common.
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
},
|
|
80
|
-
i18n,
|
|
81
|
-
logger
|
|
76
|
+
var siteKeyNotRegisteredError = (dapp) => {
|
|
77
|
+
return new _prosopo_common.ProsopoError({
|
|
78
|
+
code: "SITE_KEY_NOT_REGISTERED",
|
|
79
|
+
errorSite: "PROV-30",
|
|
80
|
+
context: { siteKey: dapp }
|
|
82
81
|
});
|
|
83
82
|
};
|
|
84
|
-
var invalidSiteKeyError = (
|
|
85
|
-
return new _prosopo_common.
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
},
|
|
90
|
-
i18n,
|
|
91
|
-
logger
|
|
83
|
+
var invalidSiteKeyError = (siteKey) => {
|
|
84
|
+
return new _prosopo_common.ProsopoError({
|
|
85
|
+
code: "SITE_KEY_INVALID",
|
|
86
|
+
errorSite: "PROV-31",
|
|
87
|
+
context: { siteKey }
|
|
92
88
|
});
|
|
93
89
|
};
|
|
94
|
-
var unauthorizedOriginError = (
|
|
95
|
-
return new _prosopo_common.
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
},
|
|
100
|
-
i18n,
|
|
101
|
-
logger
|
|
90
|
+
var unauthorizedOriginError = (origin) => {
|
|
91
|
+
return new _prosopo_common.ProsopoError({
|
|
92
|
+
code: "ORIGIN_NOT_ALLOWED",
|
|
93
|
+
errorSite: "PROV-32",
|
|
94
|
+
context: { origin }
|
|
102
95
|
});
|
|
103
96
|
};
|
|
104
|
-
var siteKeyInvalidDomainError = (
|
|
105
|
-
return new _prosopo_common.
|
|
97
|
+
var siteKeyInvalidDomainError = (dapp, domain) => {
|
|
98
|
+
return new _prosopo_common.ProsopoError({
|
|
99
|
+
code: "ORIGIN_NOT_ALLOWED",
|
|
100
|
+
errorSite: "PROV-33",
|
|
106
101
|
context: {
|
|
107
|
-
code: 400,
|
|
108
102
|
message: "No domains are allowed for this site key. Please fix in the Procaptcha Portal",
|
|
109
103
|
siteKey: dapp,
|
|
110
104
|
domain
|
|
111
|
-
}
|
|
112
|
-
i18n,
|
|
113
|
-
logger
|
|
105
|
+
}
|
|
114
106
|
});
|
|
115
107
|
};
|
|
116
108
|
//#endregion
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
let _prosopo_common = require("@prosopo/common");
|
|
2
|
+
//#region src/api/errorCodeForReason.ts
|
|
3
|
+
var RENAMED = {
|
|
4
|
+
"API.INVALID_SITE_KEY": "SITE_KEY_INVALID",
|
|
5
|
+
"API.UNAUTHORIZED_ORIGIN_URL": "ORIGIN_NOT_ALLOWED",
|
|
6
|
+
"API.BAD_REQUEST": "INVALID_REQUEST"
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* A request validation outcome (a `ResultReason` or other translation key) as
|
|
10
|
+
* the error code the widget branches on: the key without its namespace, e.g.
|
|
11
|
+
* `API.VPN_BLOCKED` is `VPN_BLOCKED`. An outcome with no code of its own gets
|
|
12
|
+
* `fallback`.
|
|
13
|
+
*/
|
|
14
|
+
var errorCodeForReason = (reason, fallback = "INVALID_REQUEST") => {
|
|
15
|
+
if (reason === void 0) return fallback;
|
|
16
|
+
const renamed = RENAMED[reason];
|
|
17
|
+
if (renamed) return renamed;
|
|
18
|
+
const unprefixed = reason.slice(reason.indexOf(".") + 1);
|
|
19
|
+
return (0, _prosopo_common.isErrorCode)(unprefixed) ? unprefixed : fallback;
|
|
20
|
+
};
|
|
21
|
+
//#endregion
|
|
22
|
+
exports.errorCodeForReason = errorCodeForReason;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const require_validateAddress = require("./validateAddress.cjs");
|
|
2
|
+
let _prosopo_common = require("@prosopo/common");
|
|
2
3
|
let _prosopo_api_express_router = require("@prosopo/api-express-router");
|
|
3
4
|
//#region src/api/headerCheckMiddleware.ts
|
|
4
5
|
var headerCheckMiddleware = (env) => {
|
|
@@ -7,15 +8,23 @@ var headerCheckMiddleware = (env) => {
|
|
|
7
8
|
const user = req.headers["prosopo-user"];
|
|
8
9
|
const siteKey = req.headers["prosopo-site-key"];
|
|
9
10
|
if (!user) {
|
|
10
|
-
|
|
11
|
+
(0, _prosopo_api_express_router.sendProsopoError)(res, new _prosopo_common.ProsopoError({
|
|
12
|
+
code: "UNAUTHORIZED",
|
|
13
|
+
errorSite: "PROV-86",
|
|
14
|
+
message: "Missing prosopo-user header"
|
|
15
|
+
}));
|
|
11
16
|
return;
|
|
12
17
|
}
|
|
13
18
|
if (!siteKey) {
|
|
14
|
-
|
|
19
|
+
(0, _prosopo_api_express_router.sendProsopoError)(res, new _prosopo_common.ProsopoError({
|
|
20
|
+
code: "UNAUTHORIZED",
|
|
21
|
+
errorSite: "PROV-87",
|
|
22
|
+
message: "Missing prosopo-site-key header"
|
|
23
|
+
}));
|
|
15
24
|
return;
|
|
16
25
|
}
|
|
17
|
-
require_validateAddress.validateSiteKey(siteKey
|
|
18
|
-
require_validateAddress.validateAddr(user
|
|
26
|
+
require_validateAddress.validateSiteKey(siteKey);
|
|
27
|
+
require_validateAddress.validateAddr(user);
|
|
19
28
|
req.user = user;
|
|
20
29
|
req.siteKey = siteKey;
|
|
21
30
|
req.logger = req.logger.with({
|
|
@@ -28,9 +37,5 @@ var headerCheckMiddleware = (env) => {
|
|
|
28
37
|
}
|
|
29
38
|
};
|
|
30
39
|
};
|
|
31
|
-
var unauthorised = (res) => res.status(401).json({
|
|
32
|
-
error: "Unauthorized",
|
|
33
|
-
message: "Unauthorized"
|
|
34
|
-
});
|
|
35
40
|
//#endregion
|
|
36
41
|
exports.headerCheckMiddleware = headerCheckMiddleware;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
//#region src/api/ipInfoMiddleware.ts
|
|
2
|
-
var ipInfoMiddleware = (env) => {
|
|
2
|
+
var ipInfoMiddleware = (env, skipPaths = /* @__PURE__ */ new Set()) => {
|
|
3
3
|
return async (req, _res, next) => {
|
|
4
|
+
if (skipPaths.has(req.path)) {
|
|
5
|
+
next();
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
4
8
|
try {
|
|
5
9
|
const ip = req.ip;
|
|
6
10
|
if (ip && env.ipInfoService.isAvailable()) req.ipInfo = await env.ipInfoService.lookup(ip);
|
package/dist/cjs/api/metrics.cjs
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
let _prosopo_common = require("@prosopo/common");
|
|
1
2
|
let _prosopo_types = require("@prosopo/types");
|
|
3
|
+
let _prosopo_api_express_router = require("@prosopo/api-express-router");
|
|
2
4
|
let node_crypto = require("node:crypto");
|
|
3
5
|
let node_net = require("node:net");
|
|
4
6
|
let prom_client = require("prom-client");
|
|
@@ -386,7 +388,13 @@ var metricsHandler = (env) => {
|
|
|
386
388
|
return async (req, res) => {
|
|
387
389
|
const access = metricsAccess(req);
|
|
388
390
|
if (access !== 200) {
|
|
389
|
-
|
|
391
|
+
(0, _prosopo_api_express_router.sendProsopoError)(res, access === 401 ? new _prosopo_common.ProsopoError({
|
|
392
|
+
code: "UNAUTHORIZED",
|
|
393
|
+
errorSite: "PROV-91"
|
|
394
|
+
}) : new _prosopo_common.ProsopoError({
|
|
395
|
+
code: "FORBIDDEN",
|
|
396
|
+
errorSite: "PROV-92"
|
|
397
|
+
}));
|
|
390
398
|
return;
|
|
391
399
|
}
|
|
392
400
|
const m = getMetrics();
|
package/dist/cjs/api/public.cjs
CHANGED
|
@@ -62,7 +62,11 @@ function publicRouter(env) {
|
|
|
62
62
|
data: { reqParams: req.params },
|
|
63
63
|
msg: "Error getting provider details"
|
|
64
64
|
}));
|
|
65
|
-
return next(new _prosopo_common.
|
|
65
|
+
return next(new _prosopo_common.ProsopoError({
|
|
66
|
+
code: "UNEXPECTED",
|
|
67
|
+
errorSite: "PROV-34",
|
|
68
|
+
message: "BadRequest"
|
|
69
|
+
}));
|
|
66
70
|
}
|
|
67
71
|
});
|
|
68
72
|
router.use(require_assetDocument.assetDocumentRouter());
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
let _prosopo_common = require("@prosopo/common");
|
|
2
|
+
let _prosopo_api_express_router = require("@prosopo/api-express-router");
|
|
3
|
+
//#region src/api/rateLimitHandler.ts
|
|
4
|
+
var rateLimitHandler = (logger, path) => (req, res, _next, options) => {
|
|
5
|
+
logger.warn(() => ({
|
|
6
|
+
msg: "Rate limit exceeded",
|
|
7
|
+
data: {
|
|
8
|
+
path,
|
|
9
|
+
ip: req.ip,
|
|
10
|
+
siteKey: req.headers["prosopo-site-key"]
|
|
11
|
+
}
|
|
12
|
+
}));
|
|
13
|
+
(0, _prosopo_api_express_router.sendProsopoError)(res, new _prosopo_common.ProsopoError({
|
|
14
|
+
code: "RATE_LIMITED",
|
|
15
|
+
errorSite: "PROV-93",
|
|
16
|
+
status: options.statusCode
|
|
17
|
+
}));
|
|
18
|
+
};
|
|
19
|
+
//#endregion
|
|
20
|
+
exports.rateLimitHandler = rateLimitHandler;
|
|
@@ -17,11 +17,11 @@ const require_detectorPoolBodyParser = require("./detectorPoolBodyParser.cjs");
|
|
|
17
17
|
const require_headerCheckMiddleware = require("./headerCheckMiddleware.cjs");
|
|
18
18
|
const require_ignoreMiddleware = require("./ignoreMiddleware.cjs");
|
|
19
19
|
const require_ipInfoMiddleware = require("./ipInfoMiddleware.cjs");
|
|
20
|
+
const require_rateLimitHandler = require("./rateLimitHandler.cjs");
|
|
20
21
|
const require_robotsMiddleware = require("./robotsMiddleware.cjs");
|
|
21
22
|
let _prosopo_logger = require("@prosopo/logger");
|
|
22
23
|
let _prosopo_types = require("@prosopo/types");
|
|
23
24
|
let _prosopo_api_express_router = require("@prosopo/api-express-router");
|
|
24
|
-
let _prosopo_locale = require("@prosopo/locale");
|
|
25
25
|
let node_fs = require("node:fs");
|
|
26
26
|
node_fs = require_runtime.__toESM(node_fs, 1);
|
|
27
27
|
let node_path = require("node:path");
|
|
@@ -30,6 +30,7 @@ let node_https = require("node:https");
|
|
|
30
30
|
node_https = require_runtime.__toESM(node_https, 1);
|
|
31
31
|
let express = require("express");
|
|
32
32
|
express = require_runtime.__toESM(express, 1);
|
|
33
|
+
let _prosopo_locale = require("@prosopo/locale");
|
|
33
34
|
let node_url = require("node:url");
|
|
34
35
|
let _prosopo_user_access_policy_api = require("@prosopo/user-access-policy/api");
|
|
35
36
|
let cors = require("cors");
|
|
@@ -73,6 +74,7 @@ var providerCorsOptions = {
|
|
|
73
74
|
var isTlsAvailable = () => {
|
|
74
75
|
return node_fs.default.existsSync(keyPath) && node_fs.default.existsSync(crtPath);
|
|
75
76
|
};
|
|
77
|
+
var getServerVerifyPaths = () => Object.values(_prosopo_types.ClientApiPaths).filter((path) => path.endsWith("/verify"));
|
|
76
78
|
/**
|
|
77
79
|
* Get client API paths that expect Prosopo headers (like site key) for validation, excluding verify and spam routes
|
|
78
80
|
* @returns Array of ClientApiPaths excluding verify and spam routes
|
|
@@ -181,36 +183,25 @@ async function startProviderApi(env, admin = false, port) {
|
|
|
181
183
|
...(0, _prosopo_user_access_policy_api.getExpressApiRuleRateLimits)()
|
|
182
184
|
};
|
|
183
185
|
const adminPaths = Object.values(_prosopo_types.AdminApiPaths);
|
|
184
|
-
const rateLimitHandler = (path) => (req, res, _next, options) => {
|
|
185
|
-
env.logger.warn(() => ({
|
|
186
|
-
msg: "Rate limit exceeded",
|
|
187
|
-
data: {
|
|
188
|
-
path,
|
|
189
|
-
ip: req.ip,
|
|
190
|
-
siteKey: req.headers["prosopo-site-key"]
|
|
191
|
-
}
|
|
192
|
-
}));
|
|
193
|
-
res.status(options.statusCode).send(options.message);
|
|
194
|
-
};
|
|
195
186
|
for (const [path, limit] of Object.entries(rateLimits)) {
|
|
196
187
|
const enumPath = path;
|
|
197
188
|
if (adminPaths.includes(enumPath)) apiApp.use(enumPath, (0, express_rate_limit.default)({
|
|
198
189
|
...limit,
|
|
199
|
-
handler: rateLimitHandler(enumPath),
|
|
190
|
+
handler: require_rateLimitHandler.rateLimitHandler(env.logger, enumPath),
|
|
200
191
|
keyGenerator: (req) => {
|
|
201
192
|
return getUserFromJWT(req) || req.ip || "unknown";
|
|
202
193
|
}
|
|
203
194
|
}));
|
|
204
195
|
else if (path === _prosopo_types.ClientApiPaths.VerifyImageCaptchaSolutionDapp || path === _prosopo_types.ClientApiPaths.VerifyPowCaptchaSolution) apiApp.use(enumPath, (0, express_rate_limit.default)({
|
|
205
196
|
...limit,
|
|
206
|
-
handler: rateLimitHandler(enumPath),
|
|
197
|
+
handler: require_rateLimitHandler.rateLimitHandler(env.logger, enumPath),
|
|
207
198
|
keyGenerator: (req) => {
|
|
208
199
|
return req.headers["prosopo-site-key"] || req.ip || "unknown";
|
|
209
200
|
}
|
|
210
201
|
}));
|
|
211
202
|
else apiApp.use(enumPath, (0, express_rate_limit.default)({
|
|
212
203
|
...limit,
|
|
213
|
-
handler: rateLimitHandler(enumPath)
|
|
204
|
+
handler: require_rateLimitHandler.rateLimitHandler(env.logger, enumPath)
|
|
214
205
|
}));
|
|
215
206
|
}
|
|
216
207
|
}
|
|
@@ -222,7 +213,7 @@ async function startProviderApi(env, admin = false, port) {
|
|
|
222
213
|
apiApp.use(require_ja4Middleware.ja4Middleware(env));
|
|
223
214
|
apiApp.use(require_handshakeTimingMiddleware.handshakeTimingMiddleware(env));
|
|
224
215
|
apiApp.use(require_rawTlsSignalsMiddleware.rawTlsSignalsMiddleware(env));
|
|
225
|
-
apiApp.use(require_ipInfoMiddleware.ipInfoMiddleware(env));
|
|
216
|
+
apiApp.use(require_ipInfoMiddleware.ipInfoMiddleware(env, new Set(getServerVerifyPaths())));
|
|
226
217
|
apiApp.use(clientPathsExcludingVerify, require_headerCheckMiddleware.headerCheckMiddleware(env));
|
|
227
218
|
apiApp.use(require_verify.prosopoVerifyRouter(env));
|
|
228
219
|
env.logger.info(() => ({ msg: "Enabling admin auth middleware" }));
|
|
@@ -270,6 +261,7 @@ async function startProviderApi(env, admin = false, port) {
|
|
|
270
261
|
}
|
|
271
262
|
//#endregion
|
|
272
263
|
exports.getClientApiPathsExpectingProsopoHeaders = getClientApiPathsExpectingProsopoHeaders;
|
|
264
|
+
exports.getServerVerifyPaths = getServerVerifyPaths;
|
|
273
265
|
exports.getUserFromJWT = getUserFromJWT;
|
|
274
266
|
exports.isTlsAvailable = isTlsAvailable;
|
|
275
267
|
exports.providerCorsOptions = providerCorsOptions;
|
|
@@ -1,27 +1,21 @@
|
|
|
1
1
|
let _prosopo_common = require("@prosopo/common");
|
|
2
2
|
let _prosopo_util_crypto = require("@prosopo/util-crypto");
|
|
3
3
|
//#region src/api/validateAddress.ts
|
|
4
|
-
var validateSiteKey = (siteKey
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
var validateSiteKey = (siteKey) => validateAddr(siteKey, "SITE_KEY_INVALID");
|
|
5
|
+
var validateAddr = (address, code = "INVALID_REQUEST") => {
|
|
6
|
+
let valid = false;
|
|
7
|
+
let cause;
|
|
8
8
|
try {
|
|
9
|
-
|
|
10
|
-
context: {
|
|
11
|
-
code: 400,
|
|
12
|
-
siteKey: address
|
|
13
|
-
},
|
|
14
|
-
logger
|
|
15
|
-
});
|
|
9
|
+
valid = (0, _prosopo_util_crypto.validateAddress)(address, false, 42);
|
|
16
10
|
} catch (err) {
|
|
17
|
-
|
|
18
|
-
context: {
|
|
19
|
-
code: 400,
|
|
20
|
-
siteKey: address
|
|
21
|
-
},
|
|
22
|
-
logger
|
|
23
|
-
});
|
|
11
|
+
cause = err;
|
|
24
12
|
}
|
|
13
|
+
if (!valid) throw new _prosopo_common.ProsopoError({
|
|
14
|
+
code,
|
|
15
|
+
errorSite: "PROV-35",
|
|
16
|
+
cause,
|
|
17
|
+
context: { siteKey: address }
|
|
18
|
+
});
|
|
25
19
|
};
|
|
26
20
|
//#endregion
|
|
27
21
|
exports.validateAddr = validateAddr;
|
package/dist/cjs/api/verify.cjs
CHANGED
|
@@ -36,13 +36,11 @@ var decodeTokenOr400 = (token, i18n, logger, next) => {
|
|
|
36
36
|
try {
|
|
37
37
|
return (0, _prosopo_types.decodeProcaptchaOutput)(token);
|
|
38
38
|
} catch (error) {
|
|
39
|
-
next(new _prosopo_common.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
i18n,
|
|
45
|
-
logger
|
|
39
|
+
next(new _prosopo_common.ProsopoError({
|
|
40
|
+
code: "INVALID_REQUEST",
|
|
41
|
+
errorSite: "PROV-37",
|
|
42
|
+
message: "Error parsing captcha",
|
|
43
|
+
cause: error
|
|
46
44
|
}));
|
|
47
45
|
return null;
|
|
48
46
|
}
|
|
@@ -52,13 +50,12 @@ var dappSignatureError = (signature, message, pair, req) => {
|
|
|
52
50
|
(0, _prosopo_api_express_router.verifySignature)(signature, message, pair);
|
|
53
51
|
return;
|
|
54
52
|
} catch {
|
|
55
|
-
return new _prosopo_common.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
logger: req.logger
|
|
53
|
+
return new _prosopo_common.ProsopoError({
|
|
54
|
+
code: "UNAUTHORIZED",
|
|
55
|
+
errorSite: "PROV-38",
|
|
56
|
+
message: "Invalid signature",
|
|
57
|
+
status: 400,
|
|
58
|
+
context: { siteKey: pair.address }
|
|
62
59
|
});
|
|
63
60
|
}
|
|
64
61
|
};
|
|
@@ -77,14 +74,12 @@ var interactiveVerifyHandler = ({ env, userAccessRulesStorage, path, label, hand
|
|
|
77
74
|
try {
|
|
78
75
|
parsed = _prosopo_types.ServerPuzzleCaptchaVerifyRequestBody.parse(req.body);
|
|
79
76
|
} catch (err) {
|
|
80
|
-
return next(new _prosopo_common.
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
i18n: req.i18n,
|
|
87
|
-
logger: req.logger
|
|
77
|
+
return next(new _prosopo_common.ProsopoError({
|
|
78
|
+
code: "INVALID_REQUEST",
|
|
79
|
+
errorSite: "PROV-39",
|
|
80
|
+
message: "Error parsing captcha",
|
|
81
|
+
cause: err,
|
|
82
|
+
context: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
88
83
|
}));
|
|
89
84
|
}
|
|
90
85
|
try {
|
|
@@ -115,13 +110,10 @@ var interactiveVerifyHandler = ({ env, userAccessRulesStorage, path, label, hand
|
|
|
115
110
|
(0, _prosopo_util_crypto.validateAddress)(dapp, false, 42);
|
|
116
111
|
(0, _prosopo_util_crypto.validateAddress)(user, false, 42);
|
|
117
112
|
const clientRecord = await tasks.db.getClientRecord(dapp);
|
|
118
|
-
if (!clientRecord) return next(new _prosopo_common.
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
},
|
|
123
|
-
i18n: req.i18n,
|
|
124
|
-
logger: req.logger
|
|
113
|
+
if (!clientRecord) return next(new _prosopo_common.ProsopoError({
|
|
114
|
+
code: "SITE_KEY_NOT_REGISTERED",
|
|
115
|
+
errorSite: "PROV-40",
|
|
116
|
+
context: { siteKey: dapp }
|
|
125
117
|
}));
|
|
126
118
|
if (!challenge) {
|
|
127
119
|
const unverifiedResponse = {
|
|
@@ -151,13 +143,11 @@ var interactiveVerifyHandler = ({ env, userAccessRulesStorage, path, label, hand
|
|
|
151
143
|
err,
|
|
152
144
|
data: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
153
145
|
}));
|
|
154
|
-
return next(new _prosopo_common.
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
i18n: req.i18n,
|
|
160
|
-
logger: req.logger
|
|
146
|
+
return next(new _prosopo_common.ProsopoError({
|
|
147
|
+
code: "UNEXPECTED",
|
|
148
|
+
errorSite: "PROV-41",
|
|
149
|
+
message: "BadRequest",
|
|
150
|
+
cause: err
|
|
161
151
|
}));
|
|
162
152
|
}
|
|
163
153
|
};
|
|
@@ -217,14 +207,12 @@ function prosopoVerifyRouter(env) {
|
|
|
217
207
|
try {
|
|
218
208
|
parsed = _prosopo_types.VerifySolutionBody.parse(req.body);
|
|
219
209
|
} catch (err) {
|
|
220
|
-
return next(new _prosopo_common.
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
}
|
|
226
|
-
i18n: req.i18n,
|
|
227
|
-
logger: req.logger
|
|
210
|
+
return next(new _prosopo_common.ProsopoError({
|
|
211
|
+
code: "INVALID_REQUEST",
|
|
212
|
+
errorSite: "PROV-42",
|
|
213
|
+
message: "Error parsing captcha",
|
|
214
|
+
cause: err,
|
|
215
|
+
context: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
228
216
|
}));
|
|
229
217
|
}
|
|
230
218
|
const { dappSignature, token, ip, maxVerifiedTime, email, clientSessionId } = parsed;
|
|
@@ -255,14 +243,13 @@ function prosopoVerifyRouter(env) {
|
|
|
255
243
|
(0, _prosopo_util_crypto.validateAddress)(dapp, false, 42);
|
|
256
244
|
(0, _prosopo_util_crypto.validateAddress)(user, false, 42);
|
|
257
245
|
const clientRecord = await tasks.db.getClientRecord(dapp);
|
|
258
|
-
if (!clientRecord) return next(new _prosopo_common.
|
|
246
|
+
if (!clientRecord) return next(new _prosopo_common.ProsopoError({
|
|
247
|
+
code: "SITE_KEY_NOT_REGISTERED",
|
|
248
|
+
errorSite: "PROV-43",
|
|
259
249
|
context: {
|
|
260
|
-
code: 400,
|
|
261
250
|
siteKey: dapp,
|
|
262
251
|
user
|
|
263
|
-
}
|
|
264
|
-
i18n: req.i18n,
|
|
265
|
-
logger: req.logger
|
|
252
|
+
}
|
|
266
253
|
}));
|
|
267
254
|
const keyPair = env.keyring.addFromAddress(dapp);
|
|
268
255
|
const signatureError = dappSignatureError(dappSignature, timestamp.toString(), keyPair, req);
|
|
@@ -285,14 +272,14 @@ function prosopoVerifyRouter(env) {
|
|
|
285
272
|
msg: "Error in verifyImageCaptchaSolution",
|
|
286
273
|
data: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
287
274
|
}));
|
|
288
|
-
return next(new _prosopo_common.
|
|
275
|
+
return next(new _prosopo_common.ProsopoError({
|
|
276
|
+
code: "UNEXPECTED",
|
|
277
|
+
errorSite: "PROV-44",
|
|
278
|
+
message: "BadRequest",
|
|
289
279
|
context: {
|
|
290
|
-
code: 500,
|
|
291
280
|
siteKey: req.body.dapp,
|
|
292
281
|
user: req.body.user
|
|
293
|
-
}
|
|
294
|
-
i18n: req.i18n,
|
|
295
|
-
logger: req.logger
|
|
282
|
+
}
|
|
296
283
|
}));
|
|
297
284
|
}
|
|
298
285
|
});
|
|
@@ -313,14 +300,12 @@ function prosopoVerifyRouter(env) {
|
|
|
313
300
|
try {
|
|
314
301
|
parsed = _prosopo_types.ServerPowCaptchaVerifyRequestBody.parse(req.body);
|
|
315
302
|
} catch (err) {
|
|
316
|
-
return next(new _prosopo_common.
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
}
|
|
322
|
-
i18n: req.i18n,
|
|
323
|
-
logger: req.logger
|
|
303
|
+
return next(new _prosopo_common.ProsopoError({
|
|
304
|
+
code: "INVALID_REQUEST",
|
|
305
|
+
errorSite: "PROV-45",
|
|
306
|
+
message: "Error parsing captcha",
|
|
307
|
+
cause: err,
|
|
308
|
+
context: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
324
309
|
}));
|
|
325
310
|
}
|
|
326
311
|
try {
|
|
@@ -351,13 +336,10 @@ function prosopoVerifyRouter(env) {
|
|
|
351
336
|
(0, _prosopo_util_crypto.validateAddress)(dapp, false, 42);
|
|
352
337
|
(0, _prosopo_util_crypto.validateAddress)(user, false, 42);
|
|
353
338
|
const clientRecord = await tasks.db.getClientRecord(dapp);
|
|
354
|
-
if (!clientRecord) return next(new _prosopo_common.
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
},
|
|
359
|
-
i18n: req.i18n,
|
|
360
|
-
logger: req.logger
|
|
339
|
+
if (!clientRecord) return next(new _prosopo_common.ProsopoError({
|
|
340
|
+
code: "SITE_KEY_NOT_REGISTERED",
|
|
341
|
+
errorSite: "PROV-46",
|
|
342
|
+
context: { siteKey: dapp }
|
|
361
343
|
}));
|
|
362
344
|
if (!challenge) {
|
|
363
345
|
const unverifiedResponse = {
|
|
@@ -377,7 +359,7 @@ function prosopoVerifyRouter(env) {
|
|
|
377
359
|
const maintenanceResponse = require_maintenanceModeResponses.buildMaintenanceVerificationResponse(req.i18n.t);
|
|
378
360
|
return res.json(maintenanceResponse);
|
|
379
361
|
}
|
|
380
|
-
const { verified, score, reason, sessionId } = await tasks.powCaptchaManager.serverVerifyPowCaptchaSolution(dapp, challenge, clientRecord.settings.verifiedTimeout, env, ip, userAccessRulesStorage, email, clientRecord.settings.spamEmailDomainCheckEnabled, clientRecord.settings.spamFilter, clientRecord.settings.trafficFilter, clientRecord.settings.storeMetadata, clientSessionId);
|
|
362
|
+
const { verified, score, reason, sessionId } = await tasks.powCaptchaManager.serverVerifyPowCaptchaSolution(dapp, challenge, clientRecord.settings.verifiedTimeout, env, ip, userAccessRulesStorage, email, clientRecord.settings.spamEmailDomainCheckEnabled, clientRecord.settings.spamFilter, clientRecord.settings.trafficFilter, clientRecord.settings.storeMetadata, clientSessionId, clientRecord.settings.ipValidationRules);
|
|
381
363
|
const verificationResponse = tasks.powCaptchaManager.getVerificationResponse(verified, clientRecord, req.i18n.t, score, reason, sessionId);
|
|
382
364
|
return res.json(verificationResponse);
|
|
383
365
|
} catch (err) {
|
|
@@ -386,13 +368,11 @@ function prosopoVerifyRouter(env) {
|
|
|
386
368
|
err,
|
|
387
369
|
data: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
388
370
|
}));
|
|
389
|
-
return next(new _prosopo_common.
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
i18n: req.i18n,
|
|
395
|
-
logger: req.logger
|
|
371
|
+
return next(new _prosopo_common.ProsopoError({
|
|
372
|
+
code: "UNEXPECTED",
|
|
373
|
+
errorSite: "PROV-47",
|
|
374
|
+
message: "BadRequest",
|
|
375
|
+
cause: err
|
|
396
376
|
}));
|
|
397
377
|
}
|
|
398
378
|
});
|
|
@@ -437,14 +417,12 @@ function prosopoVerifyRouter(env) {
|
|
|
437
417
|
try {
|
|
438
418
|
parsed = _prosopo_types.VerifySolutionBody.parse(req.body);
|
|
439
419
|
} catch (err) {
|
|
440
|
-
return next(new _prosopo_common.
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
}
|
|
446
|
-
i18n: req.i18n,
|
|
447
|
-
logger: req.logger
|
|
420
|
+
return next(new _prosopo_common.ProsopoError({
|
|
421
|
+
code: "INVALID_REQUEST",
|
|
422
|
+
errorSite: "PROV-48",
|
|
423
|
+
message: "Error parsing captcha",
|
|
424
|
+
cause: err,
|
|
425
|
+
context: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
448
426
|
}));
|
|
449
427
|
}
|
|
450
428
|
const { dappSignature, token, ip, clientSessionId } = parsed;
|
|
@@ -471,14 +449,13 @@ function prosopoVerifyRouter(env) {
|
|
|
471
449
|
const tasks = new require_tasks.Tasks(env, req.logger);
|
|
472
450
|
(0, _prosopo_util_crypto.validateAddress)(dapp, false, 42);
|
|
473
451
|
(0, _prosopo_util_crypto.validateAddress)(user, false, 42);
|
|
474
|
-
if (!await tasks.db.getClientRecord(dapp)) return next(new _prosopo_common.
|
|
452
|
+
if (!await tasks.db.getClientRecord(dapp)) return next(new _prosopo_common.ProsopoError({
|
|
453
|
+
code: "SITE_KEY_NOT_REGISTERED",
|
|
454
|
+
errorSite: "PROV-49",
|
|
475
455
|
context: {
|
|
476
|
-
code: 400,
|
|
477
456
|
siteKey: dapp,
|
|
478
457
|
user
|
|
479
|
-
}
|
|
480
|
-
i18n: req.i18n,
|
|
481
|
-
logger: req.logger
|
|
458
|
+
}
|
|
482
459
|
}));
|
|
483
460
|
const keyPair = env.keyring.addFromAddress(dapp);
|
|
484
461
|
const signatureError = dappSignatureError(dappSignature, timestamp.toString(), keyPair, req);
|
|
@@ -503,14 +480,14 @@ function prosopoVerifyRouter(env) {
|
|
|
503
480
|
msg: "Error in verifyAuthenticatedSession",
|
|
504
481
|
data: { body: require_requestBodySummary.summariseRequestBody(req) }
|
|
505
482
|
}));
|
|
506
|
-
return next(new _prosopo_common.
|
|
483
|
+
return next(new _prosopo_common.ProsopoError({
|
|
484
|
+
code: "UNEXPECTED",
|
|
485
|
+
errorSite: "PROV-50",
|
|
486
|
+
message: "BadRequest",
|
|
507
487
|
context: {
|
|
508
|
-
code: 500,
|
|
509
488
|
siteKey: req.body.dapp,
|
|
510
489
|
user: req.body.user
|
|
511
|
-
}
|
|
512
|
-
i18n: req.i18n,
|
|
513
|
-
logger: req.logger
|
|
490
|
+
}
|
|
514
491
|
}));
|
|
515
492
|
}
|
|
516
493
|
});
|