-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
158 lines (118 loc) · 3.96 KB
/
server.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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
// Load Node modules
var compression = require('compression');
var express = require('express');
const ejs = require('ejs');
var fs = require('fs');
const util = require('util');
const { url } = require('inspector');
const readFile = util.promisify(fs.readFile);
const path = require('path');
// Initialise Express
var app = express();
// Use Gzip compression
app.use(compression());
// Remove x-powered-by Express
app.disable('x-powered-by');
// Render static files
app.use('/static', express.static('static'))
//app.use(express.static('static'));
app.use(express.static('software'));
// Set the view engine to ejs
app.set('view engine', 'ejs');
// Port website will run on
app.listen(8080);
console.log("Server listening on 8080")
app.get('/', async function (req, res) {
const software = JSON.parse(fs.readFileSync('json/software.json', 'utf8'));
software.sort((a, b) => {
let fa = a.name.toLowerCase();
let fb = b.name.toLowerCase();
if (fa < fb) {
return -1;
}
if (fa > fb) {
return 1;
}
return 0;
});
softwareArray = software,
res.render('pages/index')
});
app.get('/mobile', async function (req, res) {
const software = JSON.parse(fs.readFileSync('json/software.json', 'utf8'));
software.sort((a, b) => {
let fa = a.name.toLowerCase();
let fb = b.name.toLowerCase();
if (fa < fb) {
return -1;
}
if (fa > fb) {
return 1;
}
return 0;
});
softwareArray = software,
res.render('pages/mobile')
});
//Behövs inte?
app.get('/about', async function (req, res) {
res.redirect("/")
});
app.get('/about/:name', async function (req, res) {
const software = JSON.parse(fs.readFileSync('json/software.json', 'utf8'));
try {
const querriedSoftware = software.find(e => e.name === req.params.name);
res.render('pages/about', { querriedSoftware });
} catch {
res.redirect("/")
}
});
app.get('/api', (req, res) => {
return res.sendFile(path.join(__dirname, '/api.html'));
});
app.get('/api/all', (req, res) => {
const software = JSON.parse(fs.readFileSync('json/software.json', 'utf8'));
const filteredSoftware = software.map(({ guide_url, description, box, download_url, ...keepAttrs }) => keepAttrs)
return res.send(filteredSoftware);
});
app.get('/api/:name', (req, res) => {
const software = JSON.parse(fs.readFileSync('json/software.json', 'utf8'));
try {
const querriedSoftware = software.find(e => e.name === req.params.name);
delete querriedSoftware.guide_url;
delete querriedSoftware.description;
delete querriedSoftware.box;
delete querriedSoftware.download_url;
return res.send(querriedSoftware);
} catch {
res.status(404)
res.send({ error: "No such software! More information: https://wallen.co/api" })
}
});
app.get('/api/:name/version', (req, res) => {
const software = JSON.parse(fs.readFileSync('json/software.json', 'utf8'));
try {
const querriedSoftware = software.find(e => e.name === req.params.name);
return res.send(querriedSoftware.release_version);
} catch {
res.status(404)
res.send({ error: "No such software! More information: https://wallen.co/api" })
}
});
app.get('/ip', (req, res) => {
const ip = req.headers['x-forwarded-for'] || req.socket.remoteAddress;
return res.send(ip);
});
app.use(express.static(path.join(__dirname, 'pages')));
// Handle HTTP 404
app.use(function (req, res) {
const date = new Date();
console.log(date.toLocaleDateString(), date.toLocaleTimeString() + " Bad URL: " + req.path);
res.status(404).render('pages/404');
});
// Handle HTTP 500
app.use(function (error, req, res, next) {
const date = new Date();
console.log(date.toLocaleDateString(), date.toLocaleTimeString() + " " + error + " " + req.path);
res.status(500).render('pages/500');
});