File indexing completed on 2026-04-20 07:58:58
0001 import json
0002
0003 from pandaharvester.harvesterconfig import harvester_config
0004 from pandaharvester.harvestercore import core_utils
0005 from pandaharvester.harvestermessenger import http_server_messenger
0006 from pandaharvester.harvestermisc.frontend_utils import HarvesterToken
0007
0008
0009 _logger = core_utils.setup_logger("apache_messenger")
0010 http_server_messenger.set_logger(_logger)
0011
0012
0013
0014 class ApacheHandler(http_server_messenger.HttpHandler):
0015 def __init__(self, *args, **kwargs):
0016 self.responseCode = None
0017 self.form = dict()
0018 self.message = None
0019 self.headerList = [("Content-Type", "text/plain")]
0020 http_server_messenger.HttpHandler.__init__(self, *args, **kwargs)
0021
0022 def setup(self):
0023 pass
0024
0025 def handle(self):
0026 pass
0027
0028 def finish(self):
0029 pass
0030
0031 def send_response(self, code, message=None):
0032 self.responseCode = code
0033
0034 def get_form(self):
0035 return self.form
0036
0037 def set_form(self, form):
0038 self.form = form
0039
0040 def do_postprocessing(self, message):
0041 self.message = message.encode("ascii")
0042
0043 def send_header(self, keyword, value):
0044 self.headerList = [(keyword, value)]
0045
0046
0047
0048 def application(environ, start_response):
0049 try:
0050
0051 try:
0052 request_body_size = int(environ.get("CONTENT_LENGTH", 0))
0053 except Exception as e:
0054 _logger.warning(f"Zero request body due to {e.__class__.__name__}: {e}")
0055 request_body_size = 0
0056
0057 if getattr(harvester_config.frontend, "authEnable", True):
0058 try:
0059 auth_str = environ.get("HTTP_AUTHORIZATION", "").split()[-1]
0060 token = HarvesterToken()
0061 payload = token.get_payload(auth_str)
0062 except Exception as e:
0063 _logger.warning(f"Invalid token due to {e.__class__.__name__}: {e}")
0064 errMsg = "Auth failed: Invalid token"
0065 start_response("403 Forbidden", [("Content-Type", "text/plain")])
0066 return [errMsg.encode("ascii")]
0067 request_body = environ["wsgi.input"].read(request_body_size)
0068 params = json.loads(request_body)
0069
0070 handler = ApacheHandler(None, None, None)
0071 handler.set_form(params)
0072
0073 handler.do_POST()
0074
0075 _logger.debug(f"{handler.responseCode} Phrase")
0076 start_response(f"{handler.responseCode} Phrase", handler.headerList)
0077 return [handler.message]
0078 except Exception:
0079 errMsg = core_utils.dump_error_message(_logger)
0080 start_response("500 Phrase", [("Content-Type", "text/plain")])
0081 return [errMsg]