From 095cd6e3b2073d5f5549e7b5b1400cda4b2a11d8 Mon Sep 17 00:00:00 2001 From: Lorenzo Di Fuccia Date: Mon, 21 May 2018 21:42:08 +0200 Subject: [PATCH] Added credential parser --- safaribooks.py | 95 +++++++++++++++++++++++++++++--------------------- 1 file changed, 55 insertions(+), 40 deletions(-) diff --git a/safaribooks.py b/safaribooks.py index 04e8a3e..f155278 100644 --- a/safaribooks.py +++ b/safaribooks.py @@ -280,7 +280,7 @@ class SafariBooks: else: self.display.info("Logging into Safari Books Online...", state=True) - self.do_login(*[c.replace("'", "").replace('"', "") for c in args.cred]) + self.do_login(*args.cred) if not args.no_cookies: json.dump(self.cookies, open(COOKIES_FILE, "w")) @@ -402,6 +402,20 @@ class SafariBooks: return response + @staticmethod + def parse_cred(cred): + if ":" not in cred: + return False + + sep = cred.index(":") + new_cred = ["", ""] + new_cred[0] = cred[:sep].strip("'").strip('"') + if "@" not in new_cred[0]: + return False + + new_cred[1] = cred[sep + 1:] + return new_cred + def do_login(self, email, password): response = self.requests_provider(self.BASE_URL) if response == 0: @@ -962,48 +976,49 @@ class SafariBooks: # MAIN -arguments = argparse.ArgumentParser(prog="safaribooks.py", - description="Download and generate an EPUB of your favorite books" - " from Safari Books Online.", - add_help=False, - allow_abbrev=False) +if __name__ == "__main__": + arguments = argparse.ArgumentParser(prog="safaribooks.py", + description="Download and generate an EPUB of your favorite books" + " from Safari Books Online.", + add_help=False, + allow_abbrev=False) -arguments.add_argument( - "--cred", metavar="", default=False, - help="Credentials used to perform the auth login on Safari Books Online." - " Es. ` --cred \"account_mail@mail.com:password01\" `." -) -arguments.add_argument( - "--no-cookies", dest="no_cookies", action='store_true', - help="Prevent your session data to be saved into `cookies.json` file." -) -arguments.add_argument( - "--no-kindle", dest="no_kindle", action='store_true', - help="Remove some CSS rules that block overflow on `table` and `pre` elements." - " Use this option if you're not going to export the EPUB to E-Readers like Amazon Kindle." -) -arguments.add_argument( - "--preserve-log", dest="log", action='store_true', help="Leave the `info_XXXXXXXXXXXXX.log`" - " file even if there isn't any error." -) -arguments.add_argument("--help", action="help", default=argparse.SUPPRESS, help='Show this help message.') -arguments.add_argument( - "bookid", metavar='', - help="Book digits ID that you want to download. You can find it in the URL (X-es):" - " `https://www.safaribooksonline.com/library/view/book-name/XXXXXXXXXXXXX/`" -) + arguments.add_argument( + "--cred", metavar="", default=False, + help="Credentials used to perform the auth login on Safari Books Online." + " Es. ` --cred \"account_mail@mail.com:password01\" `." + ) + arguments.add_argument( + "--no-cookies", dest="no_cookies", action='store_true', + help="Prevent your session data to be saved into `cookies.json` file." + ) + arguments.add_argument( + "--no-kindle", dest="no_kindle", action='store_true', + help="Remove some CSS rules that block overflow on `table` and `pre` elements." + " Use this option if you're not going to export the EPUB to E-Readers like Amazon Kindle." + ) + arguments.add_argument( + "--preserve-log", dest="log", action='store_true', help="Leave the `info_XXXXXXXXXXXXX.log`" + " file even if there isn't any error." + ) + arguments.add_argument("--help", action="help", default=argparse.SUPPRESS, help='Show this help message.') + arguments.add_argument( + "bookid", metavar='', + help="Book digits ID that you want to download. You can find it in the URL (X-es):" + " `https://www.safaribooksonline.com/library/view/book-name/XXXXXXXXXXXXX/`" + ) -args_parsed = arguments.parse_args() + args_parsed = arguments.parse_args() -if args_parsed.cred: - cred = args_parsed.cred.split(":") - if len(cred) != 2 or "@" not in cred[0]: - arguments.error("invalid credential: %s" % args_parsed.cred) + if args_parsed.cred: + cred = SafariBooks.parse_cred(args_parsed.cred) + if not cred: + arguments.error("invalid credential: %s" % args_parsed.cred) - args_parsed.cred = cred + args_parsed.cred = cred -else: - if args_parsed.no_cookies: - arguments.error("invalid option: `--no-cookies` is valid only if you use the `--cred` option") + else: + if args_parsed.no_cookies: + arguments.error("invalid option: `--no-cookies` is valid only if you use the `--cred` option") -SafariBooks(args_parsed) + SafariBooks(args_parsed)