How to read http_userid's Base64 encoded userid from Ruby?
Sven C. Koehler
schween at snafu.de
Tue Feb 9 18:53:14 MSK 2010
Ok, I've found a way to get to the original value, seems like nginx uses
a different byte order than ruby does...
> cookie_uid = "0Cvz4ktwVPEdbRcMAwMFAg=="; cc = cookie_uid.unpack('m*').first; rr = cc.split("").map{|c| c[0].to_i}.inject([]) {|v,s| v.push sprintf("%02X", s); v; }.values_at(3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12).join("")
=> "E2F32BD0F154704B0C176D1D02050303"
(One could probably write this more elegantly by using the right flags for
unpack.)
-S.
On Tue, Feb 09, 2010 at 01:20:47PM +0100, Sven C. Koehler wrote:
> Hey,
>
> I am using the http user id module and have not yet figured out how I can
> read the base64 encoded cookie from Ruby. It seems like nginx uses a
> different form of base64 than Ruby does...
>
> Example:
> | uid value = E2F32BD0F154704B0C176D1D02050303
>
> In Ruby I see the cookie encoded like this:
>
> | {"uid"=>"0Cvz4ktwVPEdbRcMAwMFAg=="}
> When I try to decode this value with Base64 in Ruby I get:
>
> | require "base64"
> | enc="0Cvz4ktwVPEdbRcMAwMFAg=="
> | => "0Cvz4ktwVPEdbRcMAwMFAg=="
> | Base64.decode64(enc)
> | => "\320+\363\342KpT\361\035m\027\f\003\003\005\002"
>
>
> Has anyone an idea about what I am doing wrong here?
>
> -S.
>
> [nginx.conf entries regarding http userid]
> | userid on;
> | userid_name uid;
> | userid_domain foo.com;
> | userid_path /;
> | userid_expires 720d;
> | userid_p3p 'policyref="/w3c/p3p.xml", CP="ADMa DEVa PSAa PSDa OUR IND DSP NON COR"';
>
>
> _______________________________________________
> nginx mailing list
> nginx at nginx.org
> http://nginx.org/mailman/listinfo/nginx
More information about the nginx
mailing list