in export/securedrop_export/print/service.py [0:0]
def _get_printer_uri(self) -> str:
"""
Get the URI via lpinfo. Only accept URIs of supported printers.
Raise ExportException if supported setup is not found.
"""
printer_uri = ""
try:
output = subprocess.check_output(["sudo", "lpinfo", "-v"])
except subprocess.CalledProcessError:
logger.error("Error attempting to retrieve printer uri with lpinfo")
raise ExportException(sdstatus=Status.ERROR_PRINTER_URI)
# fetch the usb printer uri
for line in output.split():
if "usb://" in line.decode("utf-8"):
printer_uri = line.decode("utf-8")
logger.info(f"lpinfo usb printer: {printer_uri}")
# verify that the printer is supported, else throw
if printer_uri == "":
# No usb printer is connected
logger.info("No usb printers connected")
raise ExportException(sdstatus=Status.ERROR_PRINTER_NOT_FOUND)
elif not any(x in printer_uri for x in self.SUPPORTED_PRINTERS):
# printer url is a make that is unsupported
logger.info(f"Printer {printer_uri} is unsupported")
raise ExportException(sdstatus=Status.ERROR_PRINTER_NOT_SUPPORTED)
logger.info(f"Printer {printer_uri} is supported")
return printer_uri