fix(jubmoji) changed schema for proper jubmoji spelling (#106)

feat(jubmoji) added check to make sure someone can't use a jubmoji more
than once
This commit is contained in:
Tanner
2023-11-05 13:13:12 -06:00
committed by GitHub
4 changed files with 19 additions and 6 deletions

View File

@@ -1,6 +1,6 @@
import { PrismaClient } from '@prisma/client'; import { PrismaClient } from '@prisma/client';
import { MessageI, RoomI } from 'discreetly-interfaces'; import { MessageI, RoomI } from 'discreetly-interfaces';
import { ClaimCodeI, GateWayIdentityI } from '../../types/'; import { ClaimCodeI, GateWayIdentityI, Jubmojis } from '../../types/';
const prisma = new PrismaClient(); const prisma = new PrismaClient();
/** /**
@@ -155,11 +155,15 @@ export async function findRoomWithMessageId(
} }
export async function findAllJubmojiNullifiers() { export async function findAllJubmojiNullifiers() {
const jubmojiNullifiers = await prisma.gateWayIdentity.findMany({ const jubmojiNullifiers: Jubmojis[] = await prisma.gateWayIdentity.findMany({
select: { select: {
jubmoji: true jubmoji: true
} }
}) })
const usedSigNullifiers: string[] = [];
return jubmojiNullifiers; jubmojiNullifiers.forEach((nullifier) => {
usedSigNullifiers.push(...nullifier.jubmoji as string[]);
});
return usedSigNullifiers
} }

View File

@@ -8,6 +8,7 @@ import { RoomI } from 'discreetly-interfaces';
import { jubmojiVerifier } from '../../gateways/jubmojis/jubmoji'; import { jubmojiVerifier } from '../../gateways/jubmojis/jubmoji';
import { JubmojiRequestI } from '../../gateways/jubmojis/jubmoji.types'; import { JubmojiRequestI } from '../../gateways/jubmojis/jubmoji.types';
const router = express.Router(); const router = express.Router();
const prisma = new PrismaClient(); const prisma = new PrismaClient();

View File

@@ -13,6 +13,7 @@ import { VerificationResult, VerifyArgs, ZKP, ZKPPublicSignals } from './jubmoji
import { hexToBigInt } from './utils'; import { hexToBigInt } from './utils';
import vkey from './vkey'; import vkey from './vkey';
import { cardPubKeys } from './pubkeys'; import { cardPubKeys } from './pubkeys';
import { findAllJubmojiNullifiers } from '../../data/db';
export async function jubmojiVerifier(serializedMembershipProof): Promise<VerificationResult> { export async function jubmojiVerifier(serializedMembershipProof): Promise<VerificationResult> {
const merkleRoot = await getMerkleRootFromCache(collectionPubKeys); const merkleRoot = await getMerkleRootFromCache(collectionPubKeys);
@@ -61,9 +62,12 @@ const verifyMembership = async ({
return { verified: false }; return { verified: false };
} }
// TODO! This is where we need to check and make sure someone can't join more than once // TODO! This is where we need to check and make sure someone can't join more than once
// if (usedSigNullifiers && usedSigNullifiers.includes(publicSignals.sigNullifier)) {
// return { verified: false }; const usedSigNullifiers: string[] = await findAllJubmojiNullifiers();
// }
if (usedSigNullifiers && usedSigNullifiers.includes(String(publicSignals.sigNullifier))) {
return { verified: false };
}
const verified = await verifyMembershipZKP(vkey, proof.zkp); const verified = await verifyMembershipZKP(vkey, proof.zkp);
if (!verified) { if (!verified) {
return { verified: false }; return { verified: false };

View File

@@ -67,3 +67,7 @@ export interface addRoomData {
admin?: boolean; admin?: boolean;
discordIds?: string[]; discordIds?: string[];
} }
export interface Jubmojis {
jubmoji: any[];
}