Skip to content

Commit 65efb30

Browse files
committed
feat : vercel config
1 parent 51bcffc commit 65efb30

16 files changed

+341
-341
lines changed

.eslintrc.json

+15-15
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
{
2-
"root": true,
3-
"parserOptions": {
4-
"ecmaVersion": 12,
5-
"sourceType": "module"
6-
},
7-
"extends": ["eslint:recommended", "prettier"],
8-
"env": {
9-
"es2021": true,
10-
"node": true
11-
},
12-
"rules": {
13-
// "no-console": "error"
14-
}
15-
}
1+
{
2+
"root": true,
3+
"parserOptions": {
4+
"ecmaVersion": 12,
5+
"sourceType": "module"
6+
},
7+
"extends": ["eslint:recommended", "prettier"],
8+
"env": {
9+
"es2021": true,
10+
"node": true
11+
},
12+
"rules": {
13+
// "no-console": "error"
14+
}
15+
}

.prettierrc.json

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
{
2-
"trailingComma": "es5",
3-
"tabWidth": 4,
4-
"semi": false,
5-
"singleQuote": true
6-
}
1+
{
2+
"trailingComma": "es5",
3+
"tabWidth": 4,
4+
"semi": false,
5+
"singleQuote": true
6+
}

api/index.js

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
const { app } = require('../src/index')
2+
3+
module.exports - { app }

src/configs/config.js

+13-14
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1-
const dotenv = require('dotenv');
2-
3-
dotenv.config();
4-
5-
const config = {
6-
PORT: process.env.PORT || 5050,
7-
MONGOURI: process.env.MONGOURI,
8-
MODE: process.env.MODE,
9-
JWT_SECRET: process.env.JWT_SECRET,
10-
JWT_COOKIE_EXPIRES_IN: process.env.JWT_COOKIE_EXPIRES_IN,
11-
}
12-
13-
14-
module.exports = { config }
1+
const dotenv = require('dotenv')
2+
3+
dotenv.config()
4+
5+
const config = {
6+
PORT: process.env.PORT || 5050,
7+
MONGOURI: process.env.MONGOURI,
8+
MODE: process.env.MODE,
9+
JWT_SECRET: process.env.JWT_SECRET,
10+
JWT_COOKIE_EXPIRES_IN: process.env.JWT_COOKIE_EXPIRES_IN,
11+
}
12+
13+
module.exports = { config }

src/controllers/authController.js

