@mvp-rockets/namma-generator
Version:
A generator to generate mvp-rockets projects
54 lines (45 loc) • 2.42 kB
JavaScript
const Route = require('route');
const { respond, logInfo, ApiError, whenResult, token: TokenService } = require('lib');
const db = require('db/repository.js');
const composeResult = require('@mvp-rockets/namma-lib/src/lib/utilities/compose-result');
const CreateOrFindUserQuery = require('resources/users/queries/create-or-find-user-query');
const R = require('ramda');
const Result = require('folktale/result');
const config = require('config/config');
async function post(req) {
const { email, nextAuthSecretPass, mlVerificationToken } = req.body;
logInfo('Request to verify magic link verification token for user api ', { email, nextAuthSecretPass, mlVerificationToken });
let responseData = {};
const response = await composeResult(
() => Result.Ok(responseData),
async ([user]) => R.ifElse(
() => mlVerificationToken == user.mlVerificationToken && new Date() < new Date(user.mlVerificationTokenExp),
async () => {
responseData = {
email: user.email,
mlVerificationToken: user.mlVerificationToken,
mlVerificationTokenExp: user.mlVerificationTokenExp
}
const tokenRes = await TokenService.generate({ id: user.id, email });
return whenResult(
(jwtToken) => db.perform(user.update({
// Just for reusability and limitation we have, we are updating generated jwt token in verificationToken field to send back to client.
mlVerificationToken: jwtToken, mlVerificationTokenExp: null
}))
)(tokenRes);
},
() => Result.Error(new ApiError('api error', 'Token is invalid or expired', 400))
)(),
() => db.executeWithValue(new CreateOrFindUserQuery({
where: { email }
})),
async () => R.ifElse(
() => nextAuthSecretPass == config.nextAuthSecretPass,
() => Result.Ok([]),
() => Result.Error(new ApiError('api error', 'Not Authorized', 400))
)(),
)();
return respond(response, 'Successfully verified magic link verification token for user!', 'Failed to verify magic link verification token for user!');
}
Route.withOutSecurity().noAuth().post('/verify-ml-verification-token', post).bind();
module.exports.post = post;