92 lines
2.8 KiB
Python
92 lines
2.8 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
from flask import Flask, jsonify, request, send_from_directory
|
||
|
import tempfile
|
||
|
import subprocess
|
||
|
import os
|
||
|
import sys
|
||
|
|
||
|
app = Flask(__name__)
|
||
|
|
||
|
@app.route('/')
|
||
|
def helloWorld():
|
||
|
return "Hi! Please check usage docs.\n"
|
||
|
|
||
|
|
||
|
@app.route('/status')
|
||
|
def getStatus():
|
||
|
PRINTER_HOST = os.environ.get("PRINTER_HOST")
|
||
|
return jsonify({"status": "OK", "printer_host": PRINTER_HOST})
|
||
|
|
||
|
|
||
|
def getFile(tmpDir):
|
||
|
if request.files.get('file', None):
|
||
|
f = request.files['file']
|
||
|
infile = tmpDir.name + '/' + f.name
|
||
|
f.save(infile)
|
||
|
elif request.form.get('smbfile'):
|
||
|
smbhost = request.form.get('smbhost', None)
|
||
|
smbuser = request.form.get('smbuser', None)
|
||
|
smbpass = request.form.get('smbpass', None)
|
||
|
smbworkgroup = request.form.get('smbworkgroup', None)
|
||
|
smbshare = request.form.get('smbshare', None)
|
||
|
smbdir = request.form.get('smbdir', None)
|
||
|
smbfile = request.form.get('smbfile', None)
|
||
|
v = [ smbhost, smbuser, smbpass, smbworkgroup, smbshare, smbdir, smbfile ]
|
||
|
if (all(v)):
|
||
|
os.chdir(tmpDir.name)
|
||
|
r = subprocess.run(['smbclient',
|
||
|
'--user', smbuser,
|
||
|
'--workgroup', smbworkgroup,
|
||
|
'--directory', smbdir,
|
||
|
'--command', 'get "%s"' % (smbfile),
|
||
|
'//%s/%s' % (smbhost, smbshare),
|
||
|
smbpass ] )
|
||
|
if r.returncode != 0:
|
||
|
return None
|
||
|
infile = tmpDir.name + '/' + smbfile
|
||
|
else:
|
||
|
return None
|
||
|
return infile
|
||
|
|
||
|
|
||
|
@app.route('/convert/pdf', methods=["POST"])
|
||
|
def toPDF():
|
||
|
tmpDir = tempfile.TemporaryDirectory()
|
||
|
infile = getFile(tmpDir)
|
||
|
pdffile = infile + '.pdf'
|
||
|
|
||
|
r = subprocess.run(['/usr/bin/unoconv', '--output', pdffile, infile])
|
||
|
if r.returncode != 0:
|
||
|
return jsonify({"status": "conversion error"})
|
||
|
|
||
|
return send_from_directory(directory=tmpDir.name,
|
||
|
filename=os.path.basename(pdffile),
|
||
|
mimetype='application/pdf',
|
||
|
as_attachment=True)
|
||
|
|
||
|
|
||
|
@app.route('/print', methods=["POST"])
|
||
|
def print():
|
||
|
PRINTER_HOST = os.environ.get("PRINTER_HOST")
|
||
|
if not PRINTER_HOST:
|
||
|
raise ValueError("You have to set the PRINTER_HOST environment variable")
|
||
|
|
||
|
tmpDir = tempfile.TemporaryDirectory()
|
||
|
infile = getFile(tmpDir)
|
||
|
|
||
|
unoconv = subprocess.Popen(['/usr/bin/unoconv','--stdout',infile], stdout=subprocess.PIPE)
|
||
|
pdf2ps = subprocess.Popen(['/usr/bin/pdf2ps','-','-'], stdin=unoconv.stdout, stdout=subprocess.PIPE)
|
||
|
unoconv.wait()
|
||
|
unoconv.stdout.close()
|
||
|
printer = subprocess.Popen(['/usr/bin/nc','-w','1', PRINTER_HOST,'9100'], stdin=pdf2ps.stdout)
|
||
|
pdf2ps.wait()
|
||
|
pdf2ps.stdout.close()
|
||
|
printer.wait()
|
||
|
|
||
|
return jsonify({"status": "ok"})
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
app.run(port=6000)
|