func ptyExec(test *testing.T, mux *pat.Router) { mux.Post("/exec", func(res http.ResponseWriter, req *http.Request) { test.Log("got exec") conn, rw, err := res.(http.Hijacker).Hijack() if err != nil { res.WriteHeader(http.StatusInternalServerError) res.Write([]byte(err.Error())) return } defer conn.Close() script := req.FormValue("cmd") if script == "" { test.Log("missing script") test.FailNow() } test.Log("executing", script) cmd := exec.Command("/bin/bash", "-c", script) file, err := pty.Start(cmd) if err != nil { test.Log(err) test.FailNow() } test.Log("copying from pty") go io.Copy(file, rw) io.Copy(conn, file) test.Log("finished running") }) }
func addClueRoutes(router *pat.Router) { router.Get("/clue/{clue_id}/hint", serve( Authenticate(true), parseFromUrl(urlParams{ "clue_id": parseParamToInt64, "lat": parseParamToFloat64, "lng": parseParamToFloat64, }), takeHint, toJson, )) router.Get("/clue", serve( Authenticate(true), parseFromUrl(urlParams{"clue_id": parseParamToInt64}), currentClue, toJson, )) router.Post("/clue/{clue_id}", serve( Authenticate(true), parseFromUrl(urlParams{ "clue_id": parseParamToInt64, }), parseRequest(new(_SolveClueReq)), solveClue, toJson, )) router.Put("/clue/{clue_id}", serve( dashboardAuth, parseRequest(new(record.Clue)), updateClue, toJson, )) }
func normalExec(test *testing.T, mux *pat.Router) { mux.Post("/exec", func(res http.ResponseWriter, req *http.Request) { test.Log("got exec") conn, rw, err := res.(http.Hijacker).Hijack() if err != nil { res.WriteHeader(http.StatusInternalServerError) res.Write([]byte(err.Error())) return } defer conn.Close() script := req.FormValue("cmd") if script == "" { test.Log("missing script") test.FailNow() } test.Log("executing", script) cmd := exec.Command("/bin/bash", "-c", script) cmd.Stdin = rw cmd.Stderr = conn // cmd.Stdout = conn // cmd.Run() reader, err := cmd.StdoutPipe() cmd.Start() io.Copy(conn, reader) conn.(*net.TCPConn).CloseWrite() err = cmd.Wait() test.Log("finished running") }) }
func userAddRoutes(router *pat.Router) { router.Post("/user/waiver", serve( Authenticate(true), acceptWaiver, toJson, )) }
func teamAddRoutes(router *pat.Router) { router.Post("/team/{team_id}/finish", serve( dashboardAuth, parseFromUrl(urlParams{ "team_id": parseParamToInt64, }), setTeamFinish, toJson, )) router.Delete("/team/{team_id}/finish", serve( dashboardAuth, parseFromUrl(urlParams{ "team_id": parseParamToInt64, }), setTeamFinish, toJson, )) router.Post("/team/{phrase}", serve( parseFromUrl(urlParams{ "phrase": parseParamToString, }), parseRequest(new(_TeamJoinReq)), validateJoinTeam, joinTeam, SetUserId, toJson, )) router.Post("/team", serve( parseRequest(new(_TeamCreateReq)), createTeam, SetUserId, toJson, )) }