summaryrefslogtreecommitdiffstats
path: root/source/Janrain.OpenId/Util.cs
blob: 5fdba460f9a88fd9f1c7a7b27bc36c09d22d93da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
using System;
using System.Collections.Specialized;
using System.Collections.Generic;
using System.Text;
using System.Web;

namespace Janrain.OpenId
{
    public static class UriUtil
    {

        #region NormalizeUri(string uriStr)

        public static Uri NormalizeUri(string uriStr)
        {
            if (!uriStr.StartsWith("http") && uriStr.IndexOf("://") == -1)
                uriStr = "http://" + uriStr;

            UriBuilder bldr = new UriBuilder(uriStr);
            
            bldr.Host = bldr.Host.ToLower();

            return bldr.Uri;
        }

        #endregion

        #region CreateQueryString(NameValueCollection args)

        public static string CreateQueryString(NameValueCollection args)
        {
            string[] parts = new string[args.Count];
            
            for (int i = 0; i < args.Count; i++)
            {
                string encKey = HttpUtility.UrlEncode(args.GetKey(i));
                string encVal = HttpUtility.UrlEncode(args.Get(i));

                parts[i] = encKey + "=" + encVal;
            }

            return String.Join("&", parts);
        }

        #endregion

        #region AppendQueryArg(UriBuilder builder, string key, string value)

        public static void AppendQueryArg(UriBuilder builder, string key, string value)
        {
            string encKey = HttpUtility.UrlEncode(key);
            string encVal = HttpUtility.UrlEncode(value);
            string newqs = encKey + "=" + encVal;
            string qs = builder.Query;

            if (builder.Query != null && qs != String.Empty)
                qs = qs.Substring(1) + "&" + newqs;
            else
                qs = newqs;

            builder.Query = qs;

        }

        #endregion

        #region AppendQueryArgs(UriBuilder builder, NameValueCollection args)

        public static void AppendQueryArgs(UriBuilder builder, NameValueCollection args)
        {
            if (args.Count > 0)
            {
                string newqs = CreateQueryString(args);
                string qs = builder.Query;

                if (builder.Query != null && qs != String.Empty)
                    qs = qs.Substring(1) + "&" + newqs;
                else
                    qs = newqs;

                builder.Query = qs;
            }
        }

        #endregion

    }

    internal static class Util
    {
        internal const string DefaultNamespace = "Janrain.OpenId";
        #region InArray(string[] array, string valueToFind)
            
        public static bool InArray(string[] array, string valueToFind)
        {
            foreach (string val in array)
            {
                if (val == valueToFind) return true;
            }
            return false;
        }
        #endregion
    }

    internal static class QueryStringArgs {
        /// <summary>openid. variables that don't include the "openid." prefix.</summary>
        internal static class openidnp {
            internal const string return_to = "return_to";
            internal const string mode = "mode";
            internal const string error = "error";
            internal const string identity = "identity";
            internal const string expires_in = "expires_in";
            internal const string assoc_type = "assoc_type";
            internal const string assoc_handle = "assoc_handle";
            internal const string session_type = "session_type";
            internal const string is_valid = "is_valid";
            internal const string sig = "sig";
            internal const string signed = "signed";
            internal const string user_setup_url = "user_setup_url";
            internal const string trust_root = "trust_root";
            internal const string invalidate_handle = "invalidate_handle";
            internal const string dh_modulus = "dh_modulus";
            internal const string dh_gen = "dh_gen";
            internal const string dh_consumer_public = "dh_consumer_public";
            internal const string dh_server_public = "dh_server_public";

            internal static class sregnp {
                internal const string policy_url = "policy_url";
                internal const string optional = "optional";
                internal const string required = "required";
                internal const string nickname = "nickname";
                internal const string email = "email";
                internal const string fullname = "fullname";
                internal const string dob = "dob";
                internal const string gender = "gender";
                internal const string postcode = "postcode";
                internal const string country = "country";
                internal const string language = "language";
                internal const string timezone = "timezone";
            }

