UNPKG

5.62 kBSource Map (JSON)View Raw
1{"version":3,"file":"server-url.js","sourceRoot":"","sources":["../../../../src/http/server-url.ts"],"names":[],"mappings":";;;AAOA,8BAAgC;AAChC,iCAAmC;AACnC,+BAAiC;AAEjC,8DAA+E;AAE/E,6CAAsE;AAEtE,mFAAyE;AAEzE,IAAM,KAAK,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAC;AAGvC,QAAA,oBAAoB,GAAG,MAAM,CAAC;AAC3C,SAAgB,eAAe,CAAC,OAAe,EAAE,SAA8B;IAE3E,IAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAC,GAAQ,IAAK,OAAA,KAAK,CAAC,GAAG,CAAC,EAAV,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC;IAEnF,SAAS,CAAC,GAAG,CAAC,sDAAqB,CAAC,CAAC;IAErC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,UAAC,IAAqB,EAAE,GAAqB;QAE5D,IAAI,IAAI,GAAG,cAAc,CAAC;QAC1B,IAAI,IAAI,8EAA4E;YAChF,8DAA8D;YAC9D,oDAAkD;YAClD,oBAAoB;YACpB,+CAA+C;YAC/C,mBAAmB;aAGnB,OAAK,4BAAoB,SAAM,CAAA;YAC/B,sEAAoE;YACpE,gCAAgC,CAAC;QACrC,IAAI,IAAI,SAAS,CAAC;QAElB,IAAI,IAAI,gCAAgC,CAAC;QAEzC,IAAI,IAAI,wCAAsC;YAC1C,2DAAmD;YACnD,8CAA0C,CAAC;QAE/C,IAAI,IAAI,gBAAgB,CAAC;QAEzB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,UAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK;QACvD,GAAgC,CAAC,UAAU,GAAG,KAAK,CAAC;QACrD,IAAI,EAAE,CAAC;IACX,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,yBAAW,GAAG,KAAK,EAAE,UAAC,GAAoB,EAAE,GAAqB;QAElF,IAAM,SAAS,GAAI,GAAgC,CAAC,MAAM,CAAC;QAE3D,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE;YACvB,SAAS,CAAC,UAAU,GAAI,GAAgC,CAAC,UAAU,CAAC;SACvE;QAED,IAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;QAIxC,KAAK,CAAC,UAAU,CAAC,CAAC;QAElB,IAAM,gBAAgB,GAAG,qCAA0B,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChG,IAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EACrC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,4BAAoB,GAAG,GAAG,CAAC,CAAC;cAClD,OAAO,GAAG,gBAAgB,GAAG,GAAG,CAAC;QAKvC,KAAK,CAAC,eAAa,GAAG,CAAC,WAAW,aAAQ,QAAU,CAAC,CAAC;QACtD,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,CAAC,4BAAoB,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC;AAlED,0CAkEC","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\";\n\nimport { encodeURIComponent_RFC3986 } from \"@r2-utils-js/_utils/http/UrlUtils\";\n\nimport { IRequestPayloadExtension, _urlEncoded } from \"./request-ext\";\nimport { Server } from \"./server\";\nimport { trailingSlashRedirect } from \"./server-trailing-slash-redirect\";\n\nconst debug = debug_(\"r2:streamer#http/server-url\");\n\n// tslint:disable-next-line:variable-name\nexport const serverRemotePub_PATH = \"/url\";\nexport function serverRemotePub(_server: Server, topRouter: express.Application) {\n\n const routerUrl = express.Router({ strict: false });\n routerUrl.use(morgan(\"combined\", { stream: { write: (msg: any) => debug(msg) } }));\n\n routerUrl.use(trailingSlashRedirect);\n\n routerUrl.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 ` '${serverRemotePub_PATH}/' +` +\n ` encodeURIComponent_RFC3986(document.getElementById(\"url\").value);` +\n `location.href = url;}</script>`;\n html += \"</head>\";\n\n html += \"<body><h1>Publication URL</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 routerUrl.param(\"urlEncoded\", (req, _res, next, value, _name) => {\n (req as IRequestPayloadExtension).urlEncoded = value;\n next();\n });\n\n routerUrl.get(\"/:\" + _urlEncoded + \"(*)\", (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 urlDecodedBase64 = encodeURIComponent_RFC3986(Buffer.from(urlDecoded).toString(\"base64\"));\n const redirect = req.originalUrl.substr(0,\n req.originalUrl.indexOf(serverRemotePub_PATH + \"/\"))\n + \"/pub/\" + urlDecodedBase64 + \"/\";\n\n // No need for CORS with this URL redirect (HTML page lists available services)\n // server.setResponseCORS(res);\n\n debug(`REDIRECT: ${req.originalUrl} ==> ${redirect}`);\n res.redirect(301, redirect);\n });\n\n topRouter.use(serverRemotePub_PATH, routerUrl);\n}\n"]}
\No newline at end of file