summaryrefslogtreecommitdiffstats
path: root/src/DotNetOpenAuth/OAuth2/UserAgentClient.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/DotNetOpenAuth/OAuth2/UserAgentClient.cs')
-rw-r--r--src/DotNetOpenAuth/OAuth2/UserAgentClient.cs30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/DotNetOpenAuth/OAuth2/UserAgentClient.cs b/src/DotNetOpenAuth/OAuth2/UserAgentClient.cs
index f68393b..7815858 100644
--- a/src/DotNetOpenAuth/OAuth2/UserAgentClient.cs
+++ b/src/DotNetOpenAuth/OAuth2/UserAgentClient.cs
@@ -68,11 +68,11 @@ namespace DotNetOpenAuth.OAuth2 {
/// <param name="actualRedirectUrl">The actual URL of the incoming HTTP request.</param>
/// <param name="authorization">The authorization.</param>
/// <returns>The granted authorization, or <c>null</c> if the incoming HTTP request did not contain an authorization server response or authorization was rejected.</returns>
- public IAuthorizationState ProcessUserAuthorization(Uri actualRedirectUrl, IAuthorizationState authorization = null) {
+ public IAuthorizationState ProcessUserAuthorization(Uri actualRedirectUrl, IAuthorizationState authorizationState = null) {
Contract.Requires<ArgumentNullException>(actualRedirectUrl != null, "actualRedirectUrl");
- if (authorization == null) {
- authorization = new AuthorizationState();
+ if (authorizationState == null) {
+ authorizationState = new AuthorizationState();
}
var carrier = new HttpRequestInfo("GET", actualRedirectUrl, actualRedirectUrl.PathAndQuery, new System.Net.WebHeaderCollection(), null);
@@ -84,15 +84,29 @@ namespace DotNetOpenAuth.OAuth2 {
EndUserAuthorizationSuccessResponse success;
EndUserAuthorizationFailedResponse failure;
if ((success = response as EndUserAuthorizationSuccessResponse) != null) {
- this.UpdateAuthorizationWithResponse(authorization, success);
+ var accessTokenRequest = new AccessTokenAuthorizationCodeRequest(this.AuthorizationServer) {
+ ClientIdentifier = this.ClientIdentifier,
+ ClientSecret = this.ClientSecret,
+ Callback = authorizationState.Callback,
+ AuthorizationCode = success.AuthorizationCode,
+ };
+ IProtocolMessage accessTokenResponse = this.Channel.Request(accessTokenRequest);
+ var accessTokenSuccess = accessTokenResponse as AccessTokenSuccessResponse;
+ var failedAccessTokenResponse = accessTokenResponse as AccessTokenFailedResponse;
+ if (accessTokenSuccess != null) {
+ this.UpdateAuthorizationWithResponse(authorizationState, accessTokenSuccess);
+ } else if (failedAccessTokenResponse != null) {
+ authorizationState.Delete();
+ return null;
+ } else {
+ ErrorUtilities.ThrowProtocol(MessagingStrings.UnexpectedMessageReceivedOfMany);
+ }
} else if ((failure = response as EndUserAuthorizationFailedResponse) != null) {
- authorization.Delete();
+ authorizationState.Delete();
return null;
- } else {
- ErrorUtilities.ThrowProtocol(MessagingStrings.UnexpectedMessageReceivedOfMany);
}
- return authorization;
+ return authorizationState;
}
}
}