Skip to content

Commit

Permalink
Implement upsert nonce to pg
Browse files Browse the repository at this point in the history
  • Loading branch information
ccali11 committed Mar 23, 2023
1 parent ecd01b8 commit 6bb1b84
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 52 deletions.
29 changes: 28 additions & 1 deletion services/users/src/providers/db.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,24 @@ export default function useDB() {
return formatResult(user) as User
}

/**
* Add or update nonce for an address.
* @param address - The address
* @returns A promise that resolves when the nonce is added or updated
*/
async function upsertNonce(address: string): Promise<string | Error> {
try {
const nonce = generateNonce()
const text = 'INSERT INTO nonces (address, nonce) VALUES ($1, $2) ON CONFLICT (address) DO UPDATE SET nonce = $2;'
const params = [address, nonce]
await postgres.query(text, params)
return nonce as string
} catch (error) {
console.error('There was an error adding or updating the nonce in upsertNonce.', error)
return error as Error
}
}

/**
* Format data from a database result (snake_case to PascalCase).
* @param rows - The result date
Expand All @@ -80,5 +98,14 @@ export default function useDB() {
}
}

return { addAccount, addUser, getUser }
return { addAccount, addUser, getUser, upsertNonce }
}

/**
* Generate and return a nonce.
* @returns string
*/
function generateNonce() {
return (Math.floor(Math.random()
* (Number.MAX_SAFE_INTEGER - 1)) + 1).toString()
}
38 changes: 0 additions & 38 deletions services/users/src/providers/users.ts

This file was deleted.

30 changes: 17 additions & 13 deletions services/users/src/routes/auth.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,31 @@
import express from 'express'
import useUsers from '../providers/users'
import useDB from '../providers/db'
import Session from 'supertokens-node/recipe/session'
import useEthers from '../providers/ethers'
import { Account } from '@casimir/types'
import { LoginCredentials } from '@casimir/types'

const { verifyMessage } = useEthers()
const { getMessage, updateMessage } = useUsers()
const { getUser } = useDB()
const { getUser, upsertNonce } = useDB()
const router = express.Router()


router.get('/message/:provider/:address', (req: express.Request, res: express.Response) => {
const { provider, address } = req.params
updateMessage(provider, address)
const message = getMessage(address)
if (message) {
res.setHeader('Content-Type', 'application/json')
res.status(200)
res.json({ message })
} else {
res.status(404)
router.get('/message/:provider/:address', async (req: express.Request, res: express.Response) => {
const { address } = req.params
console.log('address in auth/message/:provider/:address', address)
try {
const nonce = await upsertNonce(address)
if (nonce) {
res.setHeader('Content-Type', 'application/json')
res.status(200)
res.json({ message: nonce })
} else {
res.status(404)
res.send()
}
} catch (error) {
console.log('error in /message/:provider/:address :>> ', error)
res.status(500)
res.send()
}
})
Expand Down

0 comments on commit 6bb1b84

Please sign in to comment.