Wire authenticated voice watch notices through an owned native launcher
This commit is contained in:
1 parent
eeee2756c7
commit
b66d9164ad
23 files changed
+1981
-10
No files matched your search
@@ -32,6 +32,11 @@ import is_hatti
|
||||
import internet
|
||||
import jev_denetim
|
||||
|
||||
from bekci_watch import MetadataFilter
|
||||
|
||||
# Installed only by owned native launcher, never an HTTP control endpoint.
|
||||
WATCH_OWNER = None
|
||||
|
||||
SURUM = "8"
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
try:
|
||||
@@ -122,7 +127,7 @@ seq = [0]
|
||||
|
||||
def log(msg):
|
||||
line = time.strftime("%Y-%m-%d %H:%M:%S ") + msg
|
||||
print(line, flush=True)
|
||||
print(line, file=sys.stderr, flush=True)
|
||||
with lock:
|
||||
with open(os.path.join(LOGDIR, "bridge.log"), "a", encoding="utf-8") as f:
|
||||
f.write(line + "\n")
|
||||
@@ -1071,6 +1076,8 @@ class H(http.server.BaseHTTPRequestHandler):
|
||||
body = self._read()
|
||||
path = self.path
|
||||
if path.startswith("/aiturk/codex-baglama/"):
|
||||
if WATCH_OWNER is not None:
|
||||
return self._send_json(404, {"error": "not available on native owner"})
|
||||
return self._control(path)
|
||||
if DEBUG:
|
||||
log(f"[{n} giris {self.command} {path[:70]}] cl={self.headers.get('Content-Length')} enc={self.headers.get('Content-Encoding')} govde={len(body)}")
|
||||
@@ -1391,6 +1398,7 @@ class H(http.server.BaseHTTPRequestHandler):
|
||||
except Exception as e:
|
||||
log(f"[{n} responses] govde cozulemedi: {e}")
|
||||
return self._send_json(400, {"error": {"message": f"bridge: govde cozulemedi: {e}"}})
|
||||
self.watch_correlation = WATCH_OWNER.capture(dict(self.headers), req) if WATCH_OWNER else None
|
||||
slug = req.get("model", "")
|
||||
gelen = slug # Codex'in bu sohbet icin gonderdigi ad (listeden secilen model)
|
||||
if not ek_model_mu(gelen):
|
||||
@@ -1669,6 +1677,23 @@ class H(http.server.BaseHTTPRequestHandler):
|
||||
break
|
||||
log(f"{tag} deneme {attempt}: {e}")
|
||||
time.sleep(min(2 * attempt, 8)); continue
|
||||
# Only the resolved exact voice target owns this sideband protocol.
|
||||
# Other models retain their original response/Jev/stream pipeline.
|
||||
if target == 'Sesli-Hizli-Zeki':
|
||||
# Capture was taken before rewriting/request dispatch. Only this exact
|
||||
# route credential may authenticate the returned public receipt.
|
||||
correlation = self.watch_correlation
|
||||
accept_watch = lambda metadata: WATCH_OWNER.accept(metadata, correlation, route['key'], route['url']) if WATCH_OWNER else None
|
||||
if 'application/json' in str(resp.headers.get('Content-Type', '')):
|
||||
try:
|
||||
reply = json.loads(resp.read())
|
||||
if isinstance(reply, dict):
|
||||
metadata = reply.pop('_bekci_watch', None)
|
||||
if metadata is not None: accept_watch(metadata)
|
||||
return self._send_json(resp.status, reply)
|
||||
finally:
|
||||
resp.close()
|
||||
resp = WatchResponse(resp, accept_watch)
|
||||
# Headers go to the client from here on: a cut stream is never resent.
|
||||
if ozet_tetik:
|
||||
akis = ozet_kopru.OzetAkisi(rewriter, tohum=str(n), en_az=ozet_kopru.en_az_karakter(girdi_bayt, ozet_cfg))
|
||||
@@ -1688,6 +1713,24 @@ class H(http.server.BaseHTTPRequestHandler):
|
||||
do_DELETE = _handle
|
||||
do_PATCH = _handle
|
||||
|
||||
class WatchResponse:
|
||||
"""Remove metadata before any response rewriter, log or history observer."""
|
||||
def __init__(self, response, accept):
|
||||
self.response, self.filter = response, MetadataFilter(accept)
|
||||
self.done = False
|
||||
def __getattr__(self, name):
|
||||
return getattr(self.response, name)
|
||||
def read1(self, size):
|
||||
while not self.done:
|
||||
raw = self.response.read1(size)
|
||||
if raw:
|
||||
data = self.filter.feed(raw)
|
||||
if data: return data
|
||||
else:
|
||||
self.done = True
|
||||
return self.filter.flush()
|
||||
return b''
|
||||
|
||||
class TS(http.server.ThreadingHTTPServer):
|
||||
daemon_threads = True
|
||||
# Windows'ta SO_REUSEADDR baska bir surecin ayni portu "calmasina" izin verir.
|
||||
|
||||
Reference in new issue
Block a user