summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2008-04-20 09:29:59 -0700
committerAndrew Arnott <andrewarnott@gmail.com>2008-04-20 09:29:59 -0700
commit0c59596e43a2d7a854df5f99299ef4a23cf1fd6d (patch)
tree21777fe7aee7c52ae25bd4ecb63bfee9c78d34cd
parent6334f4a61dec7d12cd176389dd2b6c63f81c13ef (diff)
downloadDotNetOpenAuth-0c59596e43a2d7a854df5f99299ef4a23cf1fd6d.zip
DotNetOpenAuth-0c59596e43a2d7a854df5f99299ef4a23cf1fd6d.tar.gz
DotNetOpenAuth-0c59596e43a2d7a854df5f99299ef4a23cf1fd6d.tar.bz2
Fetch+Store extension in same message fix.
Improves exception and text generated when two extensions sharing a single namespace are added to the same message.
-rw-r--r--src/DotNetOpenId.Test/Extensions/AttributeExchangeTests.cs15
-rw-r--r--src/DotNetOpenId.Test/ExtensionsArgumentsManagerTests.cs10
-rw-r--r--src/DotNetOpenId/ExtensionArgumentsManager.cs3
-rw-r--r--src/DotNetOpenId/Strings.Designer.cs9
-rw-r--r--src/DotNetOpenId/Strings.resx3
5 files changed, 36 insertions, 4 deletions
diff --git a/src/DotNetOpenId.Test/Extensions/AttributeExchangeTests.cs b/src/DotNetOpenId.Test/Extensions/AttributeExchangeTests.cs
index f9c769e..7ed6699 100644
--- a/src/DotNetOpenId.Test/Extensions/AttributeExchangeTests.cs
+++ b/src/DotNetOpenId.Test/Extensions/AttributeExchangeTests.cs
@@ -88,5 +88,20 @@ namespace DotNetOpenId.Test.Extensions {
for (int i = 0; i < newAttribute.Values.Length; i++)
Assert.AreEqual(newAttribute.Values[i], att.Values[i]);
}
+
+ /// <summary>
+ /// Tests that two extensions that use the same namespace cannot
+ /// both be added to the message at once, per the spec.
+ /// </summary>
+ [Test, ExpectedException(typeof(OpenIdException))]
+ public void FetchAndStore() {
+ var identityUrl = TestSupport.GetIdentityUrl(TestSupport.Scenarios.ExtensionFullCooperation, Version);
+ var returnTo = TestSupport.GetFullUrl(TestSupport.ConsumerPage);
+ var realm = new Realm(TestSupport.GetFullUrl(TestSupport.ConsumerPage).AbsoluteUri);
+ var consumer = new OpenIdRelyingParty(AppStore, null);
+ var request = consumer.CreateRequest(identityUrl, realm, returnTo);
+ request.AddExtension(new AttributeExchangeFetchRequest());
+ request.AddExtension(new AttributeExchangeStoreRequest());
+ }
}
}
diff --git a/src/DotNetOpenId.Test/ExtensionsArgumentsManagerTests.cs b/src/DotNetOpenId.Test/ExtensionsArgumentsManagerTests.cs
index 91f8682..3fcbb3c 100644
--- a/src/DotNetOpenId.Test/ExtensionsArgumentsManagerTests.cs
+++ b/src/DotNetOpenId.Test/ExtensionsArgumentsManagerTests.cs
@@ -167,8 +167,12 @@ namespace DotNetOpenId.Test {
ExtensionArgumentsManager.CreateIncomingExtensions(args);
}
- [Test]
- public void AddExtensionArgsTwice() {
+ /// <summary>
+ /// Verifies that two extensions cannot be added in the same namespace
+ /// to the same message.
+ /// </summary>
+ [Test, ExpectedException(typeof(OpenIdException))]
+ public void AddExtensionArgsTwiceInSameNamespace() {
var args1 = new Dictionary<string, string>() {
{"k1", "v1"},
};
@@ -178,8 +182,6 @@ namespace DotNetOpenId.Test {
var mgr = ExtensionArgumentsManager.CreateOutgoingExtensions(protocol);
mgr.AddExtensionArguments("extTypeURI", args1);
mgr.AddExtensionArguments("extTypeURI", args2);
- var results = mgr.GetArgumentsToSend(false);
- Assert.AreEqual(3, results.Count);
}
[Test]
diff --git a/src/DotNetOpenId/ExtensionArgumentsManager.cs b/src/DotNetOpenId/ExtensionArgumentsManager.cs
index 1382f22..b35d1e4 100644
--- a/src/DotNetOpenId/ExtensionArgumentsManager.cs
+++ b/src/DotNetOpenId/ExtensionArgumentsManager.cs
@@ -105,6 +105,9 @@ namespace DotNetOpenId {
Dictionary<string, string> extensionArgs;
if (!extensions.TryGetValue(extensionTypeUri, out extensionArgs))
extensions.Add(extensionTypeUri, extensionArgs = new Dictionary<string,string>());
+ if (extensionArgs.Count > 0)
+ throw new OpenIdException(string.Format(CultureInfo.CurrentCulture,
+ Strings.ExtensionAlreadyAddedWithSameTypeURI, extensionTypeUri));
foreach (var pair in arguments) {
extensionArgs.Add(pair.Key, pair.Value);
}
diff --git a/src/DotNetOpenId/Strings.Designer.cs b/src/DotNetOpenId/Strings.Designer.cs
index cf6f6af..7ef783d 100644
--- a/src/DotNetOpenId/Strings.Designer.cs
+++ b/src/DotNetOpenId/Strings.Designer.cs
@@ -124,6 +124,15 @@ namespace DotNetOpenId {
}
/// <summary>
+ /// Looks up a localized string similar to An extension sharing namespace &apos;{0}&apos; has already been added. Only one extension per namespace is allowed in a given request..
+ /// </summary>
+ internal static string ExtensionAlreadyAddedWithSameTypeURI {
+ get {
+ return ResourceManager.GetString("ExtensionAlreadyAddedWithSameTypeURI", resourceCulture);
+ }
+ }
+
+ /// <summary>
/// Looks up a localized string similar to Extension parameter key &apos;{0}&apos; encountered, but extension parameter keys should not include their prefix..
/// </summary>
internal static string ExtensionParameterKeysWithoutPrefixExpected {
diff --git a/src/DotNetOpenId/Strings.resx b/src/DotNetOpenId/Strings.resx
index 9e76b85..d11d105 100644
--- a/src/DotNetOpenId/Strings.resx
+++ b/src/DotNetOpenId/Strings.resx
@@ -138,6 +138,9 @@
<data name="ExpiredNonce" xml:space="preserve">
<value>The nonce has expired.</value>
</data>
+ <data name="ExtensionAlreadyAddedWithSameTypeURI" xml:space="preserve">
+ <value>An extension sharing namespace '{0}' has already been added. Only one extension per namespace is allowed in a given request.</value>
+ </data>
<data name="ExtensionParameterKeysWithoutPrefixExpected" xml:space="preserve">
<value>Extension parameter key '{0}' encountered, but extension parameter keys should not include their prefix.</value>
</data>