private static void ReloadSiteList()
{
lock (_sitesLock)
{
NodeQueryResult result = null;
try
{
if (ContentRepository.Schema.ContentType.GetByName("Site") == null)
throw new ApplicationException("Unknown ContentType: Site");
//CONDITIONAL EXECUTE
using (new SystemAccount())
{
if (StorageContext.Search.IsOuterEngineEnabled && StorageContext.Search.SearchEngine != InternalSearchEngine.Instance)
{
var query = new NodeQuery();
var nt = ActiveSchema.NodeTypes[typeof(Site).Name];
query.Add(new TypeExpression(nt, false));
result = query.Execute();//.Nodes.ToList<Node>();
}
else
{
result = NodeQuery.QueryNodesByType(ActiveSchema.NodeTypes[typeof(Site).Name], false);//.Nodes.ToList<Node>();
}
}
_urlPaths = new NameValueCollection(result.Count);
_startPages = new NameValueCollection(result.Count);
_authTypes = new NameValueCollection(result.Count);
_loginPages = new NameValueCollection(result.Count);
}
catch (Exception e) //logged
{
Logger.WriteException(e);
}
_sites = new Dictionary<string, Site>();
// urlsettings come from webconfig
var configSites = Configuration.UrlListSection.Current.Sites;
// urlsettings come either from sites in content repository or from webconfig
if (result != null)
{
//Loading sites and start pages should be done with and admin account.
//Authorization will occur when the user tries to load
//the start page of the selected site.
using (new SystemAccount())
{
foreach (Site site in result.Nodes)
{
var siteUrls = site.UrlList.Keys;
// siteurls come from webconfig
if (configSites.Count > 0 && configSites[site.Path] != null)
siteUrls = configSites[site.Path].Urls.GetUrlHosts();
foreach (string siteUrl in siteUrls)
{
try
{
_sites.Add(siteUrl, site);
}
catch (ArgumentException) //rethrow
{
throw new ArgumentException(String.Format("The url '{0}' has already been added to site '{1}' and cannot be added to site '{2}'", siteUrl, _sites[siteUrl].Name, site.Name));
}
}
string siteLoginPageUrl = (site.LoginPage != null ? site.LoginPage.Path : null);
foreach (string url in siteUrls)
{
_urlPaths.Add(url, site.Path);
_loginPages.Add(url, siteLoginPageUrl);
_startPages.Add(url, site.StartPage != null ? site.StartPage.Name : string.Empty);
// auth types come from webconfig or from site urllist
if (configSites.Count > 0 && configSites[site.Path] != null)
_authTypes.Add(url, configSites[site.Path].Urls[url].Auth);
else
_authTypes.Add(url, site.UrlList[url]);
}
}
}
}
}
}