From 1244cb1e295275dffaec64fbdd61f93834497d40 Mon Sep 17 00:00:00 2001 From: Justin Bollinger Date: Mon, 9 Mar 2026 12:39:10 -0400 Subject: [PATCH] fix: stop sending notify_email in create_job, clarify format override prompt notify_email is not supported by all Hashview servers and caused job creation to fail. Changed default to None so it is omitted from the request unless explicitly passed. Also reworded the file format override prompt so the detected name does not appear twice in the output. --- hate_crack/api.py | 15 +++------------ hate_crack/main.py | 6 ++---- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/hate_crack/api.py b/hate_crack/api.py index 0fec8d8..90b6c65 100644 --- a/hate_crack/api.py +++ b/hate_crack/api.py @@ -772,7 +772,7 @@ class HashviewAPI: return resp.json() def create_job( - self, name, hashfile_id, customer_id, limit_recovered=False, notify_email=True + self, name, hashfile_id, customer_id, limit_recovered=False, notify_email=None ): url = f"{self.base_url}/v1/jobs/add" headers = {"Content-Type": "application/json"} @@ -787,18 +787,9 @@ class HashviewAPI: resp = self.session.post(url, json=data, headers=headers) resp.raise_for_status() try: - payload = resp.json() + return resp.json() except Exception: - return resp.json() - - msg = str(payload.get("msg", "")) - if "invalid keyword argument for JobNotifications" in msg: - # Retry without notify_email for older Hashview servers. - data.pop("notify_email", None) - resp = self.session.post(url, json=data, headers=headers) - resp.raise_for_status() - return resp.json() - return payload + return {} def stop_job(self, job_id): url = f"{self.base_url}/v1/jobs/stop/{job_id}" diff --git a/hate_crack/main.py b/hate_crack/main.py index 64c6f76..993883e 100755 --- a/hate_crack/main.py +++ b/hate_crack/main.py @@ -2849,10 +2849,10 @@ def hashview_api(): 4: "user:hash", 5: "hash_only", } - print(f"\nAuto-detected file format: {file_format} ({format_names.get(file_format, 'unknown')})") format_list = ", ".join(f"{k}={v}" for k, v in format_names.items()) + print(f"\nAuto-detected file format: {file_format} ({format_names.get(file_format, 'unknown')})") override = input( - f"Press Enter to accept or enter a format number [{format_list}]: " + f"Override format number? [{format_list}] (Enter to accept): " ).strip() if override: try: @@ -2891,14 +2891,12 @@ def hashview_api(): if create_job.upper() == "Y": job_name = input("Enter job name: ") limit_recovered = False - notify_email = True try: job_result = api_harness.create_job( job_name, result["hashfile_id"], customer_id, limit_recovered, - notify_email, ) print( f"\n✓ Success: {job_result.get('msg', 'Job created')}"