github.com/craicoverflow/tyk@v2.9.6-rc3+incompatible/coprocess/grpc/ruby/sample_server.rb (about) 1 require '../../bindings/ruby/dispatcher' 2 3 require '../../bindings/ruby/coprocess_session_state_pb' 4 5 require 'json' 6 7 class SampleServer < Coprocess::Dispatcher::Service 8 9 # Implements a dynamic dispatcher for CP objects, this class should provide methods for your hooks (see MyPreMiddleware). 10 def dispatch(coprocess_object, _unused_call) 11 begin 12 if self.respond_to?(coprocess_object.hook_name) 13 coprocess_object = self.send(coprocess_object.hook_name, coprocess_object) 14 else 15 raise Coprocess::Dispatcher::HookNotImplemented 16 end 17 rescue Coprocess::Dispatcher::HookNotImplemented 18 puts "Hook not implemented: #{coprocess_object.hook_name}" 19 rescue Exception => e 20 puts "Couldn't dispatch: #{e}" 21 end 22 23 return coprocess_object 24 end 25 26 # Implements an event dispatcher. 27 def dispatch_event(event_wrapper, _unused_call) 28 event = JSON.parse(event_wrapper.payload) 29 puts "dispatch_event: #{event}" 30 return Coprocess::EventReply.new 31 end 32 33 def MyPreMiddleware(coprocess_object) 34 coprocess_object.request.set_headers["rubyheader"] = "rubyvalue" 35 return coprocess_object 36 end 37 38 def MyAuthCheck(coprocess_object) 39 puts "Calling MyAuthCheck" 40 valid_token = 'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d' 41 request_token = coprocess_object.request.headers["Authorization"] 42 43 if request_token == nil 44 puts "(Using form)" 45 request_token = coprocess_object.request.params["key"] 46 end 47 48 if request_token.include?(valid_token) 49 new_session = Coprocess::SessionState.new 50 new_session.rate = 1000 51 new_session.per = 10 52 new_session.quota_max = 60 53 new_session.quota_renews = 1474057703 54 new_session.quota_remaining = 0 55 new_session.quota_renewal_rate = 120 56 new_session.expires = 1474057703 57 58 # Only set this on create! 59 new_session.last_updated = (Time.now.to_i + 10).to_s 60 61 # ID Extractor Deadline! 62 new_session.id_extractor_deadline = 20 63 64 # new_session.session_lifetime = 99 65 66 coprocess_object.metadata["token"] = "mytoken" 67 coprocess_object.session = new_session 68 else 69 coprocess_object.request.return_overrides.response_code = 401 70 coprocess_object.request.return_overrides.response_error = 'Not authorized (gRPC/Ruby middleware)' 71 end 72 73 return coprocess_object 74 end 75 end 76 77 def main 78 s = GRPC::RpcServer.new 79 s.add_http2_port('0.0.0.0:5555', :this_port_is_insecure) 80 s.handle(SampleServer) 81 s.run_till_terminated 82 end 83 84 main