//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 }