예제 #1
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);
        }
예제 #2
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);
        }
예제 #3
0
        bool IExtensionRequest.Deserialize(IDictionary <string, string> fields, DotNetOpenId.Provider.IRequest request, string typeUri)
        {
            if (fields == null)
            {
                return(false);
            }
            string mode;

            fields.TryGetValue("mode", out mode);
            if (mode != Mode)
            {
                return(false);
            }

            foreach (var att in FetchResponse.DeserializeAttributes(fields))
            {
                AddAttribute(att);
            }

            return(true);
        }
예제 #4
0
        bool IExtensionRequest.Deserialize(IDictionary <string, string> fields, DotNetOpenId.Provider.IRequest request, string typeUri)
        {
            if (fields == null)
            {
                return(false);
            }
            string mode;

            fields.TryGetValue("mode", out mode);
            if (mode != Mode)
            {
                return(false);
            }

            string updateUrl;

            fields.TryGetValue("update_url", out updateUrl);
            Uri updateUri;

            if (Uri.TryCreate(updateUrl, UriKind.Absolute, out updateUri))
            {
                UpdateUrl = updateUri;
            }

            string requiredAliasString, optionalAliasString;

            fields.TryGetValue("if_available", out optionalAliasString);
            fields.TryGetValue("required", out requiredAliasString);
            var requiredAliases = parseAliasList(requiredAliasString);
            var optionalAliases = parseAliasList(optionalAliasString);
            // if an alias shows up in both lists, an exception will result implicitly.
            var allAliases = new List <string>(requiredAliases.Count + optionalAliases.Count);

            allAliases.AddRange(requiredAliases);
            allAliases.AddRange(optionalAliases);
            if (allAliases.Count == 0)
            {
                Logger.Error("Attribute Exchange extension did not provide any aliases in the if_available or required lists.");
                return(false);
            }
            AliasManager aliasManager = new AliasManager();

            foreach (var alias in allAliases)
            {
                string attributeTypeUri;
                if (fields.TryGetValue("type." + alias, out attributeTypeUri))
                {
                    aliasManager.SetAlias(alias, attributeTypeUri);
                    AttributeRequest att = new AttributeRequest {
                        TypeUri    = attributeTypeUri,
                        IsRequired = requiredAliases.Contains(alias),
                    };
                    string countString;
                    if (fields.TryGetValue("count." + alias, out countString))
                    {
                        if (countString == "unlimited")
                        {
                            att.Count = int.MaxValue;
                        }
                        else
                        {
                            int count;
                            if (int.TryParse(countString, out count) && count > 0)
                            {
                                att.Count = count;
                            }
                            else
                            {
                                Logger.Error("count." + alias + " could not be parsed into a positive integer.");
                            }
                        }
                    }
                    else
                    {
                        att.Count = 1;
                    }
                    AddAttribute(att);
                }
                else
                {
                    Logger.Error("Type URI definition of alias " + alias + " is missing.");
                }
            }

            return(true);
        }