Пример #1
0
        /// <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);
        }
Пример #2
0
        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();
            }
        }