github.com/anuvu/tyk@v2.9.0-beta9-dl-apic+incompatible/coprocess/bindings/python/sample_server.py (about)

     1  import coprocess_object_pb2
     2  from coprocess_session_state_pb2 import SessionState
     3  
     4  import grpc, time, json
     5  
     6  _ONE_DAY_IN_SECONDS = 60 * 60 * 24
     7  
     8  from concurrent import futures
     9  
    10  def MyPreMiddleware(coprocess_object):
    11    coprocess_object.request.set_headers["myheader"] = "myvalue"
    12    return coprocess_object
    13  
    14  def MyPostMiddleware(coprocess_object):
    15    coprocess_object.request.set_headers["anotherheader"] = "anothervalue"
    16    return coprocess_object
    17  
    18  def MyAuthCheck(coprocess_object):
    19    valid_token = 'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d'
    20    request_token = coprocess_object.request.headers["Authorization"]
    21  
    22    if request_token == valid_token:
    23        new_session = SessionState()
    24        new_session.rate = 1000.0
    25        new_session.per = 1.0
    26        coprocess_object.metadata["token"] = "mytoken"
    27        coprocess_object.session.CopyFrom(new_session)
    28  
    29    else:
    30        coprocess_object.request.return_overrides.response_code = 401
    31        coprocess_object.request.return_overrides.response_error = 'Not authorized (Python middleware)'
    32  
    33    return coprocess_object
    34  
    35  class MyDispatcher(coprocess_object_pb2.DispatcherServicer):
    36    def Dispatch(self, coprocess_object, context):
    37      if coprocess_object.hook_name == "MyPreMiddleware":
    38          coprocess_object = MyPreMiddleware(coprocess_object)
    39  
    40      if coprocess_object.hook_name == "MyPostMiddleware":
    41          coprocess_object = MyPostMiddleware(coprocess_object)
    42  
    43      if coprocess_object.hook_name == "MyAuthCheck":
    44          coprocess_object = MyAuthCheck(coprocess_object)
    45  
    46      return coprocess_object
    47  
    48    def DispatchEvent(self, event_wrapper, context):
    49      event = json.loads(event_wrapper.payload)
    50      return coprocess_object_pb2.EventReply()
    51  
    52  
    53  def serve():
    54    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    55    coprocess_object_pb2.add_DispatcherServicer_to_server(
    56        MyDispatcher(), server)
    57    server.add_insecure_port('[::]:5555')
    58    server.start()
    59    try:
    60      while True:
    61        time.sleep(_ONE_DAY_IN_SECONDS)
    62    except KeyboardInterrupt:
    63      server.stop(0)
    64  
    65  if __name__ == '__main__':
    66    serve()