Beispiel #1
0
        public JsonResult Save(Domain domain)
        {
            #region Демо режим
            if (Platform.IsDemo)
            {
                return(Json(new Text("Операция недоступна в демо-режиме")));
            }
            #endregion

            // Поиск шаблона
            var FindDomain = FindAndInclude(coreDB.RequestsFilter_Domains, domain.Id);
            if (FindDomain == null)
            {
                return(Json(new Text("Домен не найден")));
            }

            // Обновляем настройки журнала
            CommonModels.Update(FindDomain.limitRequest, domain.limitRequest);

            // Сохраняем базу
            coreDB.SaveChanges();

            // Удаляем кеш для домена
            ISPCache.RemoveDomain(domain.Id);

            //
            Trigger.OnChange((domain.Id, "LimitRequest"));

            // Отдаем сообщение
            return(Json(new Text("Настройки домена сохранены")));
        }
Beispiel #2
0
        public JsonResult Save(Domain domain, IDictionary <string, IgnoreToLog> IgnoreToLogs = null)
        {
            #region Демо режим
            if (Platform.IsDemo)
            {
                return(Json(new Text("Операция недоступна в демо-режиме")));
            }
            #endregion

            // Поиск шаблона
            var FindDomain = coreDB.RequestsFilter_Domains.Where(i => i.Id == domain.Id).Include(c => c.confToLog).FirstOrDefault();
            if (FindDomain == null)
            {
                return(Json(new Text("Домен не найден")));
            }

            // Обновляем настройки журнала
            CommonModels.Update(FindDomain.confToLog, domain.confToLog);

            // Удаляем запись с игнорированием логов
            coreDB.RequestsFilter_Domain_IgnoreToLogs.RemoveAll(i => i.DomainId == domain.Id);

            // Создаем данные для игнорирования логов
            coreDB.RequestsFilter_Domain_IgnoreToLogs.AddRange(domain.Id, IgnoreToLogs, out _);

            // Сохраняем базу
            coreDB.SaveChanges();

            // Удаляем кеш для домена
            ISPCache.RemoveDomain(domain.Id);

            // Отдаем сообщение
            return(Json(new Text("Настройки домена сохранены")));
        }
Beispiel #3
0
        public JsonResult RemoveToRuleOverride(int DomainId, int TemplateId, int Id)
        {
            #region Демо режим
            if (Platform.IsDemo)
            {
                return(Json(new Text("Операция недоступна в демо-режиме")));
            }
            #endregion

            // Удаляем кеш для домена
            ISPCache.RemoveDomain(DomainId);
            ISPCache.RemoveTemplate(TemplateId);

            // Удаляем правило из шаблона
            if (TemplateId != 0 && coreDB.RequestsFilter_Template_RuleOverrides.RemoveAttach(coreDB, Id))
            {
                Trigger.Template.OnChange((TemplateId, 0));
                return(Json(new TrueOrFalse(true)));
            }

            // Удаляем правило из домена
            if (DomainId != 0 && coreDB.RequestsFilter_Domain_RuleOverrides.RemoveAttach(coreDB, Id))
            {
                Trigger.Domain.OnChange((DomainId, "Rules"));
                return(Json(new TrueOrFalse(true)));
            }

            // Отдаем результат
            return(Json(new TrueOrFalse(false)));
        }
Beispiel #4
0
        public JsonResult Ignore(int DomainId, int Id)
        {
            // Удаляем данные
            if (coreDB.RequestsFilter_Domain_IgnoreToLogs.RemoveAttach(coreDB, Id))
            {
                // Удаляем кеш
                ISPCache.RemoveDomain(DomainId);

                // Отдаем результат
                return(Json(new TrueOrFalse(true)));
            }

            return(Json(new TrueOrFalse(false)));
        }
Beispiel #5
0
        public JsonResult IgnoreLogs(int DomainId, IDictionary <string, IgnoreToLog> IgnoreToLogs)
        {
            // Записываем новые данные
            coreDB.RequestsFilter_Domain_IgnoreToLogs.AddRange(DomainId, IgnoreToLogs, out var NewIgnore);

            // Сохраняем базу
            coreDB.SaveChanges();

            // Удаляем кеш для домена
            ISPCache.RemoveDomain(DomainId);

            // Отдаем сообщение и Id новых шаблонов
            return(Json(new UpdateToIds("accepted", DomainId, NewIgnore)));
        }
