From ee301eb3d5cf3410d4746cc21cec0fd879861f05 Mon Sep 17 00:00:00 2001 From: Chris Taylor Date: Fri, 26 Apr 2024 11:19:11 +0100 Subject: [PATCH] make blockNumber and commitmentId optional params on ImageVerificationResponse --- demos/provider-mock/src/api.ts | 14 ++++++++++---- packages/procaptcha/src/modules/Manager.ts | 2 +- packages/provider/src/api/captcha.ts | 15 ++++++--------- packages/server/src/server.ts | 6 +++++- packages/types/src/provider/api.ts | 4 ++-- 5 files changed, 24 insertions(+), 17 deletions(-) diff --git a/demos/provider-mock/src/api.ts b/demos/provider-mock/src/api.ts index 56043069b1..44136a62b5 100644 --- a/demos/provider-mock/src/api.ts +++ b/demos/provider-mock/src/api.ts @@ -11,7 +11,13 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -import { ApiParams, ApiPaths, ImageVerificationResponse, VerifySolutionBody } from '@prosopo/types' +import { + ApiParams, + ApiPaths, + ImageVerificationResponse, + VerificationResponse, + VerifySolutionBody, +} from '@prosopo/types' import { ProsopoApiError } from '@prosopo/common' import { VerifySolutionBodyType } from '@prosopo/types' import express, { Router } from 'express' @@ -63,11 +69,11 @@ export function prosopoRouter(): Router { } return res.json(response) } - - return res.json({ + const verificationResponse: VerificationResponse = { [ApiParams.status]: req.t(statusMessage), [ApiParams.verified]: false, - }) + } + return res.json(verificationResponse) } catch (err) { return next(new ProsopoApiError('API.UNKNOWN', { context: { error: err, errorCode: 500 } })) } diff --git a/packages/procaptcha/src/modules/Manager.ts b/packages/procaptcha/src/modules/Manager.ts index 8160c92125..f127a14be0 100644 --- a/packages/procaptcha/src/modules/Manager.ts +++ b/packages/procaptcha/src/modules/Manager.ts @@ -194,7 +194,7 @@ export function Manager( undefined, configOptional.challengeValidLength ) - if (verifyDappUserResponse.verified) { + if (verifyDappUserResponse.verified && verifyDappUserResponse.commitmentId) { updateState({ isHuman: true, loading: false }) const output: ProcaptchaOutput = { [ApiParams.providerUrl]: procaptchaStorage.providerUrl, diff --git a/packages/provider/src/api/captcha.ts b/packages/provider/src/api/captcha.ts index e01206c180..84ce8003b2 100644 --- a/packages/provider/src/api/captcha.ts +++ b/packages/provider/src/api/captcha.ts @@ -142,27 +142,24 @@ export function prosopoRouter(env: ProviderEnvironment): Router { return next(new ProsopoApiError('CAPTCHA.PARSE_ERROR', { context: { errorCode: 400, error: err } })) } try { + const failedVerificationResponse: VerificationResponse = { + [ApiParams.status]: req.t('API.USER_NOT_VERIFIED'), + [ApiParams.verified]: false, + } const solution = await (parsed.commitmentId ? tasks.getDappUserCommitmentById(parsed.commitmentId) : tasks.getDappUserCommitmentByAccount(parsed.user)) if (!solution) { - return res.json({ - [ApiParams.status]: req.t('API.USER_NOT_VERIFIED'), - [ApiParams.verified]: false, - }) + return res.json(failedVerificationResponse) } if (parsed.maxVerifiedTime) { const currentBlockNumber = await getCurrentBlockNumber(tasks.contract.api) const blockTimeMs = getBlockTimeMs(tasks.contract.api) const timeSinceCompletion = (currentBlockNumber - solution.completedAt) * blockTimeMs - const verificationResponse: VerificationResponse = { - [ApiParams.status]: req.t('API.USER_NOT_VERIFIED'), - [ApiParams.verified]: false, - } if (timeSinceCompletion > parsed.maxVerifiedTime) { - return res.json(verificationResponse) + return res.json(failedVerificationResponse) } } diff --git a/packages/server/src/server.ts b/packages/server/src/server.ts index 13a653ce59..b37efbbded 100644 --- a/packages/server/src/server.ts +++ b/packages/server/src/server.ts @@ -199,6 +199,7 @@ export class ProsopoServer { commitmentId?: string, maxVerifiedTime = DEFAULT_MAX_VERIFIED_TIME_CACHED ) { + let verifyRecency = false this.logger.info('Verifying with provider.') const providerApi = await this.getProviderApi(providerUrl) if (challenge) { @@ -207,7 +208,10 @@ export class ProsopoServer { return result.verified } const result = await providerApi.verifyDappUser(dapp, user, blockNumber, commitmentId, maxVerifiedTime) - const verifyRecency = await this.verifyRecency(result.blockNumber, maxVerifiedTime) + + if (result.blockNumber) { + verifyRecency = await this.verifyRecency(result.blockNumber, maxVerifiedTime) + } return result.verified && verifyRecency } diff --git a/packages/types/src/provider/api.ts b/packages/types/src/provider/api.ts index 6e91f433d7..6d0c191e70 100644 --- a/packages/types/src/provider/api.ts +++ b/packages/types/src/provider/api.ts @@ -128,9 +128,9 @@ export interface VerificationResponse { } export interface ImageVerificationResponse extends VerificationResponse { - [ApiParams.commitmentId]: Hash + [ApiParams.commitmentId]?: Hash // The block at which the captcha was requested - [ApiParams.blockNumber]: number + [ApiParams.blockNumber]?: number } export interface GetPowCaptchaResponse {