UNPKG

4.43 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.serverPub = exports.serverPub_PATH = void 0;
4var debug_ = require("debug");
5var express = require("express");
6var morgan = require("morgan");
7var path = require("path");
8var querystring = require("querystring");
9var UrlUtils_1 = require("r2-utils-js/dist/es5/src/_utils/http/UrlUtils");
10var request_ext_1 = require("./request-ext");
11var server_trailing_slash_redirect_1 = require("./server-trailing-slash-redirect");
12var debug = debug_("r2:streamer#http/server-pub");
13exports.serverPub_PATH = "/pub";
14function serverPub(server, topRouter) {
15 var urlBook = exports.serverPub_PATH + "/PATH_BASE64/manifest.json";
16 var urlBookShowAll = "./manifest.json/show/all";
17 var urlReaderNYPL = "/readerNYPL/?url=PREFIX" + querystring.escape(urlBook);
18 var urlReaderEPUBJS = "https://s3.amazonaws.com/epubjs-manifest/examples/manifest.html?href=PREFIZ" + urlBook;
19 var urlReaderHADRIEN = "/readerHADRIEN/?manifest=true&href=PREFIX" + querystring.escape(urlBook);
20 var urlReaderHADRIEN_ = "https://hadriengardeur.github.io/webpub-manifest/examples/viewer/?manifest=true&href=PREFIX"
21 + querystring.escape(urlBook);
22 var htmlLanding = "<html><body><h1>PATH_STR</h1><h2><a href='" +
23 urlBookShowAll + "'>" + urlBookShowAll + "</a></h2>" +
24 (server.disableReaders ? "" : ("<p>Reader NYPL:<br><a href='" + urlReaderNYPL + "'>" + urlReaderNYPL + "</a></p>" +
25 "<p>Reader EPUB.js:<br><a href='" + urlReaderEPUBJS + "'>" + urlReaderEPUBJS + "</a></p>" +
26 "<p>Reader HADRIEN:<br><a href='" + urlReaderHADRIEN + "'>" + urlReaderHADRIEN + "</a></p>" +
27 "<p>Reader HADRIEN BASIC:<br><a href='" + urlReaderHADRIEN_ + "'>" + urlReaderHADRIEN_ + "</a></p>")) +
28 "</body></html>";
29 var routerPathBase64 = express.Router({ strict: false });
30 routerPathBase64.use(morgan("combined", { stream: { write: function (msg) { return debug(msg); } } }));
31 routerPathBase64.use(server_trailing_slash_redirect_1.trailingSlashRedirect);
32 routerPathBase64.param("pathBase64", function (req, res, next, value, _name) {
33 var reqparams = req.params;
34 if (value.indexOf(server.lcpBeginToken) === 0 && value.indexOf(server.lcpEndToken) > 0) {
35 var i = value.indexOf(server.lcpEndToken);
36 var pass64 = value.substr(server.lcpBeginToken.length, i - server.lcpBeginToken.length);
37 req.lcpPass64 = pass64;
38 value = value.substr(i + server.lcpEndToken.length);
39 reqparams.pathBase64 = value;
40 debug(value);
41 }
42 var valueStr = Buffer.from(value, "base64").toString("utf8");
43 if (UrlUtils_1.isHTTP(valueStr)) {
44 req.pathBase64 = value;
45 next();
46 return;
47 }
48 var found = server.getPublications().find(function (filePath) {
49 var filePathBase64 = Buffer.from(filePath).toString("base64");
50 return value === filePathBase64;
51 });
52 if (found) {
53 req.pathBase64 = value;
54 next();
55 }
56 else {
57 res.status(403).send("<html><body><p>Forbidden</p><p>INVALID parameter: <code>"
58 + reqparams.pathBase64 + "</code></p></body></html>");
59 }
60 });
61 routerPathBase64.get("/:" + request_ext_1._pathBase64, function (req, res) {
62 var reqparams = req.params;
63 if (!reqparams.pathBase64) {
64 reqparams.pathBase64 = req.pathBase64;
65 }
66 var pathBase64Str = Buffer.from(reqparams.pathBase64, "base64").toString("utf8");
67 debug("Publication: " + pathBase64Str);
68 var isSecureHttp = req.secure ||
69 req.protocol === "https" ||
70 req.get("X-Forwarded-Proto") === "https";
71 res.status(200).send(htmlLanding
72 .replace(/PATH_STR/g, path.basename(pathBase64Str))
73 .replace(/PATH_BASE64/g, UrlUtils_1.encodeURIComponent_RFC3986(reqparams.pathBase64))
74 .replace(/PREFIX/g, (isSecureHttp ?
75 querystring.escape("https://") : querystring.escape("http://"))
76 + req.headers.host).replace(/PREFIZ/g, (isSecureHttp ?
77 "https://" : "http://")
78 + req.headers.host));
79 });
80 topRouter.use(exports.serverPub_PATH, routerPathBase64);
81 return routerPathBase64;
82}
83exports.serverPub = serverPub;
84//# sourceMappingURL=server-pub.js.map
\No newline at end of file