Автоматическое создание сертификатов

Добавил возможность создания автоматических сертификатов.
This commit is contained in:
2026-01-17 10:36:00 +07:00
parent 7169304212
commit 9a788800b5
11 changed files with 779 additions and 13 deletions

View File

@@ -21,6 +21,7 @@ type Site_www struct {
Status string `json:"status"`
Root_file string `json:"root_file"`
Root_file_routing bool `json:"root_file_routing"`
AutoCreateSSL bool `json:"AutoCreateSSL"`
}
type Soft_Settings struct {
@@ -29,6 +30,7 @@ type Soft_Settings struct {
Mysql_port int `json:"mysql_port"`
Mysql_host string `json:"mysql_host"`
Proxy_enabled bool `json:"proxy_enabled"`
ACME_enabled bool `json:"ACME_enabled"`
}
type Proxy_Service struct {
@@ -38,6 +40,7 @@ type Proxy_Service struct {
LocalPort string `json:"LocalPort"`
ServiceHTTPSuse bool `json:"ServiceHTTPSuse"`
AutoHTTPS bool `json:"AutoHTTPS"`
AutoCreateSSL bool `json:"AutoCreateSSL"`
}
func LoadConfig() {
@@ -57,6 +60,79 @@ func LoadConfig() {
tools.Logs_file(0, "JSON", "config.json успешно прочитан", "logs_config.log", true)
}
// Миграция: добавляем новые поля если их нет
migrateConfig(data)
println()
}
// migrateConfig проверяет и добавляет новые поля в конфиг
func migrateConfig(originalData []byte) {
needsSave := false
// Парсим оригинальный JSON как map для проверки наличия полей
var rawConfig map[string]json.RawMessage
if err := json.Unmarshal(originalData, &rawConfig); err != nil {
return
}
// Проверяем Site_www
if rawSites, ok := rawConfig["Site_www"]; ok {
var sites []map[string]interface{}
if err := json.Unmarshal(rawSites, &sites); err == nil {
for _, site := range sites {
if _, exists := site["AutoCreateSSL"]; !exists {
needsSave = true
break
}
}
}
}
// Проверяем Proxy_Service
if rawProxies, ok := rawConfig["Proxy_Service"]; ok {
var proxies []map[string]interface{}
if err := json.Unmarshal(rawProxies, &proxies); err == nil {
for _, proxy := range proxies {
if _, exists := proxy["AutoCreateSSL"]; !exists {
needsSave = true
break
}
}
}
}
// Проверяем Soft_Settings на наличие ACME_enabled
if rawSettings, ok := rawConfig["Soft_Settings"]; ok {
var settings map[string]interface{}
if err := json.Unmarshal(rawSettings, &settings); err == nil {
if _, exists := settings["ACME_enabled"]; !exists {
needsSave = true
}
}
}
// Если нужно обновить - сохраняем конфиг с новыми полями
if needsSave {
tools.Logs_file(0, "JSON", "🔄 Миграция конфига: добавляем новые поля", "logs_config.log", true)
saveConfig()
}
}
// saveConfig сохраняет текущий конфиг в файл
func saveConfig() {
formattedJSON, err := json.MarshalIndent(ConfigData, "", " ")
if err != nil {
tools.Logs_file(1, "JSON", "Ошибка форматирования конфига: "+err.Error(), "logs_config.log", true)
return
}
err = os.WriteFile(ConfigPath, formattedJSON, 0644)
if err != nil {
tools.Logs_file(1, "JSON", "Ошибка сохранения конфига: "+err.Error(), "logs_config.log", true)
return
}
tools.Logs_file(0, "JSON", "✅ Конфиг обновлён с новыми полями", "logs_config.log", true)
}