diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2013-03-20 23:51:48 -0700 |
---|---|---|
committer | Andrew Arnott <andrewarnott@gmail.com> | 2013-03-20 23:51:48 -0700 |
commit | 4b24b2730bfb5333eb13c6e6b79baac1dee49812 (patch) | |
tree | 13e094c16f92063c4ff955a4d09345465289e9a2 /src | |
parent | b117db5327ee30aae7d2ec8e9172dca85e933848 (diff) | |
download | DotNetOpenAuth-4b24b2730bfb5333eb13c6e6b79baac1dee49812.zip DotNetOpenAuth-4b24b2730bfb5333eb13c6e6b79baac1dee49812.tar.gz DotNetOpenAuth-4b24b2730bfb5333eb13c6e6b79baac1dee49812.tar.bz2 |
Fixes the rest of the build breaks in the solution, including DNOA.AspNet.Test
Diffstat (limited to 'src')
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)); |