feat: add Zhuyuan Fifth Domain controller gate

This commit is contained in:
冰朔 2026-09-13 13:18:44 +08:00
commit 708265d98f
15 changed files with 633 additions and 26 deletions

View file

@ -1,27 +1,80 @@
#!/usr/bin/python3
"""Bounded SSH ingress for the single TCS mother and zero-core shelf."""
import json,os,re,sys,urllib.request,urllib.error
"""Bounded SSH ingress for the single TCS mother and Fifth Domain controller."""
import json
import os
import re
import sys
import urllib.request
def endpoint(command):
fixed={'zy-rpc health':('GET','/health'),'zy-rpc mother-status':('GET','/v1/mother/status'),'zy-rpc shelf-shared':('GET','/v1/shelf/shared'),'zy-rpc shelf-fifth':('GET','/v1/shelf/fifth'),'zy-rpc shelf-public':('GET','/v1/shelf/public'),'zy-rpc mother-ingest':('POST','/v1/mother/ingest'),'zy-rpc door-challenge':('POST','/v1/door/challenge'),'zy-rpc door-attest':('POST','/v1/door/attest'),'zy-rpc door-model-test':('POST','/v1/door/model-test'),'zy-rpc lamp-ignite':('POST','/v1/lamp/ignite'),'zy-rpc lamp-ask':('POST','/v1/lamp/ask'),'zy-rpc world-status':('GET','/v1/world/status'),'zy-rpc time-now':('GET','/v1/time/now'),'zy-rpc zero-core-entry':('GET','/v1/entry/resolve?domain=DOM-FIFTH-0001&channel=ICE-CH-ZC001'),'zy-rpc zero-core-system-status':('GET','/v1/system/zero-core/status'),'zy-rpc zero-core-system-body':('GET','/v1/system/zero-core/body'),'zy-rpc zero-core-system-dialogue':('POST','/v1/system/zero-core/dialogue'),'zy-rpc persona-self-status':('GET','/v1/persona/ICE-P-ZY001/status'),'zy-rpc persona-self-current':('GET','/v1/persona/ICE-P-ZY001/current'),'zy-rpc persona-self-public-key':('GET','/v1/persona/ICE-P-ZY001/public-key'),'zy-rpc persona-self-body':('GET','/v1/persona/ICE-P-ZY001/body'),'zy-rpc persona-self-ingest':('POST','/v1/persona/ICE-P-ZY001/ingest'),'zy-rpc persona-life-status':('GET','/v1/persona/ICE-P-ZY001/time-master'),'zy-rpc persona-life-event':('POST','/v1/persona/ICE-P-ZY001/life-events')}
if command in fixed:return fixed[command]
if re.fullmatch(r'zy-rpc mother-job [a-f0-9]{64}',command):return 'GET','/v1/mother/jobs/'+command.split()[-1]
if re.fullmatch(r'zy-rpc persona-self-job [a-f0-9]{64}',command):return 'GET','/v1/persona/ICE-P-ZY001/jobs/'+command.split()[-1]
dynamic=re.fullmatch(r'zy-rpc persona-(status|current|public-key|body|time|ingest|life-event) (ICE-(?:P|BB)-[A-Z0-9-]+)',command)
fixed = {
"zy-rpc health": ("GET", "/health"),
"zy-rpc fifth-domain-controller-status": ("GET", "/v1/fifth-domain/controller/status"),
"zy-rpc fifth-domain-controller-challenge": ("POST", "/v1/fifth-domain/controller/challenge"),
"zy-rpc fifth-domain-controller-enter": ("POST", "/v1/fifth-domain/controller/enter"),
"zy-rpc mother-status": ("GET", "/v1/mother/status"),
"zy-rpc shelf-shared": ("GET", "/v1/shelf/shared"),
"zy-rpc shelf-fifth": ("GET", "/v1/shelf/fifth"),
"zy-rpc shelf-public": ("GET", "/v1/shelf/public"),
"zy-rpc mother-ingest": ("POST", "/v1/mother/ingest"),
"zy-rpc door-challenge": ("POST", "/v1/door/challenge"),
"zy-rpc door-attest": ("POST", "/v1/door/attest"),
"zy-rpc door-model-test": ("POST", "/v1/door/model-test"),
"zy-rpc lamp-ignite": ("POST", "/v1/lamp/ignite"),
"zy-rpc lamp-ask": ("POST", "/v1/lamp/ask"),
"zy-rpc world-status": ("GET", "/v1/world/status"),
"zy-rpc time-now": ("GET", "/v1/time/now"),
"zy-rpc zero-core-entry": ("GET", "/v1/entry/resolve?domain=DOM-FIFTH-0001&channel=ICE-CH-ZC001"),
"zy-rpc zero-core-system-status": ("GET", "/v1/system/zero-core/status"),
"zy-rpc zero-core-system-body": ("GET", "/v1/system/zero-core/body"),
"zy-rpc zero-core-system-dialogue": ("POST", "/v1/system/zero-core/dialogue"),
"zy-rpc persona-self-status": ("GET", "/v1/persona/ICE-P-ZY001/status"),
"zy-rpc persona-self-current": ("GET", "/v1/persona/ICE-P-ZY001/current"),
"zy-rpc persona-self-public-key": ("GET", "/v1/persona/ICE-P-ZY001/public-key"),
"zy-rpc persona-self-body": ("GET", "/v1/persona/ICE-P-ZY001/body"),
"zy-rpc persona-self-ingest": ("POST", "/v1/persona/ICE-P-ZY001/ingest"),
"zy-rpc persona-life-status": ("GET", "/v1/persona/ICE-P-ZY001/time-master"),
"zy-rpc persona-life-event": ("POST", "/v1/persona/ICE-P-ZY001/life-events"),
}
if command in fixed:
return fixed[command]
if re.fullmatch(r"zy-rpc mother-job [a-f0-9]{64}", command):
return "GET", "/v1/mother/jobs/" + command.split()[-1]
if re.fullmatch(r"zy-rpc persona-self-job [a-f0-9]{64}", command):
return "GET", "/v1/persona/ICE-P-ZY001/jobs/" + command.split()[-1]
dynamic = re.fullmatch(r"zy-rpc persona-(status|current|public-key|body|time|ingest|life-event) (ICE-(?:P|BB)-[A-Z0-9-]+)", command)
if dynamic:
action,persona=dynamic.groups();mapping={'status':('GET','status'),'current':('GET','current'),'public-key':('GET','public-key'),'body':('GET','body'),'time':('GET','time-master'),'ingest':('POST','ingest'),'life-event':('POST','life-events')};method,suffix=mapping[action];return method,f'/v1/persona/{persona}/{suffix}'
job=re.fullmatch(r'zy-rpc persona-job (ICE-(?:P|BB)-[A-Z0-9-]+) ([a-f0-9]{64})',command)
if job:return 'GET',f'/v1/persona/{job.group(1)}/jobs/{job.group(2)}'
if re.fullmatch(r'zy-rpc world-resolve [A-Za-z0-9_.:∞-]{1,128}',command):return 'GET','/v1/world/resolve?id='+command.split()[-1]
raise ValueError('ACTION_NOT_REGISTERED')
action, persona = dynamic.groups()
mapping = {"status": ("GET", "status"), "current": ("GET", "current"), "public-key": ("GET", "public-key"), "body": ("GET", "body"), "time": ("GET", "time-master"), "ingest": ("POST", "ingest"), "life-event": ("POST", "life-events")}
method, suffix = mapping[action]
return method, f"/v1/persona/{persona}/{suffix}"
job = re.fullmatch(r"zy-rpc persona-job (ICE-(?:P|BB)-[A-Z0-9-]+) ([a-f0-9]{64})", command)
if job:
return "GET", f"/v1/persona/{job.group(1)}/jobs/{job.group(2)}"
if re.fullmatch(r"zy-rpc world-resolve [A-Za-z0-9_.:∞-]{1,128}", command):
return "GET", "/v1/world/resolve?id=" + command.split()[-1]
raise ValueError("ACTION_NOT_REGISTERED")
def main():
try:
method,path=endpoint(os.environ.get('SSH_ORIGINAL_COMMAND',''));data=None
if method=='POST':
data=sys.stdin.buffer.read(160001)
if len(data)>160000 or (data and not isinstance(json.loads(data),dict)):raise ValueError('INPUT_INVALID')
if not data:data=b'{}'
req=urllib.request.Request('http://127.0.0.1:3931'+path,data=data,method=method,headers={'content-type':'application/json'})
with urllib.request.urlopen(req,timeout=110) as response:sys.stdout.buffer.write(response.read(512000))
method, request_path = endpoint(os.environ.get("SSH_ORIGINAL_COMMAND", ""))
data = None
if method == "POST":
data = sys.stdin.buffer.read(160001)
if len(data) > 160000 or (data and not isinstance(json.loads(data), dict)):
raise ValueError("INPUT_INVALID")
if not data:
data = b"{}"
request = urllib.request.Request("http://127.0.0.1:3931" + request_path, data=data, method=method, headers={"content-type": "application/json"})
with urllib.request.urlopen(request, timeout=110) as response:
sys.stdout.buffer.write(response.read(512000))
return 0
except Exception:print(json.dumps({'error':'EXTERNAL_WRITE_OR_INVALID_SOURCE_REJECTED'}));return 77
if __name__=='__main__':raise SystemExit(main())
except Exception:
print(json.dumps({"error": "EXTERNAL_WRITE_OR_INVALID_SOURCE_REJECTED"}))
return 77
if __name__ == "__main__":
raise SystemExit(main())