secajs/src/routes/apiRoutes.js

77 lines
2.3 KiB
JavaScript

const express = require('express');
const invitesService = require('../services/invitesService');
const nostrService = require('../services/nostrService');
const { TimeoutError } = require('sequelize');
const errors = require('../errors');
const router = express.Router();
router.get('/signup/nostr-challenge', async (req, res) => {
console.log("I'm heeeere")
const inviteUuid = req.cookies.inviteUuid;
let signUpChallenge;
try {
signUpChallenge = await invitesService.createSignUpChallenge(
inviteUuid
)
} catch (error) {
if (error instanceof errors.NotFoundError) {
return res.status(404).json({
success: false,
message: 'Could not find invite with that id.'
})
}
if (error instanceof errors.AlreadyUsedError) {
return res.status(410).json({
success: false,
message: 'That invite has already been used.'
})
}
return res.status(500).json({
success: false,
message: 'Unexpected error.'
})
}
let relatedNostrChallenge;
try {
relatedNostrChallenge = await nostrService.getNostrChallenge(
signUpChallenge.nostr_challenge_uuid
)
} catch (error) {
return res.status(500).json({
success: false,
message: 'Unexpected error.'
})
}
return res.status(200).json({ 'challenge': relatedNostrChallenge.challenge });
});
router.post("/signup/nostr-verify", async (req, res) => {
const signedEvent = req.body;
try {
console.log(`Starting nostr-verify with event: ${signedEvent}`);
const completedSignUpChallenge = await invitesService.verifySignUpChallenge(signedEvent);
console.log(`Finished nostr-verify`);
} catch (error) {
if (error instanceof TimeoutError) {
console.error('The challenge is outdated.');
}
if (error instanceof errors.AlreadyUsedError) {
console.error('The challenge was already used, request a new one.');
}
if (error instanceof errors.InvalidSignatureError) {
console.error('Signature is not valid.')
}
}
return res.status(200).json({ success: true });
});
module.exports = router;