github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/app/controller/clib/sandbox.go (about) 1 // Package clib - Content managed by Project Forge, see [projectforge.md] for details. 2 package clib 3 4 import ( 5 "net/http" 6 7 "github.com/kyleu/dbaudit/app" 8 "github.com/kyleu/dbaudit/app/controller" 9 "github.com/kyleu/dbaudit/app/controller/cutil" 10 "github.com/kyleu/dbaudit/app/lib/sandbox" 11 "github.com/kyleu/dbaudit/app/lib/telemetry" 12 "github.com/kyleu/dbaudit/views/vsandbox" 13 ) 14 15 func SandboxList(w http.ResponseWriter, r *http.Request) { 16 controller.Act("sandbox.list", w, r, func(as *app.State, ps *cutil.PageState) (string, error) { 17 ps.SetTitleAndData("Sandboxes", sandbox.AllSandboxes) 18 return controller.Render(w, r, as, &vsandbox.List{}, ps, "sandbox") 19 }) 20 } 21 22 func SandboxRun(w http.ResponseWriter, r *http.Request) { 23 controller.Act("sandbox.run", w, r, func(as *app.State, ps *cutil.PageState) (string, error) { 24 key, err := cutil.RCRequiredString(r, "key", false) 25 if err != nil { 26 return "", err 27 } 28 29 sb := sandbox.AllSandboxes.Get(key) 30 if sb == nil { 31 return controller.ERsp("no sandbox with key [%s]", key) 32 } 33 34 ctx, span, logger := telemetry.StartSpan(ps.Context, "sandbox."+key, ps.Logger) 35 defer span.Complete() 36 37 ret, err := sb.Run(ctx, as, logger.With("sandbox", key)) 38 if err != nil { 39 return "", err 40 } 41 ps.SetTitleAndData(sb.Title, ret) 42 if sb.Key == "testbed" { 43 return controller.Render(w, r, as, &vsandbox.Testbed{}, ps, "sandbox", sb.Key) 44 } 45 return controller.Render(w, r, as, &vsandbox.Run{Key: key, Title: sb.Title, Icon: sb.Icon, Result: ret}, ps, "sandbox", sb.Key) 46 }) 47 }