protected void Application_BeginRequest(object sender, EventArgs e) { HttpContext httpContext = HttpContext.Current; string[] redir = httpContext.Request.RawUrl.Split(';'); string host = httpContext.Request.Url.Host.ToLower(); bool isSecure = httpContext.Request.Url.Scheme.ToLower() == Uri.UriSchemeHttps.ToLower(); Settings settings = new Settings(null); if (host == "www." + Hyperlink.Domain) { UriBuilder noWwwUri = new UriBuilder(httpContext.Request.Url); noWwwUri.Host = Hyperlink.Domain; if (settings.UseSecureCookies) { noWwwUri.Scheme = Uri.UriSchemeHttps; noWwwUri.Port = -1; } Response.Redirect(noWwwUri.ToString()); Response.End(); return; } string currentURI = null; Uri cUri = null; if (httpContext.Request.RawUrl.Contains(";http://") || httpContext.Request.RawUrl.Contains("?http://")) { if (redir.Length > 1) // Apache2/IIS { currentURI = redir[1]; cUri = new Uri(currentURI); currentURI = cUri.AbsolutePath; if (currentURI.EndsWith("index.php", StringComparison.Ordinal)) { currentURI = currentURI.Substring(0, currentURI.Length - 9); Response.Redirect(currentURI, true); Response.End(); return; } if (currentURI.EndsWith(".php", StringComparison.Ordinal)) { currentURI = currentURI.Substring(0, currentURI.Length - 4); Response.Redirect(currentURI, true); Response.End(); return; } } else // NGINX { int i = httpContext.Request.RawUrl.IndexOf('?'); if (httpContext.Request.RawUrl.Length >= i) { currentURI = httpContext.Request.RawUrl.Substring(i + 1); } cUri = new Uri(currentURI); currentURI = cUri.AbsolutePath; } } /*else { currentURI = httpContext.Request.RawUrl; cUri = new Uri(currentURI); currentURI = cUri.AbsolutePath; }*/ if (!httpContext.Request.RawUrl.Contains("404.aspx")) { if (settings.UseSecureCookies && (!isSecure) && host == Hyperlink.Domain) { UriBuilder secureUri = new UriBuilder(httpContext.Request.RawUrl); secureUri.Host = host; secureUri.Scheme = Uri.UriSchemeHttps; secureUri.Port = -1; if (secureUri.Path.ToLower() == "/default.aspx") { secureUri.Path = "/"; } if (secureUri.Query == "?") { secureUri.Query = ""; } Response.Redirect(secureUri.ToString()); Response.End(); return; } if (host == Hyperlink.Domain) { return; } else { if (httpContext.Request.RawUrl.Contains("default.aspx")) { cUri = httpContext.Request.Url; currentURI = "/"; } } } if (currentURI != null) { if (settings.UseSecureCookies && (!isSecure) && host == Hyperlink.Domain) { UriBuilder secureUri = new UriBuilder(cUri); secureUri.Host = host; secureUri.Scheme = Uri.UriSchemeHttps; secureUri.Port = -1; if (secureUri.Query == "?") { secureUri.Query = ""; } Response.Redirect(secureUri.ToString()); Response.End(); return; } List<string[]> patterns = new List<string[]>(); if (host != Hyperlink.Domain) { SelectQuery query = new SelectQuery("dns_records"); query.AddFields("dns_domain", "dns_owner_id", "dns_owner_type", "dns_owner_key"); query.AddCondition("dns_domain", host); Mysql db = new Mysql(WebConfigurationManager.AppSettings["mysql-user"], WebConfigurationManager.AppSettings["mysql-password"], WebConfigurationManager.AppSettings["mysql-database"], WebConfigurationManager.AppSettings["mysql-host"]); long userTypeId = 0; long groupTypeId = 0; long applicationTypeId = 0; Dictionary<string, long> primitiveTypeIds; System.Web.Caching.Cache cache; object o = null; if (HttpContext.Current != null && HttpContext.Current.Cache != null) { cache = HttpContext.Current.Cache; } else { cache = new System.Web.Caching.Cache(); } if (cache != null) { try { o = cache.Get("primitiveTypeIds"); } catch (NullReferenceException) { } } if (o != null && o is Dictionary<string, long>) { primitiveTypeIds = (Dictionary<string, long>)o; userTypeId = primitiveTypeIds[typeof(User).FullName]; groupTypeId = primitiveTypeIds[typeof(UserGroup).FullName]; applicationTypeId = primitiveTypeIds[typeof(ApplicationEntry).FullName]; } else { SelectQuery query2 = new SelectQuery("item_types"); query2.AddFields("type_id", "type_namespace"); query2.AddCondition("type_primitive", true); System.Data.Common.DbDataReader typeReader = db.ReaderQuery(query2); primitiveTypeIds = new Dictionary<string, long>(256, StringComparer.Ordinal); while(typeReader.Read()) { primitiveTypeIds.Add((string)typeReader["type_namespace"], (long)typeReader["type_id"]); if ((string)typeReader["type_namespace"] == typeof(User).FullName) { userTypeId = (long)typeReader["type_id"]; } else if ((string)typeReader["type_namespace"] == typeof(UserGroup).FullName) { groupTypeId = (long)typeReader["type_id"]; } } typeReader.Close(); typeReader.Dispose(); if (cache != null) { cache.Add("primitiveTypeIds", primitiveTypeIds, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(12, 0, 0), CacheItemPriority.High, null); } } System.Data.Common.DbDataReader dnsReader = db.ReaderQuery(query); if (dnsReader.HasRows) { dnsReader.Read(); long typeId = (long)dnsReader["dns_owner_type"]; string dnsOwnerKey = (string)dnsReader["dns_owner_key"]; dnsReader.Close(); dnsReader.Dispose(); if (typeId == groupTypeId) { patterns.Add(new string[] { @"^/comment(/|)$", @"/comment.aspx" }); patterns.Add(new string[] { string.Format(@"^/styles/group/{0}.css$", dnsOwnerKey), string.Format(@"/groupstyle.aspx?gn={0}", dnsOwnerKey) }); patterns.Add(new string[] { string.Format(@"^/images/group/_([a-z]+)/{0}.png$", dnsOwnerKey), string.Format(@"/identicon.aspx?gn={0}&mode=$1", dnsOwnerKey) }); patterns.Add(new string[] { string.Format(@"^/images/group/_([a-z]+)/{0}@2x.png$", dnsOwnerKey), string.Format(@"/identicon.aspx?gn={0}&mode=$1&retina=true", dnsOwnerKey) }); patterns.Add(new string[] { @"^/account/([a-z\-]+)/([a-z\-]+)(/|)$", string.Format(@"/groupaccount.aspx?gn={0}&module=$1&sub=$2", dnsOwnerKey) }); patterns.Add(new string[] { @"^/account/([a-z\-]+)(/|)$", string.Format(@"/groupaccount.aspx?gn={0}&module=$1", dnsOwnerKey) }); patterns.Add(new string[] { @"^/account(/|)$", string.Format(@"/groupaccount.aspx?gn={0}", dnsOwnerKey) }); patterns.Add(new string[] { @"^(/|)$", string.Format(@"/grouppage.aspx?gn={0}&path=", dnsOwnerKey) }); patterns.Add(new string[] { @"^/(.+)(/|)$", string.Format(@"/grouppage.aspx?gn={0}&path=$1", dnsOwnerKey) }); } if (typeId == userTypeId) { patterns.Add(new string[] { @"^/comment(/|)$", @"/comment.aspx" }); patterns.Add(new string[] { @"^/api/acl/get-groups(/|)$", @"/functions.aspx?fun=permission-groups-list" }); patterns.Add(new string[] { @"^/api/acl(/|)$", @"/acl.aspx" }); patterns.Add(new string[] { @"^/api/statistics(/|)$", @"/statistics.aspx" }); patterns.Add(new string[] { @"^/api/rate(/|)$", @"/rate.aspx" }); patterns.Add(new string[] { @"^/api/comment(/|)$", @"/comment.aspx" }); patterns.Add(new string[] { @"^/api/like(/|)$", @"/like.aspx" }); patterns.Add(new string[] { @"^/api/share(/|)$", @"/share.aspx" }); patterns.Add(new string[] { @"^/api/subscribe(/|)$", @"/subscribe.aspx" }); patterns.Add(new string[] { @"^/api/functions(/|)$", @"/functions.aspx" }); patterns.Add(new string[] { @"^/api/friends(/|)$", @"/functions.aspx?fun=friend-list" }); patterns.Add(new string[] { @"^/api/tags(/|)$", @"/functions.aspx?fun=tag-list" }); patterns.Add(new string[] { @"^/api/card(/|)$", @"/functions.aspx?fun=contact-card" }); patterns.Add(new string[] { @"^/api/feed(/|)$", @"/functions.aspx?fun=feed" }); patterns.Add(new string[] { @"^/api/oembed(/|)$", @"/functions.aspx?fun=embed" }); patterns.Add(new string[] { @"^/api/log-view(/|)$", @"/functions.aspx?fun=log-view" }); patterns.Add(new string[] { string.Format(@"^/styles/user/{0}.css$", dnsOwnerKey), string.Format(@"/userstyle.aspx?un={0}", dnsOwnerKey) }); patterns.Add(new string[] { string.Format(@"^/images/user/_([a-z]+)/{0}.png$", dnsOwnerKey), string.Format(@"/identicon.aspx?un={0}&mode=$1", dnsOwnerKey) }); patterns.Add(new string[] { string.Format(@"^/images/user/_([a-z]+)/{0}@2x.png$", dnsOwnerKey), string.Format(@"/identicon.aspx?un={0}&mode=$1&retina=true", dnsOwnerKey) }); patterns.Add(new string[] { @"^/account/([a-z\-]+)/([a-z\-]+)(/|)$", @"/account.aspx?module=$1&sub=$2" }); patterns.Add(new string[] { @"^/account/([a-z\-]+)(/|)$", @"/account.aspx?module=$1" }); patterns.Add(new string[] { @"^/account(/|)$", @"/account.aspx" }); patterns.Add(new string[] { @"^(/|)$", string.Format(@"/memberpage.aspx?un={0}&path=", dnsOwnerKey) }); patterns.Add(new string[] { @"^/(.+)(/|)$", string.Format(@"/memberpage.aspx?un={0}&path=$1", dnsOwnerKey) }); } } else { dnsReader.Close(); dnsReader.Dispose(); return; } db.CloseConnection(); } else { patterns.Add(new string[] { @"^/images/corners-(top|bottom|middle)-([0-9a-f\-_]{6})-([0-9\-_]+)-([0-9\-_]+).png$", @"/corners.aspx?location=$1&width=$3&roundness=$4&colour=$2&ext=png" }); patterns.Add(new string[] { @"^/images/corners-(top|bottom|middle)-([0-9a-f\-_]{6})-([0-9\-_]+)-([0-9\-_]+).gif$", @"/corners.aspx?location=$1&width=$3&roundness=$4&colour=$2&ext=gif" }); patterns.Add(new string[] { @"^/images/corners-(top|bottom|middle)-(left|right|centre)-([0-9a-f\-_]{6})-([0-9\-_]+)-([0-9\-_]+).png$", @"/corners.aspx?location=$1,$2&width=$4&roundness=$5&colour=$3&ext=png" }); patterns.Add(new string[] { @"^/images/corners-(top|bottom|middle)-(left|right|centre)-([0-9a-f\-_]{6})-([0-9\-_]+)-([0-9\-_]+).gif$", @"/corners.aspx?location=$1,$2&width=$4&roundness=$5&colour=$3&ext=gif" }); patterns.Add(new string[] { @"^/about(/|)$", @"/about.aspx" }); patterns.Add(new string[] { @"^/opensource(/|)$", @"/opensource.aspx" }); patterns.Add(new string[] { @"^/safety(/|)$", @"/safety.aspx" }); patterns.Add(new string[] { @"^/privacy(/|)$", @"/privacy.aspx" }); patterns.Add(new string[] { @"^/terms-of-service(/|)$", @"/tos.aspx" }); patterns.Add(new string[] { @"^/site-map(/|)$", @"/sitemap.aspx" }); patterns.Add(new string[] { @"^/copyright(/|)$", @"/copyright.aspx" }); patterns.Add(new string[] { @"^/register(/|)$", @"/register.aspx" }); patterns.Add(new string[] { @"^/sign-in(/|)$", @"/login.aspx" }); patterns.Add(new string[] { @"^/login(/|)$", @"/login.aspx" }); patterns.Add(new string[] { @"^/search(/|)$", @"/search.aspx" }); patterns.Add(new string[] { @"^/comment(/|)$", @"/comment.aspx" }); patterns.Add(new string[] { @"^/api/acl/get-groups(/|)$", @"/functions.aspx?fun=permission-groups-list" }); patterns.Add(new string[] { @"^/api/acl(/|)$", @"/acl.aspx" }); patterns.Add(new string[] { @"^/api/statistics(/|)$", @"/statistics.aspx" }); patterns.Add(new string[] { @"^/api/rate(/|)$", @"/rate.aspx" }); patterns.Add(new string[] { @"^/api/comment(/|)$", @"/comment.aspx" }); patterns.Add(new string[] { @"^/api/like(/|)$", @"/like.aspx" }); patterns.Add(new string[] { @"^/api/share(/|)$", @"/share.aspx" }); patterns.Add(new string[] { @"^/api/subscribe(/|)$", @"/subscribe.aspx" }); patterns.Add(new string[] { @"^/api/functions(/|)$", @"/functions.aspx" }); patterns.Add(new string[] { @"^/api/friends(/|)$", @"/functions.aspx?fun=friend-list" }); patterns.Add(new string[] { @"^/api/tags(/|)$", @"/functions.aspx?fun=tag-list" }); patterns.Add(new string[] { @"^/api/card(/|)$", @"/functions.aspx?fun=contact-card" }); patterns.Add(new string[] { @"^/api/feed(/|)$", @"/functions.aspx?fun=feed" }); patterns.Add(new string[] { @"^/api/oembed(/|)$", @"/functions.aspx?fun=embed" }); patterns.Add(new string[] { @"^/api/log-view(/|)$", @"/functions.aspx?fun=log-view" }); patterns.Add(new string[] { @"^/api/twitter/callback(/|)$", @"/functions.aspx?fun=twitter" }); patterns.Add(new string[] { @"^/api/googleplus/callback(/|)$", @"/functions.aspx?fun=googleplus" }); patterns.Add(new string[] { @"^/api/facebook/callback(/|)$", @"/functions.aspx?fun=facebook" }); patterns.Add(new string[] { @"^/api/tumblr/callback(/|)$", @"/functions.aspx?fun=tumblr" }); patterns.Add(new string[] { @"^/api/boxsocial/callback(/|)$", @"/functions.aspx?fun=boxsocial" }); patterns.Add(new string[] { @"^/api/sms/callback/([a-z\-]+)(/|)$", @"/functions.aspx?fun=sms&provider=$1" }); patterns.Add(new string[] { @"^/oauth/request_token(/|)$", @"/oauth.aspx?global_method=request_token" }); patterns.Add(new string[] { @"^/oauth/authorize(/|)$", @"/functions.aspx?fun=oauth&method=authorize" }); patterns.Add(new string[] { @"^/oauth/approve(/|)$", @"/functions.aspx?fun=oauth&method=approve" }); patterns.Add(new string[] { @"^/oauth/access_token(/|)$", @"/oauth.aspx?global_method=access_token" }); patterns.Add(new string[] { @"^/oauth/([A-Za-z0-9\-_]+)/([A-Za-z0-9\-_\/]+)(/|)$", @"/oauth.aspx?global_method=call&global_an=$1&global_call=$2" }); patterns.Add(new string[] { @"^/account/([a-z\-]+)/([a-z\-]+)(/|)$", @"/account.aspx?module=$1&sub=$2" }); patterns.Add(new string[] { @"^/account/([a-z\-]+)(/|)$", @"/account.aspx?module=$1" }); patterns.Add(new string[] { @"^/account(/|)$", @"/account.aspx" }); patterns.Add(new string[] { @"^/s/([A-Za-z0-9\-_]+)(/|)$", @"/shorturl.aspx?key=$1" }); patterns.Add(new string[] { @"^/group/([A-Za-z0-9\-_]+)/account/([a-z\-]+)/([a-z\-]+)(/|)$", @"/groupaccount.aspx?gn=$1&module=$2&sub=$3" }); patterns.Add(new string[] { @"^/group/([A-Za-z0-9\-_]+)/account/([a-z\-]+)(/|)$", @"/groupaccount.aspx?gn=$1&module=$2" }); patterns.Add(new string[] { @"^/group/([A-Za-z0-9\-_]+)/account(/|)$", @"/groupaccount.aspx?gn=$1" }); patterns.Add(new string[] { @"^/music/([A-Za-z0-9\-_]+)/account/([a-z\-]+)/([a-z\-]+)(/|)$", @"/musicaccount.aspx?mn=$1&module=$2&sub=$3" }); patterns.Add(new string[] { @"^/music/([A-Za-z0-9\-_]+)/account/([a-z\-]+)(/|)$", @"/musicaccount.aspx?mn=$1&module=$2" }); patterns.Add(new string[] { @"^/music/([A-Za-z0-9\-_]+)/account(/|)$", @"/musicaccount.aspx?mn=$1" }); patterns.Add(new string[] { @"^/styles/user/([A-Za-z0-9\-_\.]+).css$", @"/userstyle.aspx?un=$1" }); patterns.Add(new string[] { @"^/styles/group/([A-Za-z0-9\-_\.]+).css$", @"/groupstyle.aspx?gn=$1" }); patterns.Add(new string[] { @"^/styles/music/([A-Za-z0-9\-_\.]+).css$", @"/musicstyle.aspx?gn=$1" }); patterns.Add(new string[] { @"^/images/user/_([a-z]+)/([A-Za-z0-9\-_\.]+).png$", @"/identicon.aspx?un=$2&mode=$1"}); patterns.Add(new string[] { @"^/images/user/_([a-z]+)/([A-Za-z0-9\-_\.]+)@2x.png$", @"/identicon.aspx?un=$2&mode=$1&retina=true" }); patterns.Add(new string[] { @"^/images/group/_([a-z]+)/([A-Za-z0-9\-_\.]+).png$", @"/identicon.aspx?gn=$2&mode=$1" }); patterns.Add(new string[] { @"^/images/group/_([a-z]+)/([A-Za-z0-9\-_\.]+)@2x.png$", @"/identicon.aspx?gn=$2&mode=$1&retina=true" }); patterns.Add(new string[] { @"^/images/application/_([a-z]+)/([A-Za-z0-9\-_\.]+).png$", @"/identicon.aspx?an=$2&mode=$1" }); patterns.Add(new string[] { @"^/images/application/_([a-z]+)/([A-Za-z0-9\-_\.]+)@2x.png$", @"/identicon.aspx?an=$2&mode=$1&retina=true" }); patterns.Add(new string[] { @"^/help(/|)$", @"/help.aspx" }); patterns.Add(new string[] { @"^/help/([a-z\-]+)(/|)$", @"/help.aspx?topic=$1" }); patterns.Add(new string[] { @"^/applications(/|)$", @"/viewapplications.aspx$1" }); patterns.Add(new string[] { @"^/applications/register(/|)$", @"/registerapplication.aspx$1" }); patterns.Add(new string[] { @"^/application/([A-Za-z0-9\-_]+)/manage/([a-z\-]+)/([a-z\-]+)(/|)$", @"/applicationmanage.aspx?an=$1&module=$2&sub=$3" }); patterns.Add(new string[] { @"^/application/([A-Za-z0-9\-_]+)/manage/([a-z\-]+)(/|)$", @"/applicationmanage.aspx?an=$1&module=$2" }); patterns.Add(new string[] { @"^/application/([A-Za-z0-9\-_]+)/manage(/|)$", @"/applicationmanage.aspx?an=$1" }); patterns.Add(new string[] { @"^/application/([A-Za-z0-9\-_]+)(/|)$", @"/applicationpage.aspx?an=$1&path=" }); //patterns.Add(new string[] { @"^/groups/create(/|)$", @"/creategroup.aspx" }); patterns.Add(new string[] { @"^/groups/register(/|)$", @"/staticpage.aspx?path=groups/register" }); patterns.Add(new string[] { @"^/groups(/|)$", @"/staticpage.aspx?path=groups" }); patterns.Add(new string[] { @"^/groups/([A-Za-z0-9\-_]+)(/|)$", @"/staticpage.aspx?path=groups/$1" }); patterns.Add(new string[] { @"^/group/([A-Za-z0-9\-_]+)(/|)$", @"/grouppage.aspx?gn=$1&path=" }); //patterns.Add(new string[] { @"^/group/([A-Za-z0-9\-_]+)/images/([A-Za-z0-9\-_/\.]+)$", @"/viewimage.aspx?gn=$1&path=$2" }); patterns.Add(new string[] { @"^/networks(/|)$", @"/viewnetworks.aspx" }); patterns.Add(new string[] { @"^/networks/([A-Za-z0-9\-_\.]+)(/|)$", @"/viewnetworks.aspx?type=$1" }); patterns.Add(new string[] { @"^/network/([A-Za-z0-9\-_\.]+)(/|)$", @"/networkpage.aspx?nn=$1&path=" }); //patterns.Add(new string[] { @"^/network/([A-Za-z0-9\-_\.]+)/images/([A-Za-z0-9\-_/\.]+)$", @"/viewimage.aspx?nn=$1&path=$2" }); //patterns.Add(new string[] { @"^/musicians/create(/|)$", @"/createmusician.aspx" }); //patterns.Add(new string[] { @"^/musicians(/|)$", @"/viewmusicians.aspx$1" }); //patterns.Add(new string[] { @"^/musician/([A-Za-z0-9\-_]+)(/|)$", @"/viewmusicians.aspx?genre=$1" }); //patterns.Add(new string[] { @"^/musician/([A-Za-z0-9\-_]+)(/|)([A-Za-z0-9\-_]+)(/|)$", @"/viewmusicians.aspx?genre=$1&sub=$2" }); patterns.Add(new string[] { @"^/music/register(/|)$", @"/staticpage.aspx?path=music/register" }); patterns.Add(new string[] { @"^/music(/|)$", @"/staticpage.aspx?path=music" }); patterns.Add(new string[] { @"^/music/chart(/|)$", @"/staticpage.aspx?path=music/chart" }); patterns.Add(new string[] { @"^/music/directory(/|)$", @"/staticpage.aspx?path=music/directory" }); patterns.Add(new string[] { @"^/music/directory/genres(/|)$", @"/staticpage.aspx?path=music/directory/genres" }); patterns.Add(new string[] { @"^/music/directory/genre/([a-z0-9\-_\+]+)(/|)$", @"/staticpage.aspx?path=music/directory/genres/$1" }); patterns.Add(new string[] { @"^/music/([A-Za-z0-9\-_]+)(/|)$", @"/musicpage.aspx?mn=$1&path=" }); patterns.Add(new string[] { @"^/user/([A-Za-z0-9\-_\.]+)(/|)$", @"/memberpage.aspx?un=$1&path=" }); //patterns.Add(new string[] { @"^/([A-Za-z0-9\-_]+)/profile(/|)$", @"/viewprofile.aspx?un=$1" }); //patterns.Add(new string[] { @"^/([A-Za-z0-9\-_]+)/images/([A-Za-z0-9\-_/\.]+)$", @"/viewimage.aspx?un=$1&path=$2" }); /* Wildcard for application loader */ patterns.Add(new string[] { @"^/application/([A-Za-z0-9\-_]+)/(.+)(/|)$", @"/applicationpage.aspx?an=$1&path=$2" }); patterns.Add(new string[] { @"^/group/([A-Za-z0-9\-_]+)/(.+)(/|)$", @"/grouppage.aspx?gn=$1&path=$2" }); patterns.Add(new string[] { @"^/network/([A-Za-z0-9\-_\.]+)/(.+)(/|)$", @"/networkpage.aspx?nn=$1&path=$2" }); patterns.Add(new string[] { @"^/music/([A-Za-z0-9\-_]+)/(.+)(/|)$", @"/musicpage.aspx?mn=$1&path=$2" }); patterns.Add(new string[] { @"^/user/([A-Za-z0-9\-_\.]+)/(.+)(/|)$", @"/memberpage.aspx?un=$1&path=$2" }); } // fast cull int ioc = currentURI.IndexOf('/', 1); if (ioc >= 1) { for (int i = 0; i < patterns.Count; i++) // (string[] pattern in patterns) { string[] pattern = patterns[i]; int iop = pattern[0].IndexOf('/', 2); if (iop >= 2) { if (currentURI.Substring(1, ioc - 1).Equals(pattern[0].Substring(2, iop - 2))) { if (Regex.IsMatch(currentURI, pattern[0])) { Regex rex = new Regex(pattern[0]); currentURI = rex.Replace(currentURI, pattern[1]); if (currentURI.Contains("?")) { httpContext.RewritePath(currentURI.TrimEnd(new char[] { '/' }) + "&" + cUri.Query.TrimStart(new char[] { '?' })); return; } else { httpContext.RewritePath(currentURI.TrimEnd(new char[] { '/' }) + cUri.Query); return; } } } } } } // full catch all for (int i = 0; i < patterns.Count; i++) //foreach (string[] pattern in patterns) { string[] pattern = patterns[i]; if (Regex.IsMatch(currentURI, pattern[0])) { Regex rex = new Regex(pattern[0]); currentURI = rex.Replace(currentURI, pattern[1]); if (currentURI.Contains("?")) { httpContext.RewritePath(currentURI.TrimEnd(new char[] { '/' }) + "&" + cUri.Query.TrimStart(new char[] { '?' })); return; } else { httpContext.RewritePath(currentURI.TrimEnd(new char[] { '/' }) + cUri.Query); return; } } } } }
public static void LoadAssemblies(Mysql db) { string assemblyPath = null; SelectQuery query = new SelectQuery("applications"); query.AddField(new DataField("applications", "application_id")); query.AddField(new DataField("applications", "application_assembly_name")); query.AddField(new DataField("applications", "application_locked")); query.AddField(new DataField("applications", "application_update")); query.AddField(new DataField("applications", "application_primitive")); query.AddCondition("application_type", (byte)ApplicationType.Native); System.Data.Common.DbDataReader applicationReader = db.ReaderQuery(query); while (applicationReader.Read()) { long applicationId = (long)applicationReader["application_id"]; string assemblyName = (string)applicationReader["application_assembly_name"]; bool isPrimitive = false; if (applicationReader["application_primitive"] is bool) { isPrimitive = (bool)applicationReader["application_primitive"]; } else if (applicationReader["application_primitive"] is byte) { isPrimitive = ((byte)applicationReader["application_primitive"] > 0) ? true : false; } else if (applicationReader["application_primitive"] is sbyte) { isPrimitive = ((sbyte)applicationReader["application_primitive"] > 0) ? true : false; } else { isPrimitive = false; } if (isPrimitive) { if (Directory.Exists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin"))) { assemblyPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin", assemblyName + ".dll"); } else { assemblyPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, assemblyName + ".dll"); } } else { if (Directory.Exists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin"))) { assemblyPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin", "applications", assemblyName + ".dll"); } else { assemblyPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "applications", assemblyName + ".dll"); } } if (!string.IsNullOrEmpty(assemblyPath)) { Assembly assembly = Assembly.LoadFrom(assemblyPath); LoadedAssemblies[applicationId] = assembly; AssemblyNames[assemblyName] = applicationId; } } applicationReader.Close(); applicationReader.Dispose(); }