caching and logging
This commit is contained in:
@@ -2,7 +2,6 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
@@ -17,7 +16,7 @@ type Config struct {
|
||||
KeyFile string `yaml:"key_file"`
|
||||
Routes map[string]string `yaml:"routes"`
|
||||
TrustTarget map[string]bool `yaml:"trust_target"`
|
||||
NoHTTPSRedirect map[string]bool `yaml:"no_https_redirect"` // New field
|
||||
NoHTTPSRedirect map[string]bool `yaml:"no_https_redirect"`
|
||||
}
|
||||
|
||||
func loadConfig() (Config, error) {
|
||||
@@ -38,20 +37,20 @@ func generateDefaultConfig() Config {
|
||||
return Config{
|
||||
ListenHTTP: ":80",
|
||||
ListenHTTPS: ":443",
|
||||
CertDir: "./certificates", // default current directory creates certificates folder
|
||||
CertDir: "certificates",
|
||||
CertFile: "certificate.pem",
|
||||
KeyFile: "key.pem",
|
||||
Routes: map[string]string{
|
||||
"*": "http://127.0.0.1:80",
|
||||
"main.example.com": "http://127.0.0.1:80",
|
||||
"*": "https://127.0.0.1:3000",
|
||||
"main.example.com": "https://10.100.111.254:4444",
|
||||
},
|
||||
TrustTarget: map[string]bool{
|
||||
"*": true, // default trust all certificates
|
||||
"main.example.com": false, // use only trusted certificate
|
||||
"*": true,
|
||||
"main.example.com": true,
|
||||
},
|
||||
NoHTTPSRedirect: map[string]bool{
|
||||
"*": false, // Default: redirect to HTTPS
|
||||
"main.example.com": true, // set to not redirect HTTP to HTTPS
|
||||
"*": false,
|
||||
"main.example.com": false,
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -78,7 +77,7 @@ func monitorConfig() {
|
||||
for {
|
||||
configInfo, err := os.Stat(configPath)
|
||||
if err != nil {
|
||||
log.Printf("Error checking config file: %v", err)
|
||||
errorLogger.Printf("Error checking config file: %v", err)
|
||||
time.Sleep(5 * time.Second)
|
||||
continue
|
||||
}
|
||||
@@ -86,16 +85,16 @@ func monitorConfig() {
|
||||
if configInfo.ModTime() != lastModTime {
|
||||
newConfig, err := loadConfig()
|
||||
if err != nil {
|
||||
log.Printf("Error reloading config: %v", err)
|
||||
errorLogger.Printf("Error reloading config: %v", err)
|
||||
} else {
|
||||
configMux.Lock()
|
||||
if newConfig.ListenHTTP != config.ListenHTTP {
|
||||
config.ListenHTTP = newConfig.ListenHTTP
|
||||
log.Printf("Updated listen_http to %s", config.ListenHTTP)
|
||||
refreshLogger.Printf("Updated listen_http to %s", config.ListenHTTP)
|
||||
}
|
||||
if newConfig.ListenHTTPS != config.ListenHTTPS {
|
||||
config.ListenHTTPS = newConfig.ListenHTTPS
|
||||
log.Printf("Updated listen_https to %s", config.ListenHTTPS)
|
||||
refreshLogger.Printf("Updated listen_https to %s", config.ListenHTTPS)
|
||||
}
|
||||
if newConfig.CertDir != config.CertDir || newConfig.CertFile != config.CertFile || newConfig.KeyFile != config.KeyFile {
|
||||
config.CertDir = newConfig.CertDir
|
||||
@@ -103,49 +102,49 @@ func monitorConfig() {
|
||||
config.KeyFile = newConfig.KeyFile
|
||||
updatePaths()
|
||||
if err := loadCertificate(); err != nil {
|
||||
log.Printf("Error reloading certificate after path change: %v", err)
|
||||
errorLogger.Printf("Error reloading certificate after path change: %v", err)
|
||||
} else {
|
||||
log.Println("Updated certificate paths and reloaded certificate")
|
||||
refreshLogger.Println("Updated certificate paths and reloaded certificate")
|
||||
}
|
||||
}
|
||||
for k, v := range newConfig.Routes {
|
||||
if oldV, exists := config.Routes[k]; !exists || oldV != v {
|
||||
config.Routes[k] = v
|
||||
log.Printf("Updated route %s to %s", k, v)
|
||||
refreshLogger.Printf("Updated route %s to %s", k, v)
|
||||
}
|
||||
}
|
||||
for k := range config.Routes {
|
||||
if _, exists := newConfig.Routes[k]; !exists {
|
||||
delete(config.Routes, k)
|
||||
log.Printf("Removed route %s", k)
|
||||
refreshLogger.Printf("Removed route %s", k)
|
||||
}
|
||||
}
|
||||
for k, v := range newConfig.TrustTarget {
|
||||
if oldV, exists := config.TrustTarget[k]; !exists || oldV != v {
|
||||
config.TrustTarget[k] = v
|
||||
log.Printf("Updated trust_target %s to %v", k, v)
|
||||
refreshLogger.Printf("Updated trust_target %s to %v", k, v)
|
||||
}
|
||||
}
|
||||
for k := range config.TrustTarget {
|
||||
if _, exists := newConfig.TrustTarget[k]; !exists {
|
||||
delete(config.TrustTarget, k)
|
||||
log.Printf("Removed trust_target %s", k)
|
||||
refreshLogger.Printf("Removed trust_target %s", k)
|
||||
}
|
||||
}
|
||||
for k, v := range newConfig.NoHTTPSRedirect {
|
||||
if oldV, exists := config.NoHTTPSRedirect[k]; !exists || oldV != v {
|
||||
config.NoHTTPSRedirect[k] = v
|
||||
log.Printf("Updated no_https_redirect %s to %v", k, v)
|
||||
refreshLogger.Printf("Updated no_https_redirect %s to %v", k, v)
|
||||
}
|
||||
}
|
||||
for k := range config.NoHTTPSRedirect {
|
||||
if _, exists := newConfig.NoHTTPSRedirect[k]; !exists {
|
||||
delete(config.NoHTTPSRedirect, k)
|
||||
log.Printf("Removed no_https_redirect %s", k)
|
||||
refreshLogger.Printf("Removed no_https_redirect %s", k)
|
||||
}
|
||||
}
|
||||
configMux.Unlock()
|
||||
log.Println("Config reloaded successfully")
|
||||
refreshLogger.Println("Config reloaded successfully")
|
||||
lastModTime = configInfo.ModTime()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user