-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
102 lines (81 loc) · 2.74 KB
/
Copy pathserver.js
File metadata and controls
102 lines (81 loc) · 2.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// This is the main server file for the frontend of the Flask app.
const express = require('express');
const { db, deleteOldRequests } = require('./db');
const path = require('path');
const app = express();
const port = process.env.PORT || 3000;
const nodemailer = require('nodemailer');
require('dotenv').config();
// Setup view engine and middleware
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.use(express.static('public'));
// ✅ Home page
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'public', 'index.html'));
});
// ✅ Removed login route — now handled by Flask
// ✅ Show request creation form
app.get('/create', (req, res) => {
res.render('create');
});
// ✅ Handle form submissions
app.post('/request', (req, res) => {
const { name, item, description } = req.body;
db.prepare('INSERT INTO requests (name, item, description) VALUES (?, ?, ?)')
.run(name, item, description);
res.redirect('/requests');
});
// ✅ Show all submitted requests
app.get('/requests', (req, res) => {
const requests = db.prepare('SELECT * FROM requests').all();
res.render('requests', { requests });
});
// ✅ Start the server
app.listen(port, () => {
console.log(`Frontend running on http://localhost:${port}`);
});
//WE NEED TO CALL THIS FUNCTION PERIODICALLY TO DELETE OLD REQUESTS (NVM)
deleteOldRequests(); //Runs once at startup
setInterval(deleteOldRequests, 1000 * 60 * 60); //Runs every hour when the server is running
const mockRequests = {
3: {
id: 3,
item: "Textbook",
description: "Need it for a week",
requester_email: "aaryavlal12@gmail.com"
}
};
app.post('/send_email/:id', async (req, res) => {
const requestId = req.params.id;
// For testing: use your actual email
const request = mockRequests[requestId];
if (!request) {
return res.status(404).send("Request not found.");
}
const receiverEmail = request.requester_email;
const senderEmail = "aaryavlal12@gmail.com"; // Replace with a real sender address
const senderPassword = process.env.APP_EMAIL_PASSWORD; // Set this in your .env
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: senderEmail,
pass: senderPassword
}
});
const mailOptions = {
from: senderEmail,
to: receiverEmail,
subject: "Someone wants to help you!",
text: `${senderEmail} responded to your request for: ${request.item}\n\nMessage: I'd like to help!`
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
console.error("Email error:", error);
return res.status(500).send("Failed to send email.");
}
res.send("Email sent!");
});
});