/// <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));
                }
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        /// <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);
            }
        }
Esempio n. 5
0
        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));
            }
        }
Esempio n. 8
0
/// <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);
                }
            }
}
Esempio n. 9
0
		#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);
				}
			}
Esempio n. 10
0
/// <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));
            }
}
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        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);
        }