/// <summary> /// /// </summary> /// <returns></returns> public TemplatePluginData OnGetTemplateData(BindingList <RequestRedirectRecord> requestRedirectRecords) { var templateData = new TemplatePluginData(); var genericObjectList = new List <RequestRedirectRecord>(); // Create new record list foreach (RequestRedirectRecord tmpRecord in requestRedirectRecords) { var tmpRecord2 = new RequestRedirectRecord() { RedirectType = tmpRecord.RedirectType, RedirectDescription = tmpRecord.RedirectDescription, RequestedHostRegex = tmpRecord.RequestedHostRegex, RequestedPathRegex = tmpRecord.RequestedPathRegex, ReplacementResource = tmpRecord.ReplacementResource }; genericObjectList.Add(tmpRecord2); } // Serialize the list var stream = new MemoryStream(); var formatter = new BinaryFormatter(); formatter.Serialize(stream, genericObjectList); stream.Seek(0, SeekOrigin.Begin); // Assign plugin data to "Plugin Template DTO" templateData.PluginConfigurationItems = stream.ToArray(); return(templateData); }
private void AddRecord(string redirectType, string redirectDescription, string requestedResource, string replacementResource) { if (this.InvokeRequired) { this.BeginInvoke(new AddRecordDelegate(this.AddRecord), new object[] { redirectType, redirectDescription, requestedResource, replacementResource }); return; } RequestURL requestUrl = this.ParseRequestedURLRegex(requestedResource); // Verify whether record already exists foreach (RequestRedirectRecord tmpRecord in this.requestRedirectRecords) { if (tmpRecord.RequestedHostRegex == requestUrl.HostRegex && tmpRecord.RequestedPathRegex == requestUrl.PathRegex) { throw new Exception("A record with this host name already exists."); } } // Verify whether regex contain invalid characters if (Regex.Match(requestUrl.HostRegex, @"[^\d\w\-\._\*]+").Success == true) { throw new Exception($"The request host regex contains invalid characters: {requestUrl.HostRegex}"); } if (Regex.Match(requestUrl.PathRegex, @"[^\d\w\-\,\._\/\+\&\*]+").Success == true) { throw new Exception($"The request path regex contains invalid characters: {requestUrl.PathRegex}"); } // Verify if replacement URL resource is valid Uri replacementUri; bool isValidReplUri = Uri.TryCreate(replacementResource, UriKind.Absolute, out replacementUri); if (!isValidReplUri) { throw new Exception("The replacement resource URL is invalid"); } if (replacementUri.Scheme != Uri.UriSchemeHttp && replacementUri.Scheme != Uri.UriSchemeHttps) { throw new Exception("The replacement URL scheme is invalid."); } if (string.IsNullOrEmpty(replacementUri.Host) || string.IsNullOrWhiteSpace((replacementUri.Host))) { throw new Exception("The replacement URL host is invalid."); } if (string.IsNullOrEmpty(replacementUri.PathAndQuery) || string.IsNullOrWhiteSpace((replacementUri.PathAndQuery))) { throw new Exception("The replacement URL path is invalid."); } lock (this) { RequestRedirectRecord newRecord = new RequestRedirectRecord(redirectType, redirectDescription, requestUrl.HostRegex, requestUrl.PathRegex, replacementResource); this.dgv_RequestRedirectURLs.SuspendLayout(); this.requestRedirectRecords.Insert(0, newRecord); this.dgv_RequestRedirectURLs.ResumeLayout(); } }