Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGonzalo Paniagua Javier <gonzalo.mono@gmail.com>2004-04-28 19:45:27 +0400
committerGonzalo Paniagua Javier <gonzalo.mono@gmail.com>2004-04-28 19:45:27 +0400
commit4b73dd9390a8bffb2619738d3b287f7eca0ded08 (patch)
treea6d70521b1397476075ee1c2f3af79be74f9ddb0 /mcs/class/Mono.Http
parent109ef4ee995d9f7183eec0e6a97a23aa0e78a529 (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/ChangeLog5
-rw-r--r--mcs/class/Mono.Http/Mono.Http.Modules/DigestAuthenticationModule.cs51
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);
}