summaryrefslogtreecommitdiff
path: root/workhorse/internal/upload/exif
diff options
context:
space:
mode:
Diffstat (limited to 'workhorse/internal/upload/exif')
-rw-r--r--workhorse/internal/upload/exif/exif.go22
-rw-r--r--workhorse/internal/upload/exif/exif_test.go36
-rw-r--r--workhorse/internal/upload/exif/testdata/sample_exif.tiffbin0 -> 1039916 bytes
-rw-r--r--workhorse/internal/upload/exif/testdata/sample_exif_corrupted.jpgbin0 -> 2182 bytes
-rw-r--r--workhorse/internal/upload/exif/testdata/sample_exif_invalid.jpg1
5 files changed, 47 insertions, 12 deletions
diff --git a/workhorse/internal/upload/exif/exif.go b/workhorse/internal/upload/exif/exif.go
index a9307b1ca90..2f8218c3bc3 100644
--- a/workhorse/internal/upload/exif/exif.go
+++ b/workhorse/internal/upload/exif/exif.go
@@ -22,6 +22,14 @@ type cleaner struct {
eof bool
}
+type FileType int
+
+const (
+ TypeUnknown FileType = iota
+ TypeJPEG
+ TypeTIFF
+)
+
func NewCleaner(ctx context.Context, stdin io.Reader) (io.ReadCloser, error) {
c := &cleaner{ctx: ctx}
@@ -100,8 +108,16 @@ func (c *cleaner) startProcessing(stdin io.Reader) error {
return nil
}
-func IsExifFile(filename string) bool {
- filenameMatch := regexp.MustCompile(`(?i)\.(jpg|jpeg|tiff)$`)
+func FileTypeFromSuffix(filename string) FileType {
+ jpegMatch := regexp.MustCompile(`(?i)^[^\n]*\.(jpg|jpeg)$`)
+ if jpegMatch.MatchString(filename) {
+ return TypeJPEG
+ }
+
+ tiffMatch := regexp.MustCompile(`(?i)^[^\n]*\.tiff$`)
+ if tiffMatch.MatchString(filename) {
+ return TypeTIFF
+ }
- return filenameMatch.MatchString(filename)
+ return TypeUnknown
}
diff --git a/workhorse/internal/upload/exif/exif_test.go b/workhorse/internal/upload/exif/exif_test.go
index 373d97f7fce..ee5883d9e08 100644
--- a/workhorse/internal/upload/exif/exif_test.go
+++ b/workhorse/internal/upload/exif/exif_test.go
@@ -11,39 +11,57 @@ import (
"github.com/stretchr/testify/require"
)
-func TestIsExifFile(t *testing.T) {
+func TestFileTypeFromSuffix(t *testing.T) {
tests := []struct {
name string
- expected bool
+ expected FileType
}{
{
name: "/full/path.jpg",
- expected: true,
+ expected: TypeJPEG,
},
{
name: "path.jpeg",
- expected: true,
+ expected: TypeJPEG,
},
{
name: "path.tiff",
- expected: true,
+ expected: TypeTIFF,
},
{
name: "path.JPG",
- expected: true,
+ expected: TypeJPEG,
},
{
name: "path.tar",
- expected: false,
+ expected: TypeUnknown,
},
{
name: "path",
- expected: false,
+ expected: TypeUnknown,
+ },
+ {
+ name: "something.jpg.py",
+ expected: TypeUnknown,
+ },
+ {
+ name: "something.py.jpg",
+ expected: TypeJPEG,
+ },
+ {
+ name: `something.jpg
+ .py`,
+ expected: TypeUnknown,
+ },
+ {
+ name: `something.something
+ .jpg`,
+ expected: TypeUnknown,
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
- require.Equal(t, test.expected, IsExifFile(test.name))
+ require.Equal(t, test.expected, FileTypeFromSuffix(test.name))
})
}
}
diff --git a/workhorse/internal/upload/exif/testdata/sample_exif.tiff b/workhorse/internal/upload/exif/testdata/sample_exif.tiff
new file mode 100644
index 00000000000..6671d818edb
--- /dev/null
+++ b/workhorse/internal/upload/exif/testdata/sample_exif.tiff
Binary files differ
diff --git a/workhorse/internal/upload/exif/testdata/sample_exif_corrupted.jpg b/workhorse/internal/upload/exif/testdata/sample_exif_corrupted.jpg
new file mode 100644
index 00000000000..3b5c692de54
--- /dev/null
+++ b/workhorse/internal/upload/exif/testdata/sample_exif_corrupted.jpg
Binary files differ
diff --git a/workhorse/internal/upload/exif/testdata/sample_exif_invalid.jpg b/workhorse/internal/upload/exif/testdata/sample_exif_invalid.jpg
new file mode 100644
index 00000000000..9f8a284c64f
--- /dev/null
+++ b/workhorse/internal/upload/exif/testdata/sample_exif_invalid.jpg
@@ -0,0 +1 @@
+invalid data