func checkExif(f *models.File) (passed bool, err error) { var cmdOut []byte args := []string{"-j", f.FullPath} if cmdOut, err = exec.Command("exiftool", args...).Output(); err != nil { return false, errors.Errorf("There was an error retrieving file %s metadata: %s", f.FullPath, err) } var exifs []models.Exif if err = json.Unmarshal(cmdOut, &exifs); err != nil { return false, errors.Errorf("There was an error parsing file %s metadata: %s", f.FullPath, err) } f.Exif = exifs[0] f.Save() workflowExif, _ := reflections.Items(f.Workflow.Exif) var checkError string = "" for fieldName, fieldValue := range workflowExif { if isZeroOfUnderlyingType(fieldValue) { continue } if value, err := reflections.GetField(f.Exif, fieldName); err != nil { return false, errors.Errorf("There was an error validating Exif for file %s. Field '%s' doesn't exist:\n %s", f.FullPath, fieldName, err) } else { if value != fieldValue { checkError += fmt.Sprintf("Field '%s' has value '%v', but '%v' was expected\n", fieldName, value, fieldValue) } } } if checkError != "" { return false, errors.Errorf("There was an error validating Exif for file %s.\n%s", f.FullPath, checkError) } else { return true, nil } }