diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2008-03-21 07:53:51 -0700 |
---|---|---|
committer | Andrew <andrewarnott@gmail.com> | 2008-03-21 07:53:51 -0700 |
commit | 95399031dbb545c91076b08b9717729ebe13347f (patch) | |
tree | b65b5d14202e259d5372b5b65fbb78f996025326 | |
parent | 7ae18168d7573fda356c4360ae42dd78eab7ccc2 (diff) | |
download | DotNetOpenAuth-95399031dbb545c91076b08b9717729ebe13347f.zip DotNetOpenAuth-95399031dbb545c91076b08b9717729ebe13347f.tar.gz DotNetOpenAuth-95399031dbb545c91076b08b9717729ebe13347f.tar.bz2 |
Fixed extension handling for extension args with no explicit key value.
-rw-r--r-- | src/DotNetOpenId.Test/ExtensionsArgumentsManagerTests.cs | 29 | ||||
-rw-r--r-- | src/DotNetOpenId/ExtensionArgumentsManager.cs | 13 |
2 files changed, 35 insertions, 7 deletions
diff --git a/src/DotNetOpenId.Test/ExtensionsArgumentsManagerTests.cs b/src/DotNetOpenId.Test/ExtensionsArgumentsManagerTests.cs index 0cd8a21..ff0cb07 100644 --- a/src/DotNetOpenId.Test/ExtensionsArgumentsManagerTests.cs +++ b/src/DotNetOpenId.Test/ExtensionsArgumentsManagerTests.cs @@ -46,7 +46,7 @@ namespace DotNetOpenId.Test { var mgr = ExtensionArgumentsManager.CreateIncomingExtensions(new Dictionary<string, string>());
mgr.GetArgumentsToSend(true);
}
-
+
[Test]
public void CreateIncomingSimpleNoExtensions() {
var args = new Dictionary<string, string>() {
@@ -117,7 +117,7 @@ namespace DotNetOpenId.Test { Assert.IsTrue(mgr.ContainsExtension(QueryStringArgs.sreg_ns));
Assert.AreEqual("andy", mgr.GetExtensionArguments(QueryStringArgs.sreg_ns)["nickname"]);
// Now imagine that sreg was used explicitly by something else...
- args = new Dictionary<string,string>() {
+ args = new Dictionary<string, string>() {
{"openid.sreg.nickname", "andy"},
{"openid.ns.sreg", "someOtherNS"},
};
@@ -178,5 +178,30 @@ namespace DotNetOpenId.Test { var results = mgr.GetArgumentsToSend(false);
Assert.AreEqual(3, results.Count);
}
+
+ [Test]
+ public void ReadExtensionWithEmptyKey() {
+ var args = new Dictionary<string, string> {
+ {"openid.sreg", "v1"},
+ };
+ var mgr = ExtensionArgumentsManager.CreateIncomingExtensions(args);
+ var result = mgr.GetExtensionArguments(QueryStringArgs.sreg_ns);
+ Assert.AreEqual("v1", result[string.Empty]);
+ }
+
+ [Test]
+ public void WriteExtensionWithEmptyKey() {
+ var args = new Dictionary<string, string> {
+ {"", "v1"},
+ };
+ var mgr = ExtensionArgumentsManager.CreateOutgoingExtensions();
+ mgr.AddExtensionArguments(QueryStringArgs.sreg_ns, args);
+ var result = mgr.GetArgumentsToSend(true);
+ Assert.AreEqual(2, result.Count);
+ Assert.AreEqual("v1", result["openid.sreg"]);
+ result = mgr.GetArgumentsToSend(false);
+ Assert.AreEqual(2, result.Count);
+ Assert.AreEqual("v1", result["sreg"]);
+ }
}
}
diff --git a/src/DotNetOpenId/ExtensionArgumentsManager.cs b/src/DotNetOpenId/ExtensionArgumentsManager.cs index 4a28c9a..3113ae5 100644 --- a/src/DotNetOpenId/ExtensionArgumentsManager.cs +++ b/src/DotNetOpenId/ExtensionArgumentsManager.cs @@ -41,7 +41,7 @@ namespace DotNetOpenId { }
}
// For backwards compatibility, add certain aliases if they aren't defined.
- foreach(var pair in typeUriToAliasAffinity) {
+ foreach (var pair in typeUriToAliasAffinity) {
if (!mgr.typeUriToAliasMap.ContainsKey(pair.Key) &&
!aliasToTypeUriMap.ContainsKey(pair.Value)) {
mgr.typeUriToAliasMap.Add(pair.Key, pair.Value);
@@ -56,9 +56,10 @@ namespace DotNetOpenId { if (periodIndex >= 0) possibleAlias = possibleAlias.Substring(0, periodIndex);
string typeUri;
if (aliasToTypeUriMap.TryGetValue(possibleAlias, out typeUri)) {
- if (!mgr.extensions.ContainsKey(typeUri))
+ if (!mgr.extensions.ContainsKey(typeUri))
mgr.extensions[typeUri] = new Dictionary<string, string>();
- mgr.extensions[typeUri].Add(pair.Key.Substring(QueryStringArgs.openid.Prefix.Length + possibleAlias.Length + 1), pair.Value);
+ string key = periodIndex >= 0 ? pair.Key.Substring(QueryStringArgs.openid.Prefix.Length + possibleAlias.Length + 1) : string.Empty;
+ mgr.extensions[typeUri].Add(key, pair.Value);
}
}
return mgr;
@@ -88,9 +89,11 @@ namespace DotNetOpenId { // send out the alias declaration
string openidPrefix = includeOpenIdPrefix ? QueryStringArgs.openid.Prefix : string.Empty;
args.Add(openidPrefix + QueryStringArgs.openidnp.ns + "." + alias, typeUri);
- string prefix = openidPrefix + alias + ".";
+ string prefix = openidPrefix + alias;
foreach (var pair in extensionArgs) {
- args.Add(prefix + pair.Key, pair.Value);
+ string key = prefix;
+ if (pair.Key.Length > 0) key += "." + pair.Key;
+ args.Add(key, pair.Value);
}
}
return args;
|