Пример #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("Настройки домена сохранены")));
        }
Пример #2
0
        public JsonResult Save(Domain domain, AntiVirus av)
        {
            #region Демо режим
            if (Platform.IsDemo)
            {
                return(Json(new Text("Операция недоступна в демо-режиме")));
            }
            #endregion

            if (string.IsNullOrWhiteSpace(av.path))
            {
                return(Json(new Text("Укажите каталог для сканирования")));
            }

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

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

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

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

            // Отдаем сообщение
            return(Json(new Text("Настройки домена сохранены")));
        }
Пример #3
0
        public JsonResult Save(AntiBot antiBot, LimitRequest limit, bool IsAPI = false)
        {
            #region Демо режим
            if (Platform.IsDemo)
            {
                return(Json(new Text("Операция недоступна в демо-режиме")));
            }
            #endregion

            // Лимит запросов
            jsonDB.AntiBot.limitRequest = limit;

            // Обновляем параметры AntiBot
            CommonModels.Update(jsonDB.AntiBot, antiBot);

            // Сохраняем базу
            jsonDB.AntiBot.LastUpdateToConf = DateTime.Now;
            jsonDB.Save();

            //
            Trigger.OnChange((0, 0));

            // Ответ
            if (IsAPI)
            {
                return(Json(new TrueOrFalse(true)));
            }
            return(Json(new Text("Настройки успешно сохранены")));
        }
Пример #4
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("Настройки домена сохранены")));
        }
Пример #5
0
        public JsonResult Edit <T>(T oldItem, T newItem) where T : class
        {
            if (newItem == null)
            {
                return(Json(new TrueOrFalse(false)));
            }

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

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

            // Успех
            return(Json(new TrueOrFalse(true)));
        }
Пример #6
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)));
        }
Пример #7
0
 public JsonResult SMS(SmsBot sms)
 {
     CommonModels.Update(sms, jsonDB.ServiceBot.SMS, HttpContext, updateType: UpdateType.skip);
     return(new SettingsToServiceController().Save(jsonDB.ServiceBot.Telegram, jsonDB.ServiceBot.Email, sms, IsAPI: true));
 }
Пример #8
0
 public JsonResult Email(EmailBot email)
 {
     CommonModels.Update(email, jsonDB.ServiceBot.Email, HttpContext, updateType: UpdateType.skip);
     return(new SettingsToServiceController().Save(jsonDB.ServiceBot.Telegram, email, jsonDB.ServiceBot.SMS, IsAPI: true));
 }
Пример #9
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("Настройки домена сохранены")));
            }
        }
Пример #10
0
 public JsonResult AntiVirus(AntiVirus av)
 {
     CommonModels.Update(av, jsonDB.AntiVirus, HttpContext, updateType: UpdateType.skip);
     return(new SecurityToAntiVirusController().Save(av, IsAPI: true));
 }
Пример #11
0
 public JsonResult AntiDdos(AntiDdos antiDdos)
 {
     CommonModels.Update(antiDdos, jsonDB.AntiDdos, HttpContext, updateType: UpdateType.skip);
     return(new SecurityToAntiDdosController().Save(antiDdos, null, UpdateIgnoreToIP: false, IsAPI: true));
 }
Пример #12
0
 public JsonResult BruteForce(BruteForceConf conf)
 {
     CommonModels.Update(conf, jsonDB.BruteForceConf, HttpContext, updateType: UpdateType.skip);
     return(new SettingsToBaseController().Save(jsonDB.Base, jsonDB.API, jsonDB.Security, jsonDB.Cache, conf, null, IsAPI: true));
 }
