You are on page 1of 7

index.

js
const express = require('express')
const cors = require('cors')
require('dotenv').config()

require('./config/db')
const router =

require('./routes/route') const app =

express()

app.use(cors())

router(app)

const PORT = 8080


app.listen(PORT, () => {
console.log(`Server listening on port: ${PORT}`)
})

package.json
{
"name": "project",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"dev": "nodemon index.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"cors": "^2.8.5",
"dotenv": "^10.0.0",
"express": "^4.17.1",
"mongoose": "^5.12.14"
},
"devDependencies": {
"nodemon": "^2.0.7"
}
}
db.js
const mongoose = require('mongoose')

mongoose.connect(process.env.MONGOURI, { useNewUrlParser: true, useUnifiedTopology: true


} )
.catch((error) => {
console.log(`Failed to connect to db: ${error}`)
})

const db = mongoose.connection

db.on('open', () => {
console.log("Connected to db")
})

db.on('error', (error) => {


console.log(`DB connection failed: ${error}`)
})

accountcontroller.js
const express = require('express')

const { createPassword, checkPassword } = require('../utils/crypt')


const Account = require('../models/account')

const router = express.Router()


router.use(express.json({ extended: true }))

router
.route('/signup')
.post(async (req, res) => {
try {
const { accountType, username, email, password } = req.body

let doc = await Account.findOne({ $or: [{ username }, { email }] }) if (doc


!= null) {
doc.username == username ? res.status(400).send('username exist') : res.st
atus(400).send('email exist')
return
}

const setPassword = createPassword(password)


const salt = setPassword.salt
const hash = setPassword.hash

const newAccount = Account({


accountType,
username,
email,
salt,
hash
})

await newAccount.save()
res.status(201).send('account created')

} catch (error) {
console.log(error)
res.status(500).send(error)
}
})
router
.route('/login')
.post(async (req, res) => {
try {
const { username, password } = req.body

const account = await Account.findOne({ username })

if (account == null) {
res.status(400).send('No account with the given username') return
}

const validPassword = checkPassword(password, account.salt, account.hash)


validPassword ? res.status(200).send({
"message": "Login success",
"username": account.username,
"email": account.email,
"accountType": account.accountType
}) : res.status(401).send('Incorrect password')
} catch (error) {
console.log(error)
res.status(500).send(error)
}
})

module.exports = router
clientcontroller.js
const express = require('express')

const Startup = require('../models/startup')

const router = express.Router()


router.use(express.json({ extended: true }))

router
.route('/startups')
.post(async (req, res) => {
try {
const { work } = req.body

const startups = await Startup.find({


recentWorks: {
$in: [work]
}
}).sort({ rating: 'desc' })

res.status(200).send(startups)

} catch (error) {
console.log(error)
res.status(500).send(error)
}
})

module.exports = router

companycontroller.js
const express = require('express')

const startup = require('../models/startup')

const router = express.Router()


router.use(express.json({ extended: true }))

router
.route('/:cname')
.get(async (req, res) => {
try {
const name = req.params.cname
let company = await startup.findOne({ name }) if
(company != null) {
res.status(200).send(company) return
}
res.status(400).send("Bad Request")
} catch (error) {
res.status(500).send(error)
}
})

router
.route('/register')
.post(async (req, res) => {
try {
const { name, rating, recentWorks } = req.body
const company = startup({
name,
rating,
recentWorks
})

await company.save()
res.status(201).send(company)
} catch (error) {
res.status(500).send(error)
}
})

router
.route('/:cname/position')
.get(async (req, res) => {
try {
let name = req.params.cname
let company = await startup.findOne({ name })
let companies = await startup.find({ name: { $ne: name } }).limit(2) if
(companies != [] && company != null) {
companies[2] = companies[1]
companies[1] = company
res.status(200).send(companies)
return
}
res.status(400).send("Bad Request")
} catch (error) {
res.status(500).send(error)
}
}) module.exports = router
account.js
const mongoose = require('mongoose')

const accountSchema = mongoose.Schema({


accountType: String,
username: String,
email: String,
salt: String,
hash: String
})

const users = mongoose.model('users',


accountSchema) module.exports = users

startup.js
const mongoose = require('mongoose')

const startupSchema = mongoose.Schema({


name: String,
rating: Number,
recentWorks: [String],
})

const users = mongoose.model('startups',


startupSchema) module.exports = users

route.js
const accountController =
require('../controllers/accountController') const companyController
= require('../controllers/companyController') const clientController
= require('../controllers/clientController')

const router = (app) => {


app.use('/api/account', accountController)
app.use('/api/company', companyController)
app.use('/api/client', clientController)
}

module.exports = router

const crypto = require('crypto')

const createPassword = (password) => {

const salt = crypto.randomBytes(16).toString('hex')

const key = crypto.pbkdf2Sync(password, salt, 1000, 64, 'sha512')


const hash = key.toString('hex')
const cryptDetails = {
salt: salt,
hash: hash
}

return cryptDetails
}

const checkPassword = (password, salt, hash) => {

const key = crypto.pbkdf2Sync(password, salt, 1000, 64, 'sha512').toString('hex')


if (key == hash) {
return true
} else {
return false
}
}

module.exports = { createPassword, checkPassword }

You might also like