diff --git a/.env.example b/.env.example index e036f08..776b8ad 100644 --- a/.env.example +++ b/.env.example @@ -8,4 +8,5 @@ DIRECT_URL="postgresql://postgres:[YOUR_DB_PASSWORD]@db.[YOUR_SUPABASE_PROJECT_I DATABASE_URL="postgresql://postgres:[YOUR_DB_PASSWORD]@db.[YOUR_SUPABASE_PROJECT_ID].supabase.co:6543/postgres?pgbouncer=true" REDIS_PASSWORD="authpassword" REDIS_HOST=redis -REDIS_PORT=6379 \ No newline at end of file +REDIS_PORT=6379 +INFURA_API_KEY= \ No newline at end of file diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index a4be081..3cf4f5f 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -63,6 +63,7 @@ jobs: TF_VAR_redis_host: ${{ secrets.REDIS_HOST }} TF_VAR_redis_port: ${{ secrets.REDIS_PORT }} TF_VAR_redis_password: ${{ secrets.REDIS_PASSWORD }} + TF_VAR_infura_api_key: ${{ secrets.INFURA_API_KEY }} with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} @@ -103,6 +104,7 @@ jobs: TF_VAR_redis_host: ${{ secrets.REDIS_HOST }} TF_VAR_redis_port: ${{ secrets.REDIS_PORT }} TF_VAR_redis_password: ${{ secrets.REDIS_PASSWORD }} + TF_VAR_infura_api_key: ${{ secrets.INFURA_API_KEY }} with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} diff --git a/docker-compose.yml b/docker-compose.yml index a548385..38d1f4a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,6 +18,7 @@ services: REDIS_PASSWORD: ${REDIS_PASSWORD} REDIS_HOST: ${REDIS_HOST} REDIS_PORT: ${REDIS_PORT} + INFURA_API_KEY: ${INFURA_API_KEY} depends_on: redis: condition: service_healthy diff --git a/package.json b/package.json index c391aa5..36b907e 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "cookie": "^0.5.0", "cors": "^2.8.5", "dotenv": "^16.0.3", + "ethers": "^5.5.1", "express": "^4.18.2", "express-rate-limit": "^6.7.0", "express-session": "^1.17.3", diff --git a/src/handlers/verify.ts b/src/handlers/verify.ts index d074c00..c07787b 100644 --- a/src/handlers/verify.ts +++ b/src/handlers/verify.ts @@ -1,18 +1,19 @@ -import { Request, Response } from "express"; -import { ErrorTypes, SiweMessage } from "siwe"; -import { createOrUpdateUser } from "../services/prisma"; +import { Request, Response } from 'express'; +import { ErrorTypes, SiweMessage } from 'siwe'; +import { createOrUpdateUser } from '../services/prisma'; +import { ethers } from 'ethers'; + +const provider = new ethers.providers.InfuraProvider('mainnet', process.env.INFURA_API_KEY); export const verifyAndSignIn = async (req: Request, res: Response) => { try { if (!req.body.message) { - res - .status(422) - .json({ message: "Expected prepareMessage object as body." }); + res.status(422).json({ message: 'Expected prepareMessage object as body.' }); return; } const message = new SiweMessage(req.body.message); - const fields = await message.validate(req.body.signature); + const fields = await message.validate(req.body.signature, provider); if (fields.nonce !== req.session.nonce) { res.status(422).json({ message: `Invalid nonce.`, diff --git a/terraform/ecs/main.tf b/terraform/ecs/main.tf index d2ca2ad..13c438e 100644 --- a/terraform/ecs/main.tf +++ b/terraform/ecs/main.tf @@ -75,6 +75,7 @@ resource "aws_ecs_task_definition" "app_task_definition" { { name = "REDIS_PASSWORD", value = var.redis_password }, { name = "REDIS_HOST", value = var.redis_host }, { name = "REDIS_PORT", value = var.redis_port }, + { name = "INFURA_API_KEY", value = var.infura_api_key }, ], logConfiguration = { logDriver = "awslogs", diff --git a/terraform/ecs/variables.tf b/terraform/ecs/variables.tf index 5722c3a..fc82283 100644 --- a/terraform/ecs/variables.tf +++ b/terraform/ecs/variables.tf @@ -113,3 +113,9 @@ variable "redis_password" { type = string sensitive = true } + +variable "infura_api_key" { + type = string + sensitive = true +} + diff --git a/terraform/main.tf b/terraform/main.tf index fea9f30..cf919e5 100644 --- a/terraform/main.tf +++ b/terraform/main.tf @@ -94,6 +94,7 @@ module "ecs" { redis_host = var.redis_host redis_port = var.redis_port redis_password = var.redis_port + infura_api_key = var.infura_api_key depends_on = [module.redis_global] } diff --git a/terraform/variables.tf b/terraform/variables.tf index 053c4be..c73de90 100644 --- a/terraform/variables.tf +++ b/terraform/variables.tf @@ -65,3 +65,8 @@ variable "redis_password" { type = string sensitive = true } + +variable "infura_api_key" { + type = string + sensitive = true +}