Пример #13
0
        public JsonResult Save(Task task, FTP ftp, Models.SyncBackup.Tasks.WebDav webDav, OneDrive oneDrive, IDictionary <string, IgnoreFileOrFolders> ignr = null)
        {
            #region Демо режим
            if (Platform.IsDemo)
            {
                return(Json(new Text("Операция недоступна в демо-режиме")));
            }
            #endregion

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

            if (string.IsNullOrWhiteSpace(task.Whence))
            {
                return(Json(new Text("Локальный каталог не может быть пустым")));
            }

            if (string.IsNullOrWhiteSpace(task.Where))
            {
                return(Json(new Text("Удаленный каталог не может быть пустым")));
            }

            switch (task.TypeSunc)
            {
            case TypeSunc.SFTP:
            case TypeSunc.FTP:
            {
                if (string.IsNullOrWhiteSpace(ftp.HostOrIP) || string.IsNullOrWhiteSpace(ftp.Login) || (task.Id == 0 && string.IsNullOrWhiteSpace(ftp.Passwd)))
                {
                    return(Json(new Text("Настройки 'FTP/SFTP' имеют недопустимое значение")));
                }
                break;
            }

            case TypeSunc.WebDav:
            {
                if (string.IsNullOrWhiteSpace(webDav.url) || string.IsNullOrWhiteSpace(webDav.Login) || (task.Id == 0 && string.IsNullOrWhiteSpace(webDav.Passwd)))
                {
                    return(Json(new Text("Настройки 'WebDav' имеют недопустимое значение")));
                }
                break;
            }

            case TypeSunc.OneDrive:
            {
                if (string.IsNullOrWhiteSpace(oneDrive.ApplicationId) || (task.Id == 0 && string.IsNullOrWhiteSpace(oneDrive.RefreshToken)))
                {
                    return(Json(new Text("Настройки 'OneDrive' имеют недопустимое значение")));
                }
                break;
            }
            }
            #endregion

            // Уленный сервер
            task.FTP      = ftp;
            task.WebDav   = webDav;
            task.OneDrive = oneDrive;

            // Новое задание
            if (task.Id == 0)
            {
                // Проверка данных AES256
                if (task.EncryptionAES && string.IsNullOrWhiteSpace(task.PasswdAES))
                {
                    return(Json(new Text("Пароль для шифрования файлов не может быть пустым")));
                }

                // Добовляем в базу
                coreDB.SyncBackup_Tasks.Add(task);

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

                // Список игнорируемых файлов и папок
                coreDB.SyncBackup_Task_IgnoreFileOrFolders.AddRange(task.Id, ignr, out _);

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

                //
                Trigger.OnCreate((task.Id, -1));

                // Отдаем Id записи в базе
                return(Json(new RewriteToId(task.Id)));
            }

            // Старое задание
            else
            {
                // Поиск задания
                if (coreDB.SyncBackup_Tasks.FindAndInclude(task.Id) is var FindTask && FindTask == null)
                {
                    return(Json(new Text("Задание не найдено")));
                }

                #region Используем старый пароль для шифрования файлов
                if (task.EncryptionAES)
                {
                    if (string.IsNullOrWhiteSpace(task.PasswdAES))
                    {
                        if (!string.IsNullOrWhiteSpace(FindTask.PasswdAES))
                        {
                            task.PasswdAES = FindTask.PasswdAES;
                        }
                        else
                        {
                            return(Json(new Text("Пароль для шифрования файлов не может быть пустым")));
                        }
                    }
                }
                #endregion

                #region Используем старый пароль для 'SFTP/FTP/WebDav/OneDrive'
                switch (task.TypeSunc)
                {
                case TypeSunc.SFTP:
                case TypeSunc.FTP:
                {
                    if (string.IsNullOrWhiteSpace(task.FTP.Passwd))
                    {
                        if (!string.IsNullOrWhiteSpace(FindTask.FTP.Passwd))
                        {
                            task.FTP.Passwd = FindTask.FTP.Passwd;
                        }
                        else
                        {
                            return(Json(new Text("Пароль для 'FTP/SFTP' не может быть пустым")));
                        }
                    }
                    break;
                }

                case TypeSunc.WebDav:
                {
                    if (string.IsNullOrWhiteSpace(task.WebDav.Passwd))
                    {
                        if (!string.IsNullOrWhiteSpace(FindTask.WebDav.Passwd))
                        {
                            task.WebDav.Passwd = FindTask.WebDav.Passwd;
                        }
                        else
                        {
                            return(Json(new Text("Пароль для 'WebDav' не может быть пустым")));
                        }
                    }
                    break;
                }

                case TypeSunc.OneDrive:
                {
                    if (string.IsNullOrWhiteSpace(task.OneDrive.RefreshToken))
                    {
                        if (!string.IsNullOrWhiteSpace(FindTask.OneDrive.RefreshToken))
                        {
                            task.OneDrive.RefreshToken = FindTask.OneDrive.RefreshToken;
                        }
                        else
                        {
                            return(Json(new Text("Пароль для 'OneDrive' не может быть пустым")));
                        }
                    }
                    break;
                }
                }
                #endregion

                // Обновляем параметры задания
                CommonModels.Update(FindTask, task);

                // Удаляем список игнорируемых файлов
                coreDB.SyncBackup_Task_IgnoreFileOrFolders.RemoveAll(i => i.TaskId == task.Id);

                // Добовляем список игнорируемых файлов
                coreDB.SyncBackup_Task_IgnoreFileOrFolders.AddRange(task.Id, ignr, out _);

                // Обновляем кеш
                FindTask.CacheExpires = DateTime.Now.AddDays(12);

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

                //
                Trigger.OnChange((task.Id, -1));

                // Отдаем результат
                return(Json(new Text("Задание сохранено")));
            }
        }
