in api/internal/handler/migrate/migrate.go [86:133]
func (h *Handler) ImportConfig(c *gin.Context) {
paraMode := c.PostForm("mode")
mode := migrate.ModeReturn
if m, ok := modeMap[paraMode]; ok {
mode = m
}
file, _, err := c.Request.FormFile("file")
if err != nil {
c.JSON(http.StatusInternalServerError, err)
return
}
content, err := ioutil.ReadAll(file)
if err != nil {
c.JSON(http.StatusInternalServerError, err)
return
}
// checksum uint32,4 bytes
importData := content[:len(content)-4]
checksum := binary.BigEndian.Uint32(content[len(content)-4:])
if checksum != crc32.ChecksumIEEE(importData) {
c.JSON(http.StatusOK, &data.BaseError{
Code: consts.ErrBadRequest,
Message: "Checksum check failure,maybe file broken",
})
return
}
conflictData, err := migrate.Import(c, importData, mode)
if err != nil {
if err == migrate.ErrConflict {
c.JSON(http.StatusOK, &data.BaseError{
Code: consts.ErrBadRequest,
Message: "Config conflict",
Data: ImportOutput{ConflictItems: conflictData},
})
} else {
log.Errorf("Import failed: %s", err)
c.JSON(http.StatusOK, &data.BaseError{
Code: consts.ErrBadRequest,
Message: err.Error(),
Data: ImportOutput{ConflictItems: conflictData},
})
}
return
}
c.JSON(http.StatusOK, &data.Response{
Data: ImportOutput{ConflictItems: conflictData},
})
}