func()

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},
	})
}