// Post ... func (t *TargetAPI) Post() { target := &models.RepTarget{} t.DecodeJSONReqAndValidate(target) ta, err := dao.GetRepTargetByName(target.Name) if err != nil { log.Errorf("failed to get target %s: %v", target.Name, err) t.CustomAbort(http.StatusInternalServerError, http.StatusText(http.StatusInternalServerError)) } if ta != nil { t.CustomAbort(http.StatusConflict, "name is already used") } ta, err = dao.GetRepTargetByEndpoint(target.URL) if err != nil { log.Errorf("failed to get target [ %s ]: %v", target.URL, err) t.CustomAbort(http.StatusInternalServerError, http.StatusText(http.StatusInternalServerError)) } if ta != nil { t.CustomAbort(http.StatusConflict, fmt.Sprintf("the target whose endpoint is %s already exists", target.URL)) } if len(target.Password) != 0 { target.Password, err = utils.ReversibleEncrypt(target.Password, t.secretKey) if err != nil { log.Errorf("failed to encrypt password: %v", err) t.CustomAbort(http.StatusInternalServerError, http.StatusText(http.StatusInternalServerError)) } } id, err := dao.AddRepTarget(*target) if err != nil { log.Errorf("failed to add target: %v", err) t.CustomAbort(http.StatusInternalServerError, http.StatusText(http.StatusInternalServerError)) } t.Redirect(http.StatusCreated, strconv.FormatInt(id, 10)) }
// Put ... func (t *TargetAPI) Put() { id := t.GetIDFromURL() originalTarget, err := dao.GetRepTarget(id) if err != nil { log.Errorf("failed to get target %d: %v", id, err) t.CustomAbort(http.StatusInternalServerError, http.StatusText(http.StatusInternalServerError)) } if originalTarget == nil { t.CustomAbort(http.StatusNotFound, http.StatusText(http.StatusNotFound)) } policies, err := dao.GetRepPolicyByTarget(id) if err != nil { log.Errorf("failed to get policies according target %d: %v", id, err) t.CustomAbort(http.StatusInternalServerError, http.StatusText(http.StatusInternalServerError)) } hasEnabledPolicy := false for _, policy := range policies { if policy.Enabled == 1 { hasEnabledPolicy = true break } } if hasEnabledPolicy { t.CustomAbort(http.StatusBadRequest, "the target is associated with policy which is enabled") } target := &models.RepTarget{} t.DecodeJSONReqAndValidate(target) if target.Name != originalTarget.Name { ta, err := dao.GetRepTargetByName(target.Name) if err != nil { log.Errorf("failed to get target %s: %v", target.Name, err) t.CustomAbort(http.StatusInternalServerError, http.StatusText(http.StatusInternalServerError)) } if ta != nil { t.CustomAbort(http.StatusConflict, "name is already used") } } if target.URL != originalTarget.URL { ta, err := dao.GetRepTargetByEndpoint(target.URL) if err != nil { log.Errorf("failed to get target [ %s ]: %v", target.URL, err) t.CustomAbort(http.StatusInternalServerError, http.StatusText(http.StatusInternalServerError)) } if ta != nil { t.CustomAbort(http.StatusConflict, fmt.Sprintf("the target whose endpoint is %s already exists", target.URL)) } } target.ID = id if len(target.Password) != 0 { target.Password, err = utils.ReversibleEncrypt(target.Password, t.secretKey) if err != nil { log.Errorf("failed to encrypt password: %v", err) t.CustomAbort(http.StatusInternalServerError, http.StatusText(http.StatusInternalServerError)) } } if err := dao.UpdateRepTarget(*target); err != nil { log.Errorf("failed to update target %d: %v", id, err) t.CustomAbort(http.StatusInternalServerError, http.StatusText(http.StatusInternalServerError)) } }