Simplified template rendering.

This commit is contained in:
2025-07-27 21:46:27 +02:00
parent dba4ced05f
commit bd9547ff70

42
ca.go
View File

@@ -545,14 +545,12 @@ func parseDistinguishedName(dn string) pkix.Name {
return name
}
// Helper: apply Go template to a string using CertificateDefinition and CertificateDefaults as data
func applyTemplate(s string, def CertificateDefinition, defaults *CertificateDefaults) (string, error) {
// Helper: apply Go template to a string using only the certificate label as data
func applyTemplate(s string, name string) (string, error) {
data := struct {
CertificateDefinition
Defaults *CertificateDefaults
Name string
}{
CertificateDefinition: def,
Defaults: defaults,
Name: name,
}
tmpl, err := template.New("").Parse(s)
if err != nil {
@@ -570,39 +568,27 @@ func renderCertificateDefTemplates(def CertificateDefinition, defaults *Certific
newDef := def
// Subject: use def.Subject if set, else defaults.Subject (rendered)
if def.Subject != "" {
if rendered, err := applyTemplate(def.Subject, def, defaults); err == nil {
if rendered, err := applyTemplate(def.Subject, def.Name); err == nil {
newDef.Subject = rendered
}
} else if defaults != nil && defaults.Subject != "" {
if rendered, err := applyTemplate(defaults.Subject, def, defaults); err == nil {
if rendered, err := applyTemplate(defaults.Subject, def.Name); err == nil {
newDef.Subject = rendered
}
}
// Type: use def.Type if set, else defaults.Type (rendered)
if def.Type != "" {
if rendered, err := applyTemplate(def.Type, def, defaults); err == nil {
newDef.Type = rendered
}
} else if defaults != nil && defaults.Type != "" {
if rendered, err := applyTemplate(defaults.Type, def, defaults); err == nil {
newDef.Type = rendered
}
}
// Validity: use def.Validity if set, else defaults.Validity (rendered)
if def.Validity != "" {
if rendered, err := applyTemplate(def.Validity, def, defaults); err == nil {
newDef.Validity = rendered
}
} else if defaults != nil && defaults.Validity != "" {
if rendered, err := applyTemplate(defaults.Validity, def, defaults); err == nil {
newDef.Validity = rendered
// Type: use def.Type if set, else defaults.Type (no template)
if def.Type == "" && defaults != nil && defaults.Type != "" {
newDef.Type = defaults.Type
}
// Validity: use def.Validity if set, else defaults.Validity (no template)
if def.Validity == "" && defaults != nil && defaults.Validity != "" {
newDef.Validity = defaults.Validity
}
// SAN: use def.SAN if set, else defaults.SAN (rendered)
if len(def.SAN) > 0 {
newSAN := make([]string, len(def.SAN))
for i, s := range def.SAN {
if rendered, err := applyTemplate(s, def, defaults); err == nil {
if rendered, err := applyTemplate(s, def.Name); err == nil {
newSAN[i] = rendered
} else {
newSAN[i] = s
@@ -612,7 +598,7 @@ func renderCertificateDefTemplates(def CertificateDefinition, defaults *Certific
} else if defaults != nil && len(defaults.SAN) > 0 {
newSAN := make([]string, len(defaults.SAN))
for i, s := range defaults.SAN {
if rendered, err := applyTemplate(s, def, defaults); err == nil {
if rendered, err := applyTemplate(s, def.Name); err == nil {
newSAN[i] = rendered
} else {
newSAN[i] = s