29 lines
949 B
Python
29 lines
949 B
Python
"""Bounded JSON RPC over a private Unix socket; no shell commands exposed."""
|
|
import json
|
|
import socket
|
|
import sys
|
|
|
|
SOCKET = '/run/deck/control.sock'
|
|
|
|
def request(data):
|
|
with socket.socket(socket.AF_UNIX) as sock:
|
|
sock.settimeout(25)
|
|
sock.connect(SOCKET)
|
|
sock.sendall(json.dumps(data).encode()+b'\n')
|
|
with sock.makefile('rb') as stream:
|
|
raw = stream.readline(65537)
|
|
if len(raw)>65536:
|
|
raise ValueError('Ungültige Helper-Antwort.')
|
|
result = json.loads(raw)
|
|
if 'error' in result and 'installed' not in result:
|
|
raise ValueError(result['error'])
|
|
return result
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
data = json.loads(sys.stdin.buffer.readline(32769))
|
|
print(json.dumps(request(data)))
|
|
except Exception:
|
|
print(json.dumps({'error':'Netzwerkaktion fehlgeschlagen. Konfiguration und Verbindung prüfen.'}))
|
|
sys.exit(1)
|