91 lines
3.2 KiB
JavaScript
91 lines
3.2 KiB
JavaScript
const express = require('express');
|
|
require('dotenv').config();
|
|
const ExifImage = require('exif').ExifImage;
|
|
const app = express();
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const port = process.env.PORT || 3000;
|
|
const picsLocation = process.env.PICS_LOCATION || 'pics';
|
|
|
|
app.set('view engine', 'ejs');
|
|
app.use(express.static('src'));
|
|
app.use(express.static(picsLocation));
|
|
|
|
app.get('/', (req, res) => {
|
|
fs.readdir(picsLocation, (err, files) => {
|
|
if (err) {
|
|
console.log(err);
|
|
res.status(500).send('Internal Server Error');
|
|
} else {
|
|
console.log(files);
|
|
var renderedHtml = '';
|
|
for (let i = 0; i < files.length; i++) {
|
|
if (files[i].includes(".")) {
|
|
continue;
|
|
} else {
|
|
renderedHtml += `<a style="font-size:20px; color: white; text-align: center;" href="/${files[i]}">${files[i]}</a><br>`;
|
|
}
|
|
}
|
|
|
|
res.render('index', { links: renderedHtml });
|
|
}
|
|
});
|
|
});
|
|
|
|
app.get('/:folder', (req, res) => {
|
|
const folder = req.params.folder;
|
|
fs.readdir(picsLocation + '/' + folder, (err, files) => {
|
|
if (err) {
|
|
console.log(err);
|
|
res.status(500).send('Internal Server Error');
|
|
} else {
|
|
console.log(files);
|
|
var renderedHtml = '';
|
|
for (let i = 0; i < files.length; i++) {
|
|
if (files[i].includes(".") == false) {
|
|
continue;
|
|
} else {
|
|
renderedHtml += `<img onclick="location.href = '/pic/${folder}/${files[i]}'" src="/${folder}/${files[i]}" style="width: 50vw; height: auto;">`;
|
|
}
|
|
}
|
|
console.log(renderedHtml);
|
|
res.render('folder', { img: renderedHtml, name: folder});
|
|
}
|
|
});
|
|
})
|
|
|
|
app.get('/pic/:folder/:pic', (req, res) => {
|
|
const folder = req.params.folder;
|
|
const pic = req.params.pic;
|
|
try {
|
|
var path = picsLocation + '/' + folder + '/' + pic;
|
|
if (path.includes("..")) {
|
|
res.status(500).send('Internal Server Error');
|
|
return
|
|
}
|
|
if (pic.toLowerCase().includes(".jpg") == false && pic.toLowerCase().includes(".jpeg") == false && pic.toLowerCase().includes(".png") == false) {
|
|
res.status(500).send('Internal Server Error');
|
|
return
|
|
}
|
|
new ExifImage({ image : path }, function (error, exifData) {
|
|
if (error) {
|
|
res.status(500).send('Internal Server Error');
|
|
return
|
|
} else {
|
|
exif = exifData;
|
|
exif.exif.ExposureTime = "1/" + Math.round(1/exif.exif.ExposureTime);
|
|
exif.exif.FNumber = "f/" + exif.exif.FNumber;
|
|
img = `<img id="${btoa(pic)}" onclick="zoom('${btoa(pic)}')" src="/${folder}/${pic}" style="width: 70%; height: auto;">`;
|
|
res.render('pic', { folder: folder, pic: pic, exif: exif, img: img });
|
|
return
|
|
}
|
|
});
|
|
} catch (error) {
|
|
res.status(500).send('Internal Server Error');
|
|
return
|
|
}
|
|
})
|
|
|
|
app.listen(port, () => {
|
|
console.log("Server is running on port: " + port);
|
|
}); |