Beispiel #6
0
        public JsonResult TemplatesId(int DomainId, IDictionary <string, TemplateId> templates)
        {
            // Записываем новые шаблоны
            coreDB.RequestsFilter_Domain_TemplatesId.AddRange(DomainId, templates, out var NewTemplatesId);

            // Сохраняем базу
            coreDB.SaveChanges();

            // Удаляем кеш для домена
            ISPCache.RemoveDomain(DomainId);

            // Отдаем сообщение и Id новых шаблонов
            return(Json(new UpdateToIds("accepted", DomainId, NewTemplatesId)));
        }
Beispiel #7
0
        public JsonResult Template(int DomainId, int Id)
        {
            // Удаляем данные
            if (coreDB.RequestsFilter_Domain_TemplatesId.RemoveAttach(coreDB, Id))
            {
                // Удаляем кеш
                ISPCache.RemoveDomain(DomainId);

                //
                Trigger.OnChange((DomainId, "Base"));

                // Отдаем результат
                return(Json(new TrueOrFalse(true)));
            }

            return(Json(new TrueOrFalse(false)));
        }
Beispiel #8
0
        public JsonResult Edit <T>(int DomainId, T oldItem, T newItem) where T : class
        {
            if (newItem == null)
            {
                return(Json(new TrueOrFalse(false)));
            }

            // Обновляем настройки
            CommonModels.Update(oldItem, newItem, HttpContext);

            // Сохраняем базу
            coreDB.SaveChanges();

            // Удаляем кеш для домена
            ISPCache.RemoveDomain(DomainId);

            // Успех
            return(Json(new TrueOrFalse(true)));
        }
Beispiel #9
0
        public JsonResult RemoveToAlias(int DomainId, int Id)
        {
            #region Демо режим
            if (Platform.IsDemo)
            {
                return(Json(new Text("Операция недоступна в демо-режиме")));
            }
            #endregion

            // Удаляем правило из шаблона
            if (coreDB.RequestsFilter_Domain_Aliases.RemoveAttach(coreDB, Id))
            {
                // Удаляем кеш для домена
                ISPCache.RemoveDomain(DomainId);
                return(Json(new TrueOrFalse(true)));
            }

            // Отдаем результат
            return(Json(new TrueOrFalse(false)));
        }
Beispiel #10
0
        public JsonResult Aliases(int DomainId, IDictionary <string, Alias> aliases)
        {
            #region Проверка данных на правильность
            if (aliases != null)
            {
                foreach (var alias in aliases)
                {
                    if (string.IsNullOrWhiteSpace(alias.Value?.host))
                    {
                        continue;
                    }

                    if (!Regex.IsMatch(alias.Value.host, "^[a-z0-9-\\.]+$", RegexOptions.IgnoreCase))
                    {
                        return(Json(new Text($"Алиас {alias.Value.host} не должен содержать тип протокола или url")));
                    }
                }
            }
            #endregion

            // Поиск домена
            if (coreDB.RequestsFilter_Domains.Where(i => i.Id == DomainId).Include(i => i.Aliases).FirstOrDefault() is Domain domain)
            {
                // Записываем новые алиасы и перезаписываем старые
                domain.Aliases.UpdateOrAddRange(aliases, out var NewAliases);

                // Сохраняем базу
                coreDB.SaveChanges();

                // Удаляем кеш для домена
                ISPCache.RemoveDomain(DomainId);

                //
                Trigger.OnChange((DomainId, "Aliases"));

                // Отдаем сообщение и Id новых алиасов
                return(Json(new UpdateToIds("accepted", domain.Id, NewAliases)));
            }

            return(Json(new Text("Домен не найден")));
        }
Beispiel #11
0
        public JsonResult Remove(int Id)
        {
            #region Демо режим
            if (Platform.IsDemo)
            {
                return(Json(new Text("Операция недоступна в демо-режиме")));
            }
            #endregion

            // Удаляем домен
            if (coreDB.RequestsFilter_Domains.RemoveAttach(coreDB, Id))
            {
                // Удаляем кеш для домена
                ISPCache.RemoveDomain(Id);

                // Отдаем результат
                return(Json(new TrueOrFalse(true)));
            }

            return(Json(new Text("Ошибка ;(")));
        }
