summaryrefslogtreecommitdiffstats
path: root/src/DotNetOpenAuth.OAuth2/OAuth2/ChannelElements/AccessRequestBindingElement.cs
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2012-02-23 07:47:08 -0800
committerAndrew Arnott <andrewarnott@gmail.com>2012-02-23 07:47:08 -0800
commit8679fd44bbe14b590353c128d47e9a73cf180160 (patch)
tree7b69e3a3170c6c825cb958863a924146c3e427ba /src/DotNetOpenAuth.OAuth2/OAuth2/ChannelElements/AccessRequestBindingElement.cs
parentd1ef15d419f5235cc7266c9128790e20b92c5e58 (diff)
downloadDotNetOpenAuth-8679fd44bbe14b590353c128d47e9a73cf180160.zip
DotNetOpenAuth-8679fd44bbe14b590353c128d47e9a73cf180160.tar.gz
DotNetOpenAuth-8679fd44bbe14b590353c128d47e9a73cf180160.tar.bz2
Split out the authorization carrying messages into distinct interfaces.
This is to support additional grant types such as resource owner password credential and client credentials.
Diffstat (limited to 'src/DotNetOpenAuth.OAuth2/OAuth2/ChannelElements/AccessRequestBindingElement.cs')
-rw-r--r--src/DotNetOpenAuth.OAuth2/OAuth2/ChannelElements/AccessRequestBindingElement.cs62
1 files changed, 29 insertions, 33 deletions
diff --git a/src/DotNetOpenAuth.OAuth2/OAuth2/ChannelElements/AccessRequestBindingElement.cs b/src/DotNetOpenAuth.OAuth2/OAuth2/ChannelElements/AccessRequestBindingElement.cs
index b1ead11..6132c98 100644
--- a/src/DotNetOpenAuth.OAuth2/OAuth2/ChannelElements/AccessRequestBindingElement.cs
+++ b/src/DotNetOpenAuth.OAuth2/OAuth2/ChannelElements/AccessRequestBindingElement.cs
@@ -55,26 +55,23 @@ namespace DotNetOpenAuth.OAuth2.ChannelElements {
/// <see cref="MessagePartAttribute.RequiredProtection"/> properties where applicable.
/// </remarks>
public override MessageProtections? ProcessOutgoingMessage(IProtocolMessage message) {
- var response = message as IAuthorizationCarryingRequest;
- if (response != null) {
- switch (response.CodeOrTokenType) {
- case CodeOrTokenType.AuthorizationCode:
- var codeFormatter = AuthorizationCode.CreateFormatter(this.AuthorizationServer);
- var code = (AuthorizationCode)response.AuthorizationDescription;
- response.CodeOrToken = codeFormatter.Serialize(code);
- break;
- case CodeOrTokenType.AccessToken:
- var responseWithOriginatingRequest = (IDirectResponseProtocolMessage)message;
- var request = (IAccessTokenRequest)responseWithOriginatingRequest.OriginatingRequest;
-
- using (var resourceServerKey = this.AuthorizationServer.GetResourceServerEncryptionKey(request)) {
- var tokenFormatter = AccessToken.CreateFormatter(this.AuthorizationServer.AccessTokenSigningKey, resourceServerKey);
- var token = (AccessToken)response.AuthorizationDescription;
- response.CodeOrToken = tokenFormatter.Serialize(token);
- break;
- }
- default:
- throw ErrorUtilities.ThrowInternal(string.Format(CultureInfo.CurrentCulture, "Unexpected outgoing code or token type: {0}", response.CodeOrTokenType));
+ var authCodeCarrier = message as IAuthorizationCodeCarryingRequest;
+ if (authCodeCarrier != null) {
+ var codeFormatter = AuthorizationCode.CreateFormatter(this.AuthorizationServer);
+ var code = authCodeCarrier.AuthorizationDescription;
+ authCodeCarrier.Code = codeFormatter.Serialize(code);
+ return MessageProtections.None;
+ }
+
+ var accessTokenCarrier = message as IAccessTokenCarryingRequest;
+ if (accessTokenCarrier != null) {
+ var responseWithOriginatingRequest = (IDirectResponseProtocolMessage)message;
+ var request = (IAccessTokenRequest)responseWithOriginatingRequest.OriginatingRequest;
+
+ using (var resourceServerKey = this.AuthorizationServer.GetResourceServerEncryptionKey(request)) {
+ var tokenFormatter = AccessToken.CreateFormatter(this.AuthorizationServer.AccessTokenSigningKey, resourceServerKey);
+ var token = accessTokenCarrier.AuthorizationDescription;
+ accessTokenCarrier.AccessToken = tokenFormatter.Serialize(token);
}
return MessageProtections.None;
@@ -115,19 +112,18 @@ namespace DotNetOpenAuth.OAuth2.ChannelElements {
var tokenRequest = message as IAuthorizationCarryingRequest;
if (tokenRequest != null) {
try {
- switch (tokenRequest.CodeOrTokenType) {
- case CodeOrTokenType.AuthorizationCode:
- var verificationCodeFormatter = AuthorizationCode.CreateFormatter(this.AuthorizationServer);
- var verificationCode = verificationCodeFormatter.Deserialize(message, tokenRequest.CodeOrToken);
- tokenRequest.AuthorizationDescription = verificationCode;
- break;
- case CodeOrTokenType.RefreshToken:
- var refreshTokenFormatter = RefreshToken.CreateFormatter(this.AuthorizationServer.CryptoKeyStore);
- var refreshToken = refreshTokenFormatter.Deserialize(message, tokenRequest.CodeOrToken);
- tokenRequest.AuthorizationDescription = refreshToken;
- break;
- default:
- throw ErrorUtilities.ThrowInternal("Unexpected value for CodeOrTokenType: " + tokenRequest.CodeOrTokenType);
+ var authCodeCarrier = message as IAuthorizationCodeCarryingRequest;
+ var refreshTokenCarrier = message as IRefreshTokenCarryingRequest;
+ if (authCodeCarrier != null) {
+ var authorizationCodeFormatter = AuthorizationCode.CreateFormatter(this.AuthorizationServer);
+ var authorizationCode = authorizationCodeFormatter.Deserialize(message, authCodeCarrier.Code);
+ authCodeCarrier.AuthorizationDescription = authorizationCode;
+ } else if (refreshTokenCarrier != null) {
+ var refreshTokenFormatter = RefreshToken.CreateFormatter(this.AuthorizationServer.CryptoKeyStore);
+ var refreshToken = refreshTokenFormatter.Deserialize(message, refreshTokenCarrier.RefreshToken);
+ refreshTokenCarrier.AuthorizationDescription = refreshToken;
+ } else {
+ throw ErrorUtilities.ThrowInternal("Unexpected message type: " + tokenRequest.GetType());
}
} catch (ExpiredMessageException ex) {
throw ErrorUtilities.Wrap(ex, Protocol.authorization_expired);