Пример #1
0
        public static ExtensionArgumentsManager CreateIncomingExtensions(IDictionary <string, string> query)
        {
            if (query == null)
            {
                throw new ArgumentNullException("query");
            }
            var mgr = new ExtensionArgumentsManager();

            mgr.protocol   = Protocol.Detect(query);
            mgr.isReadMode = true;
            string aliasPrefix = mgr.protocol.openid.ns + ".";

            // First pass looks for namespace aliases
            foreach (var pair in query)
            {
                if (pair.Key.StartsWith(aliasPrefix, StringComparison.Ordinal))
                {
                    mgr.aliasManager.SetAlias(pair.Key.Substring(aliasPrefix.Length), pair.Value);
                }
            }
            // For backwards compatibility, add certain aliases if they aren't defined.
            foreach (var pair in typeUriToAliasAffinity)
            {
                if (!mgr.aliasManager.IsAliasAssignedTo(pair.Key) &&
                    !mgr.aliasManager.IsAliasUsed(pair.Value))
                {
                    mgr.aliasManager.SetAlias(pair.Value, pair.Key);
                }
            }
            // Second pass looks for extensions using those aliases
            foreach (var pair in query)
            {
                if (!pair.Key.StartsWith(mgr.protocol.openid.Prefix, StringComparison.Ordinal))
                {
                    continue;
                }
                string possibleAlias = pair.Key.Substring(mgr.protocol.openid.Prefix.Length);
                int    periodIndex   = possibleAlias.IndexOf(".", StringComparison.Ordinal);
                if (periodIndex >= 0)
                {
                    possibleAlias = possibleAlias.Substring(0, periodIndex);
                }
                string typeUri;
                if ((typeUri = mgr.aliasManager.TryResolveAlias(possibleAlias)) != null)
                {
                    if (!mgr.extensions.ContainsKey(typeUri))
                    {
                        mgr.extensions[typeUri] = new Dictionary <string, string>();
                    }
                    string key = periodIndex >= 0 ? pair.Key.Substring(mgr.protocol.openid.Prefix.Length + possibleAlias.Length + 1) : string.Empty;
                    mgr.extensions[typeUri].Add(key, pair.Value);
                }
            }
            return(mgr);
        }
Пример #2
0
        public static ExtensionArgumentsManager CreateOutgoingExtensions(Protocol protocol)
        {
            var mgr = new ExtensionArgumentsManager();

            mgr.protocol = protocol;
            // Affinity for certain alias for backwards compatibility
            foreach (var pair in typeUriToAliasAffinity)
            {
                mgr.aliasManager.SetAlias(pair.Value, pair.Key);
            }
            return(mgr);
        }