summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/DotNetOpenAuth/OAuthWrap/ChannelElements/AccessToken.cs13
-rw-r--r--src/DotNetOpenAuth/OAuthWrap/ChannelElements/IAuthorizationDescription.cs31
-rw-r--r--src/DotNetOpenAuth/OAuthWrap/ChannelElements/OAuthWrapAuthorizationServerChannel.cs9
-rw-r--r--src/DotNetOpenAuth/OAuthWrap/ChannelElements/RefreshToken.cs13
4 files changed, 60 insertions, 6 deletions
diff --git a/src/DotNetOpenAuth/OAuthWrap/ChannelElements/AccessToken.cs b/src/DotNetOpenAuth/OAuthWrap/ChannelElements/AccessToken.cs
index e770f09..acdcb07 100644
--- a/src/DotNetOpenAuth/OAuthWrap/ChannelElements/AccessToken.cs
+++ b/src/DotNetOpenAuth/OAuthWrap/ChannelElements/AccessToken.cs
@@ -17,11 +17,22 @@ namespace DotNetOpenAuth.OAuthWrap.ChannelElements {
/// Initializes a new instance of the <see cref="AccessToken"/> class.
/// </summary>
/// <param name="channel">The channel.</param>
- internal AccessToken(OAuthWrapAuthorizationServerChannel channel, TimeSpan lifetime)
+ private AccessToken(OAuthWrapAuthorizationServerChannel channel, TimeSpan? lifetime = null)
: base(channel, true, true, true, lifetime) {
Contract.Requires<ArgumentNullException>(channel != null, "channel");
}
+ internal AccessToken(OAuthWrapAuthorizationServerChannel channel, IAuthorizationDescription authorization)
+ : this(channel) {
+ Contract.Requires<ArgumentNullException>(channel != null, "channel");
+ Contract.Requires<ArgumentNullException>(authorization != null, "authorization");
+
+ this.ClientIdentifier = authorization.ClientIdentifier;
+ this.UtcCreationDate = authorization.UtcIssued;
+ this.User = authorization.User;
+ this.Scope = authorization.Scope;
+ }
+
internal static AccessToken Decode(OAuthWrapAuthorizationServerChannel channel, string value, TimeSpan lifetime, IProtocolMessage containingMessage) {
Contract.Requires<ArgumentNullException>(channel != null, "channel");
Contract.Requires<ArgumentException>(!String.IsNullOrEmpty(value));
diff --git a/src/DotNetOpenAuth/OAuthWrap/ChannelElements/IAuthorizationDescription.cs b/src/DotNetOpenAuth/OAuthWrap/ChannelElements/IAuthorizationDescription.cs
index d7735b9..0940160 100644
--- a/src/DotNetOpenAuth/OAuthWrap/ChannelElements/IAuthorizationDescription.cs
+++ b/src/DotNetOpenAuth/OAuthWrap/ChannelElements/IAuthorizationDescription.cs
@@ -7,12 +7,14 @@
namespace DotNetOpenAuth.OAuthWrap.ChannelElements {
using System;
using System.Collections.Generic;
+ using System.Diagnostics.Contracts;
using System.Linq;
using System.Text;
/// <summary>
/// Describes a delegated authorization between a resource server, a client, and a user.
/// </summary>
+ [ContractClass(typeof(IAuthorizationDescriptionContract))]
public interface IAuthorizationDescription {
/// <summary>
/// Gets the identifier of the client authorized to access protected data.
@@ -35,4 +37,33 @@ namespace DotNetOpenAuth.OAuthWrap.ChannelElements {
/// </summary>
string Scope { get; }
}
+
+ [ContractClassFor(typeof(IAuthorizationDescription))]
+ internal abstract class IAuthorizationDescriptionContract : IAuthorizationDescription {
+ private IAuthorizationDescriptionContract() {
+ }
+
+ string IAuthorizationDescription.ClientIdentifier {
+ get {
+ Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>()));
+ throw new NotImplementedException();
+ }
+ }
+
+ DateTime IAuthorizationDescription.UtcIssued {
+ get { throw new NotImplementedException(); }
+ }
+
+ string IAuthorizationDescription.User {
+ get {
+ Contract.Ensures(!string.IsNullOrEmpty(Contract.Result<string>()));
+ throw new NotImplementedException();
+ }
+ }
+
+ string IAuthorizationDescription.Scope {
+ get { throw new NotImplementedException(); }
+ }
+ }
+
}
diff --git a/src/DotNetOpenAuth/OAuthWrap/ChannelElements/OAuthWrapAuthorizationServerChannel.cs b/src/DotNetOpenAuth/OAuthWrap/ChannelElements/OAuthWrapAuthorizationServerChannel.cs
index 3670ad9..05d4d83 100644
--- a/src/DotNetOpenAuth/OAuthWrap/ChannelElements/OAuthWrapAuthorizationServerChannel.cs
+++ b/src/DotNetOpenAuth/OAuthWrap/ChannelElements/OAuthWrapAuthorizationServerChannel.cs
@@ -69,12 +69,13 @@ namespace DotNetOpenAuth.OAuthWrap.ChannelElements {
public virtual AccessTokenSuccessResponse PrepareAccessToken(IAccessTokenRequest request) {
Contract.Requires<ArgumentNullException>(request != null, "request");
+ var accessToken = new AccessToken(this, request.AuthorizationDescription);
+ var refreshToken = new RefreshToken(this, request.AuthorizationDescription);
var response = new AccessTokenSuccessResponse(request) {
Scope = request.AuthorizationDescription.Scope,
- Lifetime = TimeSpan.FromDays(1), // reasonable default for access token lifetime
- // TODO: code here to initialize the response
- AccessToken = "TODO",
- RefreshToken = "TODO",
+ AccessToken = accessToken.Encode(),
+ RefreshToken = refreshToken.Encode(),
+ ////Lifetime = TimeSpan.FromDays(1), // reasonable default for access token lifetime
};
return response;
diff --git a/src/DotNetOpenAuth/OAuthWrap/ChannelElements/RefreshToken.cs b/src/DotNetOpenAuth/OAuthWrap/ChannelElements/RefreshToken.cs
index c523127..19b267d 100644
--- a/src/DotNetOpenAuth/OAuthWrap/ChannelElements/RefreshToken.cs
+++ b/src/DotNetOpenAuth/OAuthWrap/ChannelElements/RefreshToken.cs
@@ -17,11 +17,22 @@ namespace DotNetOpenAuth.OAuthWrap.ChannelElements {
/// Initializes a new instance of the <see cref="RefreshToken"/> class.
/// </summary>
/// <param name="channel">The channel.</param>
- internal RefreshToken(OAuthWrapAuthorizationServerChannel channel)
+ private RefreshToken(OAuthWrapAuthorizationServerChannel channel)
: base(channel, true, true, true) {
Contract.Requires<ArgumentNullException>(channel != null, "channel");
}
+ internal RefreshToken(OAuthWrapAuthorizationServerChannel channel, IAuthorizationDescription authorization)
+ : this(channel) {
+ Contract.Requires<ArgumentNullException>(channel != null, "channel");
+ Contract.Requires<ArgumentNullException>(authorization != null, "authorization");
+
+ this.ClientIdentifier = authorization.ClientIdentifier;
+ this.UtcCreationDate = authorization.UtcIssued;
+ this.User = authorization.User;
+ this.Scope = authorization.Scope;
+ }
+
internal static RefreshToken Decode(OAuthWrapAuthorizationServerChannel channel, string value, IProtocolMessage containingMessage) {
Contract.Requires<ArgumentNullException>(channel != null, "channel");
Contract.Requires<ArgumentException>(!String.IsNullOrEmpty(value));