v5.1: clean nav UI, junk-domain purge, smart LLM-assisted scan, session launcher with in-UI screenshot proof
This commit is contained in:
113
launcher_bridge.py
Normal file
113
launcher_bridge.py
Normal file
@@ -0,0 +1,113 @@
|
||||
#!/usr/bin/env python3
|
||||
# COOKIE VAULT v5 — session-1 chrome launcher bridge
|
||||
# Runs AS drjones (interactive Session 1) via scheduled task.
|
||||
# Listens 127.0.0.1:5067, receives {cookies, domain} JSON, launches visible Chrome+selenium.
|
||||
import json, os, re, time, threading
|
||||
from http.server import BaseHTTPRequestHandler, HTTPServer
|
||||
from urllib.parse import urlparse
|
||||
|
||||
SESSION_DIR = r"C:\cookievault\sessions"
|
||||
|
||||
class Handler(BaseHTTPRequestHandler):
|
||||
def log_message(self, *a): pass
|
||||
def do_GET(self):
|
||||
if self.path.startswith("/shot/"):
|
||||
tok = self.path[len("/shot/"):]
|
||||
img = SCREENSHOTS.get(tok)
|
||||
if not img:
|
||||
self.send_response(404); self.end_headers(); return
|
||||
self.send_response(200)
|
||||
self.send_header("Content-Type", "image/png")
|
||||
self.send_header("Content-Length", str(len(img)))
|
||||
self.end_headers()
|
||||
self.wfile.write(img)
|
||||
return
|
||||
self.send_response(404); self.end_headers()
|
||||
def do_POST(self):
|
||||
if urlparse(self.path).path != "/launch":
|
||||
self.send_response(404); self.end_headers(); return
|
||||
try:
|
||||
ln = int(self.headers.get("Content-Length", 0))
|
||||
data = json.loads(self.rfile.read(ln))
|
||||
domain = data.get("domain", "")
|
||||
cookies = data.get("cookies", [])
|
||||
if not domain or not cookies:
|
||||
self._json(400, {"ok": False, "error": "domain and cookies required"}); return
|
||||
tok = "%s_%d" % (re.sub(r'[^a-z0-9]', '', domain.lower())[:20], int(time.time()))
|
||||
threading.Thread(target=launch, args=(domain, cookies, tok), daemon=True).start()
|
||||
self._json(200, {"ok": True, "launched": len(cookies), "token": tok})
|
||||
except Exception as e:
|
||||
self._json(500, {"ok": False, "error": str(e)})
|
||||
|
||||
def _json(self, code, obj):
|
||||
body = json.dumps(obj).encode()
|
||||
self.send_response(code)
|
||||
self.send_header("Content-Type", "application/json")
|
||||
self.send_header("Content-Length", str(len(body)))
|
||||
self.end_headers()
|
||||
self.wfile.write(body)
|
||||
|
||||
def launch(domain, cookies, tok):
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.chrome.options import Options
|
||||
opts = Options()
|
||||
profile = os.path.join(SESSION_DIR, re.sub(r'[^a-zA-Z0-9]', '_', domain))
|
||||
os.makedirs(profile, exist_ok=True)
|
||||
opts.add_argument(r"--user-data-dir=" + profile)
|
||||
opts.add_argument("--no-first-run")
|
||||
opts.add_argument("--no-default-browser-check")
|
||||
opts.add_argument("--start-maximized")
|
||||
opts.add_argument("--window-size=1440,900")
|
||||
opts.add_argument("--disable-gpu")
|
||||
driver = webdriver.Chrome(options=opts)
|
||||
try:
|
||||
SCREENSHOTS[tok] = _png(driver, "starting")
|
||||
host = domain.lstrip(".")
|
||||
try:
|
||||
driver.get(f"https://{host}/favicon.ico")
|
||||
except Exception:
|
||||
try: driver.get(f"https://{host}/")
|
||||
except Exception: pass
|
||||
time.sleep(1.5)
|
||||
added = 0
|
||||
for ck in cookies:
|
||||
try:
|
||||
c = {"name": ck.get("name"), "value": ck.get("value", ""),
|
||||
"domain": ck.get("domain", ""), "path": ck.get("path", "/") or "/",
|
||||
"secure": bool(ck.get("secure"))}
|
||||
if not c["name"]:
|
||||
continue
|
||||
exp = ck.get("expiry") or 0
|
||||
try: exp = int(float(exp))
|
||||
except Exception: exp = 0
|
||||
if exp > 0: c["expiry"] = exp
|
||||
try:
|
||||
driver.add_cookie(c); added += 1
|
||||
except Exception:
|
||||
c2 = dict(c); c2.pop("expiry", None)
|
||||
try: driver.add_cookie(c2); added += 1
|
||||
except Exception: pass
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
driver.get(f"https://{host}/")
|
||||
time.sleep(4)
|
||||
SCREENSHOTS[tok] = _png(driver, "done")
|
||||
except Exception:
|
||||
SCREENSHOTS[tok] = _png(driver, "cookies-set")
|
||||
with open(os.path.join(SESSION_DIR, "_launch.log"), "a", encoding="utf-8") as f:
|
||||
f.write(f"{time.ctime()} {domain}: added {added}/{len(cookies)} cookies\n")
|
||||
finally:
|
||||
try: driver.quit()
|
||||
except Exception: pass
|
||||
|
||||
def _png(driver, stage):
|
||||
try:
|
||||
return driver.get_screenshot_as_png()
|
||||
except Exception:
|
||||
return b""
|
||||
|
||||
SCREENSHOTS = {}
|
||||
|
||||
if __name__ == "__main__":
|
||||
HTTPServer(("127.0.0.1", 5067), Handler).serve_forever()
|
||||
Reference in New Issue
Block a user