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 @@