/// <summary> /// Called when the message has been received, /// after it passes through the channel binding elements. /// </summary> void IMessageWithEvents.OnReceiving() { var extraData = ((IMessage)this).ExtraData; this.ActualPolicies.Clear(); string[] actualPolicies = this.actualPoliciesString.Split(' '); foreach (string policy in actualPolicies) { if (policy.Length > 0 && policy != AuthenticationPolicies.None) { this.ActualPolicies.Add(policy); } } this.AssuranceLevels.Clear(); AliasManager authLevelAliases = PapeUtilities.FindIncomingAliases(extraData); foreach (string authLevelAlias in authLevelAliases.Aliases) { string authValue; if (extraData.TryGetValue(AuthLevelAliasPrefix + authLevelAlias, out authValue)) { string authLevelType = authLevelAliases.ResolveAlias(authLevelAlias); this.AssuranceLevels[authLevelType] = authValue; } } }
/// <summary> /// Called when the message has been received, /// after it passes through the channel binding elements. /// </summary> void IMessageWithEvents.OnReceiving() { var extraData = ((IMessage)this).ExtraData; this.PreferredPolicies.Clear(); string[] preferredPolicies = this.preferredPoliciesString.Split(' '); foreach (string policy in preferredPolicies) { if (policy.Length > 0) { this.PreferredPolicies.Add(policy); } } this.PreferredAuthLevelTypes.Clear(); AliasManager authLevelAliases = PapeUtilities.FindIncomingAliases(extraData); string preferredAuthLevelAliases; if (extraData.TryGetValue(Constants.RequestParameters.PreferredAuthLevelTypes, out preferredAuthLevelAliases)) { foreach (string authLevelAlias in preferredAuthLevelAliases.Split(' ')) { if (authLevelAlias.Length == 0) { continue; } this.PreferredAuthLevelTypes.Add(authLevelAliases.ResolveAlias(authLevelAlias)); } } }
bool IExtensionResponse.Deserialize(IDictionary <string, string> fields, DotNetOpenId.RelyingParty.IAuthenticationResponse response, string typeUri) { if (fields == null) { return(false); } if (!fields.ContainsKey(Constants.ResponseParameters.AuthPolicies)) { return(false); } ActualPolicies.Clear(); string[] actualPolicies = fields[Constants.ResponseParameters.AuthPolicies].Split(' '); foreach (string policy in actualPolicies) { if (policy.Length > 0 && policy != AuthenticationPolicies.None) { ActualPolicies.Add(policy); } } AuthenticationTimeUtc = null; string authTime; if (fields.TryGetValue(Constants.ResponseParameters.AuthTime, out authTime)) { DateTime authDateTime; if (DateTime.TryParse(authTime, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out authDateTime) && authDateTime.Kind == DateTimeKind.Utc) // may be unspecified per our option above { AuthenticationTimeUtc = authDateTime; } else { Logger.ErrorFormat("Invalid format for {0} parameter: {1}", Constants.ResponseParameters.AuthTime, authTime); } } AssuranceLevels.Clear(); AliasManager authLevelAliases = PolicyRequest.FindIncomingAliases(fields); foreach (string authLevelAlias in authLevelAliases.Aliases) { string authValue; if (fields.TryGetValue(Constants.ResponseParameters.AuthLevelAliasPrefix + authLevelAlias, out authValue)) { string authLevelType = authLevelAliases.ResolveAlias(authLevelAlias); AssuranceLevels[authLevelType] = authValue; } } return(true); }
/// <summary> /// Deserializes attribute values from an incoming set of message data. /// </summary> /// <param name="fields">The data coming in with the message.</param> /// <returns>The attribute values found in the message.</returns> internal static IEnumerable <AttributeValues> DeserializeAttributes(IDictionary <string, string> fields) { AliasManager aliasManager = ParseAliases(fields); foreach (string alias in aliasManager.Aliases) { AttributeValues att = new AttributeValues(aliasManager.ResolveAlias(alias)); int count = 1; bool countSent = false; string countString; if (fields.TryGetValue("count." + alias, out countString)) { if (!int.TryParse(countString, out count) || count < 0) { Logger.OpenId.ErrorFormat("Failed to parse count.{0} value to a non-negative integer.", alias); continue; } countSent = true; } if (countSent) { for (int i = 1; i <= count; i++) { string value; if (fields.TryGetValue(string.Format(CultureInfo.InvariantCulture, "value.{0}.{1}", alias, i), out value)) { att.Values.Add(value); } else { Logger.OpenId.ErrorFormat("Missing value for attribute '{0}'.", att.TypeUri); continue; } } } else { string value; if (fields.TryGetValue("value." + alias, out value)) { att.Values.Add(value); } else { Logger.OpenId.ErrorFormat("Missing value for attribute '{0}'.", att.TypeUri); continue; } } yield return(att); } }
bool IExtensionRequest.Deserialize(IDictionary <string, string> fields, DotNetOpenId.Provider.IRequest request, string typeUri) { if (fields == null) { return(false); } if (!fields.ContainsKey(Constants.RequestParameters.PreferredAuthPolicies)) { return(false); } string maxAuthAge; MaximumAuthenticationAge = fields.TryGetValue(Constants.RequestParameters.MaxAuthAge, out maxAuthAge) ? TimeSpan.FromSeconds(double.Parse(maxAuthAge, CultureInfo.InvariantCulture)) : (TimeSpan?)null; PreferredPolicies.Clear(); string[] preferredPolicies = fields[Constants.RequestParameters.PreferredAuthPolicies].Split(' '); foreach (string policy in preferredPolicies) { if (policy.Length > 0) { PreferredPolicies.Add(policy); } } PreferredAuthLevelTypes.Clear(); AliasManager authLevelAliases = FindIncomingAliases(fields); string preferredAuthLevelAliases; if (fields.TryGetValue(Constants.RequestParameters.PreferredAuthLevelTypes, out preferredAuthLevelAliases)) { foreach (string authLevelAlias in preferredAuthLevelAliases.Split(' ')) { if (authLevelAlias.Length == 0) { continue; } PreferredAuthLevelTypes.Add(authLevelAliases.ResolveAlias(authLevelAlias)); } } return(true); }
/// <summary> /// Called when the message is about to be transmitted, /// before it passes through the channel binding elements. /// </summary> void IMessageWithEvents.OnSending() { var extraData = ((IMessage)this).ExtraData; extraData.Clear(); this.actualPoliciesString = SerializePolicies(this.ActualPolicies); if (this.AssuranceLevels.Count > 0) { AliasManager aliases = new AliasManager(); aliases.AssignAliases(this.AssuranceLevels.Keys, Constants.AssuranceLevels.PreferredTypeUriToAliasMap); // Add a definition for each Auth Level Type alias. foreach (string alias in aliases.Aliases) { extraData.Add(Constants.AuthLevelNamespaceDeclarationPrefix + alias, aliases.ResolveAlias(alias)); } // Now use the aliases for those type URIs to list the individual values. foreach (var pair in this.AssuranceLevels) { extraData.Add(AuthLevelAliasPrefix + aliases.GetAlias(pair.Key), pair.Value); } } }
/// <summary> /// Called when the message is about to be transmitted, /// before it passes through the channel binding elements. /// </summary> void IMessageWithEvents.OnSending() { var extraData = ((IMessage)this).ExtraData; extraData.Clear(); this.preferredPoliciesString = SerializePolicies(this.PreferredPolicies); if (this.PreferredAuthLevelTypes.Count > 0) { AliasManager authLevelAliases = new AliasManager(); authLevelAliases.AssignAliases(this.PreferredAuthLevelTypes, Constants.AssuranceLevels.PreferredTypeUriToAliasMap); // Add a definition for each Auth Level Type alias. foreach (string alias in authLevelAliases.Aliases) { extraData.Add(Constants.AuthLevelNamespaceDeclarationPrefix + alias, authLevelAliases.ResolveAlias(alias)); } // Now use the aliases for those type URIs to list a preferred order. extraData.Add(Constants.RequestParameters.PreferredAuthLevelTypes, SerializeAuthLevels(this.PreferredAuthLevelTypes, authLevelAliases)); } }
#region IExtensionResponse Members IDictionary<string, string> IExtensionResponse.Serialize(DotNetOpenId.Provider.IRequest authenticationRequest) { var fields = new Dictionary<string, string>(); fields.Add(Constants.ResponseParameters.AuthPolicies, SerializePolicies(ActualPolicies)); if (AuthenticationTimeUtc.HasValue) { fields.Add(Constants.ResponseParameters.AuthTime, AuthenticationTimeUtc.Value.ToUniversalTime().ToString(PermissibleDateTimeFormats[0], CultureInfo.InvariantCulture)); } if (AssuranceLevels.Count > 0) { AliasManager aliases = new AliasManager(); aliases.AssignAliases(AssuranceLevels.Keys, Constants.AuthenticationLevels.PreferredTypeUriToAliasMap); // Add a definition for each Auth Level Type alias. foreach (string alias in aliases.Aliases) { fields.Add(Constants.AuthLevelNamespaceDeclarationPrefix + alias, aliases.ResolveAlias(alias)); } // Now use the aliases for those type URIs to list the individual values. foreach (var pair in AssuranceLevels) { fields.Add(Constants.ResponseParameters.AuthLevelAliasPrefix + aliases.GetAlias(pair.Key), pair.Value); } }
IDictionary <string, string> IExtensionRequest.Serialize(DotNetOpenId.RelyingParty.IAuthenticationRequest authenticationRequest) { var fields = new Dictionary <string, string>(); if (MaximumAuthenticationAge.HasValue) { fields.Add(Constants.RequestParameters.MaxAuthAge, MaximumAuthenticationAge.Value.TotalSeconds.ToString(CultureInfo.InvariantCulture)); } // Even if empty, this parameter is required as part of the request message. fields.Add(Constants.RequestParameters.PreferredAuthPolicies, SerializePolicies(PreferredPolicies)); if (PreferredAuthLevelTypes.Count > 0) { AliasManager authLevelAliases = new AliasManager(); authLevelAliases.AssignAliases(PreferredAuthLevelTypes, Constants.AuthenticationLevels.PreferredTypeUriToAliasMap); // Add a definition for each Auth Level Type alias. foreach (string alias in authLevelAliases.Aliases) { fields.Add(Constants.AuthLevelNamespaceDeclarationPrefix + alias, authLevelAliases.ResolveAlias(alias)); } // Now use the aliases for those type URIs to list a preferred order. fields.Add(Constants.RequestParameters.PreferredAuthLevelTypes, SerializeAuthLevels(PreferredAuthLevelTypes, authLevelAliases)); } return(fields); }
IDictionary <string, string> IExtensionResponse.Serialize(DotNetOpenId.Provider.IRequest authenticationRequest) { var fields = new Dictionary <string, string>(); fields.Add(Constants.ResponseParameters.AuthPolicies, SerializePolicies(ActualPolicies)); if (AuthenticationTimeUtc.HasValue) { fields.Add(Constants.ResponseParameters.AuthTime, AuthenticationTimeUtc.Value.ToUniversalTime().ToString(PermissibleDateTimeFormats[0], CultureInfo.InvariantCulture)); } if (AssuranceLevels.Count > 0) { AliasManager aliases = new AliasManager(); aliases.AssignAliases(AssuranceLevels.Keys, Constants.AuthenticationLevels.PreferredTypeUriToAliasMap); // Add a definition for each Auth Level Type alias. foreach (string alias in aliases.Aliases) { fields.Add(Constants.AuthLevelNamespaceDeclarationPrefix + alias, aliases.ResolveAlias(alias)); } // Now use the aliases for those type URIs to list the individual values. foreach (var pair in AssuranceLevels) { fields.Add(Constants.ResponseParameters.AuthLevelAliasPrefix + aliases.GetAlias(pair.Key), pair.Value); } } return(fields); }