| @@ -8,6 +8,7 @@ export default interface IUser { | |||||
| email: string, | email: string, | ||||
| password: string, | password: string, | ||||
| isVerified: boolean, | isVerified: boolean, | ||||
| otp: number, | |||||
| userType: 'ADMIN' | 'MODERATOR' | 'APPLICANT', | userType: 'ADMIN' | 'MODERATOR' | 'APPLICANT', | ||||
| skillSet?: Array<skillInformation>, | skillSet?: Array<skillInformation>, | ||||
| progress?: Array<{ | progress?: Array<{ | ||||
| @@ -64,6 +64,32 @@ | |||||
| } | } | ||||
| } | } | ||||
| }, | }, | ||||
| "@sendgrid/client": { | |||||
| "version": "7.4.7", | |||||
| "resolved": "https://registry.npmjs.org/@sendgrid/client/-/client-7.4.7.tgz", | |||||
| "integrity": "sha512-Zh3H/nCyI2+MaAZW9KJpyk6JXfxE27W+mR636Hju/GX95SR7+uymeuLLJ3GtLvtapLTl8l6/0YoHjzlg65xtqg==", | |||||
| "requires": { | |||||
| "@sendgrid/helpers": "^7.4.6", | |||||
| "axios": "^0.21.4" | |||||
| } | |||||
| }, | |||||
| "@sendgrid/helpers": { | |||||
| "version": "7.4.6", | |||||
| "resolved": "https://registry.npmjs.org/@sendgrid/helpers/-/helpers-7.4.6.tgz", | |||||
| "integrity": "sha512-Vvt4d60fkU/DPSwMyxXtlnbw4/B+5Y9eeYnygTxhmw8TNzUhdPphr7SaRSperWJ8P1VeQZzobvQNyMj5E7A3UA==", | |||||
| "requires": { | |||||
| "deepmerge": "^4.2.2" | |||||
| } | |||||
| }, | |||||
| "@sendgrid/mail": { | |||||
| "version": "7.4.7", | |||||
| "resolved": "https://registry.npmjs.org/@sendgrid/mail/-/mail-7.4.7.tgz", | |||||
| "integrity": "sha512-lGfXJBEx7PMQje/NsVsebF6MdP2ptHWjmuI4YANjReAQlIGq3Cqm4JLP5Fb4n5Bbr1LXLCM7R0gJo+/PT6ENKw==", | |||||
| "requires": { | |||||
| "@sendgrid/client": "^7.4.7", | |||||
| "@sendgrid/helpers": "^7.4.6" | |||||
| } | |||||
| }, | |||||
| "@sindresorhus/is": { | "@sindresorhus/is": { | ||||
| "version": "0.14.0", | "version": "0.14.0", | ||||
| "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", | ||||
| @@ -682,6 +708,11 @@ | |||||
| "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", | ||||
| "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" | ||||
| }, | }, | ||||
| "deepmerge": { | |||||
| "version": "4.2.2", | |||||
| "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", | |||||
| "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" | |||||
| }, | |||||
| "defer-to-connect": { | "defer-to-connect": { | ||||
| "version": "1.1.3", | "version": "1.1.3", | ||||
| "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", | ||||
| @@ -14,6 +14,7 @@ | |||||
| "author": "", | "author": "", | ||||
| "license": "ISC", | "license": "ISC", | ||||
| "dependencies": { | "dependencies": { | ||||
| "@sendgrid/mail": "^7.4.7", | |||||
| "axios": "^0.21.4", | "axios": "^0.21.4", | ||||
| "bcrypt": "^5.0.1", | "bcrypt": "^5.0.1", | ||||
| "body-parser": "^1.19.0", | "body-parser": "^1.19.0", | ||||
| @@ -1,7 +1,9 @@ | |||||
| import express from 'express'; | |||||
| import express, { response } from 'express'; | |||||
| import { DB_NAME, getDatabaseClient } from '../db-utils'; | import { DB_NAME, getDatabaseClient } from '../db-utils'; | ||||
| import bcrypt from 'bcrypt'; | import bcrypt from 'bcrypt'; | ||||
| import { generateJWT, SALT_ROUNDS } from './auth'; | import { generateJWT, SALT_ROUNDS } from './auth'; | ||||
| import sendGridMail from '@sendgrid/mail'; | |||||
| import { MailDataRequired } from '@sendgrid/helpers/classes/mail'; | |||||
| const authRoutes = express.Router(); | const authRoutes = express.Router(); | ||||
| @@ -11,11 +13,11 @@ authRoutes.get('/users/', async (request, response) => { | |||||
| }); | }); | ||||
| authRoutes.post('/register-applicant/', async (request, response) => { | authRoutes.post('/register-applicant/', async (request, response) => { | ||||
| const name = request.body.name; | |||||
| const email = request.body.email; | |||||
| const password = request.body.password; | |||||
| const userType = 'APPLICANT'; | |||||
| const isVerified = false; | |||||
| const name: string = request.body.name; | |||||
| const email: string = request.body.email; | |||||
| const password: string = request.body.password; | |||||
| const userType: string = 'APPLICANT'; | |||||
| const isVerified: boolean = false; | |||||
| const userCollection = getDatabaseClient().db(DB_NAME).collection('users'); | const userCollection = getDatabaseClient().db(DB_NAME).collection('users'); | ||||
| @@ -66,10 +68,58 @@ authRoutes.post('/register-applicant/', async (request, response) => { | |||||
| }); | }); | ||||
| authRoutes.post('/verify-user/', async (request, response) => { | |||||
| const email: string = request.body.email; | |||||
| if (!email) { | |||||
| response.status(400); | |||||
| response.send("Missing Email ID"); | |||||
| } | |||||
| const userCollection = getDatabaseClient().db(DB_NAME).collection('users'); | |||||
| let users = await userCollection.find({ | |||||
| email, | |||||
| }).toArray(); | |||||
| const matchedUser = users[0]; | |||||
| if (!matchedUser) { | |||||
| response.status(400); | |||||
| response.send('No user under this EmailID'); | |||||
| return; | |||||
| } else if (matchedUser.isVerified) { | |||||
| response.status(400); | |||||
| response.send('The user is already verified'); | |||||
| return; | |||||
| } | |||||
| const otp = 1000 + Math.ceil(Math.random() * 8999); | |||||
| const otpMail: MailDataRequired = { | |||||
| to: email, | |||||
| from: 'kj@webtrigon.in', | |||||
| subject: 'Webtrigon Job-portal Sign Up Verification', | |||||
| text: `Please use the OTP ${otp} to verify your Email ID`, | |||||
| }; | |||||
| sendGridMail.send(otpMail).then(data=> { | |||||
| console.log(data); | |||||
| response.send('Verification OTP sent'); | |||||
| }, (err) => { | |||||
| console.log(err); | |||||
| response.sendStatus(500); | |||||
| response.send("SMTP system failure"); | |||||
| }); | |||||
| return; | |||||
| }); | |||||
| authRoutes.post('/api-auth/', async (request, response) => { | authRoutes.post('/api-auth/', async (request, response) => { | ||||
| const email = request.body.email; | |||||
| const password = request.body.password; | |||||
| const userType = request.body.userType; | |||||
| const email: string = request.body.email; | |||||
| const password: string = request.body.password; | |||||
| const userType: string = request.body.userType; | |||||
| if (!email || !password || !userType) { | if (!email || !password || !userType) { | ||||
| response.status(400); | response.status(400); | ||||
| @@ -117,12 +167,6 @@ authRoutes.post('/api-auth/', async (request, response) => { | |||||
| } | } | ||||
| return; | return; | ||||
| // let passwordComparisonResult: boolean; | |||||
| // try { | |||||
| // passwordComparisonResult = await bcrypt.compare(password, user.password); | |||||
| // } | |||||
| }); | }); | ||||
| export default authRoutes; | export default authRoutes; | ||||
| @@ -3,6 +3,9 @@ import cors from 'cors'; | |||||
| import passport from 'passport'; | import passport from 'passport'; | ||||
| import authRoutes from './authentication/routes'; | import authRoutes from './authentication/routes'; | ||||
| import { connectToDatabaseServer } from './db-utils'; | import { connectToDatabaseServer } from './db-utils'; | ||||
| import sendGridMail from '@sendgrid/mail'; | |||||
| const SENDGRID_API_KEY = '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'; | |||||
| const app = express(); | const app = express(); | ||||
| app.use(cors()); | app.use(cors()); | ||||
| @@ -17,6 +20,6 @@ app.get('/', (request, response) => { | |||||
| const server = app.listen(app.get('port'), () => { | const server = app.listen(app.get('port'), () => { | ||||
| connectToDatabaseServer(); | connectToDatabaseServer(); | ||||
| // sendGridMail.setApiKey(SENDGRID_API_KEY); | |||||
| sendGridMail.setApiKey(SENDGRID_API_KEY); | |||||
| console.log('App is running on http://localhost:%d', app.get('port')); | console.log('App is running on http://localhost:%d', app.get('port')); | ||||
| }); | }); | ||||