Files
certigo/backend/acme_client_context.go

58 lines
1.5 KiB
Go

package main
import (
"fmt"
"certigo-addon-backend/providers"
)
// ACMEClientContext enthält den Kontext für ACME-Operationen
type ACMEClientContext struct {
Provider providers.ACMEProvider
Directory *ACMEDirectory
DirectoryURL string
NewAccountURL string
NewOrderURL string
NewNonceURL string
}
// NewACMEClientContext erstellt einen neuen ACME-Client-Kontext
func NewACMEClientContext(providerID string) (*ACMEClientContext, error) {
acmeManager := providers.GetACMEManager()
provider, exists := acmeManager.GetACMEProvider(providerID)
if !exists {
return nil, fmt.Errorf("ACME-Provider '%s' nicht gefunden", providerID)
}
config, err := acmeManager.GetACMEProviderConfig(providerID)
if err != nil {
return nil, fmt.Errorf("fehler beim Laden der Provider-Konfiguration: %v", err)
}
if !config.Enabled {
return nil, fmt.Errorf("ACME-Provider '%s' ist nicht aktiviert", providerID)
}
// Validiere Konfiguration
if err := provider.ValidateConfig(config.Settings); err != nil {
return nil, fmt.Errorf("ungültige Provider-Konfiguration: %v", err)
}
directoryURL := provider.GetDirectoryURL()
// Hole Directory-Endpunkte
directory, err := getACMEDirectory(directoryURL)
if err != nil {
return nil, fmt.Errorf("fehler beim Abrufen der ACME Directory: %v", err)
}
return &ACMEClientContext{
Provider: provider,
Directory: directory,
DirectoryURL: directoryURL,
NewAccountURL: directory.NewAccount,
NewOrderURL: directory.NewOrder,
NewNonceURL: directory.NewNonce,
}, nil
}