Files
wlan-lanforge-scripts/label-printer/label-maker.py
2020-10-04 23:13:58 -07:00

118 lines
3.5 KiB
Python
Executable File

#!/usr/bin/env python3
"""
This is a small python webserver intended to run on a testing network resource
where the lf_kinstall.pl script can post build machine information to. A useful
place to install this script would be on an APU2 being used as a VPN gateway.
Use these commands to install the script:
$ sudo cp label-printer.py /usr/local/bin
$ sudo chmod a+x /usr/local/bin/label-printer.py
$ sudo cp label-printer.service /lib/systemd/system
$ sudo systemctl add-wants multi-user.target label-printer.service
$ sudo systemctl daemon-reload
$ sudo systemctl restart label-printer.service
At this point, if you use `ss -ntlp` you should see this script listening on port 8082.
If you are running ufw on your label-printer host, please use this command to allow
traffice to port 8082:
$ sudo ufw allow 8082/tcp
$ sudo ufw reload
Using kinstall to print labels:
$ ./lf_kinstall.pl --print-label http://192.168.9.1:8082/
"""
import logging
from http import server
from http.server import HTTPServer, BaseHTTPRequestHandler
from ssl import wrap_socket
from urllib.parse import urlparse, parse_qs
import pprint
from pprint import pprint
class LabelPrinterRequestHandler(BaseHTTPRequestHandler):
def do_HEAD(self):
self.send_response(200);
self.send_header("Content-type", "text/html")
self.end_headers()
def do_GET(self):
self.send_response(200);
self.send_header("Content-type", "text/html")
self.end_headers()
def do_POST(self):
hostname = "";
mac_address = "";
model = "";
serial = "";
length = int(self.headers['Content-Length'])
field_data = self.rfile.read(length)
print("Field_data: %s\n"%field_data);
fields = parse_qs(field_data)
pprint(fields)
for name in fields:
print("key %s"%name)
if "mac" in fields:
mac_address = fields["mac"]
else:
self.send_response(400)
self.send_header("X-Error", "mac address not submitted")
self.end_headers();
self.wfile.write(b"Bullshit\n");
return
if "model" in fields:
model = fields["model"]
else:
self.send_response(400)
self.send_header("X-Error", "missing model name")
self.wfile.write(b"Bullshit\n");
return
if (mac_address is None) or ("" == mac_address):
self.send_resonse(400)
self.send_header("X-Error", "mac address empty or unset")
self.end_headers()
self.wfile.write(b"missing mac address")
self.wfile.write(b"Bullshit\n");
return
if (model is None) or (model == ""):
self.send_reponse(400)
self.send_header("X-Error", "missing model name")
self.end_headers()
self.wfile.write(b"missing model name")
return
if fields[hostname] is None:
hostname = "%s-%s"%(model, mac.substr(-5).replace(":", ""))
else:
hostname = fields[hostname]
print("HOSTNAME "+hostname)
self.send_response(200);
self.send_header("Content-type", "text/html")
self.end_headers()
print("I'm in POST")
def __main__():
logging.info("Main Method. Creating CGI Handler")
httpd = HTTPServer(('', 8082), LabelPrinterRequestHandler)
print("Starting LabelPrinter service...")
httpd.serve_forever()
if __name__ == "__main__":
__main__()