func setEnv(w http.ResponseWriter, r *http.Request, t *auth.Token) error { msg := "You must provide the environment variables in a JSON object" if r.Body == nil { return &errors.HTTP{Code: http.StatusBadRequest, Message: msg} } var variables map[string]string err := json.NewDecoder(r.Body).Decode(&variables) if err != nil { return &errors.HTTP{Code: http.StatusBadRequest, Message: msg} } u, err := t.User() if err != nil { return err } appName := r.URL.Query().Get(":app") rec.Log(u.Email, "set-env", "app="+appName, variables) app, err := getApp(appName, u) if err != nil { return err } envs := make([]bind.EnvVar, 0, len(variables)) for k, v := range variables { envs = append(envs, bind.EnvVar{Name: k, Value: v, Public: true}) } return app.SetEnvs(envs, true) }
func SetEnv(w http.ResponseWriter, r *http.Request, u *auth.User) error { msg := "You must provide the environment variables" if r.Body == nil { return &errors.Http{Code: http.StatusBadRequest, Message: msg} } body, err := ioutil.ReadAll(r.Body) if err != nil { return err } if len(body) == 0 { return &errors.Http{Code: http.StatusBadRequest, Message: msg} } appName := r.URL.Query().Get(":name") app, err := getApp(appName, u) if err != nil { return err } regex, err := regexp.Compile(`(\w+=[^=]+)(\s|$)`) if err != nil { return err } variables := regex.FindAllStringSubmatch(string(body), -1) envs := make([]bind.EnvVar, len(variables)) for i, v := range variables { parts := strings.Split(v[1], "=") envs[i] = bind.EnvVar{Name: parts[0], Value: parts[1], Public: true} } return app.SetEnvs(envs, true) }