mirror of
https://github.com/Discreetly/server.git
synced 2026-01-09 12:37:58 -05:00
fix(tests) generate and verify proof for /api/rooms/:idc
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
module.exports = {
|
||||
preset: 'ts-jest',
|
||||
testEnvironment: 'node',
|
||||
testTimeout: 50000,
|
||||
setupFiles: ["<rootDir>/tests/setEnvVars.ts"],
|
||||
"transform": {
|
||||
"^.+\\.test.ts$": ["ts-jest", { tsconfig: "./tsconfig.tests.json" }]
|
||||
|
||||
7
package-lock.json
generated
7
package-lock.json
generated
@@ -14,6 +14,7 @@
|
||||
"@ethersproject/strings": "^5.7.0",
|
||||
"@faker-js/faker": "^8.0.2",
|
||||
"@prisma/client": "^5.2.0",
|
||||
"@semaphore-protocol/identity": "^3.15.0",
|
||||
"@socket.io/admin-ui": "^0.5.1",
|
||||
"bcrypt": "^5.1.1",
|
||||
"body-parser": "^1.20.2",
|
||||
@@ -2010,9 +2011,9 @@
|
||||
"integrity": "sha512-WnNR/GQse3lX8zOHMU8zwhgX8u3qPoul8w4GjJ0WDHq+VGJimo7EGheRZ/ILeBQabnlzAerdv3vBqYBehBeoKA=="
|
||||
},
|
||||
"node_modules/@semaphore-protocol/identity": {
|
||||
"version": "3.10.1",
|
||||
"resolved": "https://registry.npmjs.org/@semaphore-protocol/identity/-/identity-3.10.1.tgz",
|
||||
"integrity": "sha512-H2GUHdox393YCcA4f389za2o5tnSIaGmtlPN8LCyI/UgCG/LJxQY5dLrSNM24j+kNRaq5LXaFzJIrM+zWvqBQQ==",
|
||||
"version": "3.15.0",
|
||||
"resolved": "https://registry.npmjs.org/@semaphore-protocol/identity/-/identity-3.15.0.tgz",
|
||||
"integrity": "sha512-X3EdkMZ/riGKAuapQaUvLeWKk5CYbvipriBXYOpnVcT6XbWMKMBPdFB5cRvW9cNyORl5nEQ6+43ejWYZYSZkYQ==",
|
||||
"dependencies": {
|
||||
"@ethersproject/bignumber": "^5.5.0",
|
||||
"@ethersproject/keccak256": "^5.7.0",
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
"@ethersproject/strings": "^5.7.0",
|
||||
"@faker-js/faker": "^8.0.2",
|
||||
"@prisma/client": "^5.2.0",
|
||||
"@semaphore-protocol/identity": "^3.15.0",
|
||||
"@socket.io/admin-ui": "^0.5.1",
|
||||
"bcrypt": "^5.1.1",
|
||||
"body-parser": "^1.20.2",
|
||||
|
||||
@@ -1,8 +1,16 @@
|
||||
import { Verifier } from 'idc-nullifier';
|
||||
import { Prover, Verifier } from 'idc-nullifier';
|
||||
import vkey from './vkey';
|
||||
import { SNARKProof } from 'idc-nullifier/dist/types/types';
|
||||
import { Identity } from '@semaphore-protocol/identity';
|
||||
|
||||
// import fs from 'fs';
|
||||
// import path from 'path';
|
||||
|
||||
// const zKeyRoot = path.resolve(__dirname, '../../../node_modules/idc-nullifier/dist/zkeyFiles/idcNullifier/circuit_final.zkey')
|
||||
// console.log(zKeyRoot)
|
||||
// const zkey = fs.readFileSync(zKeyRoot);
|
||||
// const zkeyBuffer = fs.readFileSync('../../../node_modules/idc-nullifier/dist/zkeyFiles/idcNullifier/circuit_final.zkey');
|
||||
// const wasmBuffer = fs.readFileSync('../../../node_modules/idc-nullifier/dist/zkeyFiles/idcNullifier/circuit.wasm');
|
||||
|
||||
export async function verifyIdentityProof (proof: SNARKProof): Promise<boolean> {
|
||||
const verifier = new Verifier(vkey);
|
||||
@@ -10,3 +18,12 @@ export async function verifyIdentityProof (proof: SNARKProof): Promise<boolean>
|
||||
const isValid = await verifier.verifyProof(proof);
|
||||
return isValid
|
||||
}
|
||||
|
||||
export async function generateIdentityProof (identity: Identity, nullifier: bigint): Promise<SNARKProof> {
|
||||
|
||||
const prover = new Prover();
|
||||
|
||||
const proof = await prover.generateProof({identity: identity, externalNullifier: nullifier});
|
||||
|
||||
return proof;
|
||||
}
|
||||
|
||||
@@ -117,8 +117,10 @@ export function initEndpoints(app: Express, adminAuth: RequestHandler) {
|
||||
app.get(
|
||||
['/rooms/:idc', '/api/rooms/:idc'], limiter,
|
||||
asyncHandler(async (req: Request, res: Response) => {
|
||||
const { proof } = req.body as { proof: SNARKProof };
|
||||
const isValid = await verifyIdentityProof(proof);
|
||||
// const { proof } = req.body as { proof: SNARKProof };
|
||||
// console.log('PROOF', proof);
|
||||
const isValid = await verifyIdentityProof(req.body as SNARKProof);
|
||||
console.log('VALID?', isValid)
|
||||
if (isValid) {
|
||||
try {
|
||||
res.status(200).json(await findRoomsByIdentity(req.params.idc));
|
||||
|
||||
@@ -5,12 +5,18 @@ import { serverConfig } from '../src/config/serverConfig';
|
||||
import { PrismaClient } from '@prisma/client';
|
||||
import { beforeAll, beforeEach, afterAll, describe, expect, test } from '@jest/globals';
|
||||
import { randBigint, randomRoomName } from './utils';
|
||||
import { generateIdentityProof } from '../src/crypto/idcVerifier/verifier';
|
||||
import { Identity } from '@semaphore-protocol/identity';
|
||||
|
||||
|
||||
process.env.DATABASE_URL = process.env.DATABASE_URL_TEST;
|
||||
process.env.PORT = '3001';
|
||||
|
||||
const CUSTOM_ID = '444';
|
||||
|
||||
|
||||
|
||||
|
||||
const room = {
|
||||
roomName: randomRoomName(),
|
||||
rateLimit: 1000,
|
||||
@@ -32,10 +38,11 @@ const messageTestRoom = {
|
||||
|
||||
let roomByIdTest: string;
|
||||
let testCode: string;
|
||||
const testIdentity = randBigint();
|
||||
const testIdentity = new Identity();
|
||||
const username = 'admin';
|
||||
const password = process.env.PASSWORD;
|
||||
|
||||
|
||||
beforeAll(async () => {
|
||||
const prismaTest = new PrismaClient();
|
||||
await prismaTest.messages.deleteMany();
|
||||
@@ -197,7 +204,7 @@ describe('Endpoints', () => {
|
||||
|
||||
const joinTest = {
|
||||
code: testCode,
|
||||
idc: testIdentity
|
||||
idc: testIdentity.getCommitment().toString(),
|
||||
};
|
||||
|
||||
await request(_app)
|
||||
@@ -218,8 +225,11 @@ describe('Endpoints', () => {
|
||||
});
|
||||
|
||||
test('It should return all rooms associated with the given identity', async () => {
|
||||
let proof = await generateIdentityProof(testIdentity, BigInt(Date.now()))
|
||||
console.log("PROOF", proof);
|
||||
await request(_app)
|
||||
.get(`/api/rooms/${testIdentity}`)
|
||||
.get(`/api/rooms/${testIdentity.getCommitment().toString()}`)
|
||||
.send(proof)
|
||||
.then((res) => {
|
||||
try {
|
||||
expect(res.statusCode).toEqual(200);
|
||||
|
||||
Reference in New Issue
Block a user