From 700b7eaab727ae351e71514b677fa7b7dc65c51e Mon Sep 17 00:00:00 2001 From: tobi Date: Thu, 8 May 2025 11:11:25 +0000 Subject: [feature] Add extra opengraph meta tags (#4154) # Description > If this is a code change, please include a summary of what you've coded, and link to the issue(s) it closes/implements. > > If this is a documentation change, please briefly describe what you've changed and why. Update our opengraph meta tag code stuff: - Use `audio` and `video` types where appropriate. - Include fall back to `image` types. - Include `twitter:card=summary` or `twitter:card=summary_large_image` where appropriate (closes https://codeberg.org/superseriousbusiness/gotosocial/issues/2776) - Include avatar description where possible. - Include mime type for media. - Set `modified_time` properly based on latest edit time. Examples Status with one image attachment, that's been edited: ```html ``` Status with one audio file (with thumbnail): ```html ``` ## Checklist Please put an x inside each checkbox to indicate that you've read and followed it: `[ ]` -> `[x]` If this is a documentation change, only the first checkbox must be filled (you can delete the others if you want). - [x] I/we have read the [GoToSocial contribution guidelines](https://codeberg.org/superseriousbusiness/gotosocial/src/branch/main/CONTRIBUTING.md). - [x] I/we have discussed the proposed changes already, either in an issue on the repository, or in the Matrix chat. - [x] I/we have not leveraged AI to create the proposed changes. - [x] I/we have performed a self-review of added code. - [x] I/we have written code that is legible and maintainable by others. - [x] I/we have commented the added code, particularly in hard-to-understand areas. - [ ] I/we have made any necessary changes to documentation. - [x] I/we have added tests that cover new code. - [x] I/we have run tests and they pass locally with the changes. - [x] I/we have run `go fmt ./...` and `golangci-lint run`. Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4154 Reviewed-by: Daenney Co-authored-by: tobi Co-committed-by: tobi --- internal/api/util/opengraph_test.go | 67 +++++++++++++++++++++++++------------ 1 file changed, 45 insertions(+), 22 deletions(-) (limited to 'internal/api/util/opengraph_test.go') diff --git a/internal/api/util/opengraph_test.go b/internal/api/util/opengraph_test.go index 821aabaff..dc463c041 100644 --- a/internal/api/util/opengraph_test.go +++ b/internal/api/util/opengraph_test.go @@ -18,7 +18,6 @@ package util import ( - "fmt" "testing" apimodel "code.superseriousbusiness.org/gotosocial/internal/api/model" @@ -40,7 +39,7 @@ func (suite *OpenGraphTestSuite) TestParseDescription() { for _, tt := range tests { tt := tt suite.Run(tt.name, func() { - suite.Equal(fmt.Sprintf("content=\"%s\"", tt.exp), ParseDescription(tt.in)) + suite.Equal(tt.exp, ParseDescription(tt.in)) }) } } @@ -49,6 +48,8 @@ func (suite *OpenGraphTestSuite) TestWithAccountWithNote() { baseMeta := OGBase(&apimodel.InstanceV1{ AccountDomain: "example.org", Languages: []string{"en"}, + Thumbnail: "https://example.org/instance-avatar.webp", + ThumbnailType: "image/webp", }) acct := &apimodel.Account{ @@ -57,21 +58,31 @@ func (suite *OpenGraphTestSuite) TestWithAccountWithNote() { URL: "https://example.org/@example_account", Note: "

This is my profile, read it and weep! Weep then!

", Username: "example_account", + Avatar: "https://example.org/avatar.jpg", } accountMeta := baseMeta.WithAccount(&apimodel.WebAccount{Account: acct}) suite.EqualValues(OGMeta{ - Title: "example person!!, @example_account@example.org", - Type: "profile", - Locale: "en", - URL: "https://example.org/@example_account", - SiteName: "example.org", - Description: "content=\"This is my profile, read it and weep! Weep then!\"", - Image: "", - ImageWidth: "", - ImageHeight: "", - ImageAlt: "Avatar for example_account", + Title: "example person!!, @example_account@example.org", + Type: "profile", + Locale: "en", + URL: "https://example.org/@example_account", + SiteName: "example.org", + Description: "This is my profile, read it and weep! Weep then!", + Media: []OGMedia{ + { + OGType: "image", + Alt: "Avatar for example_account", + URL: "https://example.org/avatar.jpg", + }, + { + // Instance avatar. + OGType: "image", + URL: "https://example.org/instance-avatar.webp", + MIMEType: "image/webp", + }, + }, ArticlePublisher: "", ArticleAuthor: "", ArticleModifiedTime: "", @@ -84,6 +95,8 @@ func (suite *OpenGraphTestSuite) TestWithAccountNoNote() { baseMeta := OGBase(&apimodel.InstanceV1{ AccountDomain: "example.org", Languages: []string{"en"}, + Thumbnail: "https://example.org/instance-avatar.webp", + ThumbnailType: "image/webp", }) acct := &apimodel.Account{ @@ -92,21 +105,31 @@ func (suite *OpenGraphTestSuite) TestWithAccountNoNote() { URL: "https://example.org/@example_account", Note: "", // <- empty Username: "example_account", + Avatar: "https://example.org/avatar.jpg", } accountMeta := baseMeta.WithAccount(&apimodel.WebAccount{Account: acct}) suite.EqualValues(OGMeta{ - Title: "example person!!, @example_account@example.org", - Type: "profile", - Locale: "en", - URL: "https://example.org/@example_account", - SiteName: "example.org", - Description: "content=\"This GoToSocial user hasn't written a bio yet!\"", - Image: "", - ImageWidth: "", - ImageHeight: "", - ImageAlt: "Avatar for example_account", + Title: "example person!!, @example_account@example.org", + Type: "profile", + Locale: "en", + URL: "https://example.org/@example_account", + SiteName: "example.org", + Description: "This GoToSocial user hasn't written a bio yet!", + Media: []OGMedia{ + { + OGType: "image", + Alt: "Avatar for example_account", + URL: "https://example.org/avatar.jpg", + }, + { + // Instance avatar. + OGType: "image", + URL: "https://example.org/instance-avatar.webp", + MIMEType: "image/webp", + }, + }, ArticlePublisher: "", ArticleAuthor: "", ArticleModifiedTime: "", -- cgit v1.2.3