Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

Changeset 1823

Show
Ignore:
Timestamp:
05/31/07 23:24:19 (2 years ago)
Author:
nahi
Message:
  • WEBrick's authenticator support. allow to do basic_auth / digest_auth at server side. closes #249.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/soap/rpc/cgistub.rb

    r1822 r1823  
    3737 
    3838    def cookies; end 
     39 
     40    def user; end 
    3941  end 
    4042 
     
    6264      end 
    6365    end 
     66 
     67    def user 
     68      ENV['REMOTE_USER'] 
     69    end 
    6470  end 
    6571 
     
    8692        [WEBrick::Cookie.parse(cookie)] 
    8793      end 
     94    end 
     95 
     96    def user 
     97      @request.env['REMOTE_USER'] 
    8898    end 
    8999  end 
  • trunk/lib/soap/rpc/httpserver.rb

    r1731 r1823  
    5151  def shutdown 
    5252    @server.shutdown if @server 
     53  end 
     54 
     55  def authenticator 
     56    @soaplet.authenticator 
     57  end 
     58 
     59  def authenticator=(authenticator) 
     60    @soaplet.authenticator = authenticator 
    5361  end 
    5462 
  • trunk/lib/soap/rpc/soaplet.rb

    r1822 r1823  
    4242public 
    4343  attr_reader :options 
     44  attr_accessor :authenticator 
    4445 
    4546  def initialize(router = nil) 
    4647    @router = router || ::SOAP::RPC::Router.new(self.class.name) 
    4748    @options = {} 
     49    @authenticator = nil 
    4850    @config = {} 
    4951  end 
     
    8284  def do_POST(req, res) 
    8385    logger.debug { "SOAP request: " + req.body } if logger 
     86    if @authenticator 
     87      @authenticator.authenticate(req, res) 
     88      # you can check authenticated user with SOAP::RPC::SOAPlet.user 
     89    end 
    8490    begin 
    8591      conn_data = ::SOAP::StreamHandler::ConnectionData.new 
     
    8793      @router.external_ces = @options[:external_ces] 
    8894      Mapping.protect_threadvars(:SOAPlet) do 
     95        SOAPlet.user = req.user 
    8996        SOAPlet.cookies = req.cookies 
    9097        conn_data = @router.route(conn_data) 
     
    106113 
    107114  def self.cookies 
     115    get_variable(:Cookies) 
     116  end 
     117 
     118  def self.cookies=(cookies) 
     119    set_variable(:Cookies, cookies) 
     120  end 
     121 
     122  def self.user 
     123    get_variable(:User) 
     124  end 
     125 
     126  def self.user=(user) 
     127    set_variable(:User, user) 
     128  end 
     129 
     130private 
     131 
     132  def self.get_variable(name) 
    108133    if var = Thread.current[:SOAPlet] 
    109       var[:Cookies
     134      var[name
    110135    else 
    111136      nil 
     
    113138  end 
    114139 
    115   def self.cookies=(cookies) 
    116     var = Thread.current[:SOAPlet] = {} 
    117     var[:Cookies] = cookies 
    118   end 
    119  
    120 private 
     140  def self.set_variable(name, value) 
     141    var = Thread.current[:SOAPlet] ||= {} 
     142    var[name] = value 
     143  end 
    121144 
    122145  def logger 
  • trunk/sample/soap/basicauth/client.rb

    r1568 r1823  
    66drv.wiredump_dev = STDERR if $DEBUG 
    77drv.options["protocol.http.basic_auth"] << 
    8   ['http://localhost:7000/', "username", "passwd"] 
     8  ['http://localhost:7000/', "admin", "admin"] 
    99 
    1010p drv.add_method('echo', 'msg').call('hello') 
  • trunk/sample/soap/basicauth/server.rb

    r1568 r1823  
    1919 
    2020    def echo(msg) 
    21       "echo from servant ##{@counter}: #{msg}" 
     21      "echo from servant ##{@counter} (#{SOAP::RPC::SOAPlet.user}): #{msg}" 
    2222    end 
    2323  end 
     
    2626    super 
    2727    add_rpc_request_servant(Servant) 
     28  end 
     29 
     30  def on_init 
     31    userdb_file = File.join(File.dirname(__FILE__), 'htpasswd') 
     32    userdb = WEBrick::HTTPAuth::Htpasswd.new(userdb_file) 
     33    self.authenticator = WEBrick::HTTPAuth::BasicAuth.new(:Realm => 'auth', :UserDB => userdb) 
    2834  end 
    2935end