From 74d8cd3f9485cf63990289661fec154f6d69f63a Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 24 Nov 2022 20:37:35 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20basic-auth=20=D0=B4=D0=BB=D1=8F=20opds?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/config/base.js | 6 ++++++ server/config/index.js | 1 + server/core/opds/index.js | 17 ++++++++++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/server/config/base.js b/server/config/base.js index 40a0801..bd1bd53 100644 --- a/server/config/base.js +++ b/server/config/base.js @@ -45,5 +45,11 @@ module.exports = { host: '0.0.0.0', port: '22380', }, + //opds: false, + opds: { + enabled: true, + user: '', + password: '', + }, }; diff --git a/server/config/index.js b/server/config/index.js index 3552fce..049bcc0 100644 --- a/server/config/index.js +++ b/server/config/index.js @@ -20,6 +20,7 @@ const propsToSave = [ 'allowRemoteLib', 'remoteLib', 'server', + 'opds', ]; let instance = null; diff --git a/server/core/opds/index.js b/server/core/opds/index.js index b5c85e1..29aaab7 100644 --- a/server/core/opds/index.js +++ b/server/core/opds/index.js @@ -1,3 +1,5 @@ +const basicAuth = require('express-basic-auth'); + const RootPage = require('./RootPage'); const AuthorPage = require('./AuthorPage'); const SeriesPage = require('./SeriesPage'); @@ -9,6 +11,9 @@ const OpensearchPage = require('./OpensearchPage'); const SearchPage = require('./SearchPage'); module.exports = function(app, config) { + if (!config.opds || !config.opds.enabled) + return; + const opdsRoot = '/opds'; config.opdsRoot = opdsRoot; @@ -62,6 +67,16 @@ module.exports = function(app, config) { } }; - app.get([opdsRoot, `${opdsRoot}/*`], opds); + 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); };