Files
ipa-archiver/src_win/win_server.py
2024-04-02 22:03:02 +02:00

55 lines
1.7 KiB
Python
Executable File

#!/usr/bin/env python3
from http.server import BaseHTTPRequestHandler, HTTPServer
from pathlib import Path
import os
import socket
import subprocess
os.chdir(Path(__file__).parent)
INSTALLER = Path('libimobiledevice', 'ideviceinstaller.exe')
PATH_IN = Path('queued')
class IpaServer(BaseHTTPRequestHandler):
def reply(self, status: int, data: str):
self.send_response(status)
self.send_header('Access-Control-Allow-Origin', '*')
self.send_header('Content-type', 'text/plain')
self.end_headers()
self.wfile.write(data.encode('utf8'))
def do_POST(self):
length = self.headers.get('Content-Length', 1)
data = self.rfile.read(int(length)).decode('utf8')
if self.path == '/up':
return self.reply(200, 'YES')
elif self.path == '/install':
fname = PATH_IN / data
if not fname.exists():
return self.reply(404, f'File not found "{fname}"')
subprocess.run([INSTALLER, '-i', fname])
elif self.path == '/uninstall':
bundleId = data
subprocess.run([INSTALLER, '-U', bundleId], timeout=60)
else:
raise ValueError('unsuppoted API path')
return self.reply(200, 'OK')
def getLocalIp():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('10.255.255.255', 80))
ip = s.getsockname()[0]
s.close()
return ip
if __name__ == '__main__':
webServer = HTTPServer(('0.0.0.0', 8117), IpaServer)
print('Server started http://%s:%s' % (getLocalIp(), 8117))
try:
webServer.serve_forever()
except KeyboardInterrupt:
pass
webServer.server_close()