Code Cleanup
This commit is contained in:
parent
76a3f57736
commit
833cf41203
9 changed files with 170 additions and 46 deletions
|
@ -5,10 +5,7 @@ A media host specialized in good looking embeds for services like Discord. No fi
|
|||
<img src="readmegif.gif">
|
||||
|
||||
Upcoming Features:
|
||||
* Smooth out mp4s similar to imgur and gfycat
|
||||
* Guest user accounts
|
||||
* ShareX support
|
||||
* Expirey/auto-delete support
|
||||
|
||||
|
||||
## Run
|
||||
|
|
26
app.js
26
app.js
|
@ -4,7 +4,6 @@ require("dotenv").config();
|
|||
let express = require("express");
|
||||
let passport = require("passport");
|
||||
let session = require("express-session");
|
||||
let createError = require("http-errors");
|
||||
let cookieParser = require("cookie-parser");
|
||||
let SQLiteStore = require("connect-sqlite3")(session);
|
||||
|
||||
|
@ -47,21 +46,10 @@ app.use("/", authRouter);
|
|||
|
||||
app.use("/uploads", express.static("uploads"));
|
||||
|
||||
// catch 404 and forward to error handler
|
||||
app.use(function(req, res, next) {
|
||||
next(createError(404));
|
||||
});
|
||||
|
||||
// error handler
|
||||
app.use(function(err, req, res) {
|
||||
// set locals, only providing error in development
|
||||
console.log(err);
|
||||
res.locals.message = err.message;
|
||||
res.locals.error = req.app.get("env") === "development" ? err : {};
|
||||
|
||||
// render the error page
|
||||
res.status(err.status || 500);
|
||||
res.render("error");
|
||||
app.use((err, req, res) => {
|
||||
console.error(err.stack);
|
||||
res.status(500).send("Something broke!");
|
||||
});
|
||||
|
||||
function prune () {
|
||||
|
@ -72,17 +60,17 @@ function prune () {
|
|||
console.log("Expired rows: " + rows);
|
||||
if (err) return console.error(err);
|
||||
rows.forEach((row) => {
|
||||
console.log("Deleting " + row.path);
|
||||
fs.unlink("uploads/" + row.path, (err) => {
|
||||
console.log(`Deleting ${row.path}`);
|
||||
fs.unlink(`uploads/${row.path}`, (err) => {
|
||||
if (err) {
|
||||
if(err.errno == -4058) return; //file doesn't exist
|
||||
return console.error(err);
|
||||
}
|
||||
console.log("Deleted " + row.path);
|
||||
console.log(`Deleted ${row.path}`);
|
||||
});
|
||||
db.run("DELETE FROM media WHERE expire > ?", [Date.now()], (err) => {
|
||||
if (err) return console.error(err);
|
||||
console.log("Deleted " + row.path + " from database");
|
||||
console.log(`Deleted ${row.path} from database`);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -50,28 +50,28 @@ function convert(req, res, next) {
|
|||
height: 360
|
||||
};
|
||||
|
||||
fs.writeFile(`uploads/oembed-${nameAndExtension[0]}.json`, JSON.stringify(oembed), function (err) {
|
||||
fs.writeFile(`uploads/oembed-${nameAndExtension[0]}${nameAndExtension[1]}.json`, JSON.stringify(oembed), function (err) {
|
||||
if (err) return next(err);
|
||||
console.log("oembed file created " + nameAndExtension[0] + ".json");
|
||||
console.log(`oembed file created ${nameAndExtension[0]}${nameAndExtension[1]}.json`);
|
||||
});
|
||||
|
||||
if (nameAndExtension[1] == ".mp4") {
|
||||
console.log("Converting " + nameAndExtension[0] + nameAndExtension[1] + " to gif");
|
||||
console.log(nameAndExtension[0] + nameAndExtension[1]);
|
||||
ffmpeg()
|
||||
.input("uploads/" + req.files[file].originalname)
|
||||
.input(`uploads/${nameAndExtension[0]}${nameAndExtension[1]}`)
|
||||
.inputFormat("mp4")
|
||||
.outputFormat("gif")
|
||||
.output("uploads/" + nameAndExtension[0] + ".gif")
|
||||
.output(`uploads/${nameAndExtension[0]}.gif`)
|
||||
.on("end", function() {
|
||||
console.log("Conversion complete");
|
||||
console.log("Uploaded to uploads/" + nameAndExtension[0] + ".gif");
|
||||
console.log(`Uploaded to uploads/${nameAndExtension[0]}.gif`);
|
||||
})
|
||||
.on("error", (e) => console.log(e))
|
||||
.run();
|
||||
} else if (nameAndExtension[1] == ".gif") {
|
||||
console.log(`Converting ${nameAndExtension[0]}${nameAndExtension[1]} to mp4`);
|
||||
ffmpeg("uploads/" + req.files[file].originalname)
|
||||
ffmpeg(`uploads/${nameAndExtension[0]}${nameAndExtension[1]}`)
|
||||
.inputFormat("gif")
|
||||
.outputFormat("mp4")
|
||||
.outputOptions([
|
||||
|
|
126
package-lock.json
generated
126
package-lock.json
generated
|
@ -23,6 +23,7 @@
|
|||
"multer": "^1.4.5-lts.1",
|
||||
"passport": "^0.6.0",
|
||||
"passport-local": "^1.0.0",
|
||||
"probe-image-size": "^7.2.3",
|
||||
"sqlite3": "^5.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
@ -1751,6 +1752,17 @@
|
|||
"ms": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/iconv-lite": {
|
||||
"version": "0.4.24",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
||||
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
|
||||
"dependencies": {
|
||||
"safer-buffer": ">= 2.1.2 < 3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/ignore": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
|
||||
|
@ -1960,8 +1972,7 @@
|
|||
"node_modules/lodash.merge": {
|
||||
"version": "4.6.2",
|
||||
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
|
||||
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
|
||||
},
|
||||
"node_modules/lru-cache": {
|
||||
"version": "6.0.0",
|
||||
|
@ -2228,6 +2239,35 @@
|
|||
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/needle": {
|
||||
"version": "2.9.1",
|
||||
"resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz",
|
||||
"integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==",
|
||||
"dependencies": {
|
||||
"debug": "^3.2.6",
|
||||
"iconv-lite": "^0.4.4",
|
||||
"sax": "^1.2.4"
|
||||
},
|
||||
"bin": {
|
||||
"needle": "bin/needle"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 4.4.x"
|
||||
}
|
||||
},
|
||||
"node_modules/needle/node_modules/debug": {
|
||||
"version": "3.2.7",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
|
||||
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
|
||||
"dependencies": {
|
||||
"ms": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/needle/node_modules/ms": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||
},
|
||||
"node_modules/negotiator": {
|
||||
"version": "0.6.3",
|
||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
|
||||
|
@ -2554,6 +2594,16 @@
|
|||
"node": ">= 0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/probe-image-size": {
|
||||
"version": "7.2.3",
|
||||
"resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.2.3.tgz",
|
||||
"integrity": "sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==",
|
||||
"dependencies": {
|
||||
"lodash.merge": "^4.6.2",
|
||||
"needle": "^2.5.2",
|
||||
"stream-parser": "~0.3.1"
|
||||
}
|
||||
},
|
||||
"node_modules/process-nextick-args": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
||||
|
@ -2743,6 +2793,11 @@
|
|||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||
},
|
||||
"node_modules/sax": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
|
||||
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
|
||||
},
|
||||
"node_modules/semver": {
|
||||
"version": "7.3.8",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
|
||||
|
@ -2933,6 +2988,14 @@
|
|||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/stream-parser": {
|
||||
"version": "0.3.1",
|
||||
"resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz",
|
||||
"integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==",
|
||||
"dependencies": {
|
||||
"debug": "2"
|
||||
}
|
||||
},
|
||||
"node_modules/streamsearch": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
|
||||
|
@ -4510,6 +4573,14 @@
|
|||
"ms": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"iconv-lite": {
|
||||
"version": "0.4.24",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
||||
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
|
||||
"requires": {
|
||||
"safer-buffer": ">= 2.1.2 < 3"
|
||||
}
|
||||
},
|
||||
"ignore": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
|
||||
|
@ -4671,8 +4742,7 @@
|
|||
"lodash.merge": {
|
||||
"version": "4.6.2",
|
||||
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
|
||||
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
|
||||
"dev": true
|
||||
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
|
||||
},
|
||||
"lru-cache": {
|
||||
"version": "6.0.0",
|
||||
|
@ -4872,6 +4942,31 @@
|
|||
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
|
||||
"dev": true
|
||||
},
|
||||
"needle": {
|
||||
"version": "2.9.1",
|
||||
"resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz",
|
||||
"integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==",
|
||||
"requires": {
|
||||
"debug": "^3.2.6",
|
||||
"iconv-lite": "^0.4.4",
|
||||
"sax": "^1.2.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
"version": "3.2.7",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
|
||||
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
|
||||
"requires": {
|
||||
"ms": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"negotiator": {
|
||||
"version": "0.6.3",
|
||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
|
||||
|
@ -5104,6 +5199,16 @@
|
|||
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
|
||||
"dev": true
|
||||
},
|
||||
"probe-image-size": {
|
||||
"version": "7.2.3",
|
||||
"resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.2.3.tgz",
|
||||
"integrity": "sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==",
|
||||
"requires": {
|
||||
"lodash.merge": "^4.6.2",
|
||||
"needle": "^2.5.2",
|
||||
"stream-parser": "~0.3.1"
|
||||
}
|
||||
},
|
||||
"process-nextick-args": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
||||
|
@ -5222,6 +5327,11 @@
|
|||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||
},
|
||||
"sax": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
|
||||
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
|
||||
},
|
||||
"semver": {
|
||||
"version": "7.3.8",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
|
||||
|
@ -5360,6 +5470,14 @@
|
|||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
|
||||
"integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
|
||||
},
|
||||
"stream-parser": {
|
||||
"version": "0.3.1",
|
||||
"resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz",
|
||||
"integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==",
|
||||
"requires": {
|
||||
"debug": "2"
|
||||
}
|
||||
},
|
||||
"streamsearch": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
"multer": "^1.4.5-lts.1",
|
||||
"passport": "^0.6.0",
|
||||
"passport-local": "^1.0.0",
|
||||
"probe-image-size": "^7.2.3",
|
||||
"sqlite3": "^5.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
let multer = require("multer");
|
||||
let express = require("express");
|
||||
let ffmpeg = require("fluent-ffmpeg");
|
||||
let imageProbe = require("probe-image-size");
|
||||
let ffmpegpath = require("@ffmpeg-installer/ffmpeg").path;
|
||||
let ffprobepath = require("@ffprobe-installer/ffprobe").path;
|
||||
|
||||
|
@ -91,8 +92,8 @@ router.get("/", function (req, res, next) {
|
|||
res.render("index", { user: req.user });
|
||||
});
|
||||
|
||||
router.get("/gifv/:file", function (req, res, next) {
|
||||
let url = req.protocol + "://" + req.get("host") + "/uploads/" + req.params.file;
|
||||
router.get("/gifv/:file", async function (req, res, next) {
|
||||
let url = `${req.protocol}://${req.get("host")}/uploads/${req.params.file}`;
|
||||
let width; let height;
|
||||
|
||||
let nameAndExtension = extension("uploads/" + req.params.file);
|
||||
|
@ -104,8 +105,7 @@ router.get("/gifv/:file", function (req, res, next) {
|
|||
if (err) return next(err);
|
||||
width = data.streams[0].width;
|
||||
height = data.streams[0].height;
|
||||
console.log(width + "x" + height);
|
||||
return res.render("gifv", { url: url, host: req.protocol + "://" + req.get("host"), width: width, height: height });
|
||||
return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: width, height: height });
|
||||
});
|
||||
} else if (nameAndExtension[1] == ".gif") {
|
||||
ffmpeg()
|
||||
|
@ -115,9 +115,11 @@ router.get("/gifv/:file", function (req, res, next) {
|
|||
if (err) return next(err);
|
||||
width = data.streams[0].width;
|
||||
height = data.streams[0].height;
|
||||
console.log(width + "x" + height);
|
||||
return res.render("gifv", { url: url, host: req.protocol + "://" + req.get("host"), width: width, height: height });
|
||||
return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: width, height: height });
|
||||
});
|
||||
} else {
|
||||
let imageData = await imageProbe(fs.createReadStream("uploads/" + req.params.file));
|
||||
return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: imageData.width, height: imageData.height });
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -132,7 +134,7 @@ router.post("/sharex", [checkAuth, upload.array("fileupload"), convert, handleUp
|
|||
router.post("/:id(\\d+)/delete", function(req, res, next) {
|
||||
db.all("SELECT path FROM media WHERE id = ?", [ req.params.id ], function(err, path) {
|
||||
if (err) { return next(err); }
|
||||
fs.unlink("uploads/" + path[0].path, (err => {
|
||||
fs.unlink(`uploads/${path[0].path}`, (err => {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
if (err.errno == -4058) { //File just doesnt exist anymore
|
||||
|
@ -146,8 +148,7 @@ router.post("/:id(\\d+)/delete", function(req, res, next) {
|
|||
console.log(err);
|
||||
return res.redirect("/");
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
console.log(`Deleted ${path}`);
|
||||
//Callback Hell :D
|
||||
db.run("DELETE FROM media WHERE id = ?", [
|
||||
|
|
|
@ -1,3 +1 @@
|
|||
<h1><%= message %></h1>
|
||||
<h2><%= error.status %></h2>
|
||||
<pre><%= error.stack %></pre>
|
||||
<h1><%= error %></h1>
|
||||
|
|
|
@ -8,6 +8,7 @@ function extension(str){
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<% if (extension(url)[1] == ".mp4" || extension(url)[1] == ".gif") { %>
|
||||
<meta name="twitter:image" content="<%= host %>/uploads/<%= extension(url)[0] %>.gif">
|
||||
<meta name="twitter:card" content="player"></meta>
|
||||
<meta name="twitter:player" content="<%= host %>/uploads/<%= extension(url)[0] %>.mp4">
|
||||
|
@ -15,7 +16,7 @@ function extension(str){
|
|||
<meta name="twitter:player:height" content="<%= height %>"></meta>
|
||||
<meta name="twitter:player:stream" content="<%= host %>/uploads/<%= extension(url)[0] %>.mp4">
|
||||
<meta name="twitter:player:stream:content_type" content="text/mp4"></meta>
|
||||
<link rel="alternate" type="application/json+oembed" href="<%= host %>/uploads/oembed-<%= extension(url)[0] %>.json"></link>
|
||||
<link rel="alternate" type="application/json+oembed" href="<%= host %>/uploads/oembed-<%= extension(url)[0]+extension(url)[1] %>.json"></link>
|
||||
<meta property="og:title" content="<%= extension(url)[0] %>.gif"></meta>
|
||||
<meta property="og:url" content="<%= host %>/uploads/<%= extension(url)[0] %>.gif"></meta>
|
||||
<meta property="og:description" content="Click to view the GIF"></meta>
|
||||
|
@ -29,8 +30,28 @@ function extension(str){
|
|||
<meta property="og:video:type" content="text/mp4"></meta>
|
||||
<meta property="og:video:width" content="<%= width %>"></meta>
|
||||
<meta property="og:video:height" content="<%= height %>"></meta>
|
||||
<% } else { %>
|
||||
<meta name="twitter:image" content="<%= host %>/uploads/<%= extension(url)[0] + extension(url)[1] %>">
|
||||
<meta name="twitter:card" content="player"></meta>
|
||||
<meta name="twitter:player" content="<%= host %>/uploads/<%= extension(url)[0] + extension(url)[1] %>">
|
||||
<meta name="twitter:player:width" content="<%= width %>"></meta>
|
||||
<meta name="twitter:player:height" content="<%= height %>"></meta>
|
||||
<link rel="alternate" type="application/json+oembed" href="<%= host %>/uploads/oembed-<%= extension(url)[0]+extension(url)[1] %>.json"></link>
|
||||
<meta property="og:title" content="<%= extension(url)[0] + extension(url)[1] %>"></meta>
|
||||
<meta property="og:url" content="<%= host %>/uploads/<%= extension(url)[0] + extension(url)[1] %>"></meta>
|
||||
<meta property="og:description" content="Click to view the Image"></meta>
|
||||
<meta property="og:type" content="video.other"></meta>
|
||||
<meta property="og:image" content="<%= host %>/uploads/<%= extension(url)[0] + extension(url)[1] %>"></meta>
|
||||
<meta property="og:image:type" content="image/<%= extension(url)[1].substr(1,extension(url)[1].length) %>"></meta>
|
||||
<meta property="og:image:width" content="<%= width %>"></meta>
|
||||
<meta property="og:image:height" content="<%= height %>"></meta>
|
||||
<% } %>
|
||||
</head>
|
||||
<body>
|
||||
<% if (extension(url)[1] == ".mp4" || extension(url)[1] == ".gif") { %>
|
||||
<video autoplay loop muted playsinline class="image" width="100%"><source src="/uploads/<%= extension(url)[0] %>.mp4"></video>
|
||||
<% } else { %>
|
||||
<img src="/uploads/<%= extension(url)[0] + extension(url)[1] %>" class="image" width="100%">
|
||||
<% } %>
|
||||
</body>
|
||||
</html>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue