12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- const basicAuth = require('express-basic-auth');
- const RootPage = require('./RootPage');
- const AuthorPage = require('./AuthorPage');
- const SeriesPage = require('./SeriesPage');
- const TitlePage = require('./TitlePage');
- const GenrePage = require('./GenrePage');
- const BookPage = require('./BookPage');
- const OpensearchPage = require('./OpensearchPage');
- const SearchPage = require('./SearchPage');
- const SearchHelpPage = require('./SearchHelpPage');
- module.exports = function(app, config) {
- if (!config.opds || !config.opds.enabled)
- return;
-
- const opdsRoot = config.opds.root || '/opds';
- config.opdsRoot = opdsRoot;
- const root = new RootPage(config);
- const author = new AuthorPage(config);
- const series = new SeriesPage(config);
- const title = new TitlePage(config);
- const genre = new GenrePage(config);
- const book = new BookPage(config);
- const opensearch = new OpensearchPage(config);
- const search = new SearchPage(config);
- const searchHelp = new SearchHelpPage(config);
- const routes = [
- ['', root],
- ['/root', root],
- ['/author', author],
- ['/series', series],
- ['/title', title],
- ['/genre', genre],
- ['/book', book],
- ['/opensearch', opensearch],
- ['/search', search],
- ['/search-help', searchHelp],
- ];
- const pages = new Map();
- for (const r of routes) {
- pages.set(`${opdsRoot}${r[0]}`, r[1]);
- }
- const opds = async(req, res, next) => {
- try {
- const page = pages.get(req.path);
- if (page) {
- res.set('Content-Type', 'application/atom+xml; charset=utf-8');
- const result = await page.body(req, res);
- if (result !== false)
- res.send(result);
- } else {
- next();
- }
- } catch (e) {
- res.status(500).send({error: e.message});
- if (config.branch == 'development') {
- console.error({error: e.message, url: req.originalUrl});
- }
- }
- };
- const opdsPaths = [opdsRoot, `${opdsRoot}/*`];
- if (config.opds.password) {
- if (!config.opds.user)
- throw new Error('User must not be empty if password set');
- app.use(opdsPaths, basicAuth({
- users: {[config.opds.user]: config.opds.password},
- challenge: true,
- }));
- }
- app.get(opdsPaths, opds);
- };
|