emese/index.js
2024-04-15 20:05:44 +00:00

92 lines
3.3 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.ExposureTime + " s)"
exif.exif.FNumber = "f/" + exif.exif.FNumber;
img = `<img id="${Buffer.from(pic).toString('base64')}" onclick="zoom('${Buffer.from(pic).toString('base64')}')" 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);
});