82 lines
12 KiB
JavaScript
82 lines
12 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const tslib_1 = require("tslib");
|
|
const express_1 = tslib_1.__importDefault(require("express"));
|
|
const immich_1 = tslib_1.__importDefault(require("./immich"));
|
|
const render_1 = tslib_1.__importDefault(require("./render"));
|
|
const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
|
|
const types_1 = require("./types");
|
|
require('dotenv').config();
|
|
const app = (0, express_1.default)();
|
|
app.set('view engine', 'ejs');
|
|
app.use(express_1.default.static('public'));
|
|
const getSize = (req) => {
|
|
var _a;
|
|
return ((_a = req === null || req === void 0 ? void 0 : req.query) === null || _a === void 0 ? void 0 : _a.size) === 'thumbnail' ? types_1.ImageSize.thumbnail : types_1.ImageSize.original;
|
|
};
|
|
const log = (message) => console.log((0, dayjs_1.default)().format() + ' ' + message);
|
|
app.get('/share/:key', (req, res) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
res.set('Cache-Control', 'public, max-age=' + process.env.CACHE_AGE);
|
|
if (!immich_1.default.isKey(req.params.key)) {
|
|
log('Invalid share key ' + req.params.key);
|
|
res.status(404).send();
|
|
}
|
|
else {
|
|
const sharedLink = yield immich_1.default.getShareByKey(req.params.key);
|
|
if (!sharedLink) {
|
|
log('Unknown share key ' + req.params.key);
|
|
res.status(404).send();
|
|
}
|
|
else if (!sharedLink.assets.length) {
|
|
log('No assets for key ' + req.params.key);
|
|
res.status(404).send();
|
|
}
|
|
else if (sharedLink.assets.length === 1) {
|
|
// This is an individual item (not a gallery)
|
|
log('Serving link ' + req.params.key);
|
|
const asset = sharedLink.assets[0];
|
|
if (asset.type === types_1.AssetType.image) {
|
|
// For photos, output the image directly
|
|
yield render_1.default.assetBuffer(res, sharedLink.assets[0], getSize(req));
|
|
}
|
|
else if (asset.type === types_1.AssetType.video) {
|
|
// For videos, show the video as a web player
|
|
yield render_1.default.gallery(res, sharedLink, 1);
|
|
}
|
|
}
|
|
else {
|
|
// Multiple images - render as a gallery
|
|
log('Serving link ' + req.params.key);
|
|
yield render_1.default.gallery(res, sharedLink);
|
|
}
|
|
}
|
|
}));
|
|
// Output the buffer data for an photo or video
|
|
app.get('/:type(photo|video)/:key/:id', (req, res) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
res.set('Cache-Control', 'public, max-age=' + process.env.CACHE_AGE);
|
|
// Check for valid key and ID
|
|
if (immich_1.default.isKey(req.params.key) && immich_1.default.isId(req.params.id)) {
|
|
// Check if the key is a valid share link
|
|
const sharedLink = yield immich_1.default.getShareByKey(req.params.key);
|
|
if (sharedLink === null || sharedLink === void 0 ? void 0 : sharedLink.assets.length) {
|
|
// Check that the requested asset exists in this share
|
|
const asset = sharedLink.assets.find(x => x.id === req.params.id);
|
|
if (asset) {
|
|
asset.type = req.params.type === 'video' ? types_1.AssetType.video : types_1.AssetType.image;
|
|
render_1.default.assetBuffer(res, asset, getSize(req)).then();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
log('No asset found for ' + req.path);
|
|
res.status(404).send();
|
|
}));
|
|
// Send a 404 for all other unmatched routes
|
|
app.get('*', (req, res) => {
|
|
log('Invalid route ' + req.path);
|
|
res.status(404).send();
|
|
});
|
|
app.listen(3000, () => {
|
|
console.log((0, dayjs_1.default)().format() + ' Server started');
|
|
});
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsOERBQTZCO0FBQzdCLDhEQUE2QjtBQUM3Qiw4REFBNkI7QUFDN0IsMERBQXlCO0FBQ3pCLG1DQUE4QztBQUc5QyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7QUFFMUIsTUFBTSxHQUFHLEdBQUcsSUFBQSxpQkFBTyxHQUFFLENBQUE7QUFDckIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUE7QUFDN0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0FBRWpDLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBWSxFQUFFLEVBQUU7O0lBQy9CLE9BQU8sQ0FBQSxNQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxLQUFLLDBDQUFFLElBQUksTUFBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLGlCQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxpQkFBUyxDQUFDLFFBQVEsQ0FBQTtBQUNwRixDQUFDLENBQUE7QUFFRCxNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFBLGVBQUssR0FBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQTtBQUU5RSxHQUFHLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFPLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtJQUN4QyxHQUFHLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3BFLElBQUksQ0FBQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFB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b250ZW50IjpbImltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnXG5pbXBvcnQgaW1taWNoIGZyb20gJy4vaW1taWNoJ1xuaW1wb3J0IHJlbmRlciBmcm9tICcuL3JlbmRlcidcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCB7IEFzc2V0VHlwZSwgSW1hZ2VTaXplIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICdleHByZXNzLXNlcnZlLXN0YXRpYy1jb3JlJ1xuXG5yZXF1aXJlKCdkb3RlbnYnKS5jb25maWcoKVxuXG5jb25zdCBhcHAgPSBleHByZXNzKClcbmFwcC5zZXQoJ3ZpZXcgZW5naW5lJywgJ2VqcycpXG5hcHAudXNlKGV4cHJlc3Muc3RhdGljKCdwdWJsaWMnKSlcblxuY29uc3QgZ2V0U2l6ZSA9IChyZXE6IFJlcXVlc3QpID0+IHtcbiAgcmV0dXJuIHJlcT8ucXVlcnk/LnNpemUgPT09ICd0aHVtYm5haWwnID8gSW1hZ2VTaXplLnRodW1ibmFpbCA6IEltYWdlU2l6ZS5vcmlnaW5hbFxufVxuXG5jb25zdCBsb2cgPSAobWVzc2FnZTogc3RyaW5nKSA9PiBjb25zb2xlLmxvZyhkYXlqcygpLmZvcm1hdCgpICsgJyAnICsgbWVzc2FnZSlcblxuYXBwLmdldCgnL3NoYXJlLzprZXknLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgcmVzLnNldCgnQ2FjaGUtQ29udHJvbCcsICdwdWJsaWMsIG1heC1hZ2U9JyArIHByb2Nlc3MuZW52LkNBQ0hFX0FHRSlcbiAgaWYgKCFpbW1pY2guaXNLZXkocmVxLnBhcmFtcy5rZXkpKSB7XG4gICAgbG9nKCdJbnZhbGlkIHNoYXJlIGtleSAnICsgcmVxLnBhcmFtcy5rZXkpXG4gICAgcmVzLnN0YXR1cyg0MDQpLnNlbmQoKVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNoYXJlZExpbmsgPSBhd2FpdCBpbW1pY2guZ2V0U2hhcmVCeUtleShyZXEucGFyYW1zLmtleSlcbiAgICBpZiAoIXNoYXJlZExpbmspIHtcbiAgICAgIGxvZygnVW5rbm93biBzaGFyZSBrZXkgJyArIHJlcS5wYXJhbXMua2V5KVxuICAgICAgcmVzLnN0YXR1cyg0MDQpLnNlbmQoKVxuICAgIH0gZWxzZSBpZiAoIXNoYXJlZExpbmsuYXNzZXRzLmxlbmd0aCkge1xuICAgICAgbG9nKCdObyBhc3NldHMgZm9yIGtleSAnICsgcmVxLnBhcmFtcy5rZXkpXG4gICAgICByZXMuc3RhdHVzKDQwNCkuc2VuZCgpXG4gICAgfSBlbHNlIGlmIChzaGFyZWRMaW5rLmFzc2V0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIFRoaXMgaXMgYW4gaW5kaXZpZHVhbCBpdGVtIChub3QgYSBnYWxsZXJ5KVxuICAgICAgbG9nKCdTZXJ2aW5nIGxpbmsgJyArIHJlcS5wYXJhbXMua2V5KVxuICAgICAgY29uc3QgYXNzZXQgPSBzaGFyZWRMaW5rLmFzc2V0c1swXVxuICAgICAgaWYgKGFzc2V0LnR5cGUgPT09IEFzc2V0VHlwZS5pbWFnZSkge1xuICAgICAgICAvLyBGb3IgcGhvdG9zLCBvdXRwdXQgdGhlIGltYWdlIGRpcmVjdGx5XG4gICAgICAgIGF3YWl0IHJlbmRlci5hc3NldEJ1ZmZlcihyZXMsIHNoYXJlZExpbmsuYXNzZXRzWzBdLCBnZXRTaXplKHJlcSkpXG4gICAgICB9IGVsc2UgaWYgKGFzc2V0LnR5cGUgPT09IEFzc2V0VHlwZS52aWRlbykge1xuICAgICAgICAvLyBGb3IgdmlkZW9zLCBzaG93IHRoZSB2aWRlbyBhcyBhIHdlYiBwbGF5ZXJcbiAgICAgICAgYXdhaXQgcmVuZGVyLmdhbGxlcnkocmVzLCBzaGFyZWRMaW5rLCAxKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNdWx0aXBsZSBpbWFnZXMgLSByZW5kZXIgYXMgYSBnYWxsZXJ5XG4gICAgICBsb2coJ1NlcnZpbmcgbGluayAnICsgcmVxLnBhcmFtcy5rZXkpXG4gICAgICBhd2FpdCByZW5kZXIuZ2FsbGVyeShyZXMsIHNoYXJlZExpbmspXG4gICAgfVxuICB9XG59KVxuXG4vLyBPdXRwdXQgdGhlIGJ1ZmZlciBkYXRhIGZvciBhbiBwaG90byBvciB2aWRlb1xuYXBwLmdldCgnLzp0eXBlKHBob3RvfHZpZGVvKS86a2V5LzppZCcsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICByZXMuc2V0KCdDYWNoZS1Db250cm9sJywgJ3B1YmxpYywgbWF4LWFnZT0nICsgcHJvY2Vzcy5lbnYuQ0FDSEVfQUdFKVxuICAvLyBDaGVjayBmb3IgdmFsaWQga2V5IGFuZCBJRFxuICBpZiAoaW1taWNoLmlzS2V5KHJlcS5wYXJhbXMua2V5KSAmJiBpbW1pY2guaXNJZChyZXEucGFyYW1zLmlkKSkge1xuICAgIC8vIENoZWNrIGlmIHRoZSBrZXkgaXMgYSB2YWxpZCBzaGFyZSBsaW5rXG4gICAgY29uc3Qgc2hhcmVkTGluayA9IGF3YWl0IGltbWljaC5nZXRTaGFyZUJ5S2V5KHJlcS5wYXJhbXMua2V5KVxuICAgIGlmIChzaGFyZWRMaW5rPy5hc3NldHMubGVuZ3RoKSB7XG4gICAgICAvLyBDaGVjayB0aGF0IHRoZSByZXF1ZXN0ZWQgYXNzZXQgZXhpc3RzIGluIHRoaXMgc2hhcmVcbiAgICAgIGNvbnN0IGFzc2V0ID0gc2hhcmVkTGluay5hc3NldHMuZmluZCh4ID0+IHguaWQgPT09IHJlcS5wYXJhbXMuaWQpXG4gICAgICBpZiAoYXNzZXQpIHtcbiAgICAgICAgYXNzZXQudHlwZSA9IHJlcS5wYXJhbXMudHlwZSA9PT0gJ3ZpZGVvJyA/IEFzc2V0VHlwZS52aWRlbyA6IEFzc2V0VHlwZS5pbWFnZVxuICAgICAgICByZW5kZXIuYXNzZXRCdWZmZXIocmVzLCBhc3NldCwgZ2V0U2l6ZShyZXEpKS50aGVuKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGxvZygnTm8gYXNzZXQgZm91bmQgZm9yICcgKyByZXEucGF0aClcbiAgcmVzLnN0YXR1cyg0MDQpLnNlbmQoKVxufSlcblxuLy8gU2VuZCBhIDQwNCBmb3IgYWxsIG90aGVyIHVubWF0Y2hlZCByb3V0ZXNcbmFwcC5nZXQoJyonLCAocmVxLCByZXMpID0+IHtcbiAgbG9nKCdJbnZhbGlkIHJvdXRlICcgKyByZXEucGF0aClcbiAgcmVzLnN0YXR1cyg0MDQpLnNlbmQoKVxufSlcblxuYXBwLmxpc3RlbigzMDAwLCAoKSA9PiB7XG4gIGNvbnNvbGUubG9nKGRheWpzKCkuZm9ybWF0KCkgKyAnIFNlcnZlciBzdGFydGVkJylcbn0pXG4iXX0=
|