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("Настройки домена сохранены"))); }
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("Настройки домена сохранены"))); }
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("Настройки успешно сохранены"))); }
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("Настройки домена сохранены"))); }
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))); }
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))); }
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)); }
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)); }
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("Настройки домена сохранены"))); } }
public JsonResult AntiVirus(AntiVirus av) { CommonModels.Update(av, jsonDB.AntiVirus, HttpContext, updateType: UpdateType.skip); return(new SecurityToAntiVirusController().Save(av, IsAPI: true)); }
public JsonResult AntiDdos(AntiDdos antiDdos) { CommonModels.Update(antiDdos, jsonDB.AntiDdos, HttpContext, updateType: UpdateType.skip); return(new SecurityToAntiDdosController().Save(antiDdos, null, UpdateIgnoreToIP: false, IsAPI: true)); }
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)); }
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("Задание сохранено"))); } }
/// <summary> /// Обновить поля /// </summary> /// <param name="item">Новые данные</param> void IUpdate.Update(dynamic item) => CommonModels.Update(this, item);
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)); }
/// <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 } }
public JsonResult Limit(LimitRequest limit) { CommonModels.Update(limit, jsonDB.AntiBot.limitRequest, HttpContext, updateType: UpdateType.skip); return(new SecurityToAntiBotController().Save(jsonDB.AntiBot, limit, IsAPI: true)); }
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("Задание сохранено"))); } }
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))); } }