diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2008-09-22 07:17:22 -0700 |
---|---|---|
committer | Andrew <andrewarnott@gmail.com> | 2008-09-22 07:17:22 -0700 |
commit | d4e2e55e9a48ffb397d1e095194c64ea726bfaeb (patch) | |
tree | c7ec31e3a6a31f1f1513d39c1515b2aa3d5341b8 /src | |
parent | f80ac82be5e9432806ce35b7025b007246d74147 (diff) | |
download | DotNetOpenAuth-d4e2e55e9a48ffb397d1e095194c64ea726bfaeb.zip DotNetOpenAuth-d4e2e55e9a48ffb397d1e095194c64ea726bfaeb.tar.gz DotNetOpenAuth-d4e2e55e9a48ffb397d1e095194c64ea726bfaeb.tar.bz2 |
Refactored OAuth signing functionality into a SignedMessageBase class.
Diffstat (limited to 'src')
13 files changed, 140 insertions, 127 deletions
diff --git a/src/DotNetOAuth/DotNetOAuth.csproj b/src/DotNetOAuth/DotNetOAuth.csproj index a8673ea..baece49 100644 --- a/src/DotNetOAuth/DotNetOAuth.csproj +++ b/src/DotNetOAuth/DotNetOAuth.csproj @@ -52,20 +52,11 @@ <Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
- <Reference Include="System.Runtime.Serialization">
- <RequiredTargetFramework>3.0</RequiredTargetFramework>
- </Reference>
<Reference Include="System.Web" />
- <Reference Include="System.Xml.Linq">
- <RequiredTargetFramework>3.5</RequiredTargetFramework>
- </Reference>
- <Reference Include="System.Data.DataSetExtensions">
- <RequiredTargetFramework>3.5</RequiredTargetFramework>
- </Reference>
- <Reference Include="System.Data" />
- <Reference Include="System.Xml" />
+ <Reference Include="System.XML" />
</ItemGroup>
<ItemGroup>
+ <Compile Include="Messages\SignedMessageBase.cs" />
<Compile Include="Messaging\Bindings\NonceMemoryStore.cs" />
<Compile Include="ChannelElements\SigningBindingElementBase.cs" />
<Compile Include="Consumer.cs" />
diff --git a/src/DotNetOAuth/Messages/AccessProtectedResourcesMessage.cs b/src/DotNetOAuth/Messages/AccessProtectedResourcesMessage.cs index 1b145a9..05eba68 100644 --- a/src/DotNetOAuth/Messages/AccessProtectedResourcesMessage.cs +++ b/src/DotNetOAuth/Messages/AccessProtectedResourcesMessage.cs @@ -6,20 +6,19 @@ namespace DotNetOAuth.Messages {
using System;
- using System.Runtime.Serialization;
using DotNetOAuth.Messaging;
/// <summary>
/// A message attached to a request for protected resources that provides the necessary
/// credentials to be granted access to those resources.
/// </summary>
- internal class AccessProtectedResourcesMessage : MessageBase {
+ internal class AccessProtectedResourcesMessage : SignedMessageBase {
/// <summary>
/// Initializes a new instance of the <see cref="AccessProtectedResourcesMessage"/> class.
/// </summary>
/// <param name="serviceProvider">The URI of the Service Provider endpoint to send this message to.</param>
internal AccessProtectedResourcesMessage(Uri serviceProvider)
- : base(MessageProtection.All, MessageTransport.Direct, serviceProvider) {
+ : base(MessageTransport.Direct, serviceProvider) {
}
/// <summary>
@@ -33,14 +32,5 @@ namespace DotNetOAuth.Messages { /// </summary>
[MessagePart(Name = "oauth_token", IsRequired = true)]
public string AccessToken { get; set; }
-
- /// <summary>
- /// Gets or sets the protocol version used in the construction of this message.
- /// </summary>
- [MessagePart(Name = "oauth_version", IsRequired = false)]
- public string Version {
- get { return this.VersionString; }
- set { this.VersionString = value; }
- }
}
}
diff --git a/src/DotNetOAuth/Messages/DirectUserToConsumerMessage.cs b/src/DotNetOAuth/Messages/DirectUserToConsumerMessage.cs index 6f75609..8d5a6a3 100644 --- a/src/DotNetOAuth/Messages/DirectUserToConsumerMessage.cs +++ b/src/DotNetOAuth/Messages/DirectUserToConsumerMessage.cs @@ -6,7 +6,6 @@ namespace DotNetOAuth.Messages {
using System;
- using System.Runtime.Serialization;
using DotNetOAuth.Messaging;
/// <summary>
diff --git a/src/DotNetOAuth/Messages/DirectUserToServiceProviderMessage.cs b/src/DotNetOAuth/Messages/DirectUserToServiceProviderMessage.cs index 1c591cf..37cd004 100644 --- a/src/DotNetOAuth/Messages/DirectUserToServiceProviderMessage.cs +++ b/src/DotNetOAuth/Messages/DirectUserToServiceProviderMessage.cs @@ -6,7 +6,6 @@ namespace DotNetOAuth.Messages {
using System;
- using System.Runtime.Serialization;
using DotNetOAuth.Messaging;
/// <summary>
diff --git a/src/DotNetOAuth/Messages/GrantAccessTokenMessage.cs b/src/DotNetOAuth/Messages/GrantAccessTokenMessage.cs index 42022a9..9c55871 100644 --- a/src/DotNetOAuth/Messages/GrantAccessTokenMessage.cs +++ b/src/DotNetOAuth/Messages/GrantAccessTokenMessage.cs @@ -5,8 +5,6 @@ //-----------------------------------------------------------------------
namespace DotNetOAuth.Messages {
- using System;
- using System.Runtime.Serialization;
using DotNetOAuth.Messaging;
/// <summary>
diff --git a/src/DotNetOAuth/Messages/MessageBase.cs b/src/DotNetOAuth/Messages/MessageBase.cs index 0067c2b..db5830c 100644 --- a/src/DotNetOAuth/Messages/MessageBase.cs +++ b/src/DotNetOAuth/Messages/MessageBase.cs @@ -14,7 +14,7 @@ namespace DotNetOAuth.Messages { /// <summary>
/// A base class for all OAuth messages.
/// </summary>
- internal abstract class MessageBase : IDirectedProtocolMessage, ITamperResistantOAuthMessage, IExpiringProtocolMessage, IReplayProtectedProtocolMessage {
+ internal abstract class MessageBase : IDirectedProtocolMessage {
/// <summary>
/// A store for extra name/value data pairs that are attached to this message.
/// </summary>
@@ -104,60 +104,6 @@ namespace DotNetOAuth.Messages { #endregion
- #region ITamperResistantOAuthMessage Members
-
- /// <summary>
- /// Gets or sets the message signature.
- /// </summary>
- [MessagePart("oauth_signature")]
- string ITamperResistantProtocolMessage.Signature { get; set; }
-
- /// <summary>
- /// Gets or sets the signature method used to sign the request.
- /// </summary>
- [MessagePart("oauth_signature_method")]
- string ITamperResistantOAuthMessage.SignatureMethod { get; set; }
-
- #endregion
-
- #region IExpiringProtocolMessage Members
-
- /// <summary>
- /// Gets or sets the OAuth timestamp of the message.
- /// </summary>
- [MessagePart("oauth_timestamp")]
- DateTime IExpiringProtocolMessage.UtcCreationDate { get; set; }
-
- #endregion
-
- #region IReplayProtectedProtocolMessage Members
-
- /// <summary>
- /// Gets or sets the message nonce used for replay detection.
- /// </summary>
- [MessagePart("oauth_nonce")]
- string IReplayProtectedProtocolMessage.Nonce { get; set; }
-
- #endregion
-
- /// <summary>
- /// Gets or sets the version of the protocol this message was created with.
- /// </summary>
- /// <remarks>
- /// This property is useful for handling the oauth_version message part.
- /// </remarks>
- protected string VersionString {
- get {
- return ((IProtocolMessage)this).ProtocolVersion.ToString();
- }
-
- set {
- if (value != this.VersionString) {
- throw new ArgumentOutOfRangeException("value");
- }
- }
- }
-
#region IProtocolMessage Methods
/// <summary>
diff --git a/src/DotNetOAuth/Messages/OAuth Messages.cd b/src/DotNetOAuth/Messages/OAuth Messages.cd index 1045864..9b3e367 100644 --- a/src/DotNetOAuth/Messages/OAuth Messages.cd +++ b/src/DotNetOAuth/Messages/OAuth Messages.cd @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8"?>
-<ClassDiagram MajorVersion="1" MinorVersion="1">
+<ClassDiagram MajorVersion="1" MinorVersion="1" GroupingSetting="Access">
<Class Name="DotNetOAuth.Messages.AccessProtectedResourcesMessage">
- <Position X="5" Y="5" Width="3.5" />
+ <Position X="0.5" Y="7.5" Width="3.5" />
<TypeIdentifier>
- <HashCode>IAAAAAAAAAAAAAAAAAAAAgAAEAAAAAAAAAAAAAAAAAA=</HashCode>
+ <HashCode>AAAAAAAAAAAAAAAAAAAAAgAAEAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>Messages\AccessProtectedResourcesMessage.cs</FileName>
</TypeIdentifier>
</Class>
@@ -44,10 +44,10 @@ </Compartments>
<InheritanceLine Type="DotNetOAuth.Messages.MessageBase" FixedFromPoint="true">
<Path>
- <Point X="8.5" Y="4.5" />
- <Point X="8.74" Y="4.5" />
- <Point X="8.74" Y="5.342" />
- <Point X="9" Y="5.342" />
+ <Point X="8.5" Y="4.098" />
+ <Point X="8.74" Y="4.098" />
+ <Point X="8.74" Y="5.438" />
+ <Point X="9" Y="5.438" />
</Path>
</InheritanceLine>
<TypeIdentifier>
@@ -61,7 +61,7 @@ <Compartment Name="Fields" Collapsed="true" />
</Compartments>
<TypeIdentifier>
- <HashCode>AAAKFAAAYIAAAAAAAICAAAAAAAQEIAAAQgCAACAAAAA=</HashCode>
+ <HashCode>AAAKAAAAYAAAAAAAAIAAAAAAAAQEIAAAAgCAACAAAAA=</HashCode>
<FileName>Messages\MessageBase.cs</FileName>
</TypeIdentifier>
<Lollipop Position="0.2" />
@@ -71,28 +71,57 @@ <Compartments>
<Compartment Name="Methods" Collapsed="true" />
</Compartments>
- <InheritanceLine Type="DotNetOAuth.Messages.MessageBase" FixedFromPoint="true">
+ <InheritanceLine Type="DotNetOAuth.Messages.SignedMessageBase" ManuallyRouted="true" FixedFromPoint="true" FixedToPoint="true">
<Path>
- <Point X="5" Y="4.312" />
- <Point X="4.76" Y="4.312" />
- <Point X="4.76" Y="5.688" />
- <Point X="4" Y="5.688" />
+ <Point X="4.75" Y="7.625" />
+ <Point X="4.5" Y="7.625" />
+ <Point X="4.5" Y="7.153" />
+ <Point X="3.125" Y="7.153" />
+ <Point X="3.125" Y="6.627" />
</Path>
</InheritanceLine>
<TypeIdentifier>
- <HashCode>IAAAAAAAAAAAAAAAAAAAAgAAAIAAAAAAAAAAAAAAAAA=</HashCode>
+ <HashCode>AAAAAAAAAAAAAAAAAAAAAgAAAIAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>Messages\RequestAccessTokenMessage.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="DotNetOAuth.Messages.RequestTokenMessage">
<Position X="1.5" Y="0.75" Width="2" />
<Compartments>
+ <Compartment Name="Internal" Collapsed="true" />
+ <Compartment Name="Private" Collapsed="true" />
<Compartment Name="Methods" Collapsed="true" />
</Compartments>
+ <InheritanceLine Type="DotNetOAuth.Messages.SignedMessageBase" FixedFromPoint="true">
+ <Path>
+ <Point X="4.75" Y="6.875" />
+ <Point X="4.375" Y="6.875" />
+ <Point X="4.375" Y="4.877" />
+ <Point X="4.75" Y="4.877" />
+ <Point X="4.75" Y="1.496" />
+ <Point X="3.5" Y="1.496" />
+ </Path>
+ </InheritanceLine>
<TypeIdentifier>
- <HashCode>IAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAA=</HashCode>
+ <HashCode>AAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>Messages\RequestTokenMessage.cs</FileName>
</TypeIdentifier>
</Class>
+ <Class Name="DotNetOAuth.Messages.SignedMessageBase">
+ <Position X="4.75" Y="6.75" Width="3.5" />
+ <InheritanceLine Type="DotNetOAuth.Messages.MessageBase" ManuallyRouted="true" FixedToPoint="true">
+ <Path>
+ <Point X="6.75" Y="4.478" />
+ <Point X="6.75" Y="5.104" />
+ <Point X="7.5" Y="5.104" />
+ <Point X="7.5" Y="6.75" />
+ </Path>
+ </InheritanceLine>
+ <TypeIdentifier>
+ <HashCode>IAAAFAAAAIAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
+ <FileName>Messages\SignedMessageBase.cs</FileName>
+ </TypeIdentifier>
+ <Lollipop Position="0.2" />
+ </Class>
<Font Name="Segoe UI" Size="9" />
</ClassDiagram>
\ No newline at end of file diff --git a/src/DotNetOAuth/Messages/RequestAccessTokenMessage.cs b/src/DotNetOAuth/Messages/RequestAccessTokenMessage.cs index 3cb5ca9..4622009 100644 --- a/src/DotNetOAuth/Messages/RequestAccessTokenMessage.cs +++ b/src/DotNetOAuth/Messages/RequestAccessTokenMessage.cs @@ -12,13 +12,13 @@ namespace DotNetOAuth.Messages { /// A direct message sent by the Consumer to exchange a Request Token for an Access Token
/// and Token Secret.
/// </summary>
- internal class RequestAccessTokenMessage : MessageBase {
+ internal class RequestAccessTokenMessage : SignedMessageBase {
/// <summary>
/// Initializes a new instance of the <see cref="RequestAccessTokenMessage"/> class.
/// </summary>
/// <param name="serviceProvider">The URI of the Service Provider endpoint to send this message to.</param>
internal RequestAccessTokenMessage(Uri serviceProvider)
- : base(MessageProtection.All, MessageTransport.Direct, serviceProvider) {
+ : base(MessageTransport.Direct, serviceProvider) {
}
/// <summary>
@@ -32,14 +32,5 @@ namespace DotNetOAuth.Messages { /// </summary>
[MessagePart(Name = "oauth_token", IsRequired = true)]
public string RequestToken { get; set; }
-
- /// <summary>
- /// Gets or sets the protocol version used in the construction of this message.
- /// </summary>
- [MessagePart(Name = "oauth_version", IsRequired = false)]
- public string Version {
- get { return this.VersionString; }
- set { this.VersionString = value; }
- }
}
}
diff --git a/src/DotNetOAuth/Messages/RequestTokenMessage.cs b/src/DotNetOAuth/Messages/RequestTokenMessage.cs index 4d47db0..11d2dd1 100644 --- a/src/DotNetOAuth/Messages/RequestTokenMessage.cs +++ b/src/DotNetOAuth/Messages/RequestTokenMessage.cs @@ -6,19 +6,18 @@ namespace DotNetOAuth.Messages {
using System;
- using System.Runtime.Serialization;
using DotNetOAuth.Messaging;
/// <summary>
/// A direct message sent from Consumer to Service Provider to request a token.
/// </summary>
- internal class RequestTokenMessage : MessageBase {
+ internal class RequestTokenMessage : SignedMessageBase {
/// <summary>
/// Initializes a new instance of the <see cref="RequestTokenMessage"/> class.
/// </summary>
/// <param name="serviceProvider">The URI of the Service Provider endpoint to send this message to.</param>
internal RequestTokenMessage(Uri serviceProvider)
- : base(MessageProtection.All, MessageTransport.Direct, serviceProvider) {
+ : base(MessageTransport.Direct, serviceProvider) {
}
/// <summary>
@@ -26,14 +25,5 @@ namespace DotNetOAuth.Messages { /// </summary>
[MessagePart(Name = "oauth_consumer_key", IsRequired = true)]
public string ConsumerKey { get; set; }
-
- /// <summary>
- /// Gets or sets the protocol version used in the construction of this message.
- /// </summary>
- [MessagePart(Name = "oauth_version", IsRequired = false)]
- public string Version {
- get { return this.VersionString; }
- set { this.VersionString = value; }
- }
}
}
diff --git a/src/DotNetOAuth/Messages/SignedMessageBase.cs b/src/DotNetOAuth/Messages/SignedMessageBase.cs new file mode 100644 index 0000000..7361adf --- /dev/null +++ b/src/DotNetOAuth/Messages/SignedMessageBase.cs @@ -0,0 +1,86 @@ +//-----------------------------------------------------------------------
+// <copyright file="SignedMessageBase.cs" company="Andrew Arnott">
+// Copyright (c) Andrew Arnott. All rights reserved.
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace DotNetOAuth.Messages {
+ using System;
+ using DotNetOAuth.ChannelElements;
+ using DotNetOAuth.Messaging;
+ using DotNetOAuth.Messaging.Bindings;
+
+ /// <summary>
+ /// A base class for all signed OAuth messages.
+ /// </summary>
+ internal class SignedMessageBase : MessageBase, ITamperResistantOAuthMessage, IExpiringProtocolMessage, IReplayProtectedProtocolMessage {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="SignedMessageBase"/> class.
+ /// </summary>
+ /// <param name="transport">A value indicating whether this message requires a direct or indirect transport.</param>
+ internal SignedMessageBase(MessageTransport transport)
+ : base(MessageProtection.All, transport) {
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="SignedMessageBase"/> class.
+ /// </summary>
+ /// <param name="transport">A value indicating whether this message requires a direct or indirect transport.</param>
+ /// <param name="recipient">The URI that a directed message will be delivered to.</param>
+ internal SignedMessageBase(MessageTransport transport, Uri recipient)
+ : base(MessageProtection.All, transport, recipient) {
+ }
+
+ #region ITamperResistantOAuthMessage Members
+
+ /// <summary>
+ /// Gets or sets the message signature.
+ /// </summary>
+ [MessagePart("oauth_signature")]
+ string ITamperResistantProtocolMessage.Signature { get; set; }
+
+ /// <summary>
+ /// Gets or sets the signature method used to sign the request.
+ /// </summary>
+ [MessagePart("oauth_signature_method")]
+ string ITamperResistantOAuthMessage.SignatureMethod { get; set; }
+
+ #endregion
+
+ #region IExpiringProtocolMessage Members
+
+ /// <summary>
+ /// Gets or sets the OAuth timestamp of the message.
+ /// </summary>
+ [MessagePart("oauth_timestamp")]
+ DateTime IExpiringProtocolMessage.UtcCreationDate { get; set; }
+
+ #endregion
+
+ #region IReplayProtectedProtocolMessage Members
+
+ /// <summary>
+ /// Gets or sets the message nonce used for replay detection.
+ /// </summary>
+ [MessagePart("oauth_nonce")]
+ string IReplayProtectedProtocolMessage.Nonce { get; set; }
+
+ #endregion
+
+ /// <summary>
+ /// Gets or sets the version of the protocol this message was created with.
+ /// </summary>
+ [MessagePart(Name = "oauth_version", IsRequired = false)]
+ private string Version {
+ get {
+ return ((IProtocolMessage)this).ProtocolVersion.ToString();
+ }
+
+ set {
+ if (value != this.Version) {
+ throw new ArgumentOutOfRangeException("value");
+ }
+ }
+ }
+ }
+}
diff --git a/src/DotNetOAuth/Messages/UnauthorizedRequestTokenMessage.cs b/src/DotNetOAuth/Messages/UnauthorizedRequestTokenMessage.cs index 593e691..68e9c49 100644 --- a/src/DotNetOAuth/Messages/UnauthorizedRequestTokenMessage.cs +++ b/src/DotNetOAuth/Messages/UnauthorizedRequestTokenMessage.cs @@ -5,8 +5,6 @@ //-----------------------------------------------------------------------
namespace DotNetOAuth.Messages {
- using System;
- using System.Runtime.Serialization;
using DotNetOAuth.Messaging;
/// <summary>
diff --git a/src/DotNetOAuth/Messaging/Bindings/ExpiredMessageException.cs b/src/DotNetOAuth/Messaging/Bindings/ExpiredMessageException.cs index f983999..fabe7e4 100644 --- a/src/DotNetOAuth/Messaging/Bindings/ExpiredMessageException.cs +++ b/src/DotNetOAuth/Messaging/Bindings/ExpiredMessageException.cs @@ -6,7 +6,7 @@ namespace DotNetOAuth.Messaging.Bindings {
using System;
-using System.Globalization;
+ using System.Globalization;
/// <summary>
/// An exception thrown when a message is received that exceeds the maximum message age limit.
diff --git a/src/DotNetOAuth/Messaging/MessageSerializer.cs b/src/DotNetOAuth/Messaging/MessageSerializer.cs index 800f691..0e1e491 100644 --- a/src/DotNetOAuth/Messaging/MessageSerializer.cs +++ b/src/DotNetOAuth/Messaging/MessageSerializer.cs @@ -9,10 +9,6 @@ namespace DotNetOAuth.Messaging { using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
- using System.Linq;
- using System.Runtime.Serialization;
- using System.Xml;
- using System.Xml.Linq;
using DotNetOAuth.Messaging.Reflection;
/// <summary>
|