Пример #14
0
 /// <summary>
 /// Обновить поля
 /// </summary>
 /// <param name="item">Новые данные</param>
 void IUpdate.Update(dynamic item) => CommonModels.Update(this, item);
Пример #15
0
 public JsonResult TelegramBot(Telega tlg)
 {
     CommonModels.Update(tlg, jsonDB.TelegramBot, HttpContext, updateType: UpdateType.skip);
     return(new SettingsController().Save(jsonDB.Base, jsonDB.API, jsonDB.Security, tlg, jsonDB.BruteForceConf, null, IsAPI: true));
 }
Пример #16
0
        /// <summary>
        /// Обновить записи
        /// </summary>
        /// <typeparam name="T">Тип данных</typeparam>
        /// <param name="collection">Исходные данные</param>
        /// <param name="data">Новые данные</param>
        /// <param name="NewIds">Id новых записей в SQL</param>
        public static void UpdateOrAddRange <T>(this IList <T> collection, IDictionary <string, T> data, out IDictionary <string, IId> NewIds) where T : class, IId
        {
            NewIds = new Dictionary <string, IId>();
            if (data == null)
            {
                return;
            }

            foreach (var item in data)
            {
                #region Проверяем данные
                switch ((dynamic)item.Value)
                {
                    #region WhiteList
                case WhiteListModel whiteList:
                {
                    if (string.IsNullOrWhiteSpace(whiteList?.Value))
                    {
                        continue;
                    }

                    // Убириаем лишнее с правила
                    whiteList.Value = Regex.Replace(whiteList.Value, "(^\\^|\\$$)", "");
                    break;
                }
                    #endregion

                    #region IRule
                case IRule rule:
                {
                    if (string.IsNullOrWhiteSpace(rule?.rule))
                    {
                        continue;
                    }
                    break;
                }
                    #endregion

                    #region RuleReplace
                case RuleReplace ruleReplace:
                {
                    // URL для замены ответа
                    if (string.IsNullOrWhiteSpace(ruleReplace?.uri))
                    {
                        continue;
                    }

                    // Если не указано какие аргументы заменять
                    if (string.IsNullOrWhiteSpace(ruleReplace?.RegexWhite) || (string.IsNullOrWhiteSpace(ruleReplace?.GetArgs) && string.IsNullOrWhiteSpace(ruleReplace?.PostArgs)))
                    {
                        // Если не указан url куда  отправить пользователя или код ответа
                        if ((ruleReplace.TypeResponse == TypeResponseRule._302 && string.IsNullOrWhiteSpace(ruleReplace?.ResponceUri)) ||
                            (ruleReplace.TypeResponse == TypeResponseRule.kode && string.IsNullOrWhiteSpace(ruleReplace?.kode)))
                        {
                            continue;
                        }
                    }

                    break;
                }
                    #endregion

                    #region Domain - Alias
                case Alias alias:
                {
                    if (string.IsNullOrWhiteSpace(alias?.host) || item.Key == "domain")
                    {
                        continue;
                    }

                    // Обновляем имя домена
                    alias.host = Regex.Replace(alias.host.ToLower(), "^www\\.", "");
                    break;
                }
                    #endregion

                default:
                    continue;
                }
                #endregion

                #region Записываем новые данные и перезаписываем старые
                if (item.Value.Id > 0)
                {
                    // Обновляем старые значения
                    if (collection.FirstOrDefault(i => i.Id == item.Value.Id) is T value)
                    {
                        CommonModels.Update(value, item.Value);
                    }
                }
                else
                {
                    // Добовлям новые значения
                    collection.Add(item.Value);
                    NewIds.Add(item.Key, item.Value);
                }
                #endregion
            }
        }
Пример #17
0
 public JsonResult Limit(LimitRequest limit)
 {
     CommonModels.Update(limit, jsonDB.AntiBot.limitRequest, HttpContext, updateType: UpdateType.skip);
     return(new SecurityToAntiBotController().Save(jsonDB.AntiBot, limit, IsAPI: true));
 }
