-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
137 lines (124 loc) · 4.93 KB
/
app.js
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
const express = require('express');
const mysql = require('mysql');
const dotenv = require('dotenv');
const ejs = require('ejs');
const crypto = require('crypto');
const simpleGit = require('simple-git');
dotenv.config();
const app = express();
const port = 25576;
const connection = mysql.createConnection({
host: process.env.MYSQL_HOST,
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PASSWORD,
database: process.env.MYSQL_DATABASE,
});
connection.connect((err) => {
if (err) {
console.error('Error connecting to MySQL:', err);
return;
}
console.log('Connected to MySQL');
});
app.set('view engine', 'ejs');
app.use(express.static('public'));
app.use('/favicon.ico', express.static('favicon.ico'));
app.get('/live', (req, res) => res.render('live'));
app.get('/control', (req, res) => res.render('control'));
app.get('/locate', (req, res) => res.render('locate'));
app.get('/countdown', (req, res) => res.render('countdown'));
app.get('/', (req, res) => res.render('index'));
app.get('/live-data', (req, res) => {
connection.query(
`SELECT DATE_FORMAT(timestamp, "%H:%i:%s") AS time, temperature, pressure, humidity, latitude, longitude, height, velocity FROM sarfad_data GROUP BY time ORDER BY time`,
(error, results) => {
if (error) {
console.error('Error executing query:', error);
res.status(500).json({ error: 'Internal server error' });
return;
}
res.json(results);
}
);
});
app.get('/latest-location', (req, res) => {
const query = 'SELECT latitude, longitude, MAX(timestamp) AS latest_timestamp, temperature, pressure, humidity, height, velocity FROM sarfad_data GROUP BY latitude, longitude ORDER BY latest_timestamp DESC LIMIT 1;';
connection.query(query, (error, results) => {
if (error) {
console.error('Error executing query:', error);
res.status(500).json({ error: 'Internal server error' });
return;
}
res.json(results);
});
});
app.get('/check-password', (req, res) => {
const userInputPassword = req.query.password;
const correctPassword = process.env.PASSWORD;
if (userInputPassword === correctPassword) {
const sessionToken = crypto.randomBytes(16).toString('hex');
res.json({ authorized: true, sessionToken });
} else {
res.json({ authorized: false });
}
});
app.get('/save-launch-time', (req, res) => {
const launchTimeISO = req.query.launchTime;
if (launchTimeISO) {
const launchTime = new Date(launchTimeISO);
const formattedLaunchTime = `${launchTime.getFullYear()}-${String(launchTime.getMonth() + 1).padStart(2, '0')}-${String(launchTime.getDate()).padStart(2, '0')} ${String(launchTime.getHours()).padStart(2, '0')}:${String(launchTime.getMinutes()).padStart(2, '0')}:${String(launchTime.getSeconds()).padStart(2, '0')}`;
const query = 'INSERT INTO launch_time (launch_time) VALUES (?) ON DUPLICATE KEY UPDATE launch_time = VALUES(launch_time)';
connection.query(query, [formattedLaunchTime], (error) => {
if (error) {
console.error('Error saving launch time:', error);
res.status(500).json({ error: 'Internal server error' });
return;
}
res.status(200).end();
});
} else {
res.status(400).json({ error: 'Missing launch time parameter' });
}
});
app.get('/get-launch-time', (req, res) => {
const query = 'SELECT launch_time FROM launch_time ORDER BY id DESC LIMIT 1';
connection.query(query, (error, results) => {
if (error) {
console.error('Error fetching launch time:', error);
res.status(500).json({ error: 'Internal server error' });
return;
}
const launchTime = results[0] ? results[0].launch_time : null;
res.json({ launchTime });
});
});
async function updateRepo() {
try {
const git = simpleGit();
git.cwd('./sarfad-website/');
await git.pull();
console.log('Successfully pulled latest changes from the repository.');
} catch (error) {
console.error('Failed to pull the latest changes from the repository:', error);
}
}
updateRepo().then(() => {
console.log('Repository updated successfully.');
}).catch((err) => {
console.error('Failed to update repository:', err);
});
const colors = {
green: '\x1b[32m',
white: '\x1b[37m',
reset: '\x1b[0m'
};
app.listen(port, () => {
console.log(`${colors.green}App listening on the following routes:${colors.reset}`);
console.log(`${colors.white}---------------------------------------${colors.reset}`);
console.log(`${colors.green}Home Website: ${colors.reset}http://localhost:${port}/`);
console.log(`${colors.green}Live Web: ${colors.reset}http://localhost:${port}/live`);
console.log(`${colors.green}Locate App: ${colors.reset}http://localhost:${port}/locate`);
console.log(`${colors.green}Control Center: ${colors.reset}http://localhost:${port}/control`);
console.log(`${colors.green}Launch Countdown: ${colors.reset}http://localhost:${port}/countdown`);
console.log(`${colors.white}---------------------------------------${colors.reset}`);
});