/// <summary> /// Generates the postman collection. /// </summary> /// <param name="redirects">The redirects.</param> /// <param name="redirectType"></param> /// <returns>System.String.</returns> private string GeneratePostmanCollection(Redirect[] redirects, RedirectType redirectType) { var jsonItemList = new List <PostmanCollectionItemJsonData>(); var index = 0; var selectedSkipValue = CreateForEveryComboBox.SelectedIndex; foreach (var redirect in redirects) { if (selectedSkipValue == 10 || selectedSkipValue == index) { var oldUrl = redirect.OldUrl.Replace("\\", "/").Replace("\"", ""); var newUrl = redirect.NewUrl.Replace("\\", "/").Replace("\"", ""); var domainInfo = Helpers.GetDomainInfo(oldUrl); var hostSegments = domainInfo.Domain.Split('.'); var urlSegments = domainInfo.Path.Split('/'); newUrl = string.IsNullOrEmpty(newUrl) ? "/" : newUrl; if (!newUrl.StartsWith("http://") && !newUrl.StartsWith("https://")) { var targetSiteUrl = $"https://{domainInfo.Domain}"; newUrl = targetSiteUrl + newUrl; } jsonItemList.Add(new PostmanCollectionItemJsonData { Name = oldUrl, Guid = Guid.NewGuid().ToString("D"), StatusCode = redirectType.StatusCode, FullToUrl = newUrl, FullFromUrl = oldUrl, Protocol = domainInfo.HttpMode, Hosts = hostSegments, Paths = urlSegments }); } if (index == 9) { index = 0; } else { index++; } } var data = new PostmanCollectionJsonData { Name = CollectionNameTextBox.Text.Trim(), Guid = Guid.NewGuid().ToString("D"), Items = jsonItemList }; return(PostmanGenerator.GetCollectionJson(data)); }
/// <summary> /// Generates the rewrite rule. /// </summary> /// <param name="redirects">The redirects.</param> /// <param name="redirectType"></param> /// <returns>System.String.</returns> private string GenerateRewriteRule(Redirect[] redirects, RedirectType redirectType) { var sb = new StringBuilder(); sb.AppendLine("<rules>"); var index = int.TryParse(RuleNameStartIndexTextBox.Text, out var parsedInt) ? parsedInt : 1; var ruleNamePrefix = string.IsNullOrWhiteSpace(RuleNamePrefixTextBox.Text) ? "Rule" : RuleNamePrefixTextBox.Text; foreach (var redirect in redirects) { var domainInfo = Helpers.GetDomainInfo(redirect.OldUrl); var oldUrl = redirect.OldUrl.Trim(',', '"').Replace("\\", "/").Replace("\"", "").Replace("&", "&").Replace("–", "-").Replace(" ", "%20").Trim(); var newUrl = redirect.NewUrl.Trim(',', '"').Replace("\\", "/").Replace("\"", "").Replace("&", "&").Replace("–", "-").Replace(" ", "%20").Trim(); var domainInfoPath = domainInfo.Path.Trim(',', '"').Replace("&", "&").Replace("–", "-").Replace(" ", "%20").Trim(); if (string.IsNullOrEmpty(oldUrl) || string.IsNullOrEmpty(domainInfoPath)) { continue; } //newUrl = newUrl.TrimEnd('/'); newUrl = string.IsNullOrEmpty(newUrl) ? "/" : newUrl; if (!newUrl.StartsWith("http://") && !newUrl.StartsWith("https://")) { var targetSiteUrl = "https://{HTTP_HOST}"; newUrl = targetSiteUrl + newUrl; } var oldUrlParts = domainInfoPath.Split('?'); sb.AppendLine("<rule name=\"" + ruleNamePrefix + index + "\" stopProcessing=\"true\">"); sb.Append("<match url=\"^"); var matchUrl = oldUrlParts[0]; matchUrl = Regex.Escape(matchUrl).Replace("]", "\\]").Replace("%20", " "); if (!matchUrl.Contains('.') && !matchUrl.Contains('?')) { matchUrl = matchUrl.TrimEnd('/'); matchUrl = $"{matchUrl}(/)?"; } sb.AppendLine(matchUrl + "$\" />"); if (oldUrlParts.Length > 1 || MatchDomainCheckBox.Checked) { sb.AppendLine("<conditions>"); if (MatchDomainCheckBox.Checked) { var domainPattern = domainInfo.Domain.StartsWith("www.") ? $"^{domainInfo.Domain}$" : $"^(www.)?{domainInfo.Domain}$"; sb.AppendLine("<add input=\"{HTTP_HOST}\" pattern=\"" + domainPattern + "\" />"); } if (oldUrlParts.Length > 1) { sb.AppendLine("<add input=\"{QUERY_STRING}\" pattern=\"^" + Regex.Escape(oldUrlParts[1]).Replace("]", "\\]") + "$\" />"); } else { sb.AppendLine("<add input=\"{QUERY_STRING}\" pattern=\"^$\" />"); } sb.AppendLine("</conditions>"); } sb.AppendLine("<action type=\"Redirect\" url=\"" + newUrl + "\" appendQueryString=\"false\" redirectType=\"" + redirectType.StatusCode + "\"/>"); sb.AppendLine("</rule>"); index++; } sb.AppendLine("</rules>"); return(sb.ToString()); }