diff options
Diffstat (limited to 'src/DotNetOpenAuth')
5 files changed, 39 insertions, 20 deletions
diff --git a/src/DotNetOpenAuth/OpenId/Extensions/OpenIdExtensionFactory.cs b/src/DotNetOpenAuth/OpenId/Extensions/OpenIdExtensionFactory.cs index 4db67a9..dff49d1 100644 --- a/src/DotNetOpenAuth/OpenId/Extensions/OpenIdExtensionFactory.cs +++ b/src/DotNetOpenAuth/OpenId/Extensions/OpenIdExtensionFactory.cs @@ -11,6 +11,7 @@ namespace DotNetOpenAuth.OpenId.Extensions { using DotNetOpenAuth.OpenId.Extensions.AttributeExchange; using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration; using DotNetOpenAuth.OpenId.Messages; + using DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy; /// <summary> /// An OpenID extension factory that supports registration so that third-party @@ -32,6 +33,8 @@ namespace DotNetOpenAuth.OpenId.Extensions { this.RegisterExtension(FetchResponse.Factory); this.RegisterExtension(StoreRequest.Factory); this.RegisterExtension(StoreResponse.Factory); + this.RegisterExtension(PolicyRequest.Factory); + this.RegisterExtension(PolicyResponse.Factory); } /// <summary> diff --git a/src/DotNetOpenAuth/OpenId/Extensions/ProviderAuthenticationPolicy/DateTimeEncoder.cs b/src/DotNetOpenAuth/OpenId/Extensions/ProviderAuthenticationPolicy/DateTimeEncoder.cs index 2fe498e..41d0893 100644 --- a/src/DotNetOpenAuth/OpenId/Extensions/ProviderAuthenticationPolicy/DateTimeEncoder.cs +++ b/src/DotNetOpenAuth/OpenId/Extensions/ProviderAuthenticationPolicy/DateTimeEncoder.cs @@ -62,7 +62,7 @@ namespace DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy { if (DateTime.TryParse(value, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out dateTime) && dateTime.Kind == DateTimeKind.Utc) { // may be unspecified per our option above return dateTime; } else { - Logger.ErrorFormat("Invalid format for auth_time parameter: {0}", value); + Logger.ErrorFormat("Invalid format for message part: {0}", value); return null; } } diff --git a/src/DotNetOpenAuth/OpenId/Extensions/ProviderAuthenticationPolicy/PapeUtilities.cs b/src/DotNetOpenAuth/OpenId/Extensions/ProviderAuthenticationPolicy/PapeUtilities.cs index 812c0b5..4f8f576 100644 --- a/src/DotNetOpenAuth/OpenId/Extensions/ProviderAuthenticationPolicy/PapeUtilities.cs +++ b/src/DotNetOpenAuth/OpenId/Extensions/ProviderAuthenticationPolicy/PapeUtilities.cs @@ -1,21 +1,18 @@ -namespace DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy { +//----------------------------------------------------------------------- +// <copyright file="PapeUtilities.cs" company="Andrew Arnott"> +// Copyright (c) Andrew Arnott. All rights reserved. +// </copyright> +//----------------------------------------------------------------------- + +namespace DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy { using System; using System.Collections.Generic; + using System.Globalization; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; - using System.Globalization; internal static class PapeUtilities { - static internal IEnumerable<T> GetUniqueItems<T>(IList<T> list) { - List<T> itemsSeen = new List<T>(list.Count); - foreach (T item in list) { - if (itemsSeen.Contains(item)) continue; - itemsSeen.Add(item); - yield return item; - } - } - /// <summary> /// Looks at the incoming fields and figures out what the aliases and name spaces for auth level types are. /// </summary> @@ -40,7 +37,7 @@ ErrorUtilities.VerifyArgumentNotNull(values, "values"); StringBuilder valuesList = new StringBuilder(); - foreach (string value in GetUniqueItems(values)) { + foreach (string value in values.Distinct()) { if (value.Contains(" ")) { throw new FormatException(string.Format(CultureInfo.CurrentCulture, OpenIdStrings.InvalidUri, value)); @@ -48,8 +45,9 @@ valuesList.Append(value); valuesList.Append(" "); } - if (valuesList.Length > 0) + if (valuesList.Length > 0) { valuesList.Length -= 1; // remove trailing space + } return valuesList.ToString(); } } diff --git a/src/DotNetOpenAuth/OpenId/Extensions/ProviderAuthenticationPolicy/PolicyRequest.cs b/src/DotNetOpenAuth/OpenId/Extensions/ProviderAuthenticationPolicy/PolicyRequest.cs index ffaec90..07e58f5 100644 --- a/src/DotNetOpenAuth/OpenId/Extensions/ProviderAuthenticationPolicy/PolicyRequest.cs +++ b/src/DotNetOpenAuth/OpenId/Extensions/ProviderAuthenticationPolicy/PolicyRequest.cs @@ -7,16 +7,24 @@ namespace DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy { using System; using System.Collections.Generic; - using System.Text; - using System.Globalization; - using System.Diagnostics; - using DotNetOpenAuth.OpenId.RelyingParty; using DotNetOpenAuth.Messaging; + using DotNetOpenAuth.OpenId.Messages; /// <summary> /// The PAPE request part of an OpenID Authentication request message. /// </summary> public sealed class PolicyRequest : ExtensionBase, IMessageWithEvents { + /// <summary> + /// The factory method that may be used in deserialization of this message. + /// </summary> + internal static readonly OpenIdExtensionFactory.CreateDelegate Factory = (typeUri, data, baseMessage) => { + if (typeUri == Constants.TypeUri && baseMessage is SignedResponseRequest) { + return new PolicyRequest(); + } + + return null; + }; + [MessagePart("preferred_auth_policies", IsRequired = true)] private string preferredPoliciesString; diff --git a/src/DotNetOpenAuth/OpenId/Extensions/ProviderAuthenticationPolicy/PolicyResponse.cs b/src/DotNetOpenAuth/OpenId/Extensions/ProviderAuthenticationPolicy/PolicyResponse.cs index 71514a8..e4ff8a8 100644 --- a/src/DotNetOpenAuth/OpenId/Extensions/ProviderAuthenticationPolicy/PolicyResponse.cs +++ b/src/DotNetOpenAuth/OpenId/Extensions/ProviderAuthenticationPolicy/PolicyResponse.cs @@ -7,16 +7,26 @@ namespace DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy { using System; using System.Collections.Generic; - using System.Text; - using System.Diagnostics; using System.Globalization; using DotNetOpenAuth.Messaging; + using DotNetOpenAuth.OpenId.Messages; /// <summary> /// The PAPE response part of an OpenID Authentication response message. /// </summary> public sealed class PolicyResponse : ExtensionBase, IMessageWithEvents { /// <summary> + /// The factory method that may be used in deserialization of this message. + /// </summary> + internal static readonly OpenIdExtensionFactory.CreateDelegate Factory = (typeUri, data, baseMessage) => { + if (typeUri == Constants.TypeUri && baseMessage is IndirectSignedResponse) { + return new PolicyResponse(); + } + + return null; + }; + + /// <summary> /// The first part of a parameter name that gives the custom string value for /// the assurance level. The second part of the parameter name is the alias for /// that assurance level. |