From 215dbe8eff2fc4f342d1104bddde37f916f61b7e Mon Sep 17 00:00:00 2001 From: "David J. Allen" Date: Thu, 4 Sep 2025 10:07:10 -0600 Subject: [PATCH 1/3] feat: add util function to format error list --- pkg/util/util.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pkg/util/util.go b/pkg/util/util.go index fc53b67..6f259a8 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -4,6 +4,7 @@ import ( "bytes" "cmp" "crypto/tls" + "errors" "fmt" "io" "net/http" @@ -97,3 +98,12 @@ func CopyIf[T comparable](s []T, condition func(t T) bool) []T { } return f } + +func FormatErrors(message string, prefix string, errs []error) error { + var errMessage = prefix + message + "\n" + for _, err := range errs { + errMessage = fmt.Sprintf("%s %v\n", prefix, err) + } + + return errors.New(errMessage) +} From 62b58f4cbb3b0a42e8c1ae67ae241efc41ec30ae Mon Sep 17 00:00:00 2001 From: "David J. Allen" Date: Thu, 4 Sep 2025 10:08:09 -0600 Subject: [PATCH 2/3] feat: change how incorrect profiles and plugins behave --- pkg/service/constants.go | 3 +-- pkg/service/routes.go | 22 ++++++++++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/pkg/service/constants.go b/pkg/service/constants.go index b94b34a..649fa86 100644 --- a/pkg/service/constants.go +++ b/pkg/service/constants.go @@ -24,8 +24,7 @@ const ( Name: {{ makeshift.plugin.name }} Version: {{ makeshift.plugin.version }} Description: {{ makeshift.plugin.description }} - Author: {{ makeshift.plugin.metadata.name }} ({{ makeshift.plugin.metadata.email }}) - + Author: {{ makeshift.plugin.metadata }} Profile Information: ID: {{ makeshift.profiles.default.id }} Description: {{ makeshift.profiles.default.description }} diff --git a/pkg/service/routes.go b/pkg/service/routes.go index 5f552d1..1cbfc7f 100644 --- a/pkg/service/routes.go +++ b/pkg/service/routes.go @@ -15,6 +15,7 @@ import ( "git.towk2.me/towk/makeshift/internal/kwargs" makeshift "git.towk2.me/towk/makeshift/pkg" "git.towk2.me/towk/makeshift/pkg/storage" + "git.towk2.me/towk/makeshift/pkg/util" "github.com/go-chi/chi/v5" "github.com/rs/zerolog/log" ) @@ -56,7 +57,11 @@ func (s *Service) Download() http.HandlerFunc { // prepare profiles errs = s.loadProfiles(profileIDs, store, errs) if len(errs) > 0 { - log.Error().Errs("errs", errs).Msg("errors occurred loading profiles") + log.Error(). + Errs("errs", errs). + Msg("errors occurred loading profiles") + err = util.FormatErrors("failed to load plugins", "", errs) + http.Error(w, err.Error(), http.StatusInternalServerError) errs = []error{} } @@ -90,8 +95,13 @@ func (s *Service) Download() http.HandlerFunc { // prepare plugins hooks, errs = s.loadPlugins(pluginNames, store, pluginArgs, errs) if len(errs) > 0 { - log.Error().Errs("errs", errs).Msg("errors occurred loading plugins") + log.Error(). + Errs("errs", errs). + Msg("errors occurred loading plugins") + err = util.FormatErrors("failed to load plugins", "", errs) + http.Error(w, err.Error(), http.StatusInternalServerError) errs = []error{} + return } // create an archive of the directory, run hooks, and download @@ -132,12 +142,16 @@ func (s *Service) Download() http.HandlerFunc { } // prepare plugins - store.Set("file", contents) hooks, errs = s.loadPlugins(pluginNames, store, nil, errs) if len(errs) > 0 { - log.Error().Errs("errs", errs).Msg("errors occurred loading plugins") + log.Error(). + Errs("errs", errs). + Msg("errors occurred loading plugins") + err = util.FormatErrors("failed to load plugins", "", errs) + http.Error(w, err.Error(), http.StatusInternalServerError) errs = []error{} + return } if len(hooks) > 0 { // run pre-hooks to modify the contents of the file before archiving From 23d43061fb88515c009bdc156948a35f88c5ab2d Mon Sep 17 00:00:00 2001 From: "David J. Allen" Date: Thu, 4 Sep 2025 10:08:40 -0600 Subject: [PATCH 3/3] refactor: update pyjinja2 implementation --- pkg/plugins/pyjinja2/pyjinja2.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/pkg/plugins/pyjinja2/pyjinja2.go b/pkg/plugins/pyjinja2/pyjinja2.go index fe823f2..673f1a1 100644 --- a/pkg/plugins/pyjinja2/pyjinja2.go +++ b/pkg/plugins/pyjinja2/pyjinja2.go @@ -75,6 +75,7 @@ func (p *Jinja2) Run(store storage.KVStore, args []string) error { } } + // get mappings from provided profiles var ps = make(map[string]any) for profileID, profile := range profiles.(makeshift.ProfileMap) { ps[profileID] = map[string]any{ @@ -84,8 +85,9 @@ func (p *Jinja2) Run(store storage.KVStore, args []string) error { } } - j2, err := jinja2.NewJinja2("pyjinja", 1, - jinja2.WithGlobal("makeshift", map[string]any{ + // get mappings supplied by this plugin + mappings.Data = map[string]any{ + "makeshift": map[string]any{ "profiles": ps, "plugin": map[string]any{ "name": p.Name(), @@ -93,7 +95,11 @@ func (p *Jinja2) Run(store storage.KVStore, args []string) error { "description": p.Description(), "metadata": p.Metadata(), }, - }), + }, + } + + j2, err := jinja2.NewJinja2("makeshift", 1, + jinja2.WithGlobals(mappings.Data), ) if err != nil { return fmt.Errorf("(pyjinja2) failed to create new Jinja 2 instance: %v", err)