diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2008-04-20 09:29:59 -0700 |
---|---|---|
committer | Andrew Arnott <andrewarnott@gmail.com> | 2008-04-20 09:29:59 -0700 |
commit | 0c59596e43a2d7a854df5f99299ef4a23cf1fd6d (patch) | |
tree | 21777fe7aee7c52ae25bd4ecb63bfee9c78d34cd /src | |
parent | 6334f4a61dec7d12cd176389dd2b6c63f81c13ef (diff) | |
download | DotNetOpenAuth-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.
Diffstat (limited to 'src')
-rw-r--r-- | src/DotNetOpenId.Test/Extensions/AttributeExchangeTests.cs | 15 | ||||
-rw-r--r-- | src/DotNetOpenId.Test/ExtensionsArgumentsManagerTests.cs | 10 | ||||
-rw-r--r-- | src/DotNetOpenId/ExtensionArgumentsManager.cs | 3 | ||||
-rw-r--r-- | src/DotNetOpenId/Strings.Designer.cs | 9 | ||||
-rw-r--r-- | src/DotNetOpenId/Strings.resx | 3 |
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 '{0}' 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 '{0}' 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>
|