+94-94
Original file line numberDiff line numberDiff line change
@@ -1,94 +1,94 @@
1-
const catchError = require('../utils/catchError')
2-
const UserModel = require('../models/userSchema')
3-
const jwt = require('jsonwebtoken')
4-
const bcrypt = require('bcryptjs')
5-
const validator = require('validator')
6-
const { config } = require('../configs/config')
7-
8-
const testRoute = catchError(async (req, res) => {
9-
res.json({ success: true, message: 'API IS WORKING 🥳' })
10-
})
11-
12-
const login = catchError(async (req, res) => {
13-
try {
14-
const { email, password } = req.body
15-
const user = await UserModel.findOne({ email })
16-
if (!user) {
17-
return res.status(404).json({
18-
success: false,
19-
message: 'Invalid credentials',
20-
})
21-
}
22-
const isPasswordMatch = await bcrypt.compare(password, user.password)
23-
if (!isPasswordMatch) {
24-
return res.status(401).json({
25-
success: false,
26-
message: 'Invalid credentials',
27-
})
28-
}
29-
const token = jwt.sign({ userId: user._id }, config.JWT_SECRET)
30-
const expireTime = parseInt(config.JWT_COOKIE_EXPIRES_IN)
31-
32-
const cookieOptions = {
33-
expires: new Date(Date.now() + expireTime * 24 * 60 * 60 * 1000),
34-
httpOnly: true,
35-
secure: req.secure || req.headers['x-forwarded-proto'] === 'https',
36-
sameSite: 'strict',
37-
}
38-
res.cookie('jwt', token, cookieOptions)
39-
user.password = undefined
40-
user.cpassword = undefined
41-
res.setHeader('Authorization', `Bearer ${token}`)
42-
43-
res.status(200).json({ success: true, data: user, jwt_token: token })
44-
} catch (error) {
45-
console.error('Login error:', error)
46-
res.status(500).json({
47-
success: false,
48-
message: 'Internal server error',
49-
})
50-
}
51-
})
52-
53-
const register = catchError(async (req, res) => {
54-
const { name, email, password, cpassword } = req.body
55-
56-
if (
57-
!name ||
58-
!email ||
59-
!password ||
60-
!cpassword ||
61-
!validator.isEmail(email)
62-
) {
63-
return res
64-
.status(400)
65-
.json({ message: 'Invalid input data!', success: false })
66-
}
67-
const checkUser = await UserModel.findOne({ email })
68-
if (checkUser) {
69-
return res
70-
.status(409)
71-
.json({ success: false, message: 'User already exists!' })
72-
}
73-
try {
74-
const user = new UserModel({
75-
name,
76-
email,
77-
password,
78-
cpassword,
79-
})
80-
await user.save()
81-
return res.status(201).json({
82-
message: 'Registration successful!',
83-
success: true,
84-
userId: user._id,
85-
})
86-
} catch (error) {
87-
console.error('Registration error:', error)
88-
return res
89-
.status(500)
90-
.json({ message: 'Registration failed!', success: false })
91-
}
92-
})
93-
94-
module.exports = { testRoute, login, register }
1+
const catchError = require('../utils/catchError')
2+
const UserModel = require('../models/userSchema')
3+
const jwt = require('jsonwebtoken')
4+
const bcrypt = require('bcryptjs')
5+
const validator = require('validator')
6+
const { config } = require('../configs/config')
7+
8+
const testRoute = catchError(async (req, res) => {
9+
res.json({ success: true, message: 'API IS WORKING 🥳' })
10+
})
11+
12+
const login = catchError(async (req, res) => {
13+
try {
14+
const { email, password } = req.body
15+
const user = await UserModel.findOne({ email })
16+
if (!user) {
17+
return res.status(404).json({
18+
success: false,
19+
message: 'Invalid credentials',
20+
})
21+
}
22+
const isPasswordMatch = await bcrypt.compare(password, user.password)
23+
if (!isPasswordMatch) {
24+
return res.status(401).json({
25+
success: false,
26+
message: 'Invalid credentials',
27+
})
28+
}
29+
const token = jwt.sign({ userId: user._id }, config.JWT_SECRET)
30+
const expireTime = parseInt(config.JWT_COOKIE_EXPIRES_IN)
31+
32+
const cookieOptions = {
33+
expires: new Date(Date.now() + expireTime * 24 * 60 * 60 * 1000),
34+
httpOnly: true,
35+
secure: req.secure || req.headers['x-forwarded-proto'] === 'https',
36+
sameSite: 'strict',
37+
}
38+
res.cookie('jwt', token, cookieOptions)
39+
user.password = undefined
40+
user.cpassword = undefined
41+
res.setHeader('Authorization', `Bearer ${token}`)
42+
43+
res.status(200).json({ success: true, data: user, jwt_token: token })
44+
} catch (error) {
45+
console.error('Login error:', error)
46+
res.status(500).json({
47+
success: false,
48+
message: 'Internal server error',
49+
})
50+
}
51+
})
52+
53+
const register = catchError(async (req, res) => {
54+
const { name, email, password, cpassword } = req.body
55+
56+
if (
57+
!name ||
58+
!email ||
59+
!password ||
60+
!cpassword ||
61+
!validator.isEmail(email)
62+
) {
63+
return res
64+
.status(400)
65+
.json({ message: 'Invalid input data!', success: false })
66+
}
67+
const checkUser = await UserModel.findOne({ email })
68+
if (checkUser) {
69+
return res
70+
.status(409)
71+
.json({ success: false, message: 'User already exists!' })
72+
}
73+
try {
74+
const user = new UserModel({
75+
name,
76+
email,
77+
password,
78+
cpassword,
79+
})
80+
await user.save()
81+
return res.status(201).json({
82+
message: 'Registration successful!',
83+
success: true,
84+
userId: user._id,
85+
})
86+
} catch (error) {
87+
console.error('Registration error:', error)
88+
return res
89+
.status(500)
90+
.json({ message: 'Registration failed!', success: false })
91+
}
92+
})
93+
94+
module.exports = { testRoute, login, register }

