示例#1
0
//AppcPostCompleteV1Handler is
func AppcPostCompleteV1Handler(ctx *macaron.Context) (int, []byte) {
	namespace := ctx.Params(":namespace")
	repository := ctx.Params(":repository")
	version := ctx.Params(":version")
	aci := ctx.Params(":aci")

	complete := new(CompleteMsg)
	i := new(models.ACIv1)
	r := new(models.AppcV1)

	if err := r.Get(namespace, repository); err != nil {
		log.Errorf("[%s] get AppcV1 repository error: %s", ctx.Req.RequestURI, err.Error())

		result, _ := json.Marshal(CompleteMsg{
			Success:      false,
			Reason:       "",
			ServerReason: "Get Appc Repository Error.",
		})
		return http.StatusBadRequest, result
	}

	if err := i.Get(r.ID, version, aci); err != nil {
		log.Errorf("[%s] get ACIV1 data error: %s", ctx.Req.RequestURI, err.Error())

		result, _ := json.Marshal(CompleteMsg{
			Success:      false,
			Reason:       "",
			ServerReason: "Get ACI Data Error.",
		})
		return http.StatusBadRequest, result
	}

	data, _ := ctx.Req.Body().Bytes()
	if err := json.Unmarshal(data, &complete); err != nil {
		log.Errorf("[%s] decode complete json dataerror: %s", ctx.Req.RequestURI, err.Error())

		result, _ := json.Marshal(CompleteMsg{
			Success:      false,
			Reason:       "",
			ServerReason: "Decode Complete JSON Data Error.",
		})
		return http.StatusBadRequest, result
	}

	if complete.Success == true {
		root, _ := os.Getwd()
		sign := fmt.Sprintf("%s/%s", root, "external/signs")

		if err := signature.VerifyACISignature(i.Path, i.Sign, sign); err != nil {
			log.Errorf("[%s] Verify ACI signature error: %s", ctx.Req.RequestURI, err.Error())

			result, _ := json.Marshal(CompleteMsg{
				Success:      false,
				Reason:       "",
				ServerReason: "Verify ACI Signature Error.",
			})
			return http.StatusBadRequest, result
		}

		if err := i.Unlocked(r.ID, version, aci); err != nil {
			log.Errorf("[%s] Unlocked ACI file error: %s", ctx.Req.RequestURI, err.Error())

			result, _ := json.Marshal(CompleteMsg{
				Success:      false,
				Reason:       "",
				ServerReason: "Unlocked ACI File Error.",
			})

			return http.StatusBadRequest, result
		}

		result, _ := json.Marshal(CompleteMsg{
			Success:      true,
			Reason:       "",
			ServerReason: "",
		})
		return http.StatusOK, result
	}

	result, _ := json.Marshal(CompleteMsg{
		Success:      false,
		Reason:       complete.Reason,
		ServerReason: "",
	})

	return http.StatusBadRequest, result
}