r2-streamer-js
Version:
Readium 2 'streamer' for NodeJS (TypeScript)
65 lines • 3.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.serverRemotePub_PATH = void 0;
exports.serverRemotePub = serverRemotePub;
var debug_ = require("debug");
var express = require("express");
var morgan = require("morgan");
var UrlUtils_1 = require("r2-utils-js/dist/es5/src/_utils/http/UrlUtils");
var request_ext_1 = require("./request-ext");
var server_trailing_slash_redirect_1 = require("./server-trailing-slash-redirect");
var debug = debug_("r2:streamer#http/server-url");
exports.serverRemotePub_PATH = "/url";
function serverRemotePub(_server, topRouter) {
var routerUrl = express.Router({ strict: false });
routerUrl.use(morgan("combined", { stream: { write: function (msg) { return debug(msg); } } }));
routerUrl.use(server_trailing_slash_redirect_1.trailingSlashRedirect);
routerUrl.get("/", function (_req, res) {
var html = "<html><head>";
html += "<script type=\"text/javascript\">function encodeURIComponent_RFC3986(str) { " +
"return encodeURIComponent(str).replace(/[!'()*]/g, (c) => { " +
"return \"%\" + c.charCodeAt(0).toString(16); }); }" +
"function go(evt) {" +
"if (evt) { evt.preventDefault(); } var url = " +
"location.origin +" +
" '".concat(exports.serverRemotePub_PATH, "/' +") +
" encodeURIComponent_RFC3986(document.getElementById(\"url\").value);" +
"location.href = url;}</script>";
html += "</head>";
html += "<body><h1>Publication URL</h1>";
html += "<form onsubmit=\"go();return false;\">" +
"<input type=\"text\" name=\"url\" id=\"url\" size=\"80\">" +
"<input type=\"submit\" value=\"Go!\"></form>";
html += "</body></html>";
res.status(200).send(html);
});
routerUrl.param("urlEncoded", function (req, _res, next, value, _name) {
if (typeof value !== "string") {
if (Array.isArray(value)) {
value = value.join("/");
}
}
req.urlEncoded = value;
next();
});
routerUrl.get("/*" + request_ext_1._urlEncoded, function (req, res) {
var reqparams = req.params;
if (!reqparams.urlEncoded) {
reqparams.urlEncoded = req.urlEncoded;
}
if (reqparams.urlEncoded && typeof reqparams.urlEncoded !== "string") {
if (Array.isArray(reqparams.urlEncoded)) {
reqparams.urlEncoded = reqparams.urlEncoded.join("/");
}
}
var urlDecoded = reqparams.urlEncoded;
debug(urlDecoded);
var urlDecodedBase64 = (0, UrlUtils_1.encodeURIComponent_RFC3986)(Buffer.from(urlDecoded).toString("base64"));
var redirect = req.originalUrl.substr(0, req.originalUrl.indexOf(exports.serverRemotePub_PATH + "/"))
+ "/pub/" + urlDecodedBase64 + "/";
debug("REDIRECT: ".concat(req.originalUrl, " ==> ").concat(redirect));
res.redirect(301, redirect);
});
topRouter.use(exports.serverRemotePub_PATH, routerUrl);
}
//# sourceMappingURL=server-url.js.map