Пример #18
0
        public JsonResult Save(Task task, DumpConf dumpConf, ConnectionConf connectionConf)
        {
            #region Демо режим
            if (Platform.IsDemo)
            {
                return(Json(new Text("Операция недоступна в демо-режиме")));
            }
            #endregion

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

            if (string.IsNullOrWhiteSpace(dumpConf.Whence))
            {
                return(Json(new Text("Локальный каталог не может быть пустым")));
            }

            switch (task.TypeDb)
            {
            case TypeDb.MySQL:
            case TypeDb.PostgreSQL:
            {
                if (string.IsNullOrWhiteSpace(connectionConf.Host) || string.IsNullOrWhiteSpace(connectionConf.User) || (task.Id == 0 && string.IsNullOrWhiteSpace(connectionConf.Password)))
                {
                    return(Json(new Text($"Настройки '{task.TypeDb.ToString()}' имеют недопустимое значение")));
                }
                break;
            }
            }
            #endregion

            // Настройки
            task.DumpConf       = dumpConf;
            task.ConnectionConf = connectionConf;

            // Новое задание
            if (task.Id == 0)
            {
                // Добовляем в базу
                coreDB.SyncBackup_db_Tasks.Add(task);

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

                //
                Trigger.OnCreate((task.Id, -1));

                // Отдаем Id записи в базе
                return(Json(new RewriteToId(task.Id)));
            }

            // Старое задание
            else
            {
                // Поиск задания
                if (coreDB.SyncBackup_db_Tasks.FindAndInclude(task.Id) is var FindTask && FindTask == null)
                {
                    return(Json(new Text("Задание не найдено")));
                }

                #region Используем старый пароль для 'MySQL/PostgreSQL'
                switch (task.TypeDb)
                {
                case TypeDb.MySQL:
                case TypeDb.PostgreSQL:
                {
                    if (string.IsNullOrWhiteSpace(task.ConnectionConf.Password))
                    {
                        if (!string.IsNullOrWhiteSpace(FindTask.ConnectionConf.Password))
                        {
                            task.ConnectionConf.Password = FindTask.ConnectionConf.Password;
                        }
                        else
                        {
                            return(Json(new Text("Пароль для 'MySQL' не может быть пустым")));
                        }
                    }
                    break;
                }
                }
                #endregion

                // Обновляем параметры задания
                CommonModels.Update(FindTask, task);

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

                //
                Trigger.OnChange((task.Id, -1));

                // Отдаем результат
                return(Json(new Text("Задание сохранено")));
            }
        }
Пример #19
0
        public JsonResult Save(Template tpl, 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

            if (string.IsNullOrWhiteSpace(tpl.Name))
            {
                return(Json(new Text("Имя шаблона не может быть пустым")));
            }

            // Новый шаблон
            if (tpl.Id == 0)
            {
                // Создаем правила
                tpl.Rules.UpdateOrAddRange(rules, out var NewRules);
                tpl.RuleReplaces.UpdateOrAddRange(RuleReplaces, out var NewRuleReplace);
                tpl.RuleOverrides.UpdateOrAddRange(RuleOverrides, out var NewRuleOverrides);
                tpl.RuleArgs.UpdateOrAddRange(RuleArgs, out var NewRuleArgs);

                // Добовляем в базу
                coreDB.RequestsFilter_Templates.Add(tpl);

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

                // Отдаем новый Id шаблона и Id новых правил
                return(Json(new UpdateToIds(IsAPI ? "accepted" : null, tpl.Id, NewRules, NewRuleReplace, NewRuleOverrides, NewRuleArgs)));
            }

            // Старый шаблон
            else
            {
                // Поиск шаблона
                if (coreDB.RequestsFilter_Templates.FindAndInclude(tpl.Id) is var FindTPL && FindTPL == null)
                {
                    return(Json(new Text("Шаблон не найден")));
                }

                // Обновляем параметры шаблона
                if (!IsAPI)
                {
                    CommonModels.Update(FindTPL, tpl);
                }

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

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

                // Удаляем кеш для шаблона
                ISPCache.RemoveTemplate(tpl.Id);

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

                // Отдаем сообщение и Id новых правил
                return(Json(new UpdateToIds("Настройки шаблона сохранены", 0, NewRules, NewRuleReplace, NewRuleOverrides, NewRuleArgs)));
            }
        }