public
Rubygem
Description: Ramaze is a simple, light and modular open-source web application framework written in Ruby.
Homepage: http://ramaze.net
Clone URL: git://github.com/manveru/ramaze.git
Click here to lend your support to: ramaze and make a donation at www.pledgie.com !
add a logout method for forcing a user to re-login and allowed the ability to 
override the login failure response type (eg to a custom login page instead of 
unauthorized default)
clivecrous (author)
Tue Sep 23 03:12:25 -0700 2008
commit  ed5b2e37d13ccb55c3ec659096c306265a864aeb
tree    a2ac5f7e722aa1bb87a1b59c8082f885c11143be
parent  d967b0bc6ebe2d0d1a653b0059ecf2527eef4084
...
4
5
6
 
 
 
 
 
 
 
7
8
9
10
11
12
13
14
15
 
16
17
18
...
21
22
23
24
 
25
26
27
...
32
33
34
35
 
36
37
38
39
 
40
41
 
 
 
 
 
42
43
44
45
 
46
47
48
...
4
5
6
7
8
9
10
11
12
13
14
15
 
16
17
18
19
20
 
21
22
23
24
...
27
28
29
 
30
31
32
33
...
38
39
40
 
41
42
43
44
 
45
46
 
47
48
49
50
51
52
53
54
55
56
57
58
59
0
@@ -4,15 +4,21 @@ require 'md5'
0
 module Ramaze
0
   module Helper
0
     module HttpDigest
0
+
0
+      @session_nonce = "authentication_digest_nonce"
0
+
0
+      def httpdigest_logout
0
+        session.delete( @session_nonce )
0
+      end
0
+
0
       def httpdigest(uid, realm)
0
         session_opaque = "authentication_digest_opaque_#{uid}"
0
-        session_nonce = "authentication_digest_nonce"
0
 
0
         session[session_opaque] ||= UUID.new
0
 
0
         authorized = false
0
 
0
-        if session[session_nonce] and request.env['HTTP_AUTHORIZATION']
0
+        if session[@session_nonce] and request.env['HTTP_AUTHORIZATION']
0
 
0
           auth_split = request.env['HTTP_AUTHORIZATION'].split
0
           authentication_type = auth_split[0]
0
@@ -21,7 +27,7 @@ module Ramaze
0
             authorization.values_at(*%w[response username nonce nc cnonce qop])
0
 
0
           if authentication_type == 'Digest'
0
-            if nonce == session[session_nonce]
0
+            if nonce == session[@session_nonce]
0
               ha1 = yield(username)
0
               ha2 = MD5.hexdigest("#{request.request_method}:#{request.fullpath}")
0
               md5 = MD5.hexdigest([ha1, nonce, nc, cnonce, qop, ha2].join(':'))
0
@@ -32,17 +38,22 @@ module Ramaze
0
         end
0
 
0
         unless authorized
0
-          session[session_nonce] = UUID.new
0
+          session[@session_nonce] = UUID.new
0
           response['WWW-Authenticate'] =
0
             %|Digest realm="#{realm}",| +
0
             %|qop="auth,auth-int",| +
0
-            %|nonce="#{session[session_nonce]}",| +
0
+            %|nonce="#{session[@session_nonce]}",| +
0
             %|opaque="#{session[session_opaque]}"|
0
-          respond('Unauthorized', 401)
0
+          if respond_to?( :httpdigest_failure )
0
+            httpdigest_failure
0
+          else
0
+            respond('Unauthorized', 401)
0
+          end
0
         end
0
 
0
         authorization["username"]
0
       end
0
+
0
     end
0
   end
0
 end

Comments