// Delete ... func (t *TargetAPI) Delete() { id := t.GetIDFromURL() target, 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 target == 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)) } if len(policies) > 0 { t.CustomAbort(http.StatusBadRequest, "the target is used by policies, can not be deleted") } if err = dao.DeleteRepTarget(id); err != nil { log.Errorf("failed to delete target %d: %v", id, err) t.CustomAbort(http.StatusInternalServerError, http.StatusText(http.StatusInternalServerError)) } }
// ListPolicies ... func (t *TargetAPI) ListPolicies() { id := t.GetIDFromURL() target, 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 target == 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)) } t.Data["json"] = policies t.ServeJSON() }
// 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 = utils.ReversibleEncrypt(target.Password) } 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)) } }