From 25cab0e1f4fdd89512088d0d02c4abd7b4d11773 Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Mon, 21 Mar 2022 19:46:51 +0100 Subject: [PATCH] [bugfix] Fix images not being processed correctly sometimes (#437) * bump exif-terminator to latest version * add and test giant turnip from turnip.farm * don't error if content property is nil --- go.mod | 4 +- go.sum | 8 +- .../dereferencing/dereferencer_test.go | 10 +- .../federation/dereferencing/status_test.go | 47 ++++++ internal/media/image.go | 6 +- internal/media/processingmedia.go | 2 + testrig/media/giant-turnip-world-record.jpg | Bin 0 -> 77139 bytes testrig/testmodels.go | 148 +++++++++++++++--- .../exif-terminator/jpeg.go | 2 +- .../exif-terminator/logger.go | 47 ++++++ .../exif-terminator/terminator.go | 7 +- .../go-jpeg-image-structure/v2/.MODULE_ROOT | 0 .../go-jpeg-image-structure/v2/LICENSE | 0 .../go-jpeg-image-structure/v2/README.md | 0 .../go-jpeg-image-structure/v2/markers.go | 0 .../v2/media_parser.go | 0 .../go-jpeg-image-structure/v2/segment.go | 0 .../v2/segment_list.go | 0 .../go-jpeg-image-structure/v2/splitter.go | 4 +- .../v2/testing_common.go | 0 .../go-jpeg-image-structure/v2/utility.go | 0 vendor/modules.txt | 6 +- 22 files changed, 245 insertions(+), 46 deletions(-) create mode 100644 testrig/media/giant-turnip-world-record.jpg create mode 100644 vendor/github.com/superseriousbusiness/exif-terminator/logger.go rename vendor/github.com/{dsoprea => superseriousbusiness}/go-jpeg-image-structure/v2/.MODULE_ROOT (100%) rename vendor/github.com/{dsoprea => superseriousbusiness}/go-jpeg-image-structure/v2/LICENSE (100%) rename vendor/github.com/{dsoprea => superseriousbusiness}/go-jpeg-image-structure/v2/README.md (100%) rename vendor/github.com/{dsoprea => superseriousbusiness}/go-jpeg-image-structure/v2/markers.go (100%) rename vendor/github.com/{dsoprea => superseriousbusiness}/go-jpeg-image-structure/v2/media_parser.go (100%) rename vendor/github.com/{dsoprea => superseriousbusiness}/go-jpeg-image-structure/v2/segment.go (100%) rename vendor/github.com/{dsoprea => superseriousbusiness}/go-jpeg-image-structure/v2/segment_list.go (100%) rename vendor/github.com/{dsoprea => superseriousbusiness}/go-jpeg-image-structure/v2/splitter.go (99%) rename vendor/github.com/{dsoprea => superseriousbusiness}/go-jpeg-image-structure/v2/testing_common.go (100%) rename vendor/github.com/{dsoprea => superseriousbusiness}/go-jpeg-image-structure/v2/utility.go (100%) diff --git a/go.mod b/go.mod index e83d3966c..428a1f3a5 100644 --- a/go.mod +++ b/go.mod @@ -32,7 +32,7 @@ require ( github.com/spf13/viper v1.10.0 github.com/stretchr/testify v1.7.0 github.com/superseriousbusiness/activity v1.0.1-0.20211113133524-56560b73ace8 - github.com/superseriousbusiness/exif-terminator v0.1.0 + github.com/superseriousbusiness/exif-terminator v0.2.0 github.com/superseriousbusiness/oauth2/v4 v4.3.2-SSB github.com/tdewolff/minify/v2 v2.9.22 github.com/uptrace/bun v1.0.20 @@ -59,7 +59,6 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/dsoprea/go-exif/v3 v3.0.0-20210625224831-a6301f85c82b // indirect github.com/dsoprea/go-iptc v0.0.0-20200610044640-bc9ca208b413 // indirect - github.com/dsoprea/go-jpeg-image-structure/v2 v2.0.0-20210512043942-b434301c6836 // indirect github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd // indirect github.com/dsoprea/go-photoshop-info-format v0.0.0-20200610045659-121dd752914d // indirect github.com/dsoprea/go-png-image-structure/v2 v2.0.0-20210512210324-29b889a6093d // indirect @@ -103,6 +102,7 @@ require ( github.com/spf13/cast v1.4.1 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/subosito/gotenv v1.2.0 // indirect + github.com/superseriousbusiness/go-jpeg-image-structure/v2 v2.0.0-20220321154430-d89a106fdabe // indirect github.com/tdewolff/parse/v2 v2.5.23 // indirect github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc // indirect github.com/ugorji/go/codec v1.2.6 // indirect diff --git a/go.sum b/go.sum index 700c18a9d..22b170482 100644 --- a/go.sum +++ b/go.sum @@ -155,8 +155,6 @@ github.com/dsoprea/go-exif/v3 v3.0.0-20210625224831-a6301f85c82b/go.mod h1:cg5SN github.com/dsoprea/go-iptc v0.0.0-20200609062250-162ae6b44feb/go.mod h1:kYIdx9N9NaOyD7U6D+YtExN7QhRm+5kq7//yOsRXQtM= github.com/dsoprea/go-iptc v0.0.0-20200610044640-bc9ca208b413 h1:YDRiMEm32T60Kpm35YzOK9ZHgjsS1Qrid+XskNcsdp8= github.com/dsoprea/go-iptc v0.0.0-20200610044640-bc9ca208b413/go.mod h1:kYIdx9N9NaOyD7U6D+YtExN7QhRm+5kq7//yOsRXQtM= -github.com/dsoprea/go-jpeg-image-structure/v2 v2.0.0-20210512043942-b434301c6836 h1:KGCiMMWxODEMmI3+9Ms04l73efoqFVNKKKPbVyOvKrU= -github.com/dsoprea/go-jpeg-image-structure/v2 v2.0.0-20210512043942-b434301c6836/go.mod h1:WaARaUjQuSuDCDFAiU/GwzfxMTJBulfEhqEA2Tx6B4Y= github.com/dsoprea/go-logging v0.0.0-20190624164917-c4f10aab7696/go.mod h1:Nm/x2ZUNRW6Fe5C3LxdY1PyZY5wmDv/s5dkPJ/VB3iA= github.com/dsoprea/go-logging v0.0.0-20200517223158-a10564966e9d/go.mod h1:7I+3Pe2o/YSU88W0hWlm9S22W7XI1JFNJ86U0zPKMf8= github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd h1:l+vLbuxptsC6VQyQsfD7NnEC8BZuFpz45PgY+pH8YTg= @@ -655,8 +653,10 @@ github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/superseriousbusiness/activity v1.0.1-0.20211113133524-56560b73ace8 h1:8Bwy6CSsT33/sF5FhjND4vr7jiJCaq4elNTAW4rUzVc= github.com/superseriousbusiness/activity v1.0.1-0.20211113133524-56560b73ace8/go.mod h1:ZY9xwFDucvp6zTvM6FQZGl8PSOofPBFIAy6gSc85XkY= -github.com/superseriousbusiness/exif-terminator v0.1.0 h1:ePzfV0vcw+tm/haSOGzKbBTKkHAvyQLbCzfsdVkb3hM= -github.com/superseriousbusiness/exif-terminator v0.1.0/go.mod h1:pmlOKzkFZWmqaucLAtrRbZG0R5F3dbrcLWOcd7gAOLI= +github.com/superseriousbusiness/exif-terminator v0.2.0 h1:C21KOUr54E37qTqYS7WJX0J83sNzzCwBEy0KXyDprqU= +github.com/superseriousbusiness/exif-terminator v0.2.0/go.mod h1:DHJuKguXqyOVqB/oyOylutEDIZCbkYsn2GZFNSUDT9E= +github.com/superseriousbusiness/go-jpeg-image-structure/v2 v2.0.0-20220321154430-d89a106fdabe h1:ksl2oCx/Qo8sNDc3Grb8WGKBM9nkvhCm25uvlT86azE= +github.com/superseriousbusiness/go-jpeg-image-structure/v2 v2.0.0-20220321154430-d89a106fdabe/go.mod h1:gH4P6gN1V+wmIw5o97KGaa1RgXB/tVpC2UNzijhg3E4= github.com/superseriousbusiness/oauth2/v4 v4.3.2-SSB h1:PtW2w6budTvRV2J5QAoSvThTHBuvh8t/+BXIZFAaBSc= github.com/superseriousbusiness/oauth2/v4 v4.3.2-SSB/go.mod h1:uYC/W92oVRJ49Vh1GcvTqpeFqHi+Ovrl2sMllQWRAEo= github.com/tdewolff/minify/v2 v2.9.22 h1:PlmaAakaJHdMMdTTwjjsuSwIxKqWPTlvjTj6a/g/ILU= diff --git a/internal/federation/dereferencing/dereferencer_test.go b/internal/federation/dereferencing/dereferencer_test.go index fe66abce4..cabb3d6a8 100644 --- a/internal/federation/dereferencing/dereferencer_test.go +++ b/internal/federation/dereferencing/dereferencer_test.go @@ -50,17 +50,15 @@ type DereferencerStandardTestSuite struct { dereferencer dereferencing.Dereferencer } -func (suite *DereferencerStandardTestSuite) SetupSuite() { +func (suite *DereferencerStandardTestSuite) SetupTest() { + testrig.InitTestConfig() + testrig.InitTestLog() + suite.testAccounts = testrig.NewTestAccounts() suite.testRemoteStatuses = testrig.NewTestFediStatuses() suite.testRemotePeople = testrig.NewTestFediPeople() suite.testRemoteGroups = testrig.NewTestFediGroups() suite.testRemoteAttachments = testrig.NewTestFediAttachments("../../../testrig/media") -} - -func (suite *DereferencerStandardTestSuite) SetupTest() { - testrig.InitTestLog() - testrig.InitTestConfig() suite.db = testrig.NewTestDB() suite.storage = testrig.NewTestStorage() diff --git a/internal/federation/dereferencing/status_test.go b/internal/federation/dereferencing/status_test.go index 89bcedd70..08363f580 100644 --- a/internal/federation/dereferencing/status_test.go +++ b/internal/federation/dereferencing/status_test.go @@ -131,6 +131,53 @@ func (suite *StatusTestSuite) TestDereferenceStatusWithMention() { suite.False(m.Silent) } +func (suite *StatusTestSuite) TestDereferenceStatusWithImageAndNoContent() { + fetchingAccount := suite.testAccounts["local_account_1"] + + statusURL := testrig.URLMustParse("https://turnip.farm/users/turniplover6969/statuses/70c53e54-3146-42d5-a630-83c8b6c7c042") + status, statusable, new, err := suite.dereferencer.GetRemoteStatus(context.Background(), fetchingAccount.Username, statusURL, false, false) + suite.NoError(err) + suite.NotNil(status) + suite.NotNil(statusable) + suite.True(new) + + // status values should be set + suite.Equal("https://turnip.farm/users/turniplover6969/statuses/70c53e54-3146-42d5-a630-83c8b6c7c042", status.URI) + suite.Equal("https://turnip.farm/@turniplover6969/70c53e54-3146-42d5-a630-83c8b6c7c042", status.URL) + suite.Equal("", status.Content) + suite.Equal("https://turnip.farm/users/turniplover6969", status.AccountURI) + suite.False(status.Local) + suite.Empty(status.ContentWarning) + suite.Equal(gtsmodel.VisibilityPublic, status.Visibility) + suite.Equal(ap.ObjectNote, status.ActivityStreamsType) + + // status should be in the database + dbStatus, err := suite.db.GetStatusByURI(context.Background(), status.URI) + suite.NoError(err) + suite.Equal(status.ID, dbStatus.ID) + suite.True(dbStatus.Federated) + suite.True(dbStatus.Boostable) + suite.True(dbStatus.Replyable) + suite.True(dbStatus.Likeable) + + // account should be in the database now too + account, err := suite.db.GetAccountByURI(context.Background(), status.AccountURI) + suite.NoError(err) + suite.NotNil(account) + suite.True(account.Discoverable) + suite.Equal("https://turnip.farm/users/turniplover6969", account.URI) + suite.Equal("I just think they're neat", account.Note) + suite.Equal("Turnip Lover 6969", account.DisplayName) + suite.Equal("turniplover6969", account.Username) + suite.NotNil(account.PublicKey) + suite.Nil(account.PrivateKey) + + // we should have an attachment in the database + a := >smodel.MediaAttachment{} + err = suite.db.GetWhere(context.Background(), []db.Where{{Key: "status_id", Value: status.ID}}, a) + suite.NoError(err) +} + func TestStatusTestSuite(t *testing.T) { suite.Run(t, new(StatusTestSuite)) } diff --git a/internal/media/image.go b/internal/media/image.go index e5390cee5..4f2db0e95 100644 --- a/internal/media/image.go +++ b/internal/media/image.go @@ -125,7 +125,7 @@ func deriveThumbnail(r io.Reader, contentType string, createBlurhash bool) (*ima } if err != nil { - return nil, err + return nil, fmt.Errorf("error decoding image as %s: %s", contentType, err) } if i == nil { @@ -151,7 +151,7 @@ func deriveThumbnail(r io.Reader, contentType string, createBlurhash bool) (*ima tiny := resize.Thumbnail(32, 32, thumb, resize.NearestNeighbor) bh, err := blurhash.Encode(4, 3, tiny) if err != nil { - return nil, err + return nil, fmt.Errorf("error creating blurhash: %s", err) } im.blurhash = bh } @@ -161,7 +161,7 @@ func deriveThumbnail(r io.Reader, contentType string, createBlurhash bool) (*ima // Quality isn't extremely important for thumbnails, so 75 is "good enough" Quality: 75, }); err != nil { - return nil, err + return nil, fmt.Errorf("error encoding thumbnail: %s", err) } im.small = out.Bytes() diff --git a/internal/media/processingmedia.go b/internal/media/processingmedia.go index 3cf4805f7..63e03a409 100644 --- a/internal/media/processingmedia.go +++ b/internal/media/processingmedia.go @@ -260,6 +260,7 @@ func (p *ProcessingMedia) store(ctx context.Context) error { if err != nil { return fmt.Errorf("store: error executing data function: %s", err) } + logrus.Tracef("store: reading %d bytes from data function for media %s", fileSize, p.attachment.URL) // defer closing the reader when we're done with it defer func() { @@ -342,6 +343,7 @@ func (p *ProcessingMedia) store(ctx context.Context) error { return p.postData(ctx) } + logrus.Tracef("store: finished storing initial data for attachment %s", p.attachment.URL) return nil } diff --git a/testrig/media/giant-turnip-world-record.jpg b/testrig/media/giant-turnip-world-record.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d255c5a66f6e02ac2f3d775026dde00cfaedf1b5 GIT binary patch literal 77139 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 literal 0 HcmV?d00001 diff --git a/testrig/testmodels.go b/testrig/testmodels.go index c9591b029..5ccd3fb90 100644 --- a/testrig/testmodels.go +++ b/testrig/testmodels.go @@ -1460,7 +1460,7 @@ type ActivityWithSignature struct { // A struct of accounts needs to be passed in because the activities will also be bundled along with // their requesting signatures. func NewTestActivities(accounts map[string]*gtsmodel.Account) map[string]ActivityWithSignature { - dmForZork := newNote( + dmForZork := newAPNote( URLMustParse("http://fossbros-anonymous.io/users/foss_satan/statuses/5424b153-4553-4f30-9358-7b92f7cd42f6"), URLMustParse("http://fossbros-anonymous.io/@foss_satan/5424b153-4553-4f30-9358-7b92f7cd42f6"), time.Now(), @@ -1470,15 +1470,17 @@ func NewTestActivities(accounts map[string]*gtsmodel.Account) map[string]Activit []*url.URL{URLMustParse("http://localhost:8080/users/the_mighty_zork")}, nil, true, - []vocab.ActivityStreamsMention{}) - createDmForZork := wrapNoteInCreate( + []vocab.ActivityStreamsMention{}, + nil, + ) + createDmForZork := wrapAPNoteInCreate( URLMustParse("http://fossbros-anonymous.io/users/foss_satan/statuses/5424b153-4553-4f30-9358-7b92f7cd42f6/activity"), URLMustParse("http://fossbros-anonymous.io/users/foss_satan"), time.Now(), dmForZork) createDmForZorkSig, createDmForZorkDigest, creatDmForZorkDate := GetSignatureForActivity(createDmForZork, accounts["remote_account_1"].PublicKeyURI, accounts["remote_account_1"].PrivateKey, URLMustParse(accounts["local_account_1"].InboxURI)) - forwardedMessage := newNote( + forwardedMessage := newAPNote( URLMustParse("http://example.org/users/some_user/statuses/afaba698-5740-4e32-a702-af61aa543bc1"), URLMustParse("http://example.org/@some_user/afaba698-5740-4e32-a702-af61aa543bc1"), time.Now(), @@ -1488,8 +1490,10 @@ func NewTestActivities(accounts map[string]*gtsmodel.Account) map[string]Activit []*url.URL{URLMustParse(pub.PublicActivityPubIRI)}, nil, false, - []vocab.ActivityStreamsMention{}) - createForwardedMessage := wrapNoteInCreate( + []vocab.ActivityStreamsMention{}, + nil, + ) + createForwardedMessage := wrapAPNoteInCreate( URLMustParse("http://example.org/users/some_user/statuses/afaba698-5740-4e32-a702-af61aa543bc1/activity"), URLMustParse("http://example.org/users/some_user"), time.Now(), @@ -1520,8 +1524,14 @@ func NewTestFediPeople() map[string]vocab.ActivityStreamsPerson { } newPerson1Pub := &newPerson1Priv.PublicKey + turnipLover6969Priv, err := rsa.GenerateKey(rand.Reader, 2048) + if err != nil { + panic(err) + } + turnipLover6969Pub := &turnipLover6969Priv.PublicKey + return map[string]vocab.ActivityStreamsPerson{ - "https://unknown-instance.com/users/brand_new_person": newPerson( + "https://unknown-instance.com/users/brand_new_person": newAPPerson( URLMustParse("https://unknown-instance.com/users/brand_new_person"), URLMustParse("https://unknown-instance.com/users/brand_new_person/following"), URLMustParse("https://unknown-instance.com/users/brand_new_person/followers"), @@ -1541,6 +1551,26 @@ func NewTestFediPeople() map[string]vocab.ActivityStreamsPerson { "image/png", false, ), + "https://turnip.farm/users/turniplover6969": newAPPerson( + URLMustParse("https://turnip.farm/users/turniplover6969"), + URLMustParse("https://turnip.farm/users/turniplover6969/following"), + URLMustParse("https://turnip.farm/users/turniplover6969/followers"), + URLMustParse("https://turnip.farm/users/turniplover6969/inbox"), + URLMustParse("https://turnip.farm/users/turniplover6969/outbox"), + URLMustParse("https://turnip.farm/users/turniplover6969/collections/featured"), + "turniplover6969", + "Turnip Lover 6969", + "I just think they're neat", + URLMustParse("https://turnip.farm/@turniplover6969"), + true, + URLMustParse("https://turnip.farm/users/turniplover6969#main-key"), + turnipLover6969Pub, + nil, + "image/jpeg", + nil, + "image/png", + false, + ), } } @@ -1552,7 +1582,7 @@ func NewTestFediGroups() map[string]vocab.ActivityStreamsGroup { newGroup1Pub := &newGroup1Priv.PublicKey return map[string]vocab.ActivityStreamsGroup{ - "https://unknown-instance.com/groups/some_group": newGroup( + "https://unknown-instance.com/groups/some_group": newAPGroup( URLMustParse("https://unknown-instance.com/groups/some_group"), URLMustParse("https://unknown-instance.com/groups/some_group/following"), URLMustParse("https://unknown-instance.com/groups/some_group/followers"), @@ -1592,6 +1622,11 @@ func NewTestFediAttachments(relativePath string) map[string]RemoteAttachmentFile panic(err) } + massiveFuckingTurnipBytes, err := os.ReadFile(fmt.Sprintf("%s/giant-turnip-world-record.jpg", relativePath)) + if err != nil { + panic(err) + } + return map[string]RemoteAttachmentFile{ "https://s3-us-west-2.amazonaws.com/plushcity/media_attachments/files/106/867/380/219/163/828/original/88e8758c5f011439.jpg": { Data: beeBytes, @@ -1601,12 +1636,16 @@ func NewTestFediAttachments(relativePath string) map[string]RemoteAttachmentFile Data: thoughtsOfDogBytes, ContentType: "image/jpeg", }, + "https://turnip.farm/attachments/f17843c7-015e-4251-9b5a-91389c49ee57.jpg": { + Data: massiveFuckingTurnipBytes, + ContentType: "image/jpeg", + }, } } func NewTestFediStatuses() map[string]vocab.ActivityStreamsNote { return map[string]vocab.ActivityStreamsNote{ - "https://unknown-instance.com/users/brand_new_person/statuses/01FE4NTHKWW7THT67EF10EB839": newNote( + "https://unknown-instance.com/users/brand_new_person/statuses/01FE4NTHKWW7THT67EF10EB839": newAPNote( URLMustParse("https://unknown-instance.com/users/brand_new_person/statuses/01FE4NTHKWW7THT67EF10EB839"), URLMustParse("https://unknown-instance.com/users/@brand_new_person/01FE4NTHKWW7THT67EF10EB839"), time.Now(), @@ -1618,9 +1657,10 @@ func NewTestFediStatuses() map[string]vocab.ActivityStreamsNote { }, []*url.URL{}, false, - []vocab.ActivityStreamsMention{}, + nil, + nil, ), - "https://unknown-instance.com/users/brand_new_person/statuses/01FE5Y30E3W4P7TRE0R98KAYQV": newNote( + "https://unknown-instance.com/users/brand_new_person/statuses/01FE5Y30E3W4P7TRE0R98KAYQV": newAPNote( URLMustParse("https://unknown-instance.com/users/brand_new_person/statuses/01FE5Y30E3W4P7TRE0R98KAYQV"), URLMustParse("https://unknown-instance.com/users/@brand_new_person/01FE5Y30E3W4P7TRE0R98KAYQV"), time.Now(), @@ -1633,11 +1673,34 @@ func NewTestFediStatuses() map[string]vocab.ActivityStreamsNote { []*url.URL{}, false, []vocab.ActivityStreamsMention{ - newMention( + newAPMention( URLMustParse("http://localhost:8080/users/the_mighty_zork"), "@the_mighty_zork@localhost:8080", ), }, + nil, + ), + "https://turnip.farm/users/turniplover6969/statuses/70c53e54-3146-42d5-a630-83c8b6c7c042": newAPNote( + URLMustParse("https://turnip.farm/users/turniplover6969/statuses/70c53e54-3146-42d5-a630-83c8b6c7c042"), + URLMustParse("https://turnip.farm/@turniplover6969/70c53e54-3146-42d5-a630-83c8b6c7c042"), + time.Now(), + "", + "", + URLMustParse("https://turnip.farm/users/turniplover6969"), + []*url.URL{ + URLMustParse(pub.PublicActivityPubIRI), + }, + []*url.URL{}, + false, + nil, + []vocab.ActivityStreamsImage{ + newAPImage( + URLMustParse("https://turnip.farm/attachments/f17843c7-015e-4251-9b5a-91389c49ee57.jpg"), + "image/jpeg", + "", + "", + ), + }, ), } } @@ -1799,7 +1862,7 @@ func GetSignatureForDereference(pubKeyID string, privkey crypto.PrivateKey, dest return } -func newPerson( +func newAPPerson( profileIDURI *url.URL, followingURI *url.URL, followersURI *url.URL, @@ -1982,7 +2045,7 @@ func newPerson( return person } -func newGroup( +func newAPGroup( profileIDURI *url.URL, followingURI *url.URL, followersURI *url.URL, @@ -2165,7 +2228,7 @@ func newGroup( return group } -func newMention(uri *url.URL, namestring string) vocab.ActivityStreamsMention { +func newAPMention(uri *url.URL, namestring string) vocab.ActivityStreamsMention { mention := streams.NewActivityStreamsMention() hrefProp := streams.NewActivityStreamsHrefProperty() @@ -2179,8 +2242,38 @@ func newMention(uri *url.URL, namestring string) vocab.ActivityStreamsMention { return mention } -// newNote returns a new activity streams note for the given parameters -func newNote( +func newAPImage(url *url.URL, mediaType string, imageDescription string, blurhash string) vocab.ActivityStreamsImage { + image := streams.NewActivityStreamsImage() + + if url != nil { + urlProp := streams.NewActivityStreamsUrlProperty() + urlProp.AppendIRI(url) + image.SetActivityStreamsUrl(urlProp) + } + + if mediaType != "" { + mediaTypeProp := streams.NewActivityStreamsMediaTypeProperty() + mediaTypeProp.Set(mediaType) + image.SetActivityStreamsMediaType(mediaTypeProp) + } + + if imageDescription != "" { + nameProp := streams.NewActivityStreamsNameProperty() + nameProp.AppendXMLSchemaString(imageDescription) + image.SetActivityStreamsName(nameProp) + } + + if blurhash != "" { + blurhashProp := streams.NewTootBlurhashProperty() + blurhashProp.Set(blurhash) + image.SetTootBlurhash(blurhashProp) + } + + return image +} + +// newAPNote returns a new activity streams note for the given parameters +func newAPNote( noteID *url.URL, noteURL *url.URL, noteCreatedAt time.Time, @@ -2190,7 +2283,8 @@ func newNote( noteTo []*url.URL, noteCC []*url.URL, noteSensitive bool, - noteMentions []vocab.ActivityStreamsMention) vocab.ActivityStreamsNote { + noteMentions []vocab.ActivityStreamsMention, + noteAttachments []vocab.ActivityStreamsImage) vocab.ActivityStreamsNote { // create the note itself note := streams.NewActivityStreamsNote() @@ -2255,21 +2349,27 @@ func newNote( note.SetActivityStreamsCc(cc) } - // set note tags - tag := streams.NewActivityStreamsTagProperty() - // mentions + tag := streams.NewActivityStreamsTagProperty() for _, m := range noteMentions { tag.AppendActivityStreamsMention(m) } - note.SetActivityStreamsTag(tag) + // append any attachments as ActivityStreamsImage + if noteAttachments != nil { + attachmentProperty := streams.NewActivityStreamsAttachmentProperty() + for _, a := range noteAttachments { + attachmentProperty.AppendActivityStreamsImage(a) + } + note.SetActivityStreamsAttachment(attachmentProperty) + } + return note } -// wrapNoteInCreate wraps the given activity streams note in a Create activity streams action -func wrapNoteInCreate(createID *url.URL, createActor *url.URL, createPublished time.Time, createNote vocab.ActivityStreamsNote) vocab.ActivityStreamsCreate { +// wrapAPNoteInCreate wraps the given activity streams note in a Create activity streams action +func wrapAPNoteInCreate(createID *url.URL, createActor *url.URL, createPublished time.Time, createNote vocab.ActivityStreamsNote) vocab.ActivityStreamsCreate { // create the.... create create := streams.NewActivityStreamsCreate() diff --git a/vendor/github.com/superseriousbusiness/exif-terminator/jpeg.go b/vendor/github.com/superseriousbusiness/exif-terminator/jpeg.go index 224a9b646..e3da53d54 100644 --- a/vendor/github.com/superseriousbusiness/exif-terminator/jpeg.go +++ b/vendor/github.com/superseriousbusiness/exif-terminator/jpeg.go @@ -23,7 +23,7 @@ import ( "fmt" "io" - jpegstructure "github.com/dsoprea/go-jpeg-image-structure/v2" + jpegstructure "github.com/superseriousbusiness/go-jpeg-image-structure/v2" ) var markerLen = map[byte]int{ diff --git a/vendor/github.com/superseriousbusiness/exif-terminator/logger.go b/vendor/github.com/superseriousbusiness/exif-terminator/logger.go new file mode 100644 index 000000000..e607c55dd --- /dev/null +++ b/vendor/github.com/superseriousbusiness/exif-terminator/logger.go @@ -0,0 +1,47 @@ +/* + exif-terminator + Copyright (C) 2022 SuperSeriousBusiness admin@gotosocial.org + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +package terminator + +import "fmt" + +var logger ErrorLogger + +func init() { + logger = &defaultErrorLogger{} +} + +// ErrorLogger denotes a generic error logging function. +type ErrorLogger interface { + Error(args ...interface{}) +} + +type defaultErrorLogger struct{} + +func (d *defaultErrorLogger) Error(args ...interface{}) { + fmt.Println(args...) +} + +// SetErrorLogger allows a user of the exif-terminator library +// to set the logger that will be used for error logging. +// +// If it is not set, the default error logger will be used, which +// just prints errors to stdout. +func SetErrorLogger(errorLogger ErrorLogger) { + logger = errorLogger +} diff --git a/vendor/github.com/superseriousbusiness/exif-terminator/terminator.go b/vendor/github.com/superseriousbusiness/exif-terminator/terminator.go index b6225f6dc..36f2d8b3a 100644 --- a/vendor/github.com/superseriousbusiness/exif-terminator/terminator.go +++ b/vendor/github.com/superseriousbusiness/exif-terminator/terminator.go @@ -25,7 +25,7 @@ import ( "fmt" "io" - jpegstructure "github.com/dsoprea/go-jpeg-image-structure/v2" + jpegstructure "github.com/superseriousbusiness/go-jpeg-image-structure/v2" pngstructure "github.com/dsoprea/go-png-image-structure/v2" ) @@ -109,8 +109,11 @@ func scanAndClose(scanner *bufio.Scanner, writer io.WriteCloser) { // until the pipeReader starts being read by the caller, which // is why we do this asynchronously go func() { + defer writer.Close() for scanner.Scan() { } - writer.Close() + if scanner.Err() != nil { + logger.Error(scanner.Err()) + } }() } diff --git a/vendor/github.com/dsoprea/go-jpeg-image-structure/v2/.MODULE_ROOT b/vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/.MODULE_ROOT similarity index 100% rename from vendor/github.com/dsoprea/go-jpeg-image-structure/v2/.MODULE_ROOT rename to vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/.MODULE_ROOT diff --git a/vendor/github.com/dsoprea/go-jpeg-image-structure/v2/LICENSE b/vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/LICENSE similarity index 100% rename from vendor/github.com/dsoprea/go-jpeg-image-structure/v2/LICENSE rename to vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/LICENSE diff --git a/vendor/github.com/dsoprea/go-jpeg-image-structure/v2/README.md b/vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/README.md similarity index 100% rename from vendor/github.com/dsoprea/go-jpeg-image-structure/v2/README.md rename to vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/README.md diff --git a/vendor/github.com/dsoprea/go-jpeg-image-structure/v2/markers.go b/vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/markers.go similarity index 100% rename from vendor/github.com/dsoprea/go-jpeg-image-structure/v2/markers.go rename to vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/markers.go diff --git a/vendor/github.com/dsoprea/go-jpeg-image-structure/v2/media_parser.go b/vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/media_parser.go similarity index 100% rename from vendor/github.com/dsoprea/go-jpeg-image-structure/v2/media_parser.go rename to vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/media_parser.go diff --git a/vendor/github.com/dsoprea/go-jpeg-image-structure/v2/segment.go b/vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/segment.go similarity index 100% rename from vendor/github.com/dsoprea/go-jpeg-image-structure/v2/segment.go rename to vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/segment.go diff --git a/vendor/github.com/dsoprea/go-jpeg-image-structure/v2/segment_list.go b/vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/segment_list.go similarity index 100% rename from vendor/github.com/dsoprea/go-jpeg-image-structure/v2/segment_list.go rename to vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/segment_list.go diff --git a/vendor/github.com/dsoprea/go-jpeg-image-structure/v2/splitter.go b/vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/splitter.go similarity index 99% rename from vendor/github.com/dsoprea/go-jpeg-image-structure/v2/splitter.go rename to vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/splitter.go index 8e9c7c020..1856beddf 100644 --- a/vendor/github.com/dsoprea/go-jpeg-image-structure/v2/splitter.go +++ b/vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/splitter.go @@ -232,8 +232,8 @@ func (js *JpegSplitter) readSegment(data []byte) (count int, err error) { err = binary.Read(b, binary.BigEndian, &l) log.PanicIf(err) - if l <= 2 { - log.Panicf("length of size read for non-special marker (%02x) is unexpectedly not more than two.", markerId) + if l < 2 { + log.Panicf("length of size read for non-special marker (%02x) is unexpectedly less than two.", markerId) } // (l includes the bytes of the length itself.) diff --git a/vendor/github.com/dsoprea/go-jpeg-image-structure/v2/testing_common.go b/vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/testing_common.go similarity index 100% rename from vendor/github.com/dsoprea/go-jpeg-image-structure/v2/testing_common.go rename to vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/testing_common.go diff --git a/vendor/github.com/dsoprea/go-jpeg-image-structure/v2/utility.go b/vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/utility.go similarity index 100% rename from vendor/github.com/dsoprea/go-jpeg-image-structure/v2/utility.go rename to vendor/github.com/superseriousbusiness/go-jpeg-image-structure/v2/utility.go diff --git a/vendor/modules.txt b/vendor/modules.txt index c28759538..c3e5c9d79 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -57,7 +57,6 @@ github.com/dsoprea/go-exif/v3/undefined github.com/dsoprea/go-iptc # github.com/dsoprea/go-jpeg-image-structure/v2 v2.0.0-20210512043942-b434301c6836 ## explicit; go 1.12 -github.com/dsoprea/go-jpeg-image-structure/v2 # github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd ## explicit; go 1.13 github.com/dsoprea/go-logging @@ -471,9 +470,12 @@ github.com/superseriousbusiness/activity/streams/values/rfc2045 github.com/superseriousbusiness/activity/streams/values/rfc5988 github.com/superseriousbusiness/activity/streams/values/string github.com/superseriousbusiness/activity/streams/vocab -# github.com/superseriousbusiness/exif-terminator v0.1.0 +# github.com/superseriousbusiness/exif-terminator v0.2.0 ## explicit; go 1.17 github.com/superseriousbusiness/exif-terminator +# github.com/superseriousbusiness/go-jpeg-image-structure/v2 v2.0.0-20220321154430-d89a106fdabe +## explicit; go 1.17 +github.com/superseriousbusiness/go-jpeg-image-structure/v2 # github.com/superseriousbusiness/oauth2/v4 v4.3.2-SSB ## explicit; go 1.13 github.com/superseriousbusiness/oauth2/v4