diff --git a/Dockerfile b/Dockerfile index 83f6dab..204daa8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -107,7 +107,7 @@ RUN echo "**** build & install calibre-web ****" 1>&2 \ -r requirements.txt \ -r optional-requirements.txt -run echo "**** copy unrar and kepubify to app folder ****" 1>&2 \ +RUN echo "**** copy unrar and kepubify to app folder ****" 1>&2 \ && mv /usr/bin/unrar /app/bin \ && mv ./root/go/bin/kepubify /app/bin @@ -153,6 +153,7 @@ RUN \ && apt install -y imagemagick \ && apt install -y bash \ && apt install -y procps \ + && apt install -y vim \ && apt install -y python3 diff --git a/patches/calibre-web/remote_login_py.patch b/patches/calibre-web/remote_login_py.patch index 5eed49e..b178f38 100644 --- a/patches/calibre-web/remote_login_py.patch +++ b/patches/calibre-web/remote_login_py.patch @@ -1,43 +1,73 @@ -*** cps/remotelogin.py Thu Dec 26 10:33:32 2024 ---- ../calibre-web/cps/remotelogin.py Thu Dec 26 10:32:13 2024 +*** remotelogin.py.ori Fri Dec 27 19:50:57 2024 +--- remotelogin.py Fri Dec 27 20:05:34 2024 *************** *** 33,38 **** ---- 33,47 ---- +--- 33,41 ---- from .render_template import render_title_template from .usermanagement import user_login_required -+ try: -+ import qrcode -+ from base64 import b64encode -+ from base64 import b64encode -+ from io import BytesIO -+ from flask import send_file -+ has_qrcode = True -+ except ImportError: -+ has_qrcode = False - - remotelogin = Blueprint('remotelogin', __name__) - log = logger.create() ++ remotelogin = Blueprint('remotelogin', __name__) ++ log = logger.create() ++ + try: + import qrcode + from base64 import b64encode *************** -*** 59,64 **** ---- 68,87 ---- - ub.session.add(auth_token) +*** 40,51 **** + from io import BytesIO + from flask import send_file + has_qrcode = True + except ImportError: + has_qrcode = False +! +! remotelogin = Blueprint('remotelogin', __name__) +! log = logger.create() +! + + def remote_login_required(f): + @wraps(f) +--- 43,52 ---- + from io import BytesIO + from flask import send_file + has_qrcode = True ++ log.info("Magic Link QRCode is enabled") + except ImportError: + has_qrcode = False +! log.info("QRCode is not available") + + def remote_login_required(f): + @wraps(f) +*************** +*** 69,74 **** +--- 70,76 ---- ub.session_commit() verify_url = url_for('remotelogin.verify_token', token=auth_token.auth_token, _external=true) -+ if has_qrcode: -+ qr = qrcode.QRCode(version=1, -+ error_correction=qrcode.constants.ERROR_CORRECT_H, -+ box_size=5, -+ border=4, -+ ) -+ qr.add_data(verify_url) -+ qr.make(fit=True) -+ img = qr.make_image() -+ img_buf = BytesIO() -+ img.save(img_buf,format = 'jpeg') -+ qrcode_url = "data:image/jpeg;base64, %s" % b64encode(img_buf.getvalue()).decode() -+ else: -+ qrcode_url = "" + if has_qrcode: ++ log.debug("Building the QRCode for magik link") + qr = qrcode.QRCode(version=1, + error_correction=qrcode.constants.ERROR_CORRECT_H, + box_size=5, +*************** +*** 83,90 **** + else: + qrcode_url = "" log.debug("Remot Login request with token: %s", auth_token.auth_token) - return render_title_template('remote_login.html', title=_("Login"), token=auth_token.auth_token, - verify_url=verify_url, page="remotelogin") +! return render_title_template('remote_login.html', title=_("Login"), token=auth_token.auth_token, +! verify_url=verify_url, page="remotelogin") + + + @remotelogin.route('/verify/') +--- 85,97 ---- + else: + qrcode_url = "" + log.debug("Remot Login request with token: %s", auth_token.auth_token) +! return render_title_template('remote_login.html', +! title=_("Login"), +! token=auth_token.auth_token, +! verify_url=verify_url, +! page="remotelogin", +! qrcode=qrcode, +! qrcode_url=qrcode_url) + + + @remotelogin.route('/verify/')