Initial half-port of PAPE extension.
[dotnetoauth.git] / src / DotNetOpenAuth / OpenId / Extensions / ProviderAuthenticationPolicy / PapeUtilities.cs
blob812c0b5e121ccd6e1b19d3f5320322997a5d82df
1 namespace DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy {
2 using System;
3 using System.Collections.Generic;
4 using System.Linq;
5 using System.Text;
6 using DotNetOpenAuth.Messaging;
7 using System.Globalization;
9 internal static class PapeUtilities {
10 static internal IEnumerable<T> GetUniqueItems<T>(IList<T> list) {
11 List<T> itemsSeen = new List<T>(list.Count);
12 foreach (T item in list) {
13 if (itemsSeen.Contains(item)) continue;
14 itemsSeen.Add(item);
15 yield return item;
19 /// <summary>
20 /// Looks at the incoming fields and figures out what the aliases and name spaces for auth level types are.
21 /// </summary>
22 internal static AliasManager FindIncomingAliases(IDictionary<string, string> fields) {
23 AliasManager aliasManager = new AliasManager();
25 foreach (var pair in fields) {
26 if (!pair.Key.StartsWith(Constants.AuthLevelNamespaceDeclarationPrefix, StringComparison.Ordinal)) {
27 continue;
30 string alias = pair.Key.Substring(Constants.AuthLevelNamespaceDeclarationPrefix.Length);
31 aliasManager.SetAlias(alias, pair.Value);
34 aliasManager.SetPreferredAliasesWhereNotSet(Constants.AuthenticationLevels.PreferredTypeUriToAliasMap);
36 return aliasManager;
39 internal static string ConcatenateListOfElements(IList<string> values) {
40 ErrorUtilities.VerifyArgumentNotNull(values, "values");
42 StringBuilder valuesList = new StringBuilder();
43 foreach (string value in GetUniqueItems(values)) {
44 if (value.Contains(" ")) {
45 throw new FormatException(string.Format(CultureInfo.CurrentCulture,
46 OpenIdStrings.InvalidUri, value));
48 valuesList.Append(value);
49 valuesList.Append(" ");
51 if (valuesList.Length > 0)
52 valuesList.Length -= 1; // remove trailing space
53 return valuesList.ToString();