From 95481a07fa9e5958aa79bdcb3cbeb74cd2cfe6e8 Mon Sep 17 00:00:00 2001 From: dbroqua Date: Thu, 23 Nov 2023 13:49:22 +0100 Subject: [PATCH] Added short url on upload --- package-lock.json | 72 ++++++++++++++++++++++++++++++++++++++ package.json | 1 + src/app.js | 2 ++ src/config/index.js | 2 ++ src/middleware/Uploads.js | 10 ++++-- views/pages/gallery.ejs | 2 +- views/pages/upload.ejs | 2 +- views/partials/details.ejs | 12 +++++++ 8 files changed, 99 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index ead019c..79fc219 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "CC-BY-NC-SA-4.0", "dependencies": { + "axios": "^1.6.2", "connect-ensure-login": "^0.1.1", "connect-flash": "^0.1.1", "connect-mongo": "^5.0.0", @@ -2255,6 +2256,11 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, "node_modules/autoprefixer": { "version": "9.8.8", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", @@ -2292,6 +2298,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/axios": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/b4a": { "version": "1.6.4", "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", @@ -2734,6 +2750,17 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -3161,6 +3188,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -4023,6 +4058,25 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -4031,6 +4085,19 @@ "is-callable": "^1.1.3" } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -6497,6 +6564,11 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", diff --git a/package.json b/package.json index 5c0492f..8e36bc7 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "sass": "^1.68.0" }, "dependencies": { + "axios": "^1.6.2", "connect-ensure-login": "^0.1.1", "connect-flash": "^0.1.1", "connect-mongo": "^5.0.0", diff --git a/src/app.js b/src/app.js index 9dad55f..0695a52 100644 --- a/src/app.js +++ b/src/app.js @@ -6,6 +6,7 @@ import mongoose from 'mongoose'; import flash from 'connect-flash'; import session from 'express-session'; import MongoStore from 'connect-mongo'; +import {DateTime} from 'luxon'; import passportConfig from './libs/passport'; @@ -115,6 +116,7 @@ app.use((error, req, res, next) => { query: {}, user: req.user, error, + DateTime, }); } }); diff --git a/src/config/index.js b/src/config/index.js index 4ead440..a566a9d 100644 --- a/src/config/index.js +++ b/src/config/index.js @@ -5,4 +5,6 @@ module.exports = { mongoDbUri: process.env.MONGODB_URI || 'mongodb://images-upload-db/upload', secret: process.env.SECRET || 'waemaeMe5ahc6ce1chaeKohKa6Io8Eik', pagination: Number(process.env.PAGINATION || 16), + shortUrlUri: process.env.SHORT_URL_URI || 'https://short.darkou.link/yourls-api.php', + shortUrlSig: process.env.SHORT_URL_SIG, }; diff --git a/src/middleware/Uploads.js b/src/middleware/Uploads.js index 80c1b0f..4da2fc3 100644 --- a/src/middleware/Uploads.js +++ b/src/middleware/Uploads.js @@ -3,12 +3,13 @@ import {join, extname} from 'path'; import multer from 'multer'; import sharp from 'sharp'; import {uid} from 'rand-token'; +import axios from 'axios'; import Pages from './Pages'; import {getBaseUrl} from '../helpers'; -import {pagination} from '../config'; +import {pagination, shortUrlSig, shortUrlUri} from '../config'; const checkAndCreateDirectory = async (directory) => { try { @@ -123,10 +124,15 @@ class Uploads extends Pages { ), ]); + const originalFile = `${userUri}/${originalFileName}`; + // eslint-disable-next-line max-len + const urlshort = await axios.get(`${shortUrlUri}?signature=${shortUrlSig}&action=shorturl&url=${originalFile}&format=json`); + this.pageContent.page.upload = { - originalFile: `${userUri}/${originalFileName}`, + originalFile, mediumFile: `${userUri}/${mediumFileName}`, smallFile: `${userUri}/${smallFileName}`, + urlshort: urlshort.data.shorturl, }; return true; diff --git a/views/pages/gallery.ejs b/views/pages/gallery.ejs index a4501bc..635ee6d 100644 --- a/views/pages/gallery.ejs +++ b/views/pages/gallery.ejs @@ -85,7 +85,7 @@ Image
- <%- include('../partials/details', {file: {}, index: 0}) %> + <%- include('../partials/details', {file: {}, index: 0, hideShortUrl: true}) %>
diff --git a/views/pages/upload.ejs b/views/pages/upload.ejs index a3e2124..855846b 100644 --- a/views/pages/upload.ejs +++ b/views/pages/upload.ejs @@ -22,7 +22,7 @@ Miniature
- <%- include('../partials/details', {file: page.upload, index: 0}) %> + <%- include('../partials/details', {file: page.upload, index: 0, hideShortUrl: false}) %>
<% } %> diff --git a/views/partials/details.ejs b/views/partials/details.ejs index c44458f..83e17bf 100644 --- a/views/partials/details.ejs +++ b/views/partials/details.ejs @@ -8,6 +8,18 @@ onclick="copyToClipboard('originalFile-<%= index %>', 'Lien copiƩ')" > +<% if ( hideShortUrl === false ) { %> +
+ + +
+<% } %>