feat(aa): refractor template to allow multiple templates.

This commit is contained in:
Alexandre Pujol 2024-04-17 18:02:41 +01:00
parent 890275fb22
commit 8ef858ad35
No known key found for this signature in database
GPG key ID: C5469996F0DF68EC
20 changed files with 347 additions and 214 deletions

View file

@ -6,6 +6,7 @@ package aa
import (
"embed"
"fmt"
"reflect"
"strings"
"text/template"
@ -26,8 +27,10 @@ var (
"overindent": indentDbus,
}
// The apparmor profile template
tmplAppArmorProfile = generateTemplate()
// The apparmor templates
tmpl = map[string]*template.Template{
"apparmor": generateTemplate("apparmor.j2"),
}
// convert apparmor requested mask to apparmor access mode
requestedMaskToAccess = map[string]string{
@ -96,9 +99,27 @@ var (
fileWeights = map[string]int{}
)
func generateTemplate() *template.Template {
res := template.New("file.j2").Funcs(tmplFunctionMap)
res = template.Must(res.ParseFS(tmplFiles, "templates/*.j2"))
func generateTemplate(name string) *template.Template {
res := template.New(name).Funcs(tmplFunctionMap)
switch name {
case "apparmor.j2":
res = template.Must(res.ParseFS(tmplFiles,
"templates/*.j2", "templates/rule/*.j2",
))
case "profile.j2":
res = template.Must(res.Parse("{{ template \"profile\" . }}"))
res = template.Must(res.ParseFS(tmplFiles,
"templates/profile.j2", "templates/rule/*.j2",
))
default:
res = template.Must(res.Parse(
fmt.Sprintf("{{ template \"%s\" . }}", name),
))
res = template.Must(res.ParseFS(tmplFiles,
fmt.Sprintf("templates/rule/%s.j2", name),
"templates/rule/qualifier.j2", "templates/rule/comment.j2",
))
}
return res
}