chneukirchen / rack-mirror
- Source
- Commits
- Network (1)
- Issues (0)
- Downloads (3)
- Wiki (1)
- Graphs
-
Tree:
c3d6e4a
commit c3d6e4a3dc6bc367529d11515bdf1e7eb2a93912
tree 66e82a15b33ab34834fe4e16e8075e9e5bb915d4
parent 5a117d0b45b4ed2785a714eaa060e8c66512c4c3
tree 66e82a15b33ab34834fe4e16e8075e9e5bb915d4
parent 5a117d0b45b4ed2785a714eaa060e8c66512c4c3
| 0186ca16 » | tim | 2007-03-26 | 1 | require 'rack/auth/abstract/handler' | |
| 2 | require 'rack/auth/abstract/request' | ||||
| dce7dc06 » | tim | 2007-03-04 | 3 | ||
| 4 | module Rack | ||||
| 5 | module Auth | ||||
| 9191ff31 » | tim | 2007-04-03 | 6 | # Rack::Auth::Basic implements HTTP Basic Authentication, as per RFC 2617. | |
| 7 | # | ||||
| c5b420a5 » | chneukirchen | 2007-05-16 | 8 | # Initialize with the Rack application that you want protecting, | |
| 9191ff31 » | tim | 2007-04-03 | 9 | # and a block that checks if a username and password pair are valid. | |
| 10 | # | ||||
| c5b420a5 » | chneukirchen | 2007-05-16 | 11 | # See also: <tt>example/protectedlobster.rb</tt> | |
| 9191ff31 » | tim | 2007-04-03 | 12 | ||
| 0186ca16 » | tim | 2007-03-26 | 13 | class Basic < AbstractHandler | |
| df5ff5b3 » | chneukirchen | 2007-03-27 | 14 | ||
| dce7dc06 » | tim | 2007-03-04 | 15 | def call(env) | |
| 0186ca16 » | tim | 2007-03-26 | 16 | auth = Basic::Request.new(env) | |
| df5ff5b3 » | chneukirchen | 2007-03-27 | 17 | ||
| 0186ca16 » | tim | 2007-03-26 | 18 | return unauthorized unless auth.provided? | |
| df5ff5b3 » | chneukirchen | 2007-03-27 | 19 | ||
| 0186ca16 » | tim | 2007-03-26 | 20 | return bad_request unless auth.basic? | |
| df5ff5b3 » | chneukirchen | 2007-03-27 | 21 | ||
| 0186ca16 » | tim | 2007-03-26 | 22 | if valid?(auth) | |
| dce7dc06 » | tim | 2007-03-04 | 23 | env['REMOTE_USER'] = auth.username | |
| df5ff5b3 » | chneukirchen | 2007-03-27 | 24 | ||
| dce7dc06 » | tim | 2007-03-04 | 25 | return @app.call(env) | |
| 26 | end | ||||
| df5ff5b3 » | chneukirchen | 2007-03-27 | 27 | ||
| 0186ca16 » | tim | 2007-03-26 | 28 | unauthorized | |
| dce7dc06 » | tim | 2007-03-04 | 29 | end | |
| 0186ca16 » | tim | 2007-03-26 | 30 | ||
| 31 | |||||
| dce7dc06 » | tim | 2007-03-04 | 32 | private | |
| 0186ca16 » | tim | 2007-03-26 | 33 | ||
| 34 | def challenge | ||||
| 35 | 'Basic realm="%s"' % realm | ||||
| dce7dc06 » | tim | 2007-03-04 | 36 | end | |
| 0186ca16 » | tim | 2007-03-26 | 37 | ||
| 38 | def valid?(auth) | ||||
| df5ff5b3 » | chneukirchen | 2007-03-27 | 39 | @authenticator.call(*auth.credentials) | |
| dce7dc06 » | tim | 2007-03-04 | 40 | end | |
| 0186ca16 » | tim | 2007-03-26 | 41 | ||
| 42 | class Request < Auth::AbstractRequest | ||||
| 43 | def basic? | ||||
| 44 | :basic == scheme | ||||
| 45 | end | ||||
| df5ff5b3 » | chneukirchen | 2007-03-27 | 46 | ||
| 0186ca16 » | tim | 2007-03-26 | 47 | def credentials | |
| e6b65296 » | chneukirchen | 2007-12-31 | 48 | @credentials ||= params.unpack("m*").first.split(/:/, 2) | |
| 0186ca16 » | tim | 2007-03-26 | 49 | end | |
| 50 | |||||
| 51 | def username | ||||
| 52 | credentials.first | ||||
| 53 | end | ||||
| 54 | end | ||||
| 55 | |||||
| dce7dc06 » | tim | 2007-03-04 | 56 | end | |
| 57 | end | ||||
| df5ff5b3 » | chneukirchen | 2007-03-27 | 58 | end | |
