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