From d464704f111d211c1f1ff9ef23ef1d755054be00 Mon Sep 17 00:00:00 2001 From: shyouhei Date: Wed, 15 Aug 2007 19:08:43 +0000 Subject: add tag v1_8_5_54 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_8_5_54@12952 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ruby_1_8_5/lib/webrick/httpauth/basicauth.rb | 65 ++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 ruby_1_8_5/lib/webrick/httpauth/basicauth.rb (limited to 'ruby_1_8_5/lib/webrick/httpauth/basicauth.rb') diff --git a/ruby_1_8_5/lib/webrick/httpauth/basicauth.rb b/ruby_1_8_5/lib/webrick/httpauth/basicauth.rb new file mode 100644 index 0000000000..e835361dc2 --- /dev/null +++ b/ruby_1_8_5/lib/webrick/httpauth/basicauth.rb @@ -0,0 +1,65 @@ +# +# httpauth/basicauth.rb -- HTTP basic access authentication +# +# Author: IPR -- Internet Programming with Ruby -- writers +# Copyright (c) 2003 Internet Programming with Ruby writers. All rights +# reserved. +# +# $IPR: basicauth.rb,v 1.5 2003/02/20 07:15:47 gotoyuzo Exp $ + +require 'webrick/config' +require 'webrick/httpstatus' +require 'webrick/httpauth/authenticator' + +module WEBrick + module HTTPAuth + class BasicAuth + include Authenticator + + AuthScheme = "Basic" + + def self.make_passwd(realm, user, pass) + pass ||= "" + pass.crypt(Utils::random_string(2)) + end + + attr_reader :realm, :userdb, :logger + + def initialize(config, default=Config::BasicAuth) + check_init(config) + @config = default.dup.update(config) + end + + def authenticate(req, res) + unless basic_credentials = check_scheme(req) + challenge(req, res) + end + userid, password = basic_credentials.unpack("m*")[0].split(":", 2) + password ||= "" + if userid.empty? + error("user id was not given.") + challenge(req, res) + end + unless encpass = @userdb.get_passwd(@realm, userid, @reload_db) + error("%s: the user is not allowed.", userid) + challenge(req, res) + end + if password.crypt(encpass) != encpass + error("%s: password unmatch.", userid) + challenge(req, res) + end + info("%s: authentication succeeded.", userid) + req.user = userid + end + + def challenge(req, res) + res[@response_field] = "#{@auth_scheme} realm=\"#{@realm}\"" + raise @auth_exception + end + end + + class ProxyBasicAuth < BasicAuth + include ProxyAuthenticator + end + end +end -- cgit v1.2.3