// title: service create // path: /services // method: POST // consume: application/x-www-form-urlencoded // responses: // 201: Service created // 400: Invalid data // 401: Unauthorized // 409: Service already exists func serviceCreate(w http.ResponseWriter, r *http.Request, t auth.Token) (err error) { s := service.Service{ Name: r.FormValue("id"), Username: r.FormValue("username"), Endpoint: map[string]string{"production": r.FormValue("endpoint")}, Password: r.FormValue("password"), } team := r.FormValue("team") if team == "" { team, err = permission.TeamForPermission(t, permission.PermServiceCreate) if err == permission.ErrTooManyTeams { return &errors.HTTP{ Code: http.StatusBadRequest, Message: "You must provide a team responsible for this service in the manifest file.", } } if err != nil { return err } } s.OwnerTeams = []string{team} err = serviceValidate(s) if err != nil { return err } allowed := permission.Check(t, permission.PermServiceCreate, permission.Context(permission.CtxTeam, s.OwnerTeams[0]), ) if !allowed { return permission.ErrUnauthorized } delete(r.Form, "password") evt, err := event.New(&event.Opts{ Target: serviceTarget(s.Name), Kind: permission.PermServiceCreate, Owner: t, CustomData: event.FormToCustomData(r.Form), Allowed: event.Allowed(permission.PermServiceReadEvents, contextsForServiceProvision(&s)...), }) if err != nil { return err } defer func() { evt.Done(err) }() err = s.Create() if err != nil { httpError := http.StatusInternalServerError if err == service.ErrServiceAlreadyExists { httpError = http.StatusConflict } return &errors.HTTP{Code: httpError, Message: err.Error()} } w.WriteHeader(http.StatusCreated) fmt.Fprint(w, "success") return nil }
// title: service create // path: /services // method: POST // consume: application/x-www-form-urlencoded // responses: // 201: Service created // 400: Invalid data // 401: Unauthorized // 409: Service already exists func serviceCreate(w http.ResponseWriter, r *http.Request, t auth.Token) error { s := service.Service{ Name: r.FormValue("id"), Username: r.FormValue("username"), Endpoint: map[string]string{"production": r.FormValue("endpoint")}, Password: r.FormValue("password"), } team := r.FormValue("team") if team == "" { var err error team, err = permission.TeamForPermission(t, permission.PermServiceCreate) if err == permission.ErrTooManyTeams { return &errors.HTTP{ Code: http.StatusBadRequest, Message: "You must provide a team responsible for this service in the manifest file.", } } if err != nil { return err } } s.OwnerTeams = []string{team} err := serviceValidate(s) if err != nil { return err } allowed := permission.Check(t, permission.PermServiceCreate, permission.Context(permission.CtxTeam, s.OwnerTeams[0]), ) if !allowed { return permission.ErrUnauthorized } rec.Log(t.GetUserName(), "create-service", s.Name, s.Endpoint["production"]) err = s.Create() if err != nil { httpError := http.StatusInternalServerError if err == service.ErrServiceAlreadyExists { httpError = http.StatusConflict } return &errors.HTTP{Code: httpError, Message: err.Error()} } w.WriteHeader(http.StatusCreated) fmt.Fprint(w, "success") return nil }