src/database/connectDB.js

+11-11
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
const mongoose = require('mongoose');
2-
const { config } = require('../configs/config')
3-
4-
mongoose
5-
.connect(config.MONGOURI)
6-
.then(() => {
7-
console.log(`[📥] MongoDB Connected!`)
8-
})
9-
.catch((e) => {
10-
console.log(`Connection Error - ${e}`)
11-
})
1+
const mongoose = require('mongoose')
2+
const { config } = require('../configs/config')
3+
4+
mongoose
5+
.connect(config.MONGOURI)
6+
.then(() => {
7+
console.log(`[📥] MongoDB Connected!`)
8+
})
9+
.catch((e) => {
10+
console.log(`Connection Error - ${e}`)
11+
})

src/index.js

+48-47
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,48 @@
1-
const express = require('express')
2-
const cookie = require('cookie-parser')
3-
const compression = require('compression')
4-
const helmet = require('helmet')
5-
const mongoSanitize = require('express-mongo-sanitize')
6-
const xss = require('xss-clean')
7-
const CheckError = require('./utils/checkError')
8-
const limiter = require('./utils/rateLimiter')
9-
const addLogger = require('./utils/addLogger')
10-
const { testRoute } = require('./controllers/authController')
11-
const { config } = require('./configs/config')
12-
const authRouter = require('./routes/authRoutes')
13-
const app = express()
14-
require('./database/connectDB')
15-
16-
app.use(express.json())
17-
app.use(compression())
18-
app.use(xss())
19-
app.use(mongoSanitize())
20-
app.use(helmet())
21-
app.use(limiter)
22-
app.use(cookie())
23-
24-
addLogger(app)
25-
26-
app.use((req, res, next) => {
27-
res.setHeader('X-XSS-Protection', '1; mode=block')
28-
next()
29-
})
30-
31-
32-
app.get('/',testRoute)
33-
app.use('/api/auth', authRouter)
34-
app.all('*', (req, res) => {
35-
const error = new CheckError(
36-
`Can't find ${req.originalUrl} on this server!`,
37-
404
38-
)
39-
res.status(error.statusCode).json({
40-
success: false,
41-
error: error.message,
42-
})
43-
})
44-
45-
app.listen(config.PORT, () => {
46-
console.log(`[⚡] Server Is Running on http://localhost:${config.PORT}`)
47-
})
1+
const express = require('express')
2+
const cookie = require('cookie-parser')
3+
const compression = require('compression')
4+
const helmet = require('helmet')
5+
const mongoSanitize = require('express-mongo-sanitize')
6+
const xss = require('xss-clean')
7+
const CheckError = require('./utils/checkError')
8+
const limiter = require('./utils/rateLimiter')
9+
const addLogger = require('./utils/addLogger')
10+
const { testRoute } = require('./controllers/authController')
11+
const { config } = require('./configs/config')
12+
const authRouter = require('./routes/authRoutes')
13+
const app = express()
14+
require('./database/connectDB')
15+
16+
app.use(express.json())
17+
app.use(compression())
18+
app.use(xss())
19+
app.use(mongoSanitize())
20+
app.use(helmet())
21+
app.use(limiter)
22+
app.use(cookie())
23+
24+
addLogger(app)
25+
26+
app.use((req, res, next) => {
27+
res.setHeader('X-XSS-Protection', '1; mode=block')
28+
next()
29+
})
30+
31+
app.get('/', testRoute)
32+
app.use('/api/auth', authRouter)
33+
app.all('*', (req, res) => {
34+
const error = new CheckError(
35+
`Can't find ${req.originalUrl} on this server!`,
36+
404
37+
)
38+
res.status(error.statusCode).json({
39+
success: false,
40+
error: error.message,
41+
})
42+
})
43+
44+
app.listen(config.PORT, () => {
45+
console.log(`[⚡] Server Is Running on http://localhost:${config.PORT}`)
46+
})
47+
48+
module.exports = { app }

0 commit comments

Comments
 (0)