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 {
/// openid. variables that don't include the "openid." prefix.
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;
}
}
/// openid. variables that include the "openid." prefix.
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";
}
///
/// Used by ASP.NET on a login page to determine where a successful
/// login should be redirected to.
///
internal const string ReturnUrl = "ReturnUrl";
}
}