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()