Compare commits

..

3 commits

4 changed files with 38 additions and 9 deletions

View file

@ -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) var ps = make(map[string]any)
for profileID, profile := range profiles.(makeshift.ProfileMap) { for profileID, profile := range profiles.(makeshift.ProfileMap) {
ps[profileID] = map[string]any{ 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, // get mappings supplied by this plugin
jinja2.WithGlobal("makeshift", map[string]any{ mappings.Data = map[string]any{
"makeshift": map[string]any{
"profiles": ps, "profiles": ps,
"plugin": map[string]any{ "plugin": map[string]any{
"name": p.Name(), "name": p.Name(),
@ -93,7 +95,11 @@ func (p *Jinja2) Run(store storage.KVStore, args []string) error {
"description": p.Description(), "description": p.Description(),
"metadata": p.Metadata(), "metadata": p.Metadata(),
}, },
}), },
}
j2, err := jinja2.NewJinja2("makeshift", 1,
jinja2.WithGlobals(mappings.Data),
) )
if err != nil { if err != nil {
return fmt.Errorf("(pyjinja2) failed to create new Jinja 2 instance: %v", err) return fmt.Errorf("(pyjinja2) failed to create new Jinja 2 instance: %v", err)

View file

@ -24,8 +24,7 @@ const (
Name: {{ makeshift.plugin.name }} Name: {{ makeshift.plugin.name }}
Version: {{ makeshift.plugin.version }} Version: {{ makeshift.plugin.version }}
Description: {{ makeshift.plugin.description }} Description: {{ makeshift.plugin.description }}
Author: {{ makeshift.plugin.metadata.name }} ({{ makeshift.plugin.metadata.email }}) Author: {{ makeshift.plugin.metadata }}
Profile Information: Profile Information:
ID: {{ makeshift.profiles.default.id }} ID: {{ makeshift.profiles.default.id }}
Description: {{ makeshift.profiles.default.description }} Description: {{ makeshift.profiles.default.description }}

View file

@ -15,6 +15,7 @@ import (
"git.towk2.me/towk/makeshift/internal/kwargs" "git.towk2.me/towk/makeshift/internal/kwargs"
makeshift "git.towk2.me/towk/makeshift/pkg" makeshift "git.towk2.me/towk/makeshift/pkg"
"git.towk2.me/towk/makeshift/pkg/storage" "git.towk2.me/towk/makeshift/pkg/storage"
"git.towk2.me/towk/makeshift/pkg/util"
"github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
) )
@ -56,7 +57,11 @@ func (s *Service) Download() http.HandlerFunc {
// prepare profiles // prepare profiles
errs = s.loadProfiles(profileIDs, store, errs) errs = s.loadProfiles(profileIDs, store, errs)
if len(errs) > 0 { 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{} errs = []error{}
} }
@ -90,8 +95,13 @@ func (s *Service) Download() http.HandlerFunc {
// prepare plugins // prepare plugins
hooks, errs = s.loadPlugins(pluginNames, store, pluginArgs, errs) hooks, errs = s.loadPlugins(pluginNames, store, pluginArgs, errs)
if len(errs) > 0 { 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{} errs = []error{}
return
} }
// create an archive of the directory, run hooks, and download // create an archive of the directory, run hooks, and download
@ -132,12 +142,16 @@ func (s *Service) Download() http.HandlerFunc {
} }
// prepare plugins // prepare plugins
store.Set("file", contents) store.Set("file", contents)
hooks, errs = s.loadPlugins(pluginNames, store, nil, errs) hooks, errs = s.loadPlugins(pluginNames, store, nil, errs)
if len(errs) > 0 { 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{} errs = []error{}
return
} }
if len(hooks) > 0 { if len(hooks) > 0 {
// run pre-hooks to modify the contents of the file before archiving // run pre-hooks to modify the contents of the file before archiving

View file

@ -4,6 +4,7 @@ import (
"bytes" "bytes"
"cmp" "cmp"
"crypto/tls" "crypto/tls"
"errors"
"fmt" "fmt"
"io" "io"
"net/http" "net/http"
@ -97,3 +98,12 @@ func CopyIf[T comparable](s []T, condition func(t T) bool) []T {
} }
return f 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)
}