diff options
author | Gonzalo Paniagua Javier <gonzalo.mono@gmail.com> | 2004-04-28 19:45:27 +0400 |
---|---|---|
committer | Gonzalo Paniagua Javier <gonzalo.mono@gmail.com> | 2004-04-28 19:45:27 +0400 |
commit | 4b73dd9390a8bffb2619738d3b287f7eca0ded08 (patch) | |
tree | a6d70521b1397476075ee1c2f3af79be74f9ddb0 /mcs/class/Mono.Http | |
parent | 109ef4ee995d9f7183eec0e6a97a23aa0e78a529 (diff) |
2004-04-28 Gonzalo Paniagua Javier <gonzalo@ximian.com>
* DigestAuthenticationModule.cs: introduces new overridable method
GetUserByName(), which by default works exactly like it used to, but
inherited classes can implement their own version. Patch by Tambet Ingo.
svn path=/trunk/mcs/; revision=26171
Diffstat (limited to 'mcs/class/Mono.Http')
-rw-r--r-- | mcs/class/Mono.Http/Mono.Http.Modules/ChangeLog | 5 | ||||
-rw-r--r-- | mcs/class/Mono.Http/Mono.Http.Modules/DigestAuthenticationModule.cs | 51 |
2 files changed, 38 insertions, 18 deletions
diff --git a/mcs/class/Mono.Http/Mono.Http.Modules/ChangeLog b/mcs/class/Mono.Http/Mono.Http.Modules/ChangeLog index 23bfac28fda..4924650d6e6 100644 --- a/mcs/class/Mono.Http/Mono.Http.Modules/ChangeLog +++ b/mcs/class/Mono.Http/Mono.Http.Modules/ChangeLog @@ -1,3 +1,8 @@ +2004-04-28 Gonzalo Paniagua Javier <gonzalo@ximian.com> + + * DigestAuthenticationModule.cs: introduces new overridable method + GetUserByName(), which by default works exactly like it used to, but + inherited classes can implement their own version. Patch by Tambet Ingo. 2003-12-15 Gonzalo Paniagua Javier <gonzalo@ximian.com> * AuthenticationModule.cs: diff --git a/mcs/class/Mono.Http/Mono.Http.Modules/DigestAuthenticationModule.cs b/mcs/class/Mono.Http/Mono.Http.Modules/DigestAuthenticationModule.cs index 82c4bae60c4..c3acc1c653c 100644 --- a/mcs/class/Mono.Http/Mono.Http.Modules/DigestAuthenticationModule.cs +++ b/mcs/class/Mono.Http/Mono.Http.Modules/DigestAuthenticationModule.cs @@ -54,6 +54,36 @@ namespace Mono.Http.Modules return (DateTime.Now <= expireTime); } + protected virtual bool GetUserByName (HttpApplication app, string username, + out string password, out string[] roles) + { + password = String.Empty; + roles = new string[0]; + + string userFileName = app.Request.MapPath (ConfigurationSettings.AppSettings ["Digest.Users"]); + if (userFileName == null || !File.Exists (userFileName)) + return false; + + XmlDocument userDoc = new XmlDocument (); + userDoc.Load (userFileName); + + string xPath = String.Format ("/users/user[@name='{0}']", username); + XmlNode user = userDoc.SelectSingleNode (xPath); + + if (user == null) + return false; + + password = user.Attributes ["password"].Value; + + XmlNodeList roleNodes = user.SelectNodes ("role"); + roles = new string [roleNodes.Count]; + int i = 0; + foreach (XmlNode xn in roleNodes) + roles [i++] = xn.Attributes ["name"].Value; + + return true; + } + protected override bool AcceptCredentials (HttpApplication app, string authentication) { // digest @@ -69,21 +99,12 @@ namespace Mono.Http.Modules } string username = (string) reqInfo ["username"]; + string password; + string[] roles; - string userFileName = app.Request.MapPath (ConfigurationSettings.AppSettings ["Digest.Users"]); - if (userFileName == null || !File.Exists (userFileName)) + if (!GetUserByName (app, username, out password, out roles)) return false; - XmlDocument userDoc = new XmlDocument (); - userDoc.Load (userFileName); - - string xPath = String.Format ("/users/user[@name='{0}']", username); - XmlNode user = userDoc.SelectSingleNode (xPath); - - if (user == null) - return false; - - string password = user.Attributes ["password"].Value; string realm = ConfigurationSettings.AppSettings ["Digest.Realm"]; // calculate the Digest hashes @@ -135,12 +156,6 @@ namespace Mono.Http.Modules bool result = (((string)reqInfo["response"] == hashedDigest) && (!isNonceStale)); if (result) { - XmlNodeList roleNodes = user.SelectNodes ("role"); - string[] roles = new string [roleNodes.Count]; - int i = 0; - foreach (XmlNode xn in roleNodes) - roles [i++] = xn.Attributes ["name"].Value; - IIdentity id = new GenericIdentity (username, AuthenticationMethod); app.Context.User = new GenericPrincipal (id, roles); } |