Restore Video workspace and route native video API through shared endpoint
This commit is contained in:
1 parent
badc7701fa
commit
67cf57a5b7
15 files changed
+166
-20
No files matched your search
@@ -0,0 +1,30 @@
|
||||
"""HTTP transport only: preserve the selected backend's API paths and payloads."""
|
||||
import http.client
|
||||
import json
|
||||
import os
|
||||
import socket
|
||||
|
||||
MAX_BODY=256*1024*1024
|
||||
REQUEST_HEADERS={'content-type','accept','range','if-range','if-none-match','if-modified-since'}
|
||||
HOP_HEADERS={'connection','keep-alive','proxy-authenticate','proxy-authorization','te','trailer','transfer-encoding','upgrade'}
|
||||
|
||||
def relay(handler,service):
|
||||
if handler.headers.get('Transfer-Encoding'):raise ValueError('Content-Length erforderlich; Chunked-Uploads nicht unterstützt.')
|
||||
length=int(handler.headers.get('Content-Length','0'))
|
||||
if not 0<=length<=MAX_BODY:raise ValueError('Anfrage größer als 256 MiB oder ungültige Länge.')
|
||||
data=dict(action='video-http',service=service,method=handler.command,path=handler.path,length=length,headers={k:v for k,v in handler.headers.items() if k.lower() in REQUEST_HEADERS})
|
||||
path=os.environ.get('DECK_DOCKER_HELPER_SOCKET','/run/athena-deck-docker/control.sock')
|
||||
with socket.socket(socket.AF_UNIX) as sock:
|
||||
sock.settimeout(3600);sock.connect(path);sock.sendall(json.dumps(data).encode()+b'\n')
|
||||
remaining=length
|
||||
while remaining:
|
||||
chunk=handler.rfile.read(min(1024*1024,remaining))
|
||||
if not chunk:raise ValueError('Unvollständige Anfrage.')
|
||||
sock.sendall(chunk);remaining-=len(chunk)
|
||||
response=http.client.HTTPResponse(sock);response.begin()
|
||||
handler.sent=True;handler.send_response(response.status)
|
||||
for key,value in response.getheaders():
|
||||
if key.lower() not in HOP_HEADERS|{'server','date'}:handler.send_header(key,value)
|
||||
handler.send_header('Connection','close');handler.end_headers()
|
||||
if handler.command!='HEAD':
|
||||
while chunk:=response.read(1024*1024):handler.wfile.write(chunk)
|
||||
Reference in new issue
Block a user