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)