func createAppHelper(instance *app.App, u *auth.User, units uint) ([]byte, error) { teams, err := u.Teams() if err != nil { return nil, err } if len(teams) < 1 { msg := "In order to create an app, you should be member of at least one team" return nil, &errors.Http{Code: http.StatusForbidden, Message: msg} } instance.SetTeams(teams) err = app.CreateApp(instance, units) if err != nil { log.Printf("Got error while creating app: %s", err) if e, ok := err.(*app.ValidationError); ok { return nil, &errors.Http{Code: http.StatusPreconditionFailed, Message: e.Message} } if strings.Contains(err.Error(), "key error") { msg := fmt.Sprintf(`There is already an app named "%s".`, instance.Name) return nil, &errors.Http{Code: http.StatusConflict, Message: msg} } return nil, err } msg := map[string]string{ "status": "success", "repository_url": repository.GetUrl(instance.Name), } return json.Marshal(msg) }
func createApp(w http.ResponseWriter, r *http.Request, t *auth.Token) error { var a app.App var japp jsonApp defer r.Body.Close() body, err := ioutil.ReadAll(r.Body) if err != nil { return err } if err = json.Unmarshal(body, &japp); err != nil { return err } a.Name = japp.Name a.Platform = japp.Platform if japp.Units == 0 { japp.Units = 1 } u, err := t.User() if err != nil { return err } rec.Log(u.Email, "create-app", "name="+japp.Name, "platform="+japp.Platform, fmt.Sprintf("units=%d", japp.Units)) teams, err := u.Teams() if err != nil { return err } if len(teams) < 1 { msg := "In order to create an app, you should be member of at least one team" return &errors.Http{Code: http.StatusForbidden, Message: msg} } err = app.CreateApp(&a, japp.Units, teams) if err != nil { log.Printf("Got error while creating app: %s", err) if e, ok := err.(*errors.ValidationError); ok { return &errors.Http{Code: http.StatusBadRequest, Message: e.Message} } if strings.Contains(err.Error(), "key error") { msg := fmt.Sprintf(`There is already an app named "%s".`, a.Name) return &errors.Http{Code: http.StatusConflict, Message: msg} } return err } msg := map[string]string{ "status": "success", "repository_url": repository.GetUrl(a.Name), } jsonMsg, err := json.Marshal(msg) if err != nil { return err } fmt.Fprintf(w, "%s", jsonMsg) return nil }
func createApp(w http.ResponseWriter, r *http.Request, t *auth.Token) error { var a app.App defer r.Body.Close() body, err := ioutil.ReadAll(r.Body) if err != nil { return err } if err = json.Unmarshal(body, &a); err != nil { return err } u, err := t.User() if err != nil { return err } rec.Log(u.Email, "create-app", "name="+a.Name, "platform="+a.Platform) err = app.CreateApp(&a, u) if err != nil { log.Errorf("Got error while creating app: %s", err) if e, ok := err.(*errors.ValidationError); ok { return &errors.HTTP{Code: http.StatusBadRequest, Message: e.Message} } if _, ok := err.(app.NoTeamsError); ok { return &errors.HTTP{ Code: http.StatusBadRequest, Message: "In order to create an app, you should be member of at least one team", } } if e, ok := err.(*app.AppCreationError); ok { if e.Err == app.ErrAppAlreadyExists { return &errors.HTTP{Code: http.StatusConflict, Message: e.Error()} } if _, ok := e.Err.(*quota.QuotaExceededError); ok { return &errors.HTTP{ Code: http.StatusForbidden, Message: "Quota exceeded", } } } return err } msg := map[string]string{ "status": "success", "repository_url": repository.ReadWriteURL(a.Name), } jsonMsg, err := json.Marshal(msg) if err != nil { return err } fmt.Fprintf(w, "%s", jsonMsg) return nil }
func createApp(w http.ResponseWriter, r *http.Request, t *auth.Token) error { var a app.App defer r.Body.Close() body, err := ioutil.ReadAll(r.Body) if err != nil { return err } if err = json.Unmarshal(body, &a); err != nil { return err } u, err := t.User() if err != nil { return err } rec.Log(u.Email, "create-app", "name="+a.Name, "platform="+a.Platform, "memory="+strconv.Itoa(a.Memory)) canSetMem, _ := config.GetBool("docker:allow-memory-set") if !canSetMem && a.Memory > 0 { err := "Memory setting not allowed." log.Errorf("%s", err) return &errors.HTTP{Code: http.StatusForbidden, Message: err} } maxMem, _ := config.GetInt("docker:max-allowed-memory") if maxMem > 0 && a.Memory > maxMem { err := fmt.Sprintf("Invalid memory size. You cannot request more than %dMB.", maxMem) log.Errorf("%s", err) return &errors.HTTP{Code: http.StatusForbidden, Message: err} } err = app.CreateApp(&a, u) if err != nil { log.Errorf("Got error while creating app: %s", err) if e, ok := err.(*errors.ValidationError); ok { return &errors.HTTP{Code: http.StatusBadRequest, Message: e.Message} } if _, ok := err.(app.NoTeamsError); ok { return &errors.HTTP{ Code: http.StatusBadRequest, Message: "In order to create an app, you should be member of at least one team", } } if e, ok := err.(*app.AppCreationError); ok { if e.Err == app.ErrAppAlreadyExists { return &errors.HTTP{Code: http.StatusConflict, Message: e.Error()} } if _, ok := e.Err.(*quota.QuotaExceededError); ok { return &errors.HTTP{ Code: http.StatusForbidden, Message: "Quota exceeded", } } } return err } msg := map[string]string{ "status": "success", "repository_url": repository.ReadWriteURL(a.Name), } jsonMsg, err := json.Marshal(msg) if err != nil { return err } fmt.Fprintf(w, "%s", jsonMsg) return nil }