Skip to content

Commit

Permalink
unneld added consistent responses for REST API
Browse files Browse the repository at this point in the history
  • Loading branch information
a.zhuravlov committed Sep 2, 2024
1 parent 2db1238 commit 63f8994
Showing 1 changed file with 24 additions and 10 deletions.
34 changes: 24 additions & 10 deletions pymobiledevice3/tunneld.py
Original file line number Diff line number Diff line change
Expand Up @@ -368,34 +368,43 @@ async def list_tunnels() -> Mapping[str, List[Mapping]]:
async def shutdown() -> fastapi.Response:
""" Shutdown Tunneld """
os.kill(os.getpid(), signal.SIGINT)
return fastapi.Response(status_code=200, content='Server shutting down...')
data = json.dumps({'operation': 'shutdown', 'data': True, 'message': 'Server shutting down...'})
return generate_http_response(data)

@self._app.get('/clear_tunnels')
async def clear_tunnels() -> fastapi.Response:
self._tunneld_core.clear()
return fastapi.Response(status_code=200, content='Cleared tunnels...')
data = json.dumps({'operation': 'clear_tunnels', 'data': True, 'message': 'Cleared tunnels...'})
return generate_http_response(data)

@self._app.get('/cancel')
async def cancel_tunnel(udid: str) -> fastapi.Response:
self._tunneld_core.cancel(udid=udid)
return fastapi.Response(status_code=200, content=f'tunnel {udid} Canceled ...')
data = json.dumps({'operation': 'cancel', 'udid': udid, 'data': True, 'message': f'tunnel {udid} Canceled ...'})
return generate_http_response(data)

@self._app.get('/hello')
async def hello() -> fastapi.Response:
response = {'message': 'Hello, I\'m alive'}
return fastapi.Response(status_code=200, media_type="application/json", content=json.dumps(response))
data = {'message': 'Hello, I\'m alive'}
return generate_http_response(data)

def generate_tunnel_response(tunnel: TunnelResult) -> fastapi.Response:
def generate_http_response(data: dict, status_code: int = 200, media_type = 'application/json') -> fastapi.Response:
return fastapi.Response(
status_code=200,
content=json.dumps({'interface': tunnel.interface, 'port': tunnel.port, 'address': tunnel.address}))
status_code=status_code,
media_type=media_type,
content=json.dumps(data))

@self._app.get('/start-tunnel')
async def start_tunnel(
udid: str, ip: Optional[str] = None, connection_type: Optional[str] = None) -> fastapi.Response:
udid_tunnels = [t.tunnel for t in self._tunneld_core.tunnel_tasks.values() if t.udid == udid]
if len(udid_tunnels) > 0:
return generate_tunnel_response(udid_tunnels[0])
data = {
'interface': udid_tunnels[0].interface,
'port': udid_tunnels[0].port,
'address': udid_tunnels[0].address
}
return generate_http_response(data)

queue = asyncio.Queue()
created_task = False
Expand Down Expand Up @@ -450,7 +459,12 @@ async def start_tunnel(

tunnel: Optional[TunnelResult] = await queue.get()
if tunnel is not None:
return generate_tunnel_response(tunnel)
data = {
'interface': tunnel.interface,
'port': tunnel.port,
'address': tunnel.address
}
return generate_http_response(data)
else:
return fastapi.Response(status_code=404,
content=json.dumps({'error': 'something went wrong during tunnel creation'}))
Expand Down

0 comments on commit 63f8994

Please sign in to comment.