import subprocess
import sys
import tempfile
+import time
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"
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,
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:
if opal:
upgrade_opal(opal)
+ opal.init()
else:
username = input("Username: ")
password = getpass.getpass()