Ejemplo n.º 1
0
        private string LoadEmailClientParameters(Vendor.IVendorEmailClient client, Query.Models.EmailClient savedClient = null)
        {
            var html = new StringBuilder("<div class=\"row\">");

            foreach (var param in client.Parameters)
            {
                html.Append("<div class=\"col six\">");
                var value       = (savedClient != null && savedClient.config.ContainsKey(param.Key) ? savedClient.config[param.Key] : param.Value.DefaultValue).Replace("\"", "&quot;");
                var idattr      = " id=\"" + client.Key + "_" + param.Key + "\"";
                var placeholder = !string.IsNullOrEmpty(param.Value.Placeholder) ? " placeholder=\"" + param.Value.Placeholder + "\"" : "";
                switch (param.Value.DataType)
                {
                case Vendor.EmailClientDataType.Boolean:
                    break;

                default:
                    html.Append("<div class=\"row field\">" + param.Value.Name + "</div>");
                    break;
                }
                switch (param.Value.DataType)
                {
                case Vendor.EmailClientDataType.Text:
                    html.Append("<div class=\"row input\"><input type=\"text\"" + idattr + " value=\"" + value + "\"" + placeholder + "/></div>");
                    break;

                case Vendor.EmailClientDataType.UserOrEmail:
                    html.Append("<div class=\"row input\"><input type=\"text\"" + idattr + " value=\"" + value + "\"" + placeholder + " autocomplete=\"new-email\"/></div>");
                    break;

                case Vendor.EmailClientDataType.Password:
                    html.Append("<div class=\"row input\"><input type=\"password\"" + idattr + " value=\"" + (value != "" ? "********" : "") + "\" autocomplete=\"new-password\"/></div>");
                    break;

                case Vendor.EmailClientDataType.Number:
                    html.Append("<div class=\"row input\"><input type=\"number\"" + idattr + " value=\"" + value + "\"" + placeholder + "/></div>");
                    break;

                case Vendor.EmailClientDataType.List:
                    html.Append("<div class=\"row input\"><select" + idattr + ">" +
                                string.Join("", param.Value.ListOptions?.Select(a => "<option value=\"" + a +
                                                                                (param.Value.DefaultValue == a ? " selected" : "") +
                                                                                "\">" + a + "</option>") ?? new string[] { "" }) + "</select></div>");
                    break;

                case Vendor.EmailClientDataType.Boolean:
                    html.Append("<div class=\"row input\"><input type=\"checkbox\"" + idattr + (value == "1" || value.ToLower() == "true" ? " checked=\"checked\"" : "") + " />" +
                                "<label for=\"" + client.Key + "_" + param.Key + "\">" + param.Value.Name + "</label>" +
                                "</div>");
                    break;
                }
                html.Append("</div>");
            }
            return(html.ToString() + "</div>");
        }
Ejemplo n.º 2
0
        private void ValidateEmailClientParameters(Dictionary <string, string> parameters, Vendor.IVendorEmailClient client, Query.Models.EmailClient emailClient = null)
        {
            var changes = new List <KeyValuePair <string, string> >();

            foreach (var item in parameters)
            {
                if (!client.Parameters.ContainsKey(item.Key))
                {
                    throw new Exception("Could not find parameter " + item.Key);
                }
                var param = client.Parameters[item.Key];
                if (param.Required == true && string.IsNullOrEmpty(item.Value) && param.DataType != Vendor.EmailClientDataType.Password)
                {
                    throw new Exception(param.Name + " is required");
                }
                if (param.DataType == Vendor.EmailClientDataType.Password)
                {
                    //find password placeholder
                    if (item.Value.Replace("*", "") == "")
                    {
                        if (emailClient != null && emailClient.config.ContainsKey(item.Key))
                        {
                            //no password change
                            changes.Add(new KeyValuePair <string, string>(item.Key, emailClient.config[item.Key]));
                        }
                        else
                        {
                            //no password
                            changes.Add(new KeyValuePair <string, string>(item.Key, ""));
                        }
                    }
                }

                //check boolean parameters for valid values
                if (param.DataType == Vendor.EmailClientDataType.Boolean)
                {
                    if (item.Value != "True" && item.Value != "False")
                    {
                        throw new Exception(param.Name + " is not valid");
                    }
                }

                //make chamges to parameters list
                foreach (var change in changes)
                {
                    parameters[change.Key] = change.Value;
                }
            }
        }
Ejemplo n.º 3
0
        public string RenderEmailClientForm(string key = "", string id = "")
        {
            if (!User.IsAppOwner())
            {
                return(AccessDenied());
            }

            //generate email client form
            var view          = new View("/Views/Email/client-form.html");
            var emailClients  = Common.Email.VendorClients;
            var clientoptions = new StringBuilder();

            //check for vendor email clients
            if (emailClients.Count == 0)
            {
                return(Error("No email clients exist"));
            }

            //load email client form fields
            Query.Models.EmailClient config = null;
            if (!string.IsNullOrEmpty(id))
            {
                config = Query.EmailClients.GetConfig(id);
                if (config == null)
                {
                    return(Error("Could not find configuration for email client ID " + id));
                }
                var client = Common.Email.VendorClients.Where(a => a.Key == config.key).FirstOrDefault();
                if (client == null)
                {
                    return(Error("Could not find vendor for email client key \"" + key + "\""));
                }
                view["clientId"]     = config.clientId.ToString();
                view["key"]          = client.Key;
                view["client-label"] = client.Name;
                view["label"]        = config.label;
                view["parameters"]   = LoadEmailClientParameters(client, config);
                view.Show("edit");
            }
            else if (!string.IsNullOrEmpty(key))
            {
                view["parameters"] = LoadEmailClientParameters(emailClients.Where(a => a.Key == key).FirstOrDefault());
                view.Show("is-new");
            }
            else
            {
                view["parameters"] = LoadEmailClientParameters(emailClients.FirstOrDefault());
                view.Show("is-new");
            }

            //add list of available email clients
            if (string.IsNullOrEmpty(id))
            {
                foreach (var item in emailClients)
                {
                    clientoptions.Append("<option value=\"" + item.Key + "\"" +
                                         (
                                             string.IsNullOrEmpty(key) ?
                                             (item == emailClients[0] ? " selected" : "") :
                                             (item.Key == key ? " selected" : "")
                                         ) +
                                         ">" + item.Name + "</option>");
                }
                view["client-options"] = clientoptions.ToString();
            }

            return(view.Render());
        }