Back to home page

EIC code displayed by LXR

 
 

    


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 # logger
0009 _logger = core_utils.setup_logger("apache_messenger")
0010 http_server_messenger.set_logger(_logger)
0011 
0012 
0013 # handler
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 # application
0048 def application(environ, start_response):
0049     try:
0050         # get params
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         # check token
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         # make handler
0070         handler = ApacheHandler(None, None, None)
0071         handler.set_form(params)
0072         # execute
0073         handler.do_POST()
0074         # make response
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]