UNPKG

22.8 kBSource Map (JSON)View Raw
1{"version":3,"file":"server-opds-browse-v1.js","sourceRoot":"","sources":["../../../../src/http/server-opds-browse-v1.ts"],"names":[],"mappings":"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","sourcesContent":["// ==LICENSE-BEGIN==\n// Copyright 2017 European Digital Reading Lab. All rights reserved.\n// Licensed to the Readium Foundation under one or more contributor license agreements.\n// Use of this source code is governed by a BSD-style license\n// that can be found in the LICENSE file exposed on Github (readium) in the project repository.\n// ==LICENSE-END==\n\nimport * as debug_ from \"debug\";\nimport * as express from \"express\";\nimport * as morgan from \"morgan\";\nimport * as request from \"request\";\nimport * as requestPromise from \"request-promise-native\";\nimport * as xmldom from \"xmldom\";\n\nimport { OPDS } from \"@r2-opds-js/opds/opds1/opds\";\nimport { Entry } from \"@r2-opds-js/opds/opds1/opds-entry\";\nimport { encodeURIComponent_RFC3986, ensureAbsolute } from \"@r2-utils-js/_utils/http/UrlUtils\";\nimport { streamToBufferPromise } from \"@r2-utils-js/_utils/stream/BufferUtils\";\nimport { XML } from \"@r2-utils-js/_utils/xml-js-mapper\";\n\nimport { IRequestPayloadExtension, _urlEncoded } from \"./request-ext\";\nimport { Server } from \"./server\";\nimport { serverLCPLSD_show_PATH } from \"./server-lcp-lsd-show\";\nimport { trailingSlashRedirect } from \"./server-trailing-slash-redirect\";\nimport { serverRemotePub_PATH } from \"./server-url\";\n\nconst debug = debug_(\"r2:streamer#http/server-opds-browse-v1\");\n\n// tslint:disable-next-line:variable-name\nexport const serverOPDS_browse_v1_PATH = \"/opds-v1-browse\";\nexport function serverOPDS_browse_v1(_server: Server, topRouter: express.Application) {\n\n // tslint:disable-next-line:variable-name\n const routerOPDS_browse_v1 = express.Router({ strict: false });\n routerOPDS_browse_v1.use(morgan(\"combined\", { stream: { write: (msg: any) => debug(msg) } }));\n\n routerOPDS_browse_v1.use(trailingSlashRedirect);\n\n routerOPDS_browse_v1.get(\"/\", (_req: express.Request, res: express.Response) => {\n\n let html = \"<html><head>\";\n html += `<script type=\"text/javascript\">function encodeURIComponent_RFC3986(str) { ` +\n `return encodeURIComponent(str).replace(/[!'()*]/g, (c) => { ` +\n `return \"%\" + c.charCodeAt(0).toString(16); }); }` +\n `function go(evt) {` +\n `if (evt) { evt.preventDefault(); } var url = ` +\n `location.origin +` +\n // `location.protocol + '//' + location.hostname + ` +\n // `(location.port ? (':' + location.port) : '') + ` +\n ` '${serverOPDS_browse_v1_PATH}/' +` +\n ` encodeURIComponent_RFC3986(document.getElementById(\"url\").value);` +\n `location.href = url;}</script>`;\n html += \"</head>\";\n\n html += \"<body><h1>OPDS feed browser</h1>\";\n\n html += `<form onsubmit=\"go();return false;\">` +\n `<input type=\"text\" name=\"url\" id=\"url\" size=\"80\">` +\n `<input type=\"submit\" value=\"Go!\"></form>`;\n\n html += \"</body></html>\";\n\n res.status(200).send(html);\n });\n\n routerOPDS_browse_v1.param(\"urlEncoded\", (req, _res, next, value, _name) => {\n (req as IRequestPayloadExtension).urlEncoded = value;\n next();\n });\n\n routerOPDS_browse_v1.get(\"/:\" + _urlEncoded + \"(*)\", async (req: express.Request, res: express.Response) => {\n\n const reqparams = (req as IRequestPayloadExtension).params;\n\n if (!reqparams.urlEncoded) {\n reqparams.urlEncoded = (req as IRequestPayloadExtension).urlEncoded;\n }\n\n const urlDecoded = reqparams.urlEncoded;\n // if (urlDecoded.substr(-1) === \"/\") {\n // urlDecoded = urlDecoded.substr(0, urlDecoded.length - 1);\n // }\n debug(urlDecoded);\n\n const failure = (err: any) => {\n debug(err);\n res.status(500).send(\"<html><body><p>Internal Server Error</p><p>\"\n + err + \"</p></body></html>\");\n };\n\n const success = async (response: request.RequestResponse) => {\n\n // Object.keys(response.headers).forEach((header: string) => {\n // debug(header + \" => \" + response.headers[header]);\n // });\n\n if (response.statusCode && (response.statusCode < 200 || response.statusCode >= 300)) {\n failure(\"HTTP CODE \" + response.statusCode);\n return;\n }\n\n let responseData: Buffer;\n try {\n responseData = await streamToBufferPromise(response);\n } catch (err) {\n debug(err);\n res.status(500).send(\"<html><body><p>Internal Server Error</p><p>\"\n + err + \"</p></body></html>\");\n return;\n }\n const responseStr = responseData.toString(\"utf8\");\n const responseXml = new xmldom.DOMParser().parseFromString(responseStr);\n // debug(responseXml);\n if (!responseXml || !responseXml.documentElement) {\n res.status(500).send(\"<html><body><p>Internal Server Error</p><p>\"\n + \"XML parse fail\" + \"</p></body></html>\");\n return;\n }\n const isEntry = responseXml.documentElement.localName === \"entry\";\n let opds: OPDS | undefined;\n let opdsEntry: Entry | undefined;\n if (isEntry) {\n opdsEntry = XML.deserialize<Entry>(responseXml, Entry);\n } else {\n opds = XML.deserialize<OPDS>(responseXml, OPDS);\n }\n\n // // breakLength: 100 maxArrayLength: undefined\n // console.log(util.inspect(opds,\n // { showHidden: false, depth: 1000, colors: true, customInspect: true }));\n\n let html = \"<html><head>\";\n html += \"</head>\";\n html += \"<body><h1>\" + urlDecoded + \"</h1>\";\n if (opds && opds.Title) {\n html += \"<h2>\" + opds.Title + \"</h2>\";\n }\n if (opdsEntry && opdsEntry.Title) {\n html += \"<h2>\" + opdsEntry.Title + \"</h2>\";\n }\n if (opds && opds.Icon) {\n const iconUrl = ensureAbsolute(urlDecoded, opds.Icon);\n html += \"<img src='\" + iconUrl + \"' alt='' />\";\n }\n // if (opds.Updated) {\n // html += \"<h3>\" + opds.Updated.toUTCString() + \"</h3>\";\n // html += \"<h3>\" + opds.Updated.toDateString() + \"</h3>\";\n // html += \"<h3>\" + opds.Updated.toISOString() + \"</h3>\";\n // html += \"<h3>\" + opds.Updated.toTimeString() + \"</h3>\";\n // }\n const links = opds ? opds.Links : (opdsEntry ? opdsEntry.Links : undefined);\n if (links && links.length) {\n html += \"<p>\";\n links.forEach((link) => {\n if (link.Type &&\n (link.Type.indexOf(\"opds-catalog\") >= 0 || link.Type === \"application/atom+xml\")) {\n const linkUrl = ensureAbsolute(urlDecoded, link.Href);\n const opdsUrl = req.originalUrl.substr(0,\n req.originalUrl.indexOf(serverOPDS_browse_v1_PATH + \"/\"))\n + serverOPDS_browse_v1_PATH + \"/\" + encodeURIComponent_RFC3986(linkUrl);\n\n html += \"<a href='\" + opdsUrl\n + \"'>\" + link.Href + \"</a> (TITLE: \" + link.Title\n + \") [REL: \" + link.Rel + \"]<br/>\";\n }\n });\n html += \"</p>\";\n }\n\n function processEntry(entry: Entry) {\n\n html += \"<hr/>\";\n html += \"<div>\";\n if (opds) {\n html += \"<h3>\" + entry.Title + \"</h3>\";\n }\n if (entry.Summary) {\n if (!entry.SummaryType || entry.SummaryType === \"text\") {\n html += \"<strong>\" + entry.Summary + \"</strong>\";\n } else if (entry.SummaryType === \"html\") {\n html += \"<div>\" + entry.Summary + \"</div>\";\n }\n html += \"<br/>\";\n }\n if (entry.Content) {\n if (!entry.ContentType || entry.ContentType === \"text\") {\n html += \"<strong>\" + entry.Content + \"</strong>\";\n } else if (entry.ContentType === \"html\") {\n html += \"<div>\" + entry.Content + \"</div>\";\n }\n html += \"<br/>\";\n }\n if (entry.Links && entry.Links.length) {\n let image: string | undefined;\n let imageThumbnail: string | undefined;\n let epub: string | undefined;\n entry.Links.forEach((link) => {\n if (link.Type === \"application/epub+zip\") {\n epub = link.Href;\n }\n if (link.HasRel(\"http://opds-spec.org/image\")\n || link.HasRel(\"x-stanza-cover-image\")) {\n image = link.Href;\n }\n if (link.HasRel(\"http://opds-spec.org/image/thumbnail\")\n || link.HasRel(\"http://opds-spec.org/thumbnail\")\n || link.HasRel(\"x-stanza-cover-image-thumbnail\")) {\n imageThumbnail = link.Href;\n }\n\n if (opds && link.Type &&\n (link.Type.indexOf(\"opds-catalog\") >= 0 || link.Type === \"application/atom+xml\")) {\n const linkUrl = ensureAbsolute(urlDecoded, link.Href);\n const opdsUrl = req.originalUrl.substr(0,\n req.originalUrl.indexOf(serverOPDS_browse_v1_PATH + \"/\"))\n + serverOPDS_browse_v1_PATH + \"/\" + encodeURIComponent_RFC3986(linkUrl);\n\n html += \"<a href='\" + opdsUrl\n + \"'>\" + link.Href + \"</a> (TITLE: \" + link.Title\n + \") [REL: \" + link.Rel + \"]<br/>\";\n } else if (opds && link.Type &&\n (link.Type === \"application/vnd.readium.lcp.license.v1.0+json\")\n // && obj.rel === \"http://opds-spec.org/acquisition\"\n ) {\n const linkUrl = ensureAbsolute(urlDecoded, link.Href);\n const opdsUrl = req.originalUrl.substr(0,\n req.originalUrl.indexOf(serverOPDS_browse_v1_PATH + \"/\"))\n + serverLCPLSD_show_PATH + \"/\" + encodeURIComponent_RFC3986(linkUrl);\n\n html += \"<a href='\" + opdsUrl\n + \"'>\" + link.Href + \"</a> (TITLE: \" + link.Title\n + \") [REL: \" + link.Rel + \"]<br/>\";\n }\n });\n if (imageThumbnail) {\n const imageThumbnailUrl = ensureAbsolute(urlDecoded, imageThumbnail);\n if (image) {\n const imageUrl = ensureAbsolute(urlDecoded, image);\n html += \"<a href='\" + imageUrl + \"'><img src='\"\n + imageThumbnailUrl + \"' alt='' /></a><br/>\";\n } else {\n html += \"<img src='\" + imageThumbnailUrl + \"' alt='' /><br/>\";\n }\n } else if (image) {\n const imageUrl = ensureAbsolute(urlDecoded, image);\n html += \"<img src='\" + imageUrl + \"' alt='' /><br/>\";\n }\n if (epub) {\n const epub_ = ensureAbsolute(urlDecoded, epub);\n const epubUrl = req.originalUrl.substr(0,\n req.originalUrl.indexOf(serverOPDS_browse_v1_PATH + \"/\"))\n + serverRemotePub_PATH + \"/\" + encodeURIComponent_RFC3986(epub_);\n\n html += \"<strong><a href='\" + epubUrl + \"'>\" + epub + \"</a></strong>\";\n }\n }\n html += \"</div>\";\n }\n\n if (opds && opds.Entries && opds.Entries.length) {\n opds.Entries.forEach((entry) => {\n processEntry(entry);\n });\n }\n if (opdsEntry) {\n processEntry(opdsEntry);\n }\n\n html += \"</body></html>\";\n\n res.status(200).send(html);\n };\n\n const headers = {\n \"Accept\": \"application/json,application/xml\",\n \"Accept-Language\": \"en-UK,en-US;q=0.7,en;q=0.5\",\n \"User-Agent\": \"READIUM2\",\n };\n\n // No response streaming! :(\n // https://github.com/request/request-promise/issues/90\n const needsStreamingResponse = true;\n if (needsStreamingResponse) {\n request.get({\n headers,\n method: \"GET\",\n uri: urlDecoded,\n })\n .on(\"response\", success)\n .on(\"error\", failure);\n } else {\n let response: requestPromise.FullResponse;\n try {\n // tslint:disable-next-line:await-promise no-floating-promises\n response = await requestPromise({\n headers,\n method: \"GET\",\n resolveWithFullResponse: true,\n uri: urlDecoded,\n });\n } catch (err) {\n failure(err);\n return;\n }\n\n await success(response);\n }\n });\n\n topRouter.use(serverOPDS_browse_v1_PATH, routerOPDS_browse_v1);\n}\n"]}
\No newline at end of file