X-Git-Url: https://code.delx.au/monosys/blobdiff_plain/b663b35ed4d4a641a24fd71a0946a0d5bafd5c5f..a707b040584c14537cef8c7b8e28c2d459c3f63e:/opal-card-tool diff --git a/opal-card-tool b/opal-card-tool index 35bac42..26fc6c7 100755 --- a/opal-card-tool +++ b/opal-card-tool @@ -12,6 +12,7 @@ import requests import subprocess import sys import tempfile +import time VERSION = 3 @@ -19,6 +20,7 @@ VERSION = 3 CACHE_DIR = os.environ.get("XDG_CACHE_HOME", os.path.expanduser("~/.cache/opal-card-tool")) PICKLE_FILE = os.path.join(CACHE_DIR, "pickle") +USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0" OPAL_BASE = "https://www.opal.com.au" LOGIN_URL = OPAL_BASE + "/login/registeredUserUsernameAndPasswordLogin" CARD_DETAILS_URL = OPAL_BASE + "/registered/getJsonCardDetailsArray" @@ -66,11 +68,26 @@ class Opal(object): self.version = VERSION self.username = username self.password = password + self.cards = [] + + self.init() + def init(self): self.session = requests.Session() - self.cards = [] + self.session.headers["User-Agent"] = USER_AGENT def login(self): + print("Attempting login ", end="", flush=True) + for i in range(10): + print(".", end="", flush=True) + self.login_once() + if self.check_login(): + print(" ok") + return + + time.sleep(1) + + def login_once(self): r = self.session.post(LOGIN_URL, { "h_username": self.username, "h_password": self.password, @@ -82,6 +99,14 @@ class Opal(object): if json["errorMessage"]: raise Exception("Failed to login: %s" % json["errorMessage"]) + def check_login(self): + r = self.session.get(CARD_DETAILS_URL) + try: + r.json() + return True + except: + return False + def load(self): self.load_cards() for card in self.cards: @@ -385,6 +410,7 @@ def load_opal(): if opal: upgrade_opal(opal) + opal.init() else: username = input("Username: ") password = getpass.getpass()