From d9c10b830a18629c1bb13524db67eaaff669af1b Mon Sep 17 00:00:00 2001
From: Ozzie Isaacs <ozzie.fernandez.isaacs@googlemail.com>
Date: Sun, 23 Jan 2022 13:43:35 +0100
Subject: [PATCH] Added variable to allow loading cover from localhost

---
 cps/cli.py    |  3 +++
 cps/helper.py | 13 +++++++------
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/cps/cli.py b/cps/cli.py
index 3685e8e2..31ea8417 100644
--- a/cps/cli.py
+++ b/cps/cli.py
@@ -45,6 +45,7 @@ parser.add_argument('-v', '--version', action='version', help='Shows version num
 parser.add_argument('-i', metavar='ip-address', help='Server IP-Address to listen')
 parser.add_argument('-s', metavar='user:pass', help='Sets specific username to new password')
 parser.add_argument('-f', action='store_true', help='Flag is depreciated and will be removed in next version')
+parser.add_argument('-l', action='store_true', help='Allow loading covers from localhost')
 args = parser.parse_args()
 
 settingspath = args.p or os.path.join(_CONFIG_DIR, "app.db")
@@ -77,6 +78,8 @@ if (args.k and not args.c) or (not args.k and args.c):
 if args.k == "":
     keyfilepath = ""
 
+# load covers from localhost
+allow_localhost = args.l or None
 # handle and check ip address argument
 ip_address = args.i or None
 if ip_address:
diff --git a/cps/helper.py b/cps/helper.py
index 622af817..2cfb119b 100644
--- a/cps/helper.py
+++ b/cps/helper.py
@@ -46,7 +46,7 @@ try:
 except ImportError:
     use_unidecode = False
 
-from . import calibre_db
+from . import calibre_db, cli
 from .tasks.convert import TaskConvert
 from . import logger, config, get_locale, db, ub
 from . import gdriveutils as gd
@@ -584,11 +584,12 @@ def get_book_cover_internal(book, use_generic_cover_on_failure):
 # saves book cover from url
 def save_cover_from_url(url, book_path):
     try:
-        # 127.0.x.x, localhost, [::1], [::ffff:7f00:1]
-        ip = socket.getaddrinfo(urlparse(url).hostname, 0)[0][4][0]
-        if ip.startswith("127.") or ip.startswith('::ffff:7f') or ip == "::1":
-            log.error("Localhost was accessed for cover upload")
-            return False, _("You are not allowed to access localhost for cover uploads")
+        if not cli.allow_localhost:
+            # 127.0.x.x, localhost, [::1], [::ffff:7f00:1]
+            ip = socket.getaddrinfo(urlparse(url).hostname, 0)[0][4][0]
+            if ip.startswith("127.") or ip.startswith('::ffff:7f') or ip == "::1":
+                log.error("Localhost was accessed for cover upload")
+                return False, _("You are not allowed to access localhost for cover uploads")
         img = requests.get(url, timeout=(10, 200))      # ToDo: Error Handling
         img.raise_for_status()
         return save_cover(img, book_path)