1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.serverRemotePub = exports.serverRemotePub_PATH = void 0;
|
4 | var debug_ = require("debug");
|
5 | var express = require("express");
|
6 | var morgan = require("morgan");
|
7 | var UrlUtils_1 = require("r2-utils-js/dist/es5/src/_utils/http/UrlUtils");
|
8 | var request_ext_1 = require("./request-ext");
|
9 | var server_trailing_slash_redirect_1 = require("./server-trailing-slash-redirect");
|
10 | var debug = debug_("r2:streamer#http/server-url");
|
11 | exports.serverRemotePub_PATH = "/url";
|
12 | function serverRemotePub(_server, topRouter) {
|
13 | var routerUrl = express.Router({ strict: false });
|
14 | routerUrl.use(morgan("combined", { stream: { write: function (msg) { return debug(msg); } } }));
|
15 | routerUrl.use(server_trailing_slash_redirect_1.trailingSlashRedirect);
|
16 | routerUrl.get("/", function (_req, res) {
|
17 | var html = "<html><head>";
|
18 | html += "<script type=\"text/javascript\">function encodeURIComponent_RFC3986(str) { " +
|
19 | "return encodeURIComponent(str).replace(/[!'()*]/g, (c) => { " +
|
20 | "return \"%\" + c.charCodeAt(0).toString(16); }); }" +
|
21 | "function go(evt) {" +
|
22 | "if (evt) { evt.preventDefault(); } var url = " +
|
23 | "location.origin +" +
|
24 | (" '" + exports.serverRemotePub_PATH + "/' +") +
|
25 | " encodeURIComponent_RFC3986(document.getElementById(\"url\").value);" +
|
26 | "location.href = url;}</script>";
|
27 | html += "</head>";
|
28 | html += "<body><h1>Publication URL</h1>";
|
29 | html += "<form onsubmit=\"go();return false;\">" +
|
30 | "<input type=\"text\" name=\"url\" id=\"url\" size=\"80\">" +
|
31 | "<input type=\"submit\" value=\"Go!\"></form>";
|
32 | html += "</body></html>";
|
33 | res.status(200).send(html);
|
34 | });
|
35 | routerUrl.param("urlEncoded", function (req, _res, next, value, _name) {
|
36 | req.urlEncoded = value;
|
37 | next();
|
38 | });
|
39 | routerUrl.get("/:" + request_ext_1._urlEncoded + "(*)", function (req, res) {
|
40 | var reqparams = req.params;
|
41 | if (!reqparams.urlEncoded) {
|
42 | reqparams.urlEncoded = req.urlEncoded;
|
43 | }
|
44 | var urlDecoded = reqparams.urlEncoded;
|
45 | debug(urlDecoded);
|
46 | var urlDecodedBase64 = UrlUtils_1.encodeURIComponent_RFC3986(Buffer.from(urlDecoded).toString("base64"));
|
47 | var redirect = req.originalUrl.substr(0, req.originalUrl.indexOf(exports.serverRemotePub_PATH + "/"))
|
48 | + "/pub/" + urlDecodedBase64 + "/";
|
49 | debug("REDIRECT: " + req.originalUrl + " ==> " + redirect);
|
50 | res.redirect(301, redirect);
|
51 | });
|
52 | topRouter.use(exports.serverRemotePub_PATH, routerUrl);
|
53 | }
|
54 | exports.serverRemotePub = serverRemotePub;
|
55 |
|
\ | No newline at end of file |