Migrated to cobra for command handling and viper for config handling

This commit is contained in:
2026-02-25 21:17:23 +01:00
parent 61b65bf81c
commit 9eeb7a6ec0
13 changed files with 646 additions and 580 deletions

View File

@@ -4,11 +4,9 @@ import (
"fmt"
"log"
"path/filepath"
"strconv"
"sync"
"time"
"git.nevets.tech/Steven/ezconf"
"github.com/go-git/go-billy/v5/memfs"
"github.com/go-git/go-git/v5/storage/memory"
)
@@ -34,10 +32,12 @@ func getACMEManager() (*ACMEManager, error) {
}
func initServer() {
err := loadDomainConfigs()
err := LoadDomainConfigs()
if err != nil {
log.Fatalf("Error loading domain configs: %v", err)
}
serverTick()
}
func serverTick() {
@@ -53,18 +53,14 @@ func serverTick() {
now := time.Now().UTC()
mu.RLock()
localDomainConfigs := make(map[string]*ezconf.Configuration, len(domainConfigs))
for k, v := range domainConfigs {
localDomainConfigs[k] = v
}
mu.RUnlock()
localDomainConfigs := domainStore.Snapshot()
for domainStr, domainConfig := range localDomainConfigs {
if !domainConfig.GetAsBoolean("Domain.enabled") {
if !domainConfig.GetBool("Domain.enabled") {
continue
}
renewPeriod := domainConfig.GetAsInt("Certificates.renew_period")
lastIssued := time.Unix(domainConfig.GetAsInt64("Internal.last_issued"), 0).UTC()
renewPeriod := domainConfig.GetInt("Certificates.renew_period")
lastIssued := time.Unix(domainConfig.GetInt64("Internal.last_issued"), 0).UTC()
renewalDue := lastIssued.AddDate(0, 0, renewPeriod)
if now.After(renewalDue) {
_, err = mgr.RenewForDomain(domainStr)
@@ -77,23 +73,19 @@ func serverTick() {
}
}
err = domainConfig.SetValueErr("Internal.last_issued", strconv.FormatInt(time.Now().UTC().Unix(), 10))
if err != nil {
fmt.Printf("Error updating last_issued config for domain %s: %v\n", domainStr, err)
continue
}
err = domainConfig.Save()
domainConfig.Set("Internal.last_issued", time.Now().UTC().Unix())
err = domainConfig.WriteConfig()
if err != nil {
fmt.Printf("Error saving domain config %s: %v\n", domainStr, err)
continue
}
err = EncryptFileXChaCha(domainConfig.GetAsString("Certificates.crypto_key"), filepath.Join(mgr.certsRoot, domainStr, domainStr+".crt"), filepath.Join(mgr.certsRoot, domainStr, domainStr+".crt.crpt"), nil)
err = EncryptFileXChaCha(domainConfig.GetString("Certificates.crypto_key"), filepath.Join(mgr.certsRoot, domainStr, domainStr+".crt"), filepath.Join(mgr.certsRoot, domainStr, domainStr+".crt.crpt"), nil)
if err != nil {
fmt.Printf("Error encrypting domain cert for domain %s: %v\n", domainStr, err)
continue
}
err = EncryptFileXChaCha(domainConfig.GetAsString("Certificates.crypto_key"), filepath.Join(mgr.certsRoot, domainStr, domainStr+".key"), filepath.Join(mgr.certsRoot, domainStr, domainStr+".key.crpt"), nil)
err = EncryptFileXChaCha(domainConfig.GetString("Certificates.crypto_key"), filepath.Join(mgr.certsRoot, domainStr, domainStr+".key"), filepath.Join(mgr.certsRoot, domainStr, domainStr+".key.crpt"), nil)
if err != nil {
fmt.Printf("Error encrypting domain key for domain %s: %v\n", domainStr, err)
continue
@@ -110,18 +102,14 @@ func serverTick() {
}
var repoUrl string
if !domainConfig.GetAsBoolean("Internal.repo_exists") {
if !domainConfig.GetBool("Internal.repo_exists") {
repoUrl = createGiteaRepo(domainStr, giteaClient)
if repoUrl == "" {
fmt.Printf("Error creating Gitea repo for domain %s\n", domainStr)
continue
}
err = domainConfig.SetValueErr("Internal.repo_exists", "true")
if err != nil {
fmt.Printf("Error updating repo_exists config for domain %s: %v\n", domainStr, err)
continue
}
err = domainConfig.Save()
domainConfig.Set("Internal.repo_exists", true)
err = domainConfig.WriteConfig()
if err != nil {
fmt.Printf("Error saving domain config %s: %v\n", domainStr, err)
continue
@@ -133,7 +121,7 @@ func serverTick() {
continue
}
} else {
repoUrl = config.GetAsString("Git.server") + "/" + config.GetAsString("Git.org_name") + "/" + domainStr + domainConfig.GetAsString("Repo.repo_suffix") + ".git"
repoUrl = config.GetString("Git.server") + "/" + config.GetString("Git.org_name") + "/" + domainStr + domainConfig.GetString("Repo.repo_suffix") + ".git"
err = cloneRepo(repoUrl, gitWorkspace)
if err != nil {
fmt.Printf("Error cloning repo for domain %s: %v\n", domainStr, err)
@@ -149,12 +137,12 @@ func serverTick() {
fmt.Printf("Successfully pushed certificates for domain %s\n", domainStr)
}
}
saveDomainConfigs()
SaveDomainConfigs()
}
func reloadServer() {
fmt.Println("Reloading configs...")
err := loadDomainConfigs()
err := LoadDomainConfigs()
if err != nil {
fmt.Printf("Error loading domain configs: %v\n", err)