mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-22 01:13:00 +02:00
47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
"""
|
|
Basic file server over HTTP
|
|
"""
|
|
import concurrent.futures
|
|
import functools
|
|
import http.server
|
|
import socket
|
|
from infamy.util import until
|
|
|
|
class FileServer:
|
|
"""Open web server on (address, port) serving files from directory"""
|
|
def __init__(self, netns, address, port, directory):
|
|
self.address = address
|
|
self.port = port
|
|
self.directory = directory
|
|
self.netns = netns
|
|
self.process = None
|
|
self.check_addres = None
|
|
|
|
|
|
def start(self):
|
|
"""start HTTP file server"""
|
|
cmd = f"httpd -p {self.address}:{self.port} -f -h {self.directory}"
|
|
self.process = self.netns.popen(cmd.split(" "))
|
|
if self.address == "[::]":
|
|
check_address = "::1"
|
|
elif self.address == "0.0.0.0":
|
|
check_address = "127.0.0.1"
|
|
else:
|
|
check_address=self.address
|
|
cmd = f"nc -z {check_address} {self.port}".split()
|
|
until(lambda: self.netns.run(cmd).returncode == 0)
|
|
|
|
|
|
def stop(self):
|
|
"""Stop HTTP file server"""
|
|
if self.process:
|
|
self.process.terminate()
|
|
self.process.wait()
|
|
self.process = None
|
|
|
|
def __enter__(self):
|
|
self.start()
|
|
|
|
def __exit__(self, _, __, ___):
|
|
self.stop()
|