            internal static class sreg {
                internal const string Prefix = "sreg.";
                internal const string policy_url = Prefix + sregnp.policy_url;
                internal const string optional = Prefix + sregnp.optional;
                internal const string required = Prefix + sregnp.required;
                internal const string nickname = Prefix + sregnp.nickname;
                internal const string email = Prefix + sregnp.email;
                internal const string fullname = Prefix + sregnp.fullname;
                internal const string dob = Prefix + sregnp.dob;
                internal const string gender = Prefix + sregnp.gender;
                internal const string postcode = Prefix + sregnp.postcode;
                internal const string country = Prefix + sregnp.country;
                internal const string language = Prefix + sregnp.language;
                internal const string timezone = Prefix + sregnp.timezone;
            }

        }
        /// <summary>openid. variables that include the "openid." prefix.</summary>
        internal static class openid {
            internal const string Prefix = "openid.";

            internal const string return_to = Prefix + openidnp.return_to;
            internal const string mode = Prefix + openidnp.mode;
            internal const string error = Prefix + openidnp.error;
            internal const string identity = Prefix + openidnp.identity;
            internal const string expires_in = Prefix + openidnp.expires_in;
            internal const string assoc_type = Prefix + openidnp.assoc_type;
            internal const string assoc_handle = Prefix + openidnp.assoc_handle;
            internal const string session_type = Prefix + openidnp.session_type;
            internal const string is_valid = Prefix + openidnp.is_valid;
            internal const string sig = Prefix + openidnp.sig;
            internal const string signed = Prefix + openidnp.signed;
            internal const string user_setup_url = Prefix + openidnp.user_setup_url;
            internal const string trust_root = Prefix + openidnp.trust_root;
            internal const string invalidate_handle = Prefix + openidnp.invalidate_handle;
            internal const string dh_modulus = Prefix + openidnp.dh_modulus;
            internal const string dh_gen = Prefix + openidnp.dh_gen;
            internal const string dh_consumer_public = Prefix + openidnp.dh_consumer_public;
            internal const string dh_server_public = Prefix + openidnp.dh_server_public;

            internal static class sreg {
                internal const string Prefix = openid.Prefix + openidnp.sreg.Prefix;
                internal const string policy_url = Prefix + openidnp.sregnp.policy_url;
                internal const string optional = Prefix + openidnp.sregnp.optional;
                internal const string required = Prefix + openidnp.sregnp.required;
                internal const string nickname = Prefix + openidnp.sregnp.nickname;
                internal const string email = Prefix + openidnp.sregnp.email;
                internal const string fullname = Prefix + openidnp.sregnp.fullname;
                internal const string dob = Prefix + openidnp.sregnp.dob;
                internal const string gender = Prefix + openidnp.sregnp.gender;
                internal const string postcode = Prefix + openidnp.sregnp.postcode;
                internal const string country = Prefix + openidnp.sregnp.country;
                internal const string language = Prefix + openidnp.sregnp.language;
                internal const string timezone = Prefix + openidnp.sregnp.timezone;
            }
        }
        internal const string nonce = "nonce";
        internal const string enc_mac_key = "enc_mac_key";
        internal const string mac_key = "mac_key";
        internal const string DH_SHA1 = "DH-SHA1";
        internal const string HMAC_SHA1 = "HMAC-SHA1";

        internal static class Modes {
            internal const string cancel = "cancel";
            internal const string error = "error";
            internal const string id_res = "id_res";
            internal const string checkid_immediate = "checkid_immediate";
            internal const string checkid_setup = "checkid_setup";
            internal const string check_authentication = "check_authentication";
            internal const string associate = "associate";
        }
        internal static class Genders {
            internal const string Male = "M";
            internal const string Female = "F";
        }

        /// <summary>
        /// Used by ASP.NET on a login page to determine where a successful
        /// login should be redirected to.
        /// </summary>
        internal const string ReturnUrl = "ReturnUrl";
    }
}