Initial
This commit is contained in:
54
src_win/win_server.py
Executable file
54
src_win/win_server.py
Executable file
@@ -0,0 +1,54 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user