/// <summary> /// Parses specified host and returns the organization and instance. /// </summary> /// <param name="host">Host component of the URL.</param> /// <param name="organization">An organization.</param> /// <param name="instance">An instance.</param> public static void ParseHost(string host, ref Organization organization, ref Instance instance) { Guid[] values = GetCustomUrlFromCache(host); if (values != null) { organization = OrganizationProvider.GetOrganizationFromCache(values[0], true); if (values.Length > 1) { instance = InstanceProvider.GetInstanceFromCache(values[1], values[0], true); } return; } MasterDataSet.CustomUrlRow row = GetCustomUrl(host); if (row != null) { organization = OrganizationProvider.GetOrganizationFromCache(row.OrganizationId, true); if (instance == null) { if (!row.IsInstanceIdNull()) { instance = InstanceProvider.GetInstanceFromCache(row.InstanceId, row.OrganizationId, true); } } } else { string[] segments = host.ToLowerInvariant().Split('.'); if (segments.Length < 2) { return; } string segment = segments[0]; if (string.Compare(segment, FrameworkConfiguration.Current.WebApplication.CustomUrl.AuthenticationTicketDomain, StringComparison.OrdinalIgnoreCase) == 0) { return; } MasterDataSet.CustomUrlRow customUrlRow = null; string instPseudoId = null; string[] pseudos = segment.Split('-'); if (pseudos.Length > 1) { organization = OrganizationProvider.GetOrganizationByPseudoIdFromCache(pseudos[0]); instPseudoId = pseudos[1]; if (organization == null) { customUrlRow = GetCustomUrl(pseudos[0]); if (customUrlRow != null) { organization = OrganizationProvider.GetOrganizationFromCache(customUrlRow.OrganizationId, true); } } } else { organization = OrganizationProvider.GetOrganizationByPseudoIdFromCache(segment); } if (organization == null) { customUrlRow = GetCustomUrl(segment); if (customUrlRow != null) { organization = OrganizationProvider.GetOrganizationFromCache(customUrlRow.OrganizationId, true); if (instance == null) { if (!customUrlRow.IsInstanceIdNull()) { instance = InstanceProvider.GetInstanceFromCache(customUrlRow.InstanceId, customUrlRow.OrganizationId, true); } } } } if (organization != null) { if (instance == null) { if (!string.IsNullOrEmpty(instPseudoId)) { instance = InstanceProvider.GetInstanceByPseudoIdFromCache(instPseudoId, organization.OrganizationId); } } } } if (organization != null) { if (instance == null) { values = new Guid[] { organization.OrganizationId } } ; else { values = new Guid[] { organization.OrganizationId, instance.InstanceId } }; PutCustomUrlToCache(host, values); } }
/// <summary> /// Gets Custom url by organizationId and instanceId. If need only by organization use instanceId == Guid.Empty /// </summary> /// <param name="organizationId">Organization Id</param> /// <param name="instanceId">Instance Id</param> /// <returns>Custom Url</returns> public static string GetVanityUrl(Guid organizationId, Guid instanceId) { string customUrl = null; if (instanceId != Guid.Empty) { customUrl = GetInstanceCustomUrlFromCache(instanceId); } if (string.IsNullOrEmpty(customUrl)) { customUrl = GetOrganizationCustomUrlFromCache(organizationId); } if (!string.IsNullOrEmpty(customUrl)) { return(customUrl); } Organization org = OrganizationProvider.GetOrganizationFromCache(organizationId, true); if (org != null) { Instance inst = null; MasterDataSet.CustomUrlRow row = null; if (instanceId != Guid.Empty) { row = GetCustomUrl(organizationId, instanceId); inst = InstanceProvider.GetInstanceFromCache(instanceId, organizationId, true); } if (row == null) { row = GetCustomUrlByOrganizationId(organizationId); } CustomUrlElement customUrlSettings = FrameworkConfiguration.Current.WebApplication.CustomUrl; if (row != null) { if (row.IsInstanceIdNull() && (inst != null)) { customUrl = row.PartialCustomUrl + "-" + inst.PseudoId + "." + customUrlSettings.PartialCustomUrlRootAddressesFirst; PutInstanceCustomUrlToCache(instanceId, customUrl); } else { if (customUrlSettings.PartialCustomUrlIsPrimary) { customUrl = row.PartialCustomUrl + "." + customUrlSettings.PartialCustomUrlRootAddressesFirst; } else { customUrl = (!string.IsNullOrEmpty(row.FullCustomUrl)) ? row.FullCustomUrl : row.PartialCustomUrl + "." + customUrlSettings.PartialCustomUrlRootAddressesFirst; } if (row.IsInstanceIdNull()) { PutOrganizationCustomUrlToCache(organizationId, customUrl); } else { PutInstanceCustomUrlToCache(row.InstanceId, customUrl); } } } else { if (inst != null) { customUrl = org.PseudoId + "-" + inst.PseudoId + "." + customUrlSettings.PartialCustomUrlRootAddressesFirst; } else { customUrl = org.PseudoId + "." + customUrlSettings.PartialCustomUrlRootAddressesFirst; } } } return(string.IsNullOrEmpty(customUrl) ? string.Empty : customUrl); }