summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/DotNetOpenAuth.AspNet.Test/DotNetOpenAuth.AspNet.Test.csproj8
-rw-r--r--src/DotNetOpenAuth.AspNet.Test/OAuth2ClientTest.cs25
-rw-r--r--src/DotNetOpenAuth.AspNet.Test/OAuthClientTest.cs42
-rw-r--r--src/DotNetOpenAuth.AspNet/AuthenticationResult.cs16
-rw-r--r--src/DotNetOpenAuth.AspNet/Clients/DictionaryExtensions.cs7
-rw-r--r--src/DotNetOpenAuth.AspNet/Clients/OAuth/LinkedInClient.cs3
-rw-r--r--src/DotNetOpenAuth.AspNet/Clients/OAuth/OAuthClient.cs9
-rw-r--r--src/DotNetOpenAuth.AspNet/Clients/OAuth/TwitterClient.cs3
-rw-r--r--src/DotNetOpenAuth.AspNet/Clients/OAuth2/FacebookClient.cs5
-rw-r--r--src/DotNetOpenAuth.AspNet/Clients/OAuth2/MicrosoftClient.cs5
-rw-r--r--src/DotNetOpenAuth.AspNet/Clients/OAuth2/OAuth2Client.cs13
-rw-r--r--src/DotNetOpenAuth.AspNet/Clients/OpenID/GoogleOpenIdClient.cs5
-rw-r--r--src/DotNetOpenAuth.AspNet/Clients/OpenID/OpenIDClient.cs11
-rw-r--r--src/DotNetOpenAuth.AspNet/Clients/OpenID/YahooOpenIdClient.cs5
14 files changed, 79 insertions, 78 deletions
diff --git a/src/DotNetOpenAuth.AspNet.Test/DotNetOpenAuth.AspNet.Test.csproj b/src/DotNetOpenAuth.AspNet.Test/DotNetOpenAuth.AspNet.Test.csproj
index 00da7c5..e640992 100644
--- a/src/DotNetOpenAuth.AspNet.Test/DotNetOpenAuth.AspNet.Test.csproj
+++ b/src/DotNetOpenAuth.AspNet.Test/DotNetOpenAuth.AspNet.Test.csproj
@@ -65,6 +65,14 @@
<Project>{60426312-6AE5-4835-8667-37EDEA670222}</Project>
<Name>DotNetOpenAuth.Core</Name>
</ProjectReference>
+ <ProjectReference Include="..\DotNetOpenAuth.OAuth.Common\DotNetOpenAuth.OAuth.Common.csproj">
+ <Project>{115217c5-22cd-415c-a292-0dd0238cdd89}</Project>
+ <Name>DotNetOpenAuth.OAuth.Common</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\DotNetOpenAuth.OAuth.Consumer\DotNetOpenAuth.OAuth.Consumer.csproj">
+ <Project>{b202e40d-4663-4a2b-acda-865f88ff7caa}</Project>
+ <Name>DotNetOpenAuth.OAuth.Consumer</Name>
+ </ProjectReference>
<ProjectReference Include="..\DotNetOpenAuth.OAuth\DotNetOpenAuth.OAuth.csproj">
<Project>{A288FCC8-6FCF-46DA-A45E-5F9281556361}</Project>
<Name>DotNetOpenAuth.OAuth</Name>
diff --git a/src/DotNetOpenAuth.AspNet.Test/OAuth2ClientTest.cs b/src/DotNetOpenAuth.AspNet.Test/OAuth2ClientTest.cs
index e60df01..ad5a69d 100644
--- a/src/DotNetOpenAuth.AspNet.Test/OAuth2ClientTest.cs
+++ b/src/DotNetOpenAuth.AspNet.Test/OAuth2ClientTest.cs
@@ -12,6 +12,7 @@ namespace DotNetOpenAuth.AspNet.Test {
using DotNetOpenAuth.AspNet.Clients;
using Moq;
using NUnit.Framework;
+ using System.Threading.Tasks;
[TestFixture]
public class OAuth2ClientTest {
@@ -28,14 +29,14 @@ namespace DotNetOpenAuth.AspNet.Test {
}
[TestCase]
- public void RequestAuthenticationIssueCorrectRedirect() {
+ public async Task RequestAuthenticationIssueCorrectRedirect() {
// Arrange
var client = new MockOAuth2Client();
var context = new Mock<HttpContextBase>(MockBehavior.Strict);
context.Setup(c => c.Response.Redirect("http://live.com/?q=http://return.to.me/", true)).Verifiable();
// Act
- client.RequestAuthentication(context.Object, new Uri("http://return.to.me"));
+ await client.RequestAuthenticationAsync(context.Object, new Uri("http://return.to.me"));
// Assert
context.Verify();
@@ -47,7 +48,7 @@ namespace DotNetOpenAuth.AspNet.Test {
var client = new MockOAuth2Client();
// Act && Assert
- Assert.Throws<ArgumentNullException>(() => client.VerifyAuthentication(null, new Uri("http://me.com")));
+ Assert.Throws<ArgumentNullException>(() => client.VerifyAuthenticationAsync(null, new Uri("http://me.com")).GetAwaiter().GetResult());
}
[TestCase]
@@ -56,11 +57,11 @@ namespace DotNetOpenAuth.AspNet.Test {
var client = new MockOAuth2Client();
// Act && Assert
- Assert.Throws<InvalidOperationException>(() => client.VerifyAuthentication(new Mock<HttpContextBase>().Object));
+ Assert.Throws<InvalidOperationException>(() => client.VerifyAuthenticationAsync(new Mock<HttpContextBase>().Object).GetAwaiter().GetResult());
}
[TestCase]
- public void VerifyAuthenticationFailsIfCodeIsNotPresent() {
+ public async Task VerifyAuthenticationFailsIfCodeIsNotPresent() {
// Arrange
var client = new MockOAuth2Client();
var context = new Mock<HttpContextBase>(MockBehavior.Strict);
@@ -68,14 +69,14 @@ namespace DotNetOpenAuth.AspNet.Test {
context.Setup(c => c.Request.QueryString).Returns(queryStrings);
// Act
- AuthenticationResult result = client.VerifyAuthentication(context.Object, new Uri("http://me.com"));
+ AuthenticationResult result = await client.VerifyAuthenticationAsync(context.Object, new Uri("http://me.com"));
// Assert
Assert.IsFalse(result.IsSuccessful);
}
[TestCase]
- public void VerifyAuthenticationFailsIfAccessTokenIsNull() {
+ public async Task VerifyAuthenticationFailsIfAccessTokenIsNull() {
// Arrange
var client = new MockOAuth2Client();
var context = new Mock<HttpContextBase>(MockBehavior.Strict);
@@ -84,14 +85,14 @@ namespace DotNetOpenAuth.AspNet.Test {
context.Setup(c => c.Request.QueryString).Returns(queryStrings);
// Act
- AuthenticationResult result = client.VerifyAuthentication(context.Object, new Uri("http://me.com"));
+ AuthenticationResult result = await client.VerifyAuthenticationAsync(context.Object, new Uri("http://me.com"));
// Assert
Assert.IsFalse(result.IsSuccessful);
}
[TestCase]
- public void VerifyAuthenticationSucceeds() {
+ public async Task VerifyAuthenticationSucceeds() {
// Arrange
var client = new MockOAuth2Client();
var context = new Mock<HttpContextBase>(MockBehavior.Strict);
@@ -100,7 +101,7 @@ namespace DotNetOpenAuth.AspNet.Test {
context.Setup(c => c.Request.QueryString).Returns(queryStrings);
// Act
- AuthenticationResult result = client.VerifyAuthentication(context.Object, new Uri("http://me.com"));
+ AuthenticationResult result = await client.VerifyAuthenticationAsync(context.Object, new Uri("http://me.com"));
// Assert
Assert.True(result.IsSuccessful);
@@ -125,9 +126,9 @@ namespace DotNetOpenAuth.AspNet.Test {
return (authorizationCode == "secret") ? "abcde" : null;
}
- protected override IDictionary<string, string> GetUserData(string accessToken) {
+ protected override NameValueCollection GetUserData(string accessToken) {
if (accessToken == "abcde") {
- return new Dictionary<string, string>
+ return new NameValueCollection
{
{ "id", "12345" },
{ "name", "John Doe" },
diff --git a/src/DotNetOpenAuth.AspNet.Test/OAuthClientTest.cs b/src/DotNetOpenAuth.AspNet.Test/OAuthClientTest.cs
index 3b72b9e..5016de2 100644
--- a/src/DotNetOpenAuth.AspNet.Test/OAuthClientTest.cs
+++ b/src/DotNetOpenAuth.AspNet.Test/OAuthClientTest.cs
@@ -13,6 +13,9 @@ namespace DotNetOpenAuth.AspNet.Test {
using DotNetOpenAuth.OAuth.Messages;
using Moq;
using NUnit.Framework;
+ using DotNetOpenAuth.OAuth;
+ using System.Threading;
+ using System.Threading.Tasks;
[TestFixture]
public class OAuthClientTest {
@@ -29,11 +32,11 @@ namespace DotNetOpenAuth.AspNet.Test {
}
[TestCase]
- public void RequestAuthenticationInvokeMethodOnWebWorker() {
+ public async Task RequestAuthenticationInvokeMethodOnWebWorker() {
// Arrange
var webWorker = new Mock<IOAuthWebWorker>(MockBehavior.Strict);
webWorker
- .Setup(w => w.RequestAuthentication(It.Is<Uri>(u => u.ToString().Equals("http://live.com/my/path.cshtml?q=one"))))
+ .Setup(w => w.RequestAuthenticationAsync(It.Is<Uri>(u => u.ToString().Equals("http://live.com/my/path.cshtml?q=one")), It.IsAny<CancellationToken>()))
.Verifiable();
var client = new MockOAuthClient(webWorker.Object);
@@ -41,45 +44,42 @@ namespace DotNetOpenAuth.AspNet.Test {
var context = new Mock<HttpContextBase>();
// Act
- client.RequestAuthentication(context.Object, returnUri);
+ await client.RequestAuthenticationAsync(context.Object, returnUri);
// Assert
webWorker.Verify();
}
[TestCase]
- public void VerifyAuthenticationFailsIfResponseTokenIsNull() {
+ public async Task VerifyAuthenticationFailsIfResponseTokenIsNull() {
// Arrange
var webWorker = new Mock<IOAuthWebWorker>(MockBehavior.Strict);
- webWorker.Setup(w => w.ProcessUserAuthorization()).Returns((AuthorizedTokenResponse)null);
+ webWorker.Setup(w => w.ProcessUserAuthorizationAsync(It.IsAny<HttpContextBase>(), CancellationToken.None)).Returns(Task.FromResult<AccessTokenResponse>(null));
var client = new MockOAuthClient(webWorker.Object);
var context = new Mock<HttpContextBase>();
// Act
- client.VerifyAuthentication(context.Object);
+ await client.VerifyAuthenticationAsync(context.Object);
// Assert
webWorker.Verify();
}
[TestCase]
- public void VerifyAuthenticationFailsIfAccessTokenIsInvalid() {
+ public async Task VerifyAuthenticationFailsIfAccessTokenIsInvalid() {
// Arrange
var endpoint = new MessageReceivingEndpoint("http://live.com/path/?a=b", HttpDeliveryMethods.GetRequest);
var request = new AuthorizedTokenRequest(endpoint, new Version("1.0"));
- var response = new AuthorizedTokenResponse(request) {
- AccessToken = "invalid token"
- };
var webWorker = new Mock<IOAuthWebWorker>(MockBehavior.Strict);
- webWorker.Setup(w => w.ProcessUserAuthorization()).Returns(response).Verifiable();
+ webWorker.Setup(w => w.ProcessUserAuthorizationAsync(It.IsAny<HttpContextBase>(), CancellationToken.None)).Returns(Task.FromResult<AccessTokenResponse>(null)).Verifiable();
var client = new MockOAuthClient(webWorker.Object);
var context = new Mock<HttpContextBase>();
// Act
- AuthenticationResult result = client.VerifyAuthentication(context.Object);
+ AuthenticationResult result = await client.VerifyAuthenticationAsync(context.Object);
// Assert
webWorker.Verify();
@@ -88,22 +88,19 @@ namespace DotNetOpenAuth.AspNet.Test {
}
[TestCase]
- public void VerifyAuthenticationSucceeds() {
+ public async Task VerifyAuthenticationSucceeds() {
// Arrange
var endpoint = new MessageReceivingEndpoint("http://live.com/path/?a=b", HttpDeliveryMethods.GetRequest);
var request = new AuthorizedTokenRequest(endpoint, new Version("1.0"));
- var response = new AuthorizedTokenResponse(request) {
- AccessToken = "ok"
- };
var webWorker = new Mock<IOAuthWebWorker>(MockBehavior.Strict);
- webWorker.Setup(w => w.ProcessUserAuthorization()).Returns(response).Verifiable();
+ webWorker.Setup(w => w.ProcessUserAuthorizationAsync(It.IsAny<HttpContextBase>(), CancellationToken.None)).Returns(Task.FromResult<AccessTokenResponse>(null)).Verifiable();
var client = new MockOAuthClient(webWorker.Object);
var context = new Mock<HttpContextBase>();
// Act
- AuthenticationResult result = client.VerifyAuthentication(context.Object);
+ AuthenticationResult result = await client.VerifyAuthenticationAsync(context.Object);
// Assert
webWorker.Verify();
@@ -113,7 +110,6 @@ namespace DotNetOpenAuth.AspNet.Test {
Assert.AreEqual("12345", result.ProviderUserId);
Assert.AreEqual("super", result.UserName);
Assert.IsNotNull(result.ExtraData);
- Assert.IsTrue(result.ExtraData.ContainsKey("accesstoken"));
Assert.AreEqual("ok", result.ExtraData["accesstoken"]);
}
@@ -133,12 +129,12 @@ namespace DotNetOpenAuth.AspNet.Test {
: base("mockoauth", worker) {
}
- protected override AuthenticationResult VerifyAuthenticationCore(AuthorizedTokenResponse response) {
- if (response.AccessToken == "ok") {
- return new AuthenticationResult(true, "mockoauth", "12345", "super", response.ExtraData);
+ protected override Task<AuthenticationResult> VerifyAuthenticationCoreAsync(AccessTokenResponse response, CancellationToken cancellationToken) {
+ if (response.AccessToken.Token == "ok") {
+ return Task.FromResult(new AuthenticationResult(true, "mockoauth", "12345", "super", response.ExtraData));
}
- return AuthenticationResult.Failed;
+ return Task.FromResult(AuthenticationResult.Failed);
}
}
}
diff --git a/src/DotNetOpenAuth.AspNet/AuthenticationResult.cs b/src/DotNetOpenAuth.AspNet/AuthenticationResult.cs
index 9e8492d..4493288 100644
--- a/src/DotNetOpenAuth.AspNet/AuthenticationResult.cs
+++ b/src/DotNetOpenAuth.AspNet/AuthenticationResult.cs
@@ -9,6 +9,7 @@ namespace DotNetOpenAuth.AspNet {
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using DotNetOpenAuth.Messaging;
+ using System.Collections.Specialized;
/// <summary>
/// Represents the result of OAuth or OpenID authentication.
@@ -46,10 +47,8 @@ namespace DotNetOpenAuth.AspNet {
/// <param name="exception">The exception.</param>
/// <param name="provider">The provider name.</param>
public AuthenticationResult(Exception exception, string provider)
- : this(isSuccessful: false)
- {
- if (exception == null)
- {
+ : this(isSuccessful: false) {
+ if (exception == null) {
throw new ArgumentNullException("exception");
}
@@ -76,15 +75,12 @@ namespace DotNetOpenAuth.AspNet {
/// The extra data.
/// </param>
public AuthenticationResult(
- bool isSuccessful, string provider, string providerUserId, string userName, IDictionary<string, string> extraData) {
+ bool isSuccessful, string provider, string providerUserId, string userName, NameValueCollection extraData) {
this.IsSuccessful = isSuccessful;
this.Provider = provider;
this.ProviderUserId = providerUserId;
this.UserName = userName;
- if (extraData != null) {
- // wrap extraData in a read-only dictionary
- this.ExtraData = new ReadOnlyDictionary<string, string>(extraData);
- }
+ this.ExtraData = extraData ?? new NameValueCollection();
}
/// <summary>
@@ -95,7 +91,7 @@ namespace DotNetOpenAuth.AspNet {
/// <summary>
/// Gets the optional extra data that may be returned from the provider
/// </summary>
- public IDictionary<string, string> ExtraData { get; private set; }
+ public NameValueCollection ExtraData { get; private set; }
/// <summary>
/// Gets a value indicating whether the authentication step is successful.
diff --git a/src/DotNetOpenAuth.AspNet/Clients/DictionaryExtensions.cs b/src/DotNetOpenAuth.AspNet/Clients/DictionaryExtensions.cs
index f441c07..a84fdcf 100644
--- a/src/DotNetOpenAuth.AspNet/Clients/DictionaryExtensions.cs
+++ b/src/DotNetOpenAuth.AspNet/Clients/DictionaryExtensions.cs
@@ -7,6 +7,7 @@
namespace DotNetOpenAuth.AspNet.Clients {
using System;
using System.Collections.Generic;
+ using System.Collections.Specialized;
using System.Xml.Linq;
/// <summary>
@@ -25,8 +26,8 @@ namespace DotNetOpenAuth.AspNet.Clients {
/// <param name="elementName">
/// Name of the element.
/// </param>
- public static void AddDataIfNotEmpty(
- this Dictionary<string, string> dictionary, XDocument document, string elementName) {
+ internal static void AddDataIfNotEmpty(
+ this NameValueCollection dictionary, XDocument document, string elementName) {
var element = document.Root.Element(elementName);
if (element != null) {
dictionary.AddItemIfNotEmpty(elementName, element.Value);
@@ -45,7 +46,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
/// <param name="value">
/// The value.
/// </param>
- public static void AddItemIfNotEmpty(this IDictionary<string, string> dictionary, string key, string value) {
+ internal static void AddItemIfNotEmpty(this NameValueCollection dictionary, string key, string value) {
if (key == null) {
throw new ArgumentNullException("key");
}
diff --git a/src/DotNetOpenAuth.AspNet/Clients/OAuth/LinkedInClient.cs b/src/DotNetOpenAuth.AspNet/Clients/OAuth/LinkedInClient.cs
index 637bbd0..daf3441 100644
--- a/src/DotNetOpenAuth.AspNet/Clients/OAuth/LinkedInClient.cs
+++ b/src/DotNetOpenAuth.AspNet/Clients/OAuth/LinkedInClient.cs
@@ -18,6 +18,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
using DotNetOpenAuth.OAuth;
using DotNetOpenAuth.OAuth.ChannelElements;
using DotNetOpenAuth.OAuth.Messages;
+ using System.Collections.Specialized;
/// <summary>
/// Represents LinkedIn authentication client.
@@ -77,7 +78,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
string lastName = document.Root.Element("last-name").Value;
string userName = firstName + " " + lastName;
- var extraData = new Dictionary<string, string>();
+ var extraData = new NameValueCollection();
extraData.Add("accesstoken", accessToken.Token);
extraData.Add("accesstokensecret", accessToken.Secret);
extraData.Add("name", userName);
diff --git a/src/DotNetOpenAuth.AspNet/Clients/OAuth/OAuthClient.cs b/src/DotNetOpenAuth.AspNet/Clients/OAuth/OAuthClient.cs
index 03006f2..1841ef3 100644
--- a/src/DotNetOpenAuth.AspNet/Clients/OAuth/OAuthClient.cs
+++ b/src/DotNetOpenAuth.AspNet/Clients/OAuth/OAuthClient.cs
@@ -19,6 +19,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
using DotNetOpenAuth.OAuth.ChannelElements;
using DotNetOpenAuth.OAuth.Messages;
using Validation;
+ using System.Collections.Specialized;
/// <summary>
/// Represents base class for OAuth 1.0 clients
@@ -116,9 +117,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
AuthenticationResult result = await this.VerifyAuthenticationCoreAsync(response, cancellationToken);
if (result.IsSuccessful && result.ExtraData != null) {
// add the access token to the user data dictionary just in case page developers want to use it
- var wrapExtraData = result.ExtraData.IsReadOnly
- ? new Dictionary<string, string>(result.ExtraData)
- : result.ExtraData;
+ var wrapExtraData = new NameValueCollection(result.ExtraData);
wrapExtraData["accesstoken"] = response.AccessToken.Token;
wrapExtraData["accesstokensecret"] = response.AccessToken.Secret;
@@ -155,14 +154,14 @@ namespace DotNetOpenAuth.AspNet.Clients {
/// <summary>
/// Check if authentication succeeded after user is redirected back from the service provider.
/// </summary>
- /// <param name="accessToken">
+ /// <param name="response">
/// The access token returned from service provider
/// </param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>
/// Authentication result
/// </returns>
- protected abstract Task<AuthenticationResult> VerifyAuthenticationCoreAsync(AccessTokenResponse accessToken, CancellationToken cancellationToken);
+ protected abstract Task<AuthenticationResult> VerifyAuthenticationCoreAsync(AccessTokenResponse response, CancellationToken cancellationToken);
#endregion
}
}
diff --git a/src/DotNetOpenAuth.AspNet/Clients/OAuth/TwitterClient.cs b/src/DotNetOpenAuth.AspNet/Clients/OAuth/TwitterClient.cs
index 88bb530..0c17ed3 100644
--- a/src/DotNetOpenAuth.AspNet/Clients/OAuth/TwitterClient.cs
+++ b/src/DotNetOpenAuth.AspNet/Clients/OAuth/TwitterClient.cs
@@ -18,6 +18,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
using DotNetOpenAuth.OAuth;
using DotNetOpenAuth.OAuth.ChannelElements;
using DotNetOpenAuth.OAuth.Messages;
+ using System.Collections.Specialized;
/// <summary>
/// Represents a Twitter client
@@ -69,7 +70,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
+ MessagingUtilities.EscapeUriDataStringRfc3986(userId));
var authorizingHandler = this.WebWorker.CreateMessageHandler(response.AccessToken);
- var extraData = new Dictionary<string, string>();
+ var extraData = new NameValueCollection();
extraData.Add("accesstoken", response.AccessToken.Token);
extraData.Add("accesstokensecret", response.AccessToken.Secret);
try {
diff --git a/src/DotNetOpenAuth.AspNet/Clients/OAuth2/FacebookClient.cs b/src/DotNetOpenAuth.AspNet/Clients/OAuth2/FacebookClient.cs
index d20e452..c06c1dc 100644
--- a/src/DotNetOpenAuth.AspNet/Clients/OAuth2/FacebookClient.cs
+++ b/src/DotNetOpenAuth.AspNet/Clients/OAuth2/FacebookClient.cs
@@ -12,6 +12,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
using System.Web;
using DotNetOpenAuth.Messaging;
using Validation;
+ using System.Collections.Specialized;
/// <summary>
/// The facebook client.
@@ -92,7 +93,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
/// The access token.
/// </param>
/// <returns>A dictionary of profile data.</returns>
- protected override IDictionary<string, string> GetUserData(string accessToken) {
+ protected override NameValueCollection GetUserData(string accessToken) {
FacebookGraphData graphData;
var request =
WebRequest.Create(
@@ -104,7 +105,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
}
// this dictionary must contains
- var userData = new Dictionary<string, string>();
+ var userData = new NameValueCollection();
userData.AddItemIfNotEmpty("id", graphData.Id);
userData.AddItemIfNotEmpty("username", graphData.Email);
userData.AddItemIfNotEmpty("name", graphData.Name);
diff --git a/src/DotNetOpenAuth.AspNet/Clients/OAuth2/MicrosoftClient.cs b/src/DotNetOpenAuth.AspNet/Clients/OAuth2/MicrosoftClient.cs
index 3e5f71f..b9c4941 100644
--- a/src/DotNetOpenAuth.AspNet/Clients/OAuth2/MicrosoftClient.cs
+++ b/src/DotNetOpenAuth.AspNet/Clients/OAuth2/MicrosoftClient.cs
@@ -11,6 +11,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
using System.Net;
using DotNetOpenAuth.Messaging;
using Validation;
+ using System.Collections.Specialized;
/// <summary>
/// The Microsoft account client.
@@ -110,7 +111,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
/// <returns>
/// A dictionary contains key-value pairs of user data
/// </returns>
- protected override IDictionary<string, string> GetUserData(string accessToken) {
+ protected override NameValueCollection GetUserData(string accessToken) {
MicrosoftClientUserData graph;
var request =
WebRequest.Create(
@@ -121,7 +122,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
}
}
- var userData = new Dictionary<string, string>();
+ var userData = new NameValueCollection();
userData.AddItemIfNotEmpty("id", graph.Id);
userData.AddItemIfNotEmpty("username", graph.Name);
userData.AddItemIfNotEmpty("name", graph.Name);
diff --git a/src/DotNetOpenAuth.AspNet/Clients/OAuth2/OAuth2Client.cs b/src/DotNetOpenAuth.AspNet/Clients/OAuth2/OAuth2Client.cs
index 0765a9e..8e6b5f3 100644
--- a/src/DotNetOpenAuth.AspNet/Clients/OAuth2/OAuth2Client.cs
+++ b/src/DotNetOpenAuth.AspNet/Clients/OAuth2/OAuth2Client.cs
@@ -15,6 +15,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
using DotNetOpenAuth.Messaging;
using Validation;
+ using System.Collections.Specialized;
/// <summary>
/// Represents the base class for OAuth 2.0 clients
@@ -112,19 +113,15 @@ namespace DotNetOpenAuth.AspNet.Clients {
return AuthenticationResult.Failed;
}
- IDictionary<string, string> userData = this.GetUserData(accessToken);
+ var userData = this.GetUserData(accessToken);
if (userData == null) {
return AuthenticationResult.Failed;
}
- string id = userData["id"];
- string name;
-
// Some oAuth providers do not return value for the 'username' attribute.
// In that case, try the 'name' attribute. If it's still unavailable, fall back to 'id'
- if (!userData.TryGetValue("username", out name) && !userData.TryGetValue("name", out name)) {
- name = id;
- }
+ string id = userData["id"];
+ string name = userData["username"] ?? userData["name"] ?? id;
// add the access token to the user data dictionary just in case page developers want to use it
userData["accesstoken"] = accessToken;
@@ -159,7 +156,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
/// <returns>
/// A dictionary contains key-value pairs of user data
/// </returns>
- protected abstract IDictionary<string, string> GetUserData(string accessToken);
+ protected abstract NameValueCollection GetUserData(string accessToken);
/// <summary>
/// Queries the access token from the specified authorization code.
diff --git a/src/DotNetOpenAuth.AspNet/Clients/OpenID/GoogleOpenIdClient.cs b/src/DotNetOpenAuth.AspNet/Clients/OpenID/GoogleOpenIdClient.cs
index 6b4061a..2a68bd8 100644
--- a/src/DotNetOpenAuth.AspNet/Clients/OpenID/GoogleOpenIdClient.cs
+++ b/src/DotNetOpenAuth.AspNet/Clients/OpenID/GoogleOpenIdClient.cs
@@ -8,6 +8,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
using System.Collections.Generic;
using DotNetOpenAuth.OpenId.Extensions.AttributeExchange;
using DotNetOpenAuth.OpenId.RelyingParty;
+ using System.Collections.Specialized;
/// <summary>
/// Represents Google OpenID client.
@@ -32,10 +33,10 @@ namespace DotNetOpenAuth.AspNet.Clients {
/// The response message.
/// </param>
/// <returns>A dictionary of profile data; or null if no data is available.</returns>
- protected override Dictionary<string, string> GetExtraData(IAuthenticationResponse response) {
+ protected override NameValueCollection GetExtraData(IAuthenticationResponse response) {
FetchResponse fetchResponse = response.GetExtension<FetchResponse>();
if (fetchResponse != null) {
- var extraData = new Dictionary<string, string>();
+ var extraData = new NameValueCollection();
extraData.AddItemIfNotEmpty("email", fetchResponse.GetAttributeValue(WellKnownAttributes.Contact.Email));
extraData.AddItemIfNotEmpty("country", fetchResponse.GetAttributeValue(WellKnownAttributes.Contact.HomeAddress.Country));
extraData.AddItemIfNotEmpty("firstName", fetchResponse.GetAttributeValue(WellKnownAttributes.Name.First));
diff --git a/src/DotNetOpenAuth.AspNet/Clients/OpenID/OpenIDClient.cs b/src/DotNetOpenAuth.AspNet/Clients/OpenID/OpenIDClient.cs
index f5914b4..901741b 100644
--- a/src/DotNetOpenAuth.AspNet/Clients/OpenID/OpenIDClient.cs
+++ b/src/DotNetOpenAuth.AspNet/Clients/OpenID/OpenIDClient.cs
@@ -15,6 +15,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
using DotNetOpenAuth.OpenId;
using DotNetOpenAuth.OpenId.RelyingParty;
using Validation;
+ using System.Collections.Specialized;
/// <summary>
/// Base classes for OpenID clients.
@@ -118,14 +119,10 @@ namespace DotNetOpenAuth.AspNet.Clients {
if (response.Status == AuthenticationStatus.Authenticated) {
string id = response.ClaimedIdentifier;
- string username;
-
- Dictionary<string, string> extraData = this.GetExtraData(response) ?? new Dictionary<string, string>();
+ var extraData = this.GetExtraData(response) ?? new NameValueCollection();
// try to look up username from the 'username' or 'email' property. If not found, fall back to 'friendly id'
- if (!extraData.TryGetValue("username", out username) && !extraData.TryGetValue("email", out username)) {
- username = response.FriendlyIdentifierForDisplay;
- }
+ string username = extraData["username"] ?? extraData["email"] ?? response.FriendlyIdentifierForDisplay;
return new AuthenticationResult(true, this.ProviderName, id, username, extraData);
}
@@ -144,7 +141,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
/// The response message.
/// </param>
/// <returns>Always null.</returns>
- protected virtual Dictionary<string, string> GetExtraData(IAuthenticationResponse response) {
+ protected virtual NameValueCollection GetExtraData(IAuthenticationResponse response) {
return null;
}
diff --git a/src/DotNetOpenAuth.AspNet/Clients/OpenID/YahooOpenIdClient.cs b/src/DotNetOpenAuth.AspNet/Clients/OpenID/YahooOpenIdClient.cs
index bd420fc..d282d4f 100644
--- a/src/DotNetOpenAuth.AspNet/Clients/OpenID/YahooOpenIdClient.cs
+++ b/src/DotNetOpenAuth.AspNet/Clients/OpenID/YahooOpenIdClient.cs
@@ -8,6 +8,7 @@ namespace DotNetOpenAuth.AspNet.Clients {
using System.Collections.Generic;
using DotNetOpenAuth.OpenId.Extensions.AttributeExchange;
using DotNetOpenAuth.OpenId.RelyingParty;
+ using System.Collections.Specialized;
/// <summary>
/// The yahoo open id client.
@@ -32,10 +33,10 @@ namespace DotNetOpenAuth.AspNet.Clients {
/// The response message.
/// </param>
/// <returns>A dictionary of profile data; or null if no data is available.</returns>
- protected override Dictionary<string, string> GetExtraData(IAuthenticationResponse response) {
+ protected override NameValueCollection GetExtraData(IAuthenticationResponse response) {
FetchResponse fetchResponse = response.GetExtension<FetchResponse>();
if (fetchResponse != null) {
- var extraData = new Dictionary<string, string>();
+ var extraData = new NameValueCollection();
extraData.AddItemIfNotEmpty("email", fetchResponse.GetAttributeValue(WellKnownAttributes.Contact.Email));
extraData.AddItemIfNotEmpty("fullName", fetchResponse.GetAttributeValue(WellKnownAttributes.Name.FullName));