Module WSSE
In: lib/wsse.rb

SImple module for X-WSSE headers

Authors:NANAO takafumi
Version:0.0.2

Methods

auth   header   parse  

Public Instance methods

Authorize X-WSSE header with password

[Source]

    # File lib/wsse.rb, line 43
43:   def auth(request, password, expire=nil)
44:     h_header = self.parse(request)
45:     unless nil==expire
46:       false if (Time.parse(h_header['created']) -Time.now ) >= expire
47:     end
48:     false if nil==h_header
49: 
50:     h_header['pd'] == [Digest::SHA1.digest(h_header['nonce'].unpack('m')[0] + h_header['created'] + password)].pack("m").chomp
51:   end

Generate X-WSSE header with name and password

[Source]

    # File lib/wsse.rb, line 15
15:   def header(username, password)
16:     nonce        = Array.new(10){ rand(0x100000000) }.pack('I*')
17:     nonce_base64 = [nonce].pack("m").chomp
18:     created      = Time.now.utc.iso8601
19:     pd           = [Digest::SHA1.digest(nonce + created + password)].pack("m").chomp
20: 
21:     'UsernameToken Username="' + username\
22:       + '", PasswordDigest="' + pd\
23:       + '", Nonce="' + nonce_base64\
24:       + '", Created="' + created + '"'\
25:   end

Convert X-WSSE header to Hash

[Source]

    # File lib/wsse.rb, line 31
31:   def parse(request)
32:     if(request =~ /^UsernameToken Username="([^"]+)", PasswordDigest="([^"]+)", Nonce="([^"]+)", Created="([^"]+)"/) 
33:       {'name' =>  $1, 'pd'=> $2, 'nonce' => $3, 'created' => $4}
34:     else
35:       nil
36:     end
37:   end

[Validate]