Skip to content

Commit

Permalink
Update id on SuperTokens session
Browse files Browse the repository at this point in the history
  • Loading branch information
ccali11 committed Jul 7, 2023
1 parent 9c2954c commit 7026478
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 27 deletions.
9 changes: 5 additions & 4 deletions apps/web/src/composables/users.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,12 @@ export default function useUsers () {
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ account })
body: JSON.stringify({ account, id: user?.value?.id })
}
const response = await fetch(`${usersBaseURL}/user/add-sub-account`, requestOptions)
const { error, message, data: user } = await response.json()
setUser(user)
return { error, message, data: user }
const { error, message, data: updatedUser } = await response.json()
setUser(updatedUser)
return { error, message, data: updatedUser }
} catch (error: any) {
throw new Error(error.message || 'Error adding account')
}
Expand Down Expand Up @@ -279,6 +279,7 @@ export default function useUsers () {
body: JSON.stringify({
address,
currency,
id: user?.value?.id,
ownerAddress,
walletProvider,
})
Expand Down
1 change: 1 addition & 0 deletions common/types/src/interfaces/UserAddedSuccess.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export interface UserAddedSuccess {
id: number
address: string
created_at: string
updated_at: string
Expand Down
4 changes: 2 additions & 2 deletions services/users/src/providers/db.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ export default function useDB() {
* @param address - The user's address
* @returns The user if found, otherwise undefined
*/
async function getUser(address: string) {
async function getUserByAddress(address: string) {
try {
const text = 'SELECT u.*, json_agg(a.*) AS accounts FROM users u JOIN user_accounts ua ON u.id = ua.user_id JOIN accounts a ON ua.account_id = a.id WHERE u.address = $1 GROUP BY u.id'
const params = [address]
Expand Down Expand Up @@ -264,7 +264,7 @@ export default function useDB() {
formatResult,
getAccounts,
getNonce,
getUser,
getUserByAddress,
getUserById,
removeAccount,
updateUserAddress,
Expand Down
16 changes: 10 additions & 6 deletions services/users/src/routes/auth.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import express from 'express'
import useDB from '../providers/db'
import Session from 'supertokens-node/recipe/session'
import { verifySession } from 'supertokens-node/recipe/session/framework/express'
import { SessionRequest } from 'supertokens-node/framework/express'
import useEthers from '../providers/ethers'
import { Account, User } from '@casimir/types'

const { verifyMessageSignature } = useEthers()
const { addUser, getNonce, getUser, upsertNonce } = useDB()
const { addUser, getNonce, getUserByAddress, upsertNonce } = useDB()
const router = express.Router()

router.post('/nonce', async (req: express.Request, res: express.Response) => {
Expand All @@ -30,7 +32,7 @@ router.post('/nonce', async (req: express.Request, res: express.Response) => {
}
})

router.post('/login', async (req: express.Request, res: express.Response) => {
router.post('/login', verifySession(), async (req: SessionRequest, res: express.Response) => {
try {
const { body } = req
const loginCredentials = body
Expand All @@ -47,7 +49,7 @@ router.post('/login', async (req: express.Request, res: express.Response) => {
message: `Invalid ${verificationError}.`,
})
} else {
const user = await getUser(address)
const user = await getUserByAddress(address)
if (!user) { // signup
console.log('SIGNING UP!')
const now = new Date().toISOString()
Expand All @@ -64,7 +66,6 @@ router.post('/login', async (req: express.Request, res: express.Response) => {
} as Account

const addUserResult = await addUser(newUser, account)

if (addUserResult?.address !== address) {
res.setHeader('Content-Type', 'application/json')
res.status(500)
Expand All @@ -73,7 +74,8 @@ router.post('/login', async (req: express.Request, res: express.Response) => {
message: 'Problem creating new user',
})
} else {
await Session.createNewSession(req, res, address)
const id = addUserResult?.id.toString() as string
await Session.createNewSession(req, res, id)
res.setHeader('Content-Type', 'application/json')
res.status(200)
res.json({
Expand All @@ -85,7 +87,8 @@ router.post('/login', async (req: express.Request, res: express.Response) => {
console.log('LOGGING IN!')
const response = verifyMessageSignature({ address, currency, message, signedMessage, provider })
upsertNonce(address)
response ? await Session.createNewSession(req, res, address) : null
const userId = req.session?.getUserId() as string
response ? await Session.createNewSession(req, res, userId) : null
res.setHeader('Content-Type', 'application/json')
res.status(200)
res.json({
Expand All @@ -95,6 +98,7 @@ router.post('/login', async (req: express.Request, res: express.Response) => {
}
}
} catch (error: any) {
console.log('error in /login :>> ', error)
res.status(500)
res.json({
error: true,
Expand Down
34 changes: 19 additions & 15 deletions services/users/src/routes/user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ import { SessionRequest } from 'supertokens-node/framework/express'
import useDB from '../providers/db'

const router = express.Router()
const { addAccount, getAccounts, getUser, getUserById, updateUserAddress, updateUserAgreedToTermsOfService, removeAccount } = useDB()
const { addAccount, getAccounts, getUserByAddress, getUserById, updateUserAddress, updateUserAgreedToTermsOfService, removeAccount } = useDB()

router.get('/', verifySession(), async (req: SessionRequest, res: express.Response) => {
try {
const address = req.session?.getUserId().toLowerCase() as string
const user = await getUser(address)
const id = req.session?.getUserId() as string
const user = await getUserById(id)
const message = user ? 'User found' : 'User not found'
const error = user ? false : true
res.setHeader('Content-Type', 'application/json')
Expand All @@ -32,11 +32,13 @@ router.get('/', verifySession(), async (req: SessionRequest, res: express.Respon
router.post('/add-sub-account', verifySession(), async (req: SessionRequest, res: express.Response) => {
try {
console.log('ADDING ACCOUNT!')
const { account } = req.body
const { account, id } = req.body
const { ownerAddress } = account
const userSessionsAddress = req.session?.getUserId().toLowerCase()
const validatedAddress = validateAddress(userSessionsAddress, ownerAddress)
if (!validatedAddress) {
const userId = id.toString()
const userSessionId = req.session?.getUserId()
const validatedUserId = validateUserId(userSessionId, userId)
console.log('validatedUserId :>> ', validatedUserId)
if (!validatedUserId) {
res.setHeader('Content-Type', 'application/json')
res.status(200)
res.json({
Expand All @@ -46,7 +48,7 @@ router.post('/add-sub-account', verifySession(), async (req: SessionRequest, res
})
}
await addAccount(account)
const user = await getUser(ownerAddress)
const user = await getUserByAddress(ownerAddress)
res.setHeader('Content-Type', 'application/json')
res.status(200)
res.json({
Expand All @@ -68,7 +70,7 @@ router.get('/check-if-primary-address-exists/:provider/:address', async (req: ex
try {
const { params } = req
const { address, provider } = params
const user = await getUser(address)
const user = await getUserByAddress(address)
const userAddress = user?.address
const userProvider = user?.walletProvider
const sameAddress = userAddress === address
Expand Down Expand Up @@ -116,6 +118,7 @@ router.get('/check-secondary-address/:address', async (req: express.Request, res
data: users
})
} catch (error: any) {
console.log('error in /check-secondary-address :>> ', error)
res.setHeader('Content-Type', 'application/json')
res.status(500)
res.json({
Expand All @@ -128,9 +131,10 @@ router.get('/check-secondary-address/:address', async (req: express.Request, res
router.post('/remove-sub-account', verifySession(), async (req: SessionRequest, res: express.Response) => {
try {
console.log('REMOVING ACCOUNT!')
const { address, currency, ownerAddress, walletProvider } = req.body
const userSessionsAddress = req.session?.getUserId()
const validatedAddress = validateAddress(userSessionsAddress, ownerAddress)
const { address, currency, id, ownerAddress, walletProvider } = req.body
const userId = id.toString()
const userSessionId = req.session?.getUserId()
const validatedAddress = validateUserId(userSessionId, userId)
if (!validatedAddress) {
res.setHeader('Content-Type', 'application/json')
res.status(200)
Expand All @@ -142,7 +146,7 @@ router.post('/remove-sub-account', verifySession(), async (req: SessionRequest,
return
}
const accountRemoved = await removeAccount({ address, currency, ownerAddress, walletProvider })
const user = await getUser(ownerAddress)
const user = await getUserByAddress(ownerAddress)

if (accountRemoved) {
res.setHeader('Content-Type', 'application/json')
Expand Down Expand Up @@ -224,8 +228,8 @@ function maskAddress(address: string) {
return address.slice(0, 6) + '...' + address.slice(-4)
}

function validateAddress(userSessionsAddress:string | undefined, address:string) {
return userSessionsAddress === address
function validateUserId(userSessionId:string | undefined, userId:string) {
return userSessionId === userId
}

export default router

0 comments on commit 7026478

Please sign in to comment.