Beispiel #12
0
        public JsonResult Save(Domain domain, IDictionary <string, Rule> rules = null, IDictionary <string, RuleReplace> RuleReplaces = null, IDictionary <string, RuleOverride> RuleOverrides = null, IDictionary <string, RuleArg> RuleArgs = null, bool IsAPI = false)
        {
            #region Демо режим
            if (Platform.IsDemo)
            {
                return(Json(new Text("Операция недоступна в демо-режиме")));
            }
            #endregion

            // Поиск домена
            var FindDomain = FindAndInclude(coreDB.RequestsFilter_Domains, domain.Id);
            if (FindDomain == null)
            {
                return(Json(new Text("Домен не найден")));
            }

            // Записываем новые правила и перезаписываем старые
            FindDomain.Rules.UpdateOrAddRange(rules, out var NewRules);
            FindDomain.RuleReplaces.UpdateOrAddRange(RuleReplaces, out var NewRuleReplace);
            FindDomain.RuleOverrides.UpdateOrAddRange(RuleOverrides, out var NewRuleOverrides);
            FindDomain.RuleArgs.UpdateOrAddRange(RuleArgs, out var NewRuleArgs);

            // Сохраняем базу
            coreDB.SaveChanges();

            // Удаляем кеш для домена
            ISPCache.RemoveDomain(domain.Id);

            //
            Trigger.OnChange((domain.Id, "Rules"));

            // API
            if (IsAPI)
            {
                return(Json(new UpdateToIds("accepted", domain.Id, NewRules, NewRuleOverrides, NewRuleArgs, NewRuleReplace)));
            }

            // Отдаем сообщение и Id новых правил
            return(Json(new UpdateToIds("Настройки домена сохранены", 0, NewRules, NewRuleOverrides, NewRuleArgs, NewRuleReplace)));
        }
Beispiel #13
0
        public JsonResult Save(Domain domain, IDictionary <string, TemplateId> templates = null)
        {
            #region Демо режим
            if (Platform.IsDemo)
            {
                return(Json(new Text("Операция недоступна в демо-режиме")));
            }
            #endregion

            #region Проверка данных на правильность
            // Проверяем имя домена на null
            if (string.IsNullOrWhiteSpace(domain?.host))
            {
                return(Json(new Text("Имя домена не может быть пустым")));
            }

            // Форматируем host
            domain.host = Regex.Replace(domain.host.ToLower().Trim(), "^www\\.", "");

            // Проверяем нету ли в имени домена лишних символов
            if (!Regex.IsMatch(domain.host, "^[a-z0-9-\\.]+$", RegexOptions.IgnoreCase))
            {
                return(Json(new Text($"Домен {domain.host} не должен содержать тип протокола или url")));
            }
            #endregion

            // Пароль 2FA
            if (!string.IsNullOrWhiteSpace(domain.Auth2faToPasswd))
            {
                domain.Auth2faToPasswd = domain.Auth2faToPasswd.StartsWith("sha256:") ? domain.Auth2faToPasswd.Replace("sha256:", "") : SHA256.Text(domain.Auth2faToPasswd);
            }

            // Новый домен
            if (domain.Id == 0)
            {
                // Добовляем в базу
                coreDB.RequestsFilter_Domains.Add(domain);

                // Сохраняем базу
                coreDB.SaveChanges();

                // Создаем шаблоны
                coreDB.RequestsFilter_Domain_TemplatesId.AddRange(domain.Id, templates, out _);

                // Сохраняем базу
                coreDB.SaveChanges();

                // Удаляем кеш для домена
                ISPCache.RemoveDomain(domain.Id);

                // Отдаем ответ
                return(Json(new RewriteToId(domain.Id)));
            }

            // Существующий
            else
            {
                // Поиск домена
                var FindDomain = coreDB.RequestsFilter_Domains.Where(i => i.Id == domain.Id).Include(i => i.Aliases).FirstOrDefault();
                if (FindDomain == null)
                {
                    return(Json(new Text("Домен не найден")));
                }

                // Обновляем параметры домена
                CommonModels.Update(FindDomain, domain);

                // Удаляем текущие шаблоны
                coreDB.RequestsFilter_Domain_TemplatesId.RemoveAll(i => i.DomainId == domain.Id);

                // Записываем новые шаблоны
                coreDB.RequestsFilter_Domain_TemplatesId.AddRange(domain.Id, templates, out _);

                // Сохраняем базу
                coreDB.SaveChanges();

                // Удаляем кеш для домена
                ISPCache.RemoveDomain(domain.Id);

                // Отдаем сообщение и Id новых алиасов
                return(Json(new Text("Настройки домена сохранены")));
            }
        }