@@ 3,6 3,7 @@ package engine
import (
"encoding/json"
"fmt"
+ "html/template"
"io/ioutil"
"log"
"net/http"
@@ 37,7 38,20 @@ func contextInit(e *Engine) macaron.Handler {
func (e *Engine) RunWebInterface() {
m := macaron.Classic()
- renderOpts := macaron.RenderOptions{}
+ renderOpts := macaron.RenderOptions{
+ Funcs: []template.FuncMap{map[string]interface{}{
+ "csv": func(s []string) string {
+ var str strings.Builder
+ for _, v := range s {
+ if str.Len() > 0 {
+ str.WriteRune(',')
+ }
+ str.WriteString(v)
+ }
+ return str.String()
+ },
+ }},
+ }
staticOpts := macaron.StaticOptions{
Expires: func() string {
return time.Now().Add(24 * 60 * time.Minute).UTC().Format("Mon, 02 Jan 2006 15:04:05 GMT")
@@ 81,12 95,78 @@ func (e *Engine) RunWebInterface() {
m.Group("/edit", func() {
m.Get("/service/:service", editServiceHandler)
m.Post("/service/:service", binding.BindIgnErr(newServiceForm{}), postEditServiceHandler)
+ m.Get("/channel/:service/:channel", editChannelHandler)
+ m.Post("/channel/:service/:channel", binding.BindIgnErr(newChannelForm{}), postEditChannelHandler)
+ m.Get("/step/:service/:channel/:step", editStepHandler)
+ m.Post("/step/:service/:channel/:step", binding.BindIgnErr(newStepForm{}), postEditStepHandler)
})
m.Get("/commit", commitHandler)
}, requireLogin)
log.Fatal(http.ListenAndServe(fmt.Sprintf("0.0.0.0:%d", e.Options.AdminPort), m))
}
+func editStepHandler(ctx *macaron.Context, f *session.Flash) {
+ e := ctx.Data["Engine"].(*Engine)
+ s := e.getStep(ctx.Params("service"), ctx.Params("channel"), ctx.Params("step"))
+ if s == nil {
+ f.Error("Step not found")
+ ctx.Redirect("/dash")
+ return
+ }
+ ctx.Data["Step"] = s
+ ctx.HTML(http.StatusOK, "edit-step")
+}
+
+func postEditStepHandler(ctx *macaron.Context, f *session.Flash, errs binding.Errors, form newStepForm) {
+ if errs.Len() > 0 {
+ f.Error("Make sure to fill required fields")
+ ctx.Redirect("/edit/service/" + ctx.Params("service") + "/" + ctx.Params("channel") + "/" + ctx.Params("step"))
+ return
+ }
+ e := ctx.Data["Engine"].(*Engine)
+ s := e.getStep(ctx.Params("service"), ctx.Params("channel"), ctx.Params("step"))
+ if s == nil {
+ f.Error("Step not found")
+ ctx.Redirect("/dash")
+ return
+ }
+ s.Status = form.Status
+ s.Page = form.Page
+ s.PostTo = strings.Split(form.PostTo, ",")
+ s.DataIn = strings.Split(form.DataIn, ",")
+ s.DataOut = strings.Split(form.DataOut, ",")
+ ctx.Redirect("/s/" + ctx.Params("service") + "/" + ctx.Params("channel") + "/" + ctx.Params("step"))
+}
+func editChannelHandler(ctx *macaron.Context, f *session.Flash) {
+ e := ctx.Data["Engine"].(*Engine)
+ c := e.getChannel(ctx.Params("service"), ctx.Params("channel"))
+ if c == nil {
+ f.Error("Channel not found")
+ ctx.Redirect("/dash")
+ return
+ }
+ ctx.Data["Channel"] = c
+ ctx.HTML(http.StatusOK, "edit-channel")
+}
+
+func postEditChannelHandler(ctx *macaron.Context, f *session.Flash, errs binding.Errors, form newChannelForm) {
+ if errs.Len() > 0 {
+ f.Error("Make sure to fill required fields")
+ ctx.Redirect("/edit/service/" + ctx.Params("service") + "/" + ctx.Params("channel"))
+ return
+ }
+ e := ctx.Data["Engine"].(*Engine)
+ c := e.getChannel(ctx.Params("service"), ctx.Params("channel"))
+ if c == nil {
+ f.Error("Channel not found")
+ ctx.Redirect("/dash")
+ return
+ }
+ c.ChannelDescription = form.Description
+ c.Initiators = strings.Split(form.Initiators, ",")
+ ctx.Redirect("/s/" + ctx.Params("service") + "/" + ctx.Params("channel"))
+}
+
func editServiceHandler(ctx *macaron.Context, f *session.Flash) {
e := ctx.Data["Engine"].(*Engine)
s := e.getService(ctx.Params("service"))
@@ 209,6 289,9 @@ func postNewStepHandler(ctx *macaron.Context, errs binding.Errors, form newStepF
if len(form.DataOut) > 0 {
st.DataOut = strings.Split(form.DataOut, ",")
}
+ if len(form.PostTo) > 0 {
+ st.PostTo = strings.Split(form.PostTo, ",")
+ }
ch.Steps = append(ch.Steps, st)
e.SchemasModified = true