I’m not using any plugins. That’s why I am confused as to why I am getting this error. My function code is quite simple. As I said before, this is a recent issue. I have changed nothing about my function code or .toml file in the last few months.
if (process.env.NODE_ENV !== ‘production’) {
require(‘dotenv’).config()
}
const session = require(‘express-session’)
const express = require(‘express’)
const serverless = require(“serverless-http”)
const flash = require(‘express-flash’)
const router = express.Router()
const app = express()
const bcrypt = require(‘bcrypt’)
const passport = require(‘passport’)
const methodOverride = require(‘method-override’)
const MongoClient = require(‘mongodb’).MongoClient
const MongoStore = require(‘connect-mongo’)
const alert = require(‘alert’)
const ejs = require(‘ejs’)
const crypto = require(‘crypto’);
const fs = require(‘fs’);
const path = require(‘path’);
const client = new MongoClient(process.env.DATABASE_URL, { useNewUrlParser: true, useUnifiedTopology: true })
app.use(express.static(‘public’))
app.set(‘view-engine’, ‘ejs’)
app.engine(‘ejs’, ejs.__express)
app.use(session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false,
cookie: {
maxAge: 60 * 60 * 1000,
sameSite: ‘strict’,
},
rolling: true,
store: MongoStore.create({
mongoUrl: process.env.DATABASE_URL,
autoRemove: ‘native’,
})
}))
app.use(passport.initialize())
app.use(passport.session())
app.use(flash())
app.use(methodOverride(‘_method’))
app.use(express.urlencoded({ extended: false }))
app.use(flash())
const mongoose = require(‘mongoose’)
const IdCounter = require(‘…/models/idcounter’)
const User = require(‘…/models/user’)
const regToken = require(‘…/models/regToken’)
mongoose.connect(process.env.DATABASE_URL, {useUnifiedTopology: true, useNewUrlParser: true,})
const db = mongoose.connection
db.on(‘error’, error => console.error(error))
db.once(‘open’, async () => {
console.log(‘Connected to Mongoose’)
const counter = await IdCounter.findOne()
if (!counter) {
const newCounter = new IdCounter({ counter: 0 })
await newCounter.save()
}
})
client.connect(err => {
if (err) {
console.error(‘Error connecting to MongoDB:’, err)
return
}
console.log(“Database connected”)
})
const collection = client.db(“mydatabase”).collection(“userdatas”)
const initializePassport = require(‘…/passport-config’)
initializePassport(passport, uid => collection.findOne({ uid: uid }), id => collection.findOne({id}))
router.get(‘/404’, (req, res) => {
res.render(‘404.ejs’)
})
router.get(‘/’, (req, res) => {
console.log(req.headers.range); // Check if range header is present
res.render(‘index.ejs’)
})
router.get(‘/external’, checkAuthenticated, (req, res) => {
res.render(‘external.ejs’)
})
router.get(‘/register’, checkNotAuthenticated, (req, res) => {
res.render(‘register.ejs’)
})
router.get(‘/login’, checkNotAuthenticated, (req, res) => {
res.render(‘login.ejs’)
})
router.get(‘/route1’, (req, res) =>{
res.render(‘jitter.ejs’)
})
router.get(‘/route2’, (req, res) =>{
res.render(‘rewasd.ejs’)
})
router.get(‘/route3’, (req, res) =>{
res.render(‘valorant.ejs’)
})
const filesDirectory = ‘./public/downloads’;
const getFileStream = (fileName) => {
const filePath = path.join(filesDirectory, fileName);
if (fs.existsSync(filePath)) {
return fs.createReadStream(filePath);
} else {
return null;
}
};
// Route for downloading a specific file
router.get(‘/download/:fileName’, checkAuthenticated, (req, res) => {
const { fileName } = req.params;
const fileStream = getFileStream(fileName);
if (!fileStream) {
return res.status(404).json({ message: ‘File not found’ });
}
// Set headers for the download
const stat = fs.statSync(path.join(filesDirectory, fileName));
const fileSize = stat.size;
res.setHeader(‘Content-Type’, ‘application/octet-stream’);
res.setHeader(‘Content-Disposition’, attachment; filename="${fileName}"
);
res.setHeader(‘Content-Length’, fileSize);
// Stream the file to the response
fileStream.pipe(res);
});
app.post(‘/login’, checkNotAuthenticated, passport.authenticate(‘local’, {
successRedirect: ‘/external’,
failureRedirect: ‘/login’,
failureFlash: true
}))
app.post(‘/register’, checkNotAuthenticated, async (req, res) => {
try {
const hashedPassword = await bcrypt.hash(req.body.password, 10)
const counter = await IdCounter.findOne()
counter.counter += 1
await counter.save()
const newUser = new User({
id: counter.counter,
name: req.body.name,
uid: req.body.uid,
password: hashedPassword,
})
const token = req.body.regToken
// Check if the provided token exists and is not used
const existingToken = await regToken.findOne({ token })
if (!existingToken) {
return res.render('register', { error: 'Incorrect regToken' })
}
if (existingToken.isUsed) {
return res.render('register', { error: 'Token has already been used' })
}
// Mark the token as used
existingToken.isUsed = true
await existingToken.save()
await newUser.save()
const newToken = await generateAndStoreToken()
res.redirect('/login')
} catch {
res.redirect(‘/register’)
}
})
app.delete(‘/logout’, (req, res) => {
req.logOut()
res.redirect(‘/login’)
})
function checkAuthenticated(req, res, next) {
console.log(“Session:”, req.session)
if (req.isAuthenticated()) {
return next()
}
console.log(“user not authenticated”)
res.redirect(‘/login’)
}
function checkNotAuthenticated(req, res, next) {
if (req.isAuthenticated() && req.session.cookie.expires > new Date()) {
return res.redirect(‘/external’)
}
next()
}
app.use(/
, router)
module.exports.handler = serverless(app)
process.on(‘SIGTERM’, () => {
mongoose.disconnect(() => {
console.log(‘Disconnected from Mongoose’)
client.close(() => {
console.log(‘Disconnected from MongoClient’)
server.close(() => {
console.log(‘Server closed’)
})
})
})
})