diff --git a/label-printer/label-maker.py b/label-printer/label-maker.py deleted file mode 100755 index 2c3cd06b..00000000 --- a/label-printer/label-maker.py +++ /dev/null @@ -1,117 +0,0 @@ -#!/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__() - diff --git a/label-printer/label-printer-test.bash b/label-printer/label-printer-test.bash new file mode 100755 index 00000000..08531c0d --- /dev/null +++ b/label-printer/label-printer-test.bash @@ -0,0 +1,10 @@ +#!/bin/bash + +#printer="LabelWriter-450" +printer="QL-800" + +curl -v -d "printer=${printer}&model=lf0350&mac=00:0e:84:33:44:55:66&hostname=vm-atlas20&serial=zoso1234" http://localhost:8082/ +sleep 4 +curl -v -d "printer=${printer}&model=lf0350&mac=00:0e:84:33:44:55:66&hostname=&serial=" http://localhost:8082/ +sleep 4 +curl -v -d "printer=${printer}&model=lf0350&mac=00:0e:84:33:44:55:66" http://localhost:8082/ diff --git a/label-printer/label-printer.py b/label-printer/label-printer.py new file mode 100755 index 00000000..2e4bafb8 --- /dev/null +++ b/label-printer/label-printer.py @@ -0,0 +1,283 @@ +#!/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 LaTeX and html2ps + apt install perlmagick libwww-perl libhtml-parser-perl libpaper-utils ghostscript weblint-perl texlive-base postscript-viewer xhtml2ps html2ps + +Consider these commands to install printer drivers: + +Dymo LabelWriter-450: + apt install printer-driver-dymo +Brother QL-800: + # apt install brother-cups-wrapper-common brother-cups-wrapper-extra brother-lpr-drivers-common brother-lpr-drivers-extra + Download drivers here: + https://support.brother.com/g/b/downloadtop.aspx?c=us&lang=en&prod=lpql800eus + * download driver + * install driver using + $ sudo dpkg -i dymo*.dpkg + +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: +Dymo LabelWriter: + $ ./lf_kinstall.pl --print-label http://192.168.9.1:8082/ --printer LabelWriter-450 + +Brother QL-800: + $ ./lf_kinstall.pl --print-label http://192.168.9.1:8082/ --printer QL800 + + +""" +import os +import logging +import math +from datetime import datetime +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 popstr(self, param): + #print ("""TYPE : "%s" """%type(param)) + #print ("""TYPE0: "%s" """%type(param[0])) + if type(param) is list: + #print("""LIST: "%s", """%param[0]) + return str(param[0]) + return str(param) + + def do_POST(self): + html_filename = "/tmp/label.html" + printer = "" + hostname = ""; + mac_address = ""; + model = ""; + serial = ""; + + length = int(self.headers['Content-Length']) + field_data = self.rfile.read(length).decode("utf-8") + print("Field_data: %s\n"%field_data); + fields = parse_qs(field_data) + #pprint(fields) + + #for name in fields: + # print("""key %s: "%s" %s""" % (name, self.popstr(fields[name]), type(fields[name]))) + if "printer" in fields: + printer = self.popstr(fields["printer"]) + if (printer is None) or ("" == printer): + err_msg = "printer empty or unset" + self.send_resonse(400) + self.send_header("X-Error", err_msg) + self.end_headers() + self.wfile.write(b"
| Model: | +%s (%s) | +
| MAC: | +%s | +
| Hostname: | +%s | +
| Serial: | +#%s | +