From 006c8b604b88fdddf1a2319e44aa37dd8777efd9 Mon Sep 17 00:00:00 2001 From: tobi <31960611+tsmethurst@users.noreply.github.com> Date: Sun, 4 Sep 2022 14:41:42 +0200 Subject: [PATCH] [feature] Set default header and avatar for API accounts to GtS ones (#799) * validate web-asset-base-dir * move default icons into converter * always ensure avatar + header on api accounts * update tests * add default header * don't return error from web module creation anymore * tidy a bit * use pngs for default avatars rather than svgs --- cmd/gotosocial/action/server/server.go | 5 +- cmd/gotosocial/action/testrig/testrig.go | 5 +- internal/api/client/followrequest/get_test.go | 2 +- .../api/client/instance/instancepatch_test.go | 8 +- internal/config/validate.go | 5 + internal/config/validate_test.go | 9 + .../processing/streaming/notification_test.go | 2 +- internal/typeutils/converter.go | 10 +- internal/typeutils/defaulticons.go | 138 +++++++++++++++ internal/typeutils/internaltofrontend.go | 3 + internal/typeutils/internaltofrontend_test.go | 4 +- internal/web/assets.go | 10 +- internal/web/assetscache.go | 2 +- internal/web/panels.go | 28 +-- internal/web/profile.go | 16 -- internal/web/thread.go | 26 --- internal/web/web.go | 73 +------- .../default_avatars/GoToSocial_icon1.png | Bin 0 -> 19837 bytes .../default_avatars/GoToSocial_icon1.svg | 160 ------------------ .../default_avatars/GoToSocial_icon2.png | Bin 0 -> 21157 bytes .../default_avatars/GoToSocial_icon2.svg | 137 --------------- .../default_avatars/GoToSocial_icon3.png | Bin 0 -> 22775 bytes .../default_avatars/GoToSocial_icon3.svg | 137 --------------- .../default_avatars/GoToSocial_icon4.png | Bin 0 -> 23960 bytes .../default_avatars/GoToSocial_icon4.svg | 152 ----------------- .../default_avatars/GoToSocial_icon5.png | Bin 0 -> 23453 bytes .../default_avatars/GoToSocial_icon5.svg | 152 ----------------- .../default_avatars/GoToSocial_icon6.png | Bin 0 -> 20371 bytes .../default_avatars/GoToSocial_icon6.svg | 160 ------------------ web/assets/default_header.png | Bin 0 -> 70 bytes 30 files changed, 205 insertions(+), 1039 deletions(-) create mode 100644 internal/typeutils/defaulticons.go create mode 100644 web/assets/default_avatars/GoToSocial_icon1.png delete mode 100644 web/assets/default_avatars/GoToSocial_icon1.svg create mode 100644 web/assets/default_avatars/GoToSocial_icon2.png delete mode 100644 web/assets/default_avatars/GoToSocial_icon2.svg create mode 100644 web/assets/default_avatars/GoToSocial_icon3.png delete mode 100644 web/assets/default_avatars/GoToSocial_icon3.svg create mode 100644 web/assets/default_avatars/GoToSocial_icon4.png delete mode 100644 web/assets/default_avatars/GoToSocial_icon4.svg create mode 100644 web/assets/default_avatars/GoToSocial_icon5.png delete mode 100644 web/assets/default_avatars/GoToSocial_icon5.svg create mode 100644 web/assets/default_avatars/GoToSocial_icon6.png delete mode 100644 web/assets/default_avatars/GoToSocial_icon6.svg create mode 100644 web/assets/default_header.png diff --git a/cmd/gotosocial/action/server/server.go b/cmd/gotosocial/action/server/server.go index ee327c0c5..e695e0789 100644 --- a/cmd/gotosocial/action/server/server.go +++ b/cmd/gotosocial/action/server/server.go @@ -150,10 +150,7 @@ var Start action.GTSAction = func(ctx context.Context) error { } // build web module - webModule, err := web.New(processor) - if err != nil { - return fmt.Errorf("error creating web module: %s", err) - } + webModule := web.New(processor) // build client api modules authModule := auth.New(dbService, idp, processor) diff --git a/cmd/gotosocial/action/testrig/testrig.go b/cmd/gotosocial/action/testrig/testrig.go index 739358f99..02eb96063 100644 --- a/cmd/gotosocial/action/testrig/testrig.go +++ b/cmd/gotosocial/action/testrig/testrig.go @@ -108,10 +108,7 @@ var Start action.GTSAction = func(ctx context.Context) error { } // build web module - webModule, err := web.New(processor) - if err != nil { - return fmt.Errorf("error creating web module: %s", err) - } + webModule := web.New(processor) // build client api modules authModule := auth.New(dbService, idp, processor) diff --git a/internal/api/client/followrequest/get_test.go b/internal/api/client/followrequest/get_test.go index 2af9c7744..adf55c8b6 100644 --- a/internal/api/client/followrequest/get_test.go +++ b/internal/api/client/followrequest/get_test.go @@ -70,7 +70,7 @@ func (suite *GetTestSuite) TestGet() { b, err := ioutil.ReadAll(result.Body) assert.NoError(suite.T(), err) - suite.Equal(`[{"id":"01FHMQX3GAABWSM0S2VZEC2SWC","username":"some_user","acct":"some_user@example.org","display_name":"some user","locked":true,"bot":false,"created_at":"2020-08-10T12:13:28.000Z","note":"i'm a real son of a gun","url":"http://example.org/@some_user","avatar":"","avatar_static":"","header":"","header_static":"","followers_count":0,"following_count":0,"statuses_count":0,"last_status_at":"","emojis":[],"fields":[]}]`, string(b)) + suite.Equal(`[{"id":"01FHMQX3GAABWSM0S2VZEC2SWC","username":"some_user","acct":"some_user@example.org","display_name":"some user","locked":true,"bot":false,"created_at":"2020-08-10T12:13:28.000Z","note":"i'm a real son of a gun","url":"http://example.org/@some_user","avatar":"","avatar_static":"","header":"http://localhost:8080/assets/default_header.png","header_static":"http://localhost:8080/assets/default_header.png","followers_count":0,"following_count":0,"statuses_count":0,"last_status_at":"","emojis":[],"fields":[]}]`, string(b)) } func TestGetTestSuite(t *testing.T) { diff --git a/internal/api/client/instance/instancepatch_test.go b/internal/api/client/instance/instancepatch_test.go index c44f8d093..4ecf0d62c 100644 --- a/internal/api/client/instance/instancepatch_test.go +++ b/internal/api/client/instance/instancepatch_test.go @@ -63,7 +63,7 @@ func (suite *InstancePatchTestSuite) TestInstancePatch1() { b, err := io.ReadAll(result.Body) suite.NoError(err) - suite.Equal(`{"uri":"http://localhost:8080","account_domain":"localhost:8080","title":"Example Instance","description":"\u003cp\u003eThis is the GoToSocial testrig. It doesn't federate or anything.\u003c/p\u003e\u003cp\u003eWhen the testrig is shut down, all data on it will be deleted.\u003c/p\u003e\u003cp\u003eDon't use this in production!\u003c/p\u003e","short_description":"\u003cp\u003eThis is the GoToSocial testrig. It doesn't federate or anything.\u003c/p\u003e\u003cp\u003eWhen the testrig is shut down, all data on it will be deleted.\u003c/p\u003e\u003cp\u003eDon't use this in production!\u003c/p\u003e","email":"someone@example.org","version":"0.0.0-testrig","registrations":true,"approval_required":true,"invites_enabled":false,"configuration":{"statuses":{"max_characters":5000,"max_media_attachments":6,"characters_reserved_per_url":999},"media_attachments":{"supported_mime_types":["image/jpeg","image/gif","image/png"],"image_size_limit":10485760,"image_matrix_limit":16777216,"video_size_limit":41943040,"video_frame_rate_limit":60,"video_matrix_limit":16777216},"polls":{"max_options":6,"max_characters_per_option":50,"min_expiration":300,"max_expiration":2629746}},"urls":{"streaming_api":"wss://localhost:8080"},"stats":{"domain_count":2,"status_count":16,"user_count":4},"thumbnail":"http://localhost:8080/assets/logo.png","contact_account":{"id":"01F8MH17FWEB39HZJ76B6VXSKF","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2022-05-17T13:10:59.000Z","note":"","url":"http://localhost:8080/@admin","avatar":"","avatar_static":"","header":"","header_static":"","followers_count":1,"following_count":1,"statuses_count":4,"last_status_at":"2021-10-20T10:41:37.000Z","emojis":[],"fields":[]},"max_toot_chars":5000}`, string(b)) + suite.Equal(`{"uri":"http://localhost:8080","account_domain":"localhost:8080","title":"Example Instance","description":"\u003cp\u003eThis is the GoToSocial testrig. It doesn't federate or anything.\u003c/p\u003e\u003cp\u003eWhen the testrig is shut down, all data on it will be deleted.\u003c/p\u003e\u003cp\u003eDon't use this in production!\u003c/p\u003e","short_description":"\u003cp\u003eThis is the GoToSocial testrig. It doesn't federate or anything.\u003c/p\u003e\u003cp\u003eWhen the testrig is shut down, all data on it will be deleted.\u003c/p\u003e\u003cp\u003eDon't use this in production!\u003c/p\u003e","email":"someone@example.org","version":"0.0.0-testrig","registrations":true,"approval_required":true,"invites_enabled":false,"configuration":{"statuses":{"max_characters":5000,"max_media_attachments":6,"characters_reserved_per_url":999},"media_attachments":{"supported_mime_types":["image/jpeg","image/gif","image/png"],"image_size_limit":10485760,"image_matrix_limit":16777216,"video_size_limit":41943040,"video_frame_rate_limit":60,"video_matrix_limit":16777216},"polls":{"max_options":6,"max_characters_per_option":50,"min_expiration":300,"max_expiration":2629746}},"urls":{"streaming_api":"wss://localhost:8080"},"stats":{"domain_count":2,"status_count":16,"user_count":4},"thumbnail":"http://localhost:8080/assets/logo.png","contact_account":{"id":"01F8MH17FWEB39HZJ76B6VXSKF","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2022-05-17T13:10:59.000Z","note":"","url":"http://localhost:8080/@admin","avatar":"","avatar_static":"","header":"http://localhost:8080/assets/default_header.png","header_static":"http://localhost:8080/assets/default_header.png","followers_count":1,"following_count":1,"statuses_count":4,"last_status_at":"2021-10-20T10:41:37.000Z","emojis":[],"fields":[]},"max_toot_chars":5000}`, string(b)) } func (suite *InstancePatchTestSuite) TestInstancePatch2() { @@ -93,7 +93,7 @@ func (suite *InstancePatchTestSuite) TestInstancePatch2() { b, err := io.ReadAll(result.Body) suite.NoError(err) - suite.Equal(`{"uri":"http://localhost:8080","account_domain":"localhost:8080","title":"Geoff's Instance","description":"\u003cp\u003eThis is the GoToSocial testrig. It doesn't federate or anything.\u003c/p\u003e\u003cp\u003eWhen the testrig is shut down, all data on it will be deleted.\u003c/p\u003e\u003cp\u003eDon't use this in production!\u003c/p\u003e","short_description":"\u003cp\u003eThis is the GoToSocial testrig. It doesn't federate or anything.\u003c/p\u003e\u003cp\u003eWhen the testrig is shut down, all data on it will be deleted.\u003c/p\u003e\u003cp\u003eDon't use this in production!\u003c/p\u003e","email":"admin@example.org","version":"0.0.0-testrig","registrations":true,"approval_required":true,"invites_enabled":false,"configuration":{"statuses":{"max_characters":5000,"max_media_attachments":6,"characters_reserved_per_url":999},"media_attachments":{"supported_mime_types":["image/jpeg","image/gif","image/png"],"image_size_limit":10485760,"image_matrix_limit":16777216,"video_size_limit":41943040,"video_frame_rate_limit":60,"video_matrix_limit":16777216},"polls":{"max_options":6,"max_characters_per_option":50,"min_expiration":300,"max_expiration":2629746}},"urls":{"streaming_api":"wss://localhost:8080"},"stats":{"domain_count":2,"status_count":16,"user_count":4},"thumbnail":"http://localhost:8080/assets/logo.png","contact_account":{"id":"01F8MH17FWEB39HZJ76B6VXSKF","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2022-05-17T13:10:59.000Z","note":"","url":"http://localhost:8080/@admin","avatar":"","avatar_static":"","header":"","header_static":"","followers_count":1,"following_count":1,"statuses_count":4,"last_status_at":"2021-10-20T10:41:37.000Z","emojis":[],"fields":[]},"max_toot_chars":5000}`, string(b)) + suite.Equal(`{"uri":"http://localhost:8080","account_domain":"localhost:8080","title":"Geoff's Instance","description":"\u003cp\u003eThis is the GoToSocial testrig. It doesn't federate or anything.\u003c/p\u003e\u003cp\u003eWhen the testrig is shut down, all data on it will be deleted.\u003c/p\u003e\u003cp\u003eDon't use this in production!\u003c/p\u003e","short_description":"\u003cp\u003eThis is the GoToSocial testrig. It doesn't federate or anything.\u003c/p\u003e\u003cp\u003eWhen the testrig is shut down, all data on it will be deleted.\u003c/p\u003e\u003cp\u003eDon't use this in production!\u003c/p\u003e","email":"admin@example.org","version":"0.0.0-testrig","registrations":true,"approval_required":true,"invites_enabled":false,"configuration":{"statuses":{"max_characters":5000,"max_media_attachments":6,"characters_reserved_per_url":999},"media_attachments":{"supported_mime_types":["image/jpeg","image/gif","image/png"],"image_size_limit":10485760,"image_matrix_limit":16777216,"video_size_limit":41943040,"video_frame_rate_limit":60,"video_matrix_limit":16777216},"polls":{"max_options":6,"max_characters_per_option":50,"min_expiration":300,"max_expiration":2629746}},"urls":{"streaming_api":"wss://localhost:8080"},"stats":{"domain_count":2,"status_count":16,"user_count":4},"thumbnail":"http://localhost:8080/assets/logo.png","contact_account":{"id":"01F8MH17FWEB39HZJ76B6VXSKF","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2022-05-17T13:10:59.000Z","note":"","url":"http://localhost:8080/@admin","avatar":"","avatar_static":"","header":"http://localhost:8080/assets/default_header.png","header_static":"http://localhost:8080/assets/default_header.png","followers_count":1,"following_count":1,"statuses_count":4,"last_status_at":"2021-10-20T10:41:37.000Z","emojis":[],"fields":[]},"max_toot_chars":5000}`, string(b)) } func (suite *InstancePatchTestSuite) TestInstancePatch3() { @@ -123,7 +123,7 @@ func (suite *InstancePatchTestSuite) TestInstancePatch3() { b, err := io.ReadAll(result.Body) suite.NoError(err) - suite.Equal(`{"uri":"http://localhost:8080","account_domain":"localhost:8080","title":"GoToSocial Testrig Instance","description":"\u003cp\u003eThis is the GoToSocial testrig. It doesn't federate or anything.\u003c/p\u003e\u003cp\u003eWhen the testrig is shut down, all data on it will be deleted.\u003c/p\u003e\u003cp\u003eDon't use this in production!\u003c/p\u003e","short_description":"\u003cp\u003eThis is some html, which is \u003cem\u003eallowed\u003c/em\u003e in short descriptions.\u003c/p\u003e","email":"admin@example.org","version":"0.0.0-testrig","registrations":true,"approval_required":true,"invites_enabled":false,"configuration":{"statuses":{"max_characters":5000,"max_media_attachments":6,"characters_reserved_per_url":999},"media_attachments":{"supported_mime_types":["image/jpeg","image/gif","image/png"],"image_size_limit":10485760,"image_matrix_limit":16777216,"video_size_limit":41943040,"video_frame_rate_limit":60,"video_matrix_limit":16777216},"polls":{"max_options":6,"max_characters_per_option":50,"min_expiration":300,"max_expiration":2629746}},"urls":{"streaming_api":"wss://localhost:8080"},"stats":{"domain_count":2,"status_count":16,"user_count":4},"thumbnail":"http://localhost:8080/assets/logo.png","contact_account":{"id":"01F8MH17FWEB39HZJ76B6VXSKF","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2022-05-17T13:10:59.000Z","note":"","url":"http://localhost:8080/@admin","avatar":"","avatar_static":"","header":"","header_static":"","followers_count":1,"following_count":1,"statuses_count":4,"last_status_at":"2021-10-20T10:41:37.000Z","emojis":[],"fields":[]},"max_toot_chars":5000}`, string(b)) + suite.Equal(`{"uri":"http://localhost:8080","account_domain":"localhost:8080","title":"GoToSocial Testrig Instance","description":"\u003cp\u003eThis is the GoToSocial testrig. It doesn't federate or anything.\u003c/p\u003e\u003cp\u003eWhen the testrig is shut down, all data on it will be deleted.\u003c/p\u003e\u003cp\u003eDon't use this in production!\u003c/p\u003e","short_description":"\u003cp\u003eThis is some html, which is \u003cem\u003eallowed\u003c/em\u003e in short descriptions.\u003c/p\u003e","email":"admin@example.org","version":"0.0.0-testrig","registrations":true,"approval_required":true,"invites_enabled":false,"configuration":{"statuses":{"max_characters":5000,"max_media_attachments":6,"characters_reserved_per_url":999},"media_attachments":{"supported_mime_types":["image/jpeg","image/gif","image/png"],"image_size_limit":10485760,"image_matrix_limit":16777216,"video_size_limit":41943040,"video_frame_rate_limit":60,"video_matrix_limit":16777216},"polls":{"max_options":6,"max_characters_per_option":50,"min_expiration":300,"max_expiration":2629746}},"urls":{"streaming_api":"wss://localhost:8080"},"stats":{"domain_count":2,"status_count":16,"user_count":4},"thumbnail":"http://localhost:8080/assets/logo.png","contact_account":{"id":"01F8MH17FWEB39HZJ76B6VXSKF","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2022-05-17T13:10:59.000Z","note":"","url":"http://localhost:8080/@admin","avatar":"","avatar_static":"","header":"http://localhost:8080/assets/default_header.png","header_static":"http://localhost:8080/assets/default_header.png","followers_count":1,"following_count":1,"statuses_count":4,"last_status_at":"2021-10-20T10:41:37.000Z","emojis":[],"fields":[]},"max_toot_chars":5000}`, string(b)) } func (suite *InstancePatchTestSuite) TestInstancePatch4() { @@ -214,7 +214,7 @@ func (suite *InstancePatchTestSuite) TestInstancePatch6() { b, err := io.ReadAll(result.Body) suite.NoError(err) - suite.Equal(`{"uri":"http://localhost:8080","account_domain":"localhost:8080","title":"GoToSocial Testrig Instance","description":"\u003cp\u003eThis is the GoToSocial testrig. It doesn't federate or anything.\u003c/p\u003e\u003cp\u003eWhen the testrig is shut down, all data on it will be deleted.\u003c/p\u003e\u003cp\u003eDon't use this in production!\u003c/p\u003e","short_description":"\u003cp\u003eThis is the GoToSocial testrig. It doesn't federate or anything.\u003c/p\u003e\u003cp\u003eWhen the testrig is shut down, all data on it will be deleted.\u003c/p\u003e\u003cp\u003eDon't use this in production!\u003c/p\u003e","email":"","version":"0.0.0-testrig","registrations":true,"approval_required":true,"invites_enabled":false,"configuration":{"statuses":{"max_characters":5000,"max_media_attachments":6,"characters_reserved_per_url":999},"media_attachments":{"supported_mime_types":["image/jpeg","image/gif","image/png"],"image_size_limit":10485760,"image_matrix_limit":16777216,"video_size_limit":41943040,"video_frame_rate_limit":60,"video_matrix_limit":16777216},"polls":{"max_options":6,"max_characters_per_option":50,"min_expiration":300,"max_expiration":2629746}},"urls":{"streaming_api":"wss://localhost:8080"},"stats":{"domain_count":2,"status_count":16,"user_count":4},"thumbnail":"http://localhost:8080/assets/logo.png","contact_account":{"id":"01F8MH17FWEB39HZJ76B6VXSKF","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2022-05-17T13:10:59.000Z","note":"","url":"http://localhost:8080/@admin","avatar":"","avatar_static":"","header":"","header_static":"","followers_count":1,"following_count":1,"statuses_count":4,"last_status_at":"2021-10-20T10:41:37.000Z","emojis":[],"fields":[]},"max_toot_chars":5000}`, string(b)) + suite.Equal(`{"uri":"http://localhost:8080","account_domain":"localhost:8080","title":"GoToSocial Testrig Instance","description":"\u003cp\u003eThis is the GoToSocial testrig. It doesn't federate or anything.\u003c/p\u003e\u003cp\u003eWhen the testrig is shut down, all data on it will be deleted.\u003c/p\u003e\u003cp\u003eDon't use this in production!\u003c/p\u003e","short_description":"\u003cp\u003eThis is the GoToSocial testrig. It doesn't federate or anything.\u003c/p\u003e\u003cp\u003eWhen the testrig is shut down, all data on it will be deleted.\u003c/p\u003e\u003cp\u003eDon't use this in production!\u003c/p\u003e","email":"","version":"0.0.0-testrig","registrations":true,"approval_required":true,"invites_enabled":false,"configuration":{"statuses":{"max_characters":5000,"max_media_attachments":6,"characters_reserved_per_url":999},"media_attachments":{"supported_mime_types":["image/jpeg","image/gif","image/png"],"image_size_limit":10485760,"image_matrix_limit":16777216,"video_size_limit":41943040,"video_frame_rate_limit":60,"video_matrix_limit":16777216},"polls":{"max_options":6,"max_characters_per_option":50,"min_expiration":300,"max_expiration":2629746}},"urls":{"streaming_api":"wss://localhost:8080"},"stats":{"domain_count":2,"status_count":16,"user_count":4},"thumbnail":"http://localhost:8080/assets/logo.png","contact_account":{"id":"01F8MH17FWEB39HZJ76B6VXSKF","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2022-05-17T13:10:59.000Z","note":"","url":"http://localhost:8080/@admin","avatar":"","avatar_static":"","header":"http://localhost:8080/assets/default_header.png","header_static":"http://localhost:8080/assets/default_header.png","followers_count":1,"following_count":1,"statuses_count":4,"last_status_at":"2021-10-20T10:41:37.000Z","emojis":[],"fields":[]},"max_toot_chars":5000}`, string(b)) } func (suite *InstancePatchTestSuite) TestInstancePatch7() { diff --git a/internal/config/validate.go b/internal/config/validate.go index b68cb2c62..064eae07a 100644 --- a/internal/config/validate.go +++ b/internal/config/validate.go @@ -62,6 +62,11 @@ func Validate() error { errs = append(errs, fmt.Errorf("%s must be set to either http or https, provided value was %s", ProtocolFlag(), proto)) } + webAssetsBaseDir := GetWebAssetBaseDir() + if webAssetsBaseDir == "" { + errs = append(errs, fmt.Errorf("%s must be set", WebAssetBaseDirFlag())) + } + if len(errs) > 0 { errStrings := []string{} for _, err := range errs { diff --git a/internal/config/validate_test.go b/internal/config/validate_test.go index 6b832de36..c3a998a4a 100644 --- a/internal/config/validate_test.go +++ b/internal/config/validate_test.go @@ -103,6 +103,15 @@ func (suite *ConfigValidateTestSuite) TestValidateConfigNoProtocol() { suite.EqualError(err, "protocol must be set") } +func (suite *ConfigValidateTestSuite) TestValidateConfigNoWebAssetBaseDir() { + testrig.InitTestConfig() + + config.SetWebAssetBaseDir("") + + err := config.Validate() + suite.EqualError(err, "web-asset-base-dir must be set") +} + func (suite *ConfigValidateTestSuite) TestValidateConfigNoProtocolOrHost() { testrig.InitTestConfig() diff --git a/internal/processing/streaming/notification_test.go b/internal/processing/streaming/notification_test.go index 960d9408d..0017dac04 100644 --- a/internal/processing/streaming/notification_test.go +++ b/internal/processing/streaming/notification_test.go @@ -52,7 +52,7 @@ func (suite *NotificationTestSuite) TestStreamNotification() { suite.NoError(err) msg := <-openStream.Messages - suite.Equal(`{"id":"01FH57SJCMDWQGEAJ0X08CE3WV","type":"follow","created_at":"2021-10-04T08:52:36.000Z","account":{"id":"01F8MH5ZK5VRH73AKHQM6Y9VNX","username":"foss_satan","acct":"foss_satan@fossbros-anonymous.io","display_name":"big gerald","locked":false,"bot":false,"created_at":"2021-09-26T10:52:36.000Z","note":"i post about like, i dunno, stuff, or whatever!!!!","url":"http://fossbros-anonymous.io/@foss_satan","avatar":"","avatar_static":"","header":"","header_static":"","followers_count":0,"following_count":0,"statuses_count":1,"last_status_at":"2021-09-20T10:40:37.000Z","emojis":[],"fields":[]}}`, msg.Payload) + suite.Equal(`{"id":"01FH57SJCMDWQGEAJ0X08CE3WV","type":"follow","created_at":"2021-10-04T08:52:36.000Z","account":{"id":"01F8MH5ZK5VRH73AKHQM6Y9VNX","username":"foss_satan","acct":"foss_satan@fossbros-anonymous.io","display_name":"big gerald","locked":false,"bot":false,"created_at":"2021-09-26T10:52:36.000Z","note":"i post about like, i dunno, stuff, or whatever!!!!","url":"http://fossbros-anonymous.io/@foss_satan","avatar":"","avatar_static":"","header":"http://localhost:8080/assets/default_header.png","header_static":"http://localhost:8080/assets/default_header.png","followers_count":0,"following_count":0,"statuses_count":1,"last_status_at":"2021-09-20T10:40:37.000Z","emojis":[],"fields":[]}}`, msg.Payload) } func TestNotificationTestSuite(t *testing.T) { diff --git a/internal/typeutils/converter.go b/internal/typeutils/converter.go index 6996599ae..3effb9388 100644 --- a/internal/typeutils/converter.go +++ b/internal/typeutils/converter.go @@ -21,6 +21,7 @@ package typeutils import ( "context" "net/url" + "sync" "github.com/superseriousbusiness/activity/streams/vocab" "github.com/superseriousbusiness/gotosocial/internal/ap" @@ -195,10 +196,15 @@ type TypeConverter interface { } type converter struct { - db db.DB + db db.DB + defaultAvatars []string + randAvatars sync.Map } // NewConverter returns a new Converter func NewConverter(db db.DB) TypeConverter { - return &converter{db: db} + return &converter{ + db: db, + defaultAvatars: populateDefaultAvatars(), + } } diff --git a/internal/typeutils/defaulticons.go b/internal/typeutils/defaulticons.go new file mode 100644 index 000000000..b2a9858af --- /dev/null +++ b/internal/typeutils/defaulticons.go @@ -0,0 +1,138 @@ +/* + GoToSocial + Copyright (C) 2021-2022 GoToSocial Authors 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 typeutils + +import ( + "io/ioutil" + "math/rand" + "path/filepath" + "strings" + + apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model" + "github.com/superseriousbusiness/gotosocial/internal/config" + "github.com/superseriousbusiness/gotosocial/internal/log" +) + +const defaultHeaderPath = "/assets/default_header.png" + +// populateDefaultAvatars returns a slice of standard avatars found +// in the path [web-assets-base-dir]/default_avatars. The slice +// entries correspond to the relative url via which they can be +// retrieved from the server. +// +// So for example, an avatar called default.jpeg would be returned +// in the slice as "/assets/default_avatars/default.jpeg". +func populateDefaultAvatars() (defaultAvatars []string) { + webAssetsAbsFilePath, err := filepath.Abs(config.GetWebAssetBaseDir()) + if err != nil { + log.Panicf("populateDefaultAvatars: error getting abs path for web assets: %s", err) + } + + defaultAvatarsAbsFilePath := filepath.Join(webAssetsAbsFilePath, "default_avatars") + defaultAvatarFiles, err := ioutil.ReadDir(defaultAvatarsAbsFilePath) + if err != nil { + log.Warnf("populateDefaultAvatars: error reading default avatars at %s: %s", defaultAvatarsAbsFilePath, err) + return + } + + for _, f := range defaultAvatarFiles { + // ignore directories + if f.IsDir() { + continue + } + + // ignore files bigger than 50kb + if f.Size() > 50000 { + continue + } + + // get the name of the file, eg avatar.jpeg + fileName := f.Name() + + // get just the .jpeg, for example, from avatar.jpeg + extensionWithDot := filepath.Ext(fileName) + + // remove the leading . to just get, eg, jpeg + extension := strings.TrimPrefix(extensionWithDot, ".") + + // take only files with simple extensions + // that we know will work OK as avatars + switch strings.ToLower(extension) { + case "jpeg", "jpg", "gif", "png": + avatarURL := config.GetProtocol() + "://" + config.GetHost() + "/assets/default_avatars/" + fileName + defaultAvatars = append(defaultAvatars, avatarURL) + default: + continue + } + } + + return +} + +// ensureAvatar ensures that the given account has a value set +// for the avatar URL. +// +// If no value is set, an avatar will be selected at random from +// the available default avatars. This selection is 'sticky', so +// the same account will get the same result on subsequent calls. +// +// If a value for the avatar URL is already set, this function is +// a no-op. +// +// If there are no default avatars available, this function is a +// no-op. +func (c *converter) ensureAvatar(account *apimodel.Account) { + if (account.Avatar != "" && account.AvatarStatic != "") || len(c.defaultAvatars) == 0 { + return + } + + var avatar string + if avatarI, ok := c.randAvatars.Load(account.ID); ok { + // we already have a default avatar stored for this account + avatar, ok = avatarI.(string) + if !ok { + panic("avatarI was not a string") + } + } else { + // select + store a default avatar for this account at random + randomIndex := rand.Intn(len(c.defaultAvatars)) //nolint:gosec + avatar = c.defaultAvatars[randomIndex] + c.randAvatars.Store(account.ID, avatar) + } + + account.Avatar = avatar + account.AvatarStatic = avatar +} + +// EnsureAvatar ensures that the given account has a value set +// for the header URL. +// +// If no value is set, the default header will be set. +// +// If a value for the header URL is already set, this function is +// a no-op. +func (c *converter) ensureHeader(account *apimodel.Account) { + if account.Header != "" && account.HeaderStatic != "" { + return + } + + h := config.GetProtocol() + "://" + config.GetHost() + defaultHeaderPath + account.Header = h + account.HeaderStatic = h +} diff --git a/internal/typeutils/internaltofrontend.go b/internal/typeutils/internaltofrontend.go index 6ccbed340..0243e4732 100644 --- a/internal/typeutils/internaltofrontend.go +++ b/internal/typeutils/internaltofrontend.go @@ -190,6 +190,9 @@ func (c *converter) AccountToAPIAccountPublic(ctx context.Context, a *gtsmodel.A Suspended: suspended, } + c.ensureAvatar(accountFrontend) + c.ensureHeader(accountFrontend) + return accountFrontend, nil } diff --git a/internal/typeutils/internaltofrontend_test.go b/internal/typeutils/internaltofrontend_test.go index 648c90fba..dc92260e1 100644 --- a/internal/typeutils/internaltofrontend_test.go +++ b/internal/typeutils/internaltofrontend_test.go @@ -63,7 +63,7 @@ func (suite *InternalToFrontendTestSuite) TestStatusToFrontend() { b, err := json.Marshal(apiStatus) suite.NoError(err) - suite.Equal(`{"id":"01F8MH75CBF9JFX4ZAD54N0W0R","created_at":"2021-10-20T11:36:45.000Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost:8080/users/admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R","url":"http://localhost:8080/@admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R","replies_count":0,"reblogs_count":0,"favourites_count":1,"favourited":true,"reblogged":false,"muted":false,"bookmarked":false,"pinned":false,"content":"hello world! #welcome ! first post on the instance :rainbow: !","reblog":null,"application":{"name":"superseriousbusiness","website":"https://superserious.business"},"account":{"id":"01F8MH17FWEB39HZJ76B6VXSKF","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2022-05-17T13:10:59.000Z","note":"","url":"http://localhost:8080/@admin","avatar":"","avatar_static":"","header":"","header_static":"","followers_count":1,"following_count":1,"statuses_count":4,"last_status_at":"2021-10-20T10:41:37.000Z","emojis":[],"fields":[]},"media_attachments":[{"id":"01F8MH6NEM8D7527KZAECTCR76","type":"image","url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/original/01F8MH6NEM8D7527KZAECTCR76.jpeg","text_url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/original/01F8MH6NEM8D7527KZAECTCR76.jpeg","preview_url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/small/01F8MH6NEM8D7527KZAECTCR76.jpeg","remote_url":null,"preview_remote_url":null,"meta":{"original":{"width":1200,"height":630,"size":"1200x630","aspect":1.9047619},"small":{"width":256,"height":134,"size":"256x134","aspect":1.9104477},"focus":{"x":0,"y":0}},"description":"Black and white image of some 50's style text saying: Welcome On Board","blurhash":"LNJRdVM{00Rj%Mayt7j[4nWBofRj"}],"mentions":[],"tags":[{"name":"welcome","url":"http://localhost:8080/tags/welcome"}],"emojis":[{"shortcode":"rainbow","url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/emoji/original/01F8MH9H8E4VG3KDYJR9EGPXCQ.png","static_url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/emoji/static/01F8MH9H8E4VG3KDYJR9EGPXCQ.png","visible_in_picker":true}],"card":null,"poll":null}`, string(b)) + suite.Equal(`{"id":"01F8MH75CBF9JFX4ZAD54N0W0R","created_at":"2021-10-20T11:36:45.000Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost:8080/users/admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R","url":"http://localhost:8080/@admin/statuses/01F8MH75CBF9JFX4ZAD54N0W0R","replies_count":0,"reblogs_count":0,"favourites_count":1,"favourited":true,"reblogged":false,"muted":false,"bookmarked":false,"pinned":false,"content":"hello world! #welcome ! first post on the instance :rainbow: !","reblog":null,"application":{"name":"superseriousbusiness","website":"https://superserious.business"},"account":{"id":"01F8MH17FWEB39HZJ76B6VXSKF","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2022-05-17T13:10:59.000Z","note":"","url":"http://localhost:8080/@admin","avatar":"","avatar_static":"","header":"http://localhost:8080/assets/default_header.png","header_static":"http://localhost:8080/assets/default_header.png","followers_count":1,"following_count":1,"statuses_count":4,"last_status_at":"2021-10-20T10:41:37.000Z","emojis":[],"fields":[]},"media_attachments":[{"id":"01F8MH6NEM8D7527KZAECTCR76","type":"image","url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/original/01F8MH6NEM8D7527KZAECTCR76.jpeg","text_url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/original/01F8MH6NEM8D7527KZAECTCR76.jpeg","preview_url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/attachment/small/01F8MH6NEM8D7527KZAECTCR76.jpeg","remote_url":null,"preview_remote_url":null,"meta":{"original":{"width":1200,"height":630,"size":"1200x630","aspect":1.9047619},"small":{"width":256,"height":134,"size":"256x134","aspect":1.9104477},"focus":{"x":0,"y":0}},"description":"Black and white image of some 50's style text saying: Welcome On Board","blurhash":"LNJRdVM{00Rj%Mayt7j[4nWBofRj"}],"mentions":[],"tags":[{"name":"welcome","url":"http://localhost:8080/tags/welcome"}],"emojis":[{"shortcode":"rainbow","url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/emoji/original/01F8MH9H8E4VG3KDYJR9EGPXCQ.png","static_url":"http://localhost:8080/fileserver/01F8MH17FWEB39HZJ76B6VXSKF/emoji/static/01F8MH9H8E4VG3KDYJR9EGPXCQ.png","visible_in_picker":true}],"card":null,"poll":null}`, string(b)) } func (suite *InternalToFrontendTestSuite) TestInstanceToFrontend() { @@ -108,7 +108,7 @@ func (suite *InternalToFrontendTestSuite) TestInstanceToFrontendWithAdminAccount b, err := json.Marshal(apiInstance) suite.NoError(err) - suite.Equal(`{"uri":"https://example.org","title":"example instance","description":"a much longer description","short_description":"a little description","email":"someone@example.org","version":"software-from-hell 0.666","registrations":false,"approval_required":false,"invites_enabled":false,"thumbnail":"","contact_account":{"id":"01FHMQX3GAABWSM0S2VZEC2SWC","username":"some_user","acct":"some_user@example.org","display_name":"some user","locked":true,"bot":false,"created_at":"2020-08-10T12:13:28.000Z","note":"i'm a real son of a gun","url":"http://example.org/@some_user","avatar":"","avatar_static":"","header":"","header_static":"","followers_count":0,"following_count":0,"statuses_count":0,"last_status_at":"","emojis":[],"fields":[]},"max_toot_chars":0}`, string(b)) + suite.Equal(`{"uri":"https://example.org","title":"example instance","description":"a much longer description","short_description":"a little description","email":"someone@example.org","version":"software-from-hell 0.666","registrations":false,"approval_required":false,"invites_enabled":false,"thumbnail":"","contact_account":{"id":"01FHMQX3GAABWSM0S2VZEC2SWC","username":"some_user","acct":"some_user@example.org","display_name":"some user","locked":true,"bot":false,"created_at":"2020-08-10T12:13:28.000Z","note":"i'm a real son of a gun","url":"http://example.org/@some_user","avatar":"","avatar_static":"","header":"http://localhost:8080/assets/default_header.png","header_static":"http://localhost:8080/assets/default_header.png","followers_count":0,"following_count":0,"statuses_count":0,"last_status_at":"","emojis":[],"fields":[]},"max_toot_chars":0}`, string(b)) } func TestInternalToFrontendTestSuite(t *testing.T) { diff --git a/internal/web/assets.go b/internal/web/assets.go index f67f38363..397870862 100644 --- a/internal/web/assets.go +++ b/internal/web/assets.go @@ -20,9 +20,12 @@ package web import ( "net/http" + "path/filepath" "strings" "github.com/gin-gonic/gin" + "github.com/superseriousbusiness/gotosocial/internal/config" + "github.com/superseriousbusiness/gotosocial/internal/log" ) type fileSystem struct { @@ -49,7 +52,12 @@ func (fs fileSystem) Open(path string) (http.File, error) { } func (m *Module) mountAssetsFilesystem(group *gin.RouterGroup) { - fs := fileSystem{http.Dir(m.webAssetsAbsFilePath)} + webAssetsAbsFilePath, err := filepath.Abs(config.GetWebAssetBaseDir()) + if err != nil { + log.Panicf("mountAssetsFilesystem: error getting absolute path of assets dir: %s", err) + } + + fs := fileSystem{http.Dir(webAssetsAbsFilePath)} // use the cache middleware on all handlers in this group group.Use(m.cacheControlMiddleware(fs)) diff --git a/internal/web/assetscache.go b/internal/web/assetscache.go index 57a0ade0b..fccc95993 100644 --- a/internal/web/assetscache.go +++ b/internal/web/assetscache.go @@ -114,7 +114,7 @@ func (m *Module) cacheControlMiddleware(fs http.FileSystem) gin.HandlerFunc { if !strings.HasPrefix(upath, "/") { upath = "/" + upath } - assetFilePath := strings.TrimPrefix(path.Clean(upath), assetsPath) + assetFilePath := strings.TrimPrefix(path.Clean(upath), assetsPathPrefix) // either fetch etag from ttlcache or generate it eTag, err := m.getAssetETag(assetFilePath, fs) diff --git a/internal/web/panels.go b/internal/web/panels.go index dafd0abc7..fdec87a33 100644 --- a/internal/web/panels.go +++ b/internal/web/panels.go @@ -38,15 +38,15 @@ func (m *Module) UserPanelHandler(c *gin.Context) { c.HTML(http.StatusOK, "frontend.tmpl", gin.H{ "instance": instance, "stylesheets": []string{ - assetsPath + "/Fork-Awesome/css/fork-awesome.min.css", - assetsPath + "/dist/_colors.css", - assetsPath + "/dist/base.css", - assetsPath + "/dist/panels-base.css", - assetsPath + "/dist/panels-user-style.css", + assetsPathPrefix + "/Fork-Awesome/css/fork-awesome.min.css", + assetsPathPrefix + "/dist/_colors.css", + assetsPathPrefix + "/dist/base.css", + assetsPathPrefix + "/dist/panels-base.css", + assetsPathPrefix + "/dist/panels-user-style.css", }, "javascript": []string{ - assetsPath + "/dist/bundle.js", - assetsPath + "/dist/user-panel.js", + assetsPathPrefix + "/dist/bundle.js", + assetsPathPrefix + "/dist/user-panel.js", }, }) } @@ -63,15 +63,15 @@ func (m *Module) AdminPanelHandler(c *gin.Context) { c.HTML(http.StatusOK, "frontend.tmpl", gin.H{ "instance": instance, "stylesheets": []string{ - assetsPath + "/Fork-Awesome/css/fork-awesome.min.css", - assetsPath + "/dist/_colors.css", - assetsPath + "/dist/base.css", - assetsPath + "/dist/panels-base.css", - assetsPath + "/dist/panels-admin-style.css", + assetsPathPrefix + "/Fork-Awesome/css/fork-awesome.min.css", + assetsPathPrefix + "/dist/_colors.css", + assetsPathPrefix + "/dist/base.css", + assetsPathPrefix + "/dist/panels-base.css", + assetsPathPrefix + "/dist/panels-admin-style.css", }, "javascript": []string{ - assetsPath + "/dist/bundle.js", - assetsPath + "/dist/admin-panel.js", + assetsPathPrefix + "/dist/bundle.js", + assetsPathPrefix + "/dist/admin-panel.js", }, }) } diff --git a/internal/web/profile.go b/internal/web/profile.go index 542c015f1..61f7c57e7 100644 --- a/internal/web/profile.go +++ b/internal/web/profile.go @@ -23,7 +23,6 @@ import ( "encoding/json" "errors" "fmt" - "math/rand" "net/http" "strings" @@ -100,21 +99,6 @@ func (m *Module) profileGETHandler(c *gin.Context) { return } - // pick a random dummy avatar if this account avatar isn't set yet - if account.Avatar == "" && len(m.defaultAvatars) > 0 { - //nolint:gosec - randomIndex := rand.Intn(len(m.defaultAvatars)) - dummyAvatar := m.defaultAvatars[randomIndex] - account.Avatar = dummyAvatar - for _, i := range statusResp.Items { - s, ok := i.(*apimodel.Status) - if !ok { - panic("timelineable was not *apimodel.Status") - } - s.Account.Avatar = dummyAvatar - } - } - c.HTML(http.StatusOK, "profile.tmpl", gin.H{ "instance": instance, "account": account, diff --git a/internal/web/thread.go b/internal/web/thread.go index d3b92bde3..3db4952c7 100644 --- a/internal/web/thread.go +++ b/internal/web/thread.go @@ -23,7 +23,6 @@ import ( "encoding/json" "errors" "fmt" - "math/rand" "net/http" "strings" @@ -36,21 +35,6 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/oauth" ) -var randAvatars = make(map[string]string) - -func (m *Module) ensureAvatar(status apimodel.Status) { - if status.Account.Avatar == "" && len(m.defaultAvatars) > 0 { - avatar, ok := randAvatars[status.Account.ID] - if !ok { - //nolint:gosec - randomIndex := rand.Intn(len(m.defaultAvatars)) - avatar = m.defaultAvatars[randomIndex] - randAvatars[status.Account.ID] = avatar - } - status.Account.Avatar = avatar - } -} - func (m *Module) threadGETHandler(c *gin.Context) { ctx := c.Request.Context() @@ -120,16 +104,6 @@ func (m *Module) threadGETHandler(c *gin.Context) { return } - m.ensureAvatar(*status) - - for _, status := range context.Descendants { - m.ensureAvatar(status) - } - - for _, status := range context.Ancestors { - m.ensureAvatar(status) - } - c.HTML(http.StatusOK, "thread.tmpl", gin.H{ "instance": instance, "status": status, diff --git a/internal/web/web.go b/internal/web/web.go index fe270ac6c..336525938 100644 --- a/internal/web/web.go +++ b/internal/web/web.go @@ -20,17 +20,12 @@ package web import ( "errors" - "fmt" - "io/ioutil" "net/http" - "path/filepath" - "strings" "time" "codeberg.org/gruf/go-cache/v2" "github.com/gin-gonic/gin" "github.com/superseriousbusiness/gotosocial/internal/api" - "github.com/superseriousbusiness/gotosocial/internal/config" "github.com/superseriousbusiness/gotosocial/internal/gtserror" "github.com/superseriousbusiness/gotosocial/internal/processing" "github.com/superseriousbusiness/gotosocial/internal/router" @@ -43,7 +38,7 @@ const ( statusPath = profilePath + "/statuses/:" + statusIDKey adminPanelPath = "/admin" userPanelpath = "/user" - assetsPath = "/assets" + assetsPathPrefix = "/assets" tokenParam = "token" usernameKey = "username" @@ -52,78 +47,26 @@ const ( // Module implements the api.ClientModule interface for web pages. type Module struct { - processor processing.Processor - webAssetsAbsFilePath string - assetsETagCache cache.Cache[string, eTagCacheEntry] - defaultAvatars []string + processor processing.Processor + assetsETagCache cache.Cache[string, eTagCacheEntry] } // New returns a new api.ClientModule for web pages. -func New(processor processing.Processor) (api.ClientModule, error) { - webAssetsBaseDir := config.GetWebAssetBaseDir() - if webAssetsBaseDir == "" { - return nil, fmt.Errorf("%s cannot be empty and must be a relative or absolute path", config.WebAssetBaseDirFlag()) - } - - webAssetsAbsFilePath, err := filepath.Abs(webAssetsBaseDir) - if err != nil { - return nil, fmt.Errorf("error getting absolute path of %s: %s", webAssetsBaseDir, err) - } - - defaultAvatarsAbsFilePath := filepath.Join(webAssetsAbsFilePath, "default_avatars") - defaultAvatarFiles, err := ioutil.ReadDir(defaultAvatarsAbsFilePath) - if err != nil { - return nil, fmt.Errorf("error reading default avatars at %s: %s", defaultAvatarsAbsFilePath, err) - } - - defaultAvatars := []string{} - for _, f := range defaultAvatarFiles { - // ignore directories - if f.IsDir() { - continue - } - - // ignore files bigger than 50kb - if f.Size() > 50000 { - continue - } - - // get the name of the file, eg avatar.jpeg - fileName := f.Name() - - // get just the .jpeg, for example, from avatar.jpeg - extensionWithDot := filepath.Ext(fileName) - - // remove the leading . to just get, eg, jpeg - extension := strings.TrimPrefix(extensionWithDot, ".") - - // take only files with simple extensions - // that we know will work OK as avatars - switch strings.ToLower(extension) { - case "svg", "jpeg", "jpg", "gif", "png": - avatar := fmt.Sprintf("%s/default_avatars/%s", assetsPath, f.Name()) - defaultAvatars = append(defaultAvatars, avatar) - default: - continue - } - } - +func New(processor processing.Processor) api.ClientModule { assetsETagCache := cache.New[string, eTagCacheEntry]() assetsETagCache.SetTTL(time.Hour, false) assetsETagCache.Start(time.Minute) return &Module{ - processor: processor, - webAssetsAbsFilePath: webAssetsAbsFilePath, - assetsETagCache: assetsETagCache, - defaultAvatars: defaultAvatars, - }, nil + processor: processor, + assetsETagCache: assetsETagCache, + } } // Route satisfies the RESTAPIModule interface func (m *Module) Route(s router.Router) error { // serve static files from assets dir at /assets - assetsGroup := s.AttachGroup(assetsPath) + assetsGroup := s.AttachGroup(assetsPathPrefix) m.mountAssetsFilesystem(assetsGroup) s.AttachHandler(http.MethodGet, adminPanelPath, m.AdminPanelHandler) diff --git a/web/assets/default_avatars/GoToSocial_icon1.png b/web/assets/default_avatars/GoToSocial_icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..f8248a10c2eef17ccdd9ba6cd1f26b929688abd6 GIT binary patch literal 19837 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 - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - diff --git a/web/assets/default_avatars/GoToSocial_icon2.png b/web/assets/default_avatars/GoToSocial_icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..718647f9ab27a3e72e3e686f3f88bd8a4f48bea4 GIT binary patch literal 21157 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 J8Uxq3{{i%k!fpTn literal 0 HcmV?d00001 diff --git a/web/assets/default_avatars/GoToSocial_icon2.svg b/web/assets/default_avatars/GoToSocial_icon2.svg deleted file mode 100644 index cdd49ddaa..000000000 --- a/web/assets/default_avatars/GoToSocial_icon2.svg +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - diff --git a/web/assets/default_avatars/GoToSocial_icon3.png b/web/assets/default_avatars/GoToSocial_icon3.png new file mode 100644 index 0000000000000000000000000000000000000000..9411ea3f5cb5d3bcf05bb92ce6f33b2aaad664ed GIT binary patch literal 22775 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 - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - diff --git a/web/assets/default_avatars/GoToSocial_icon4.png b/web/assets/default_avatars/GoToSocial_icon4.png new file mode 100644 index 0000000000000000000000000000000000000000..56cb7bc3f660d0bcc55d77f2cfccef0b655eeb03 GIT binary patch literal 23960 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 QA0R#RN?H#~6fJ}P4;Fs0fB*mh literal 0 HcmV?d00001 diff --git a/web/assets/default_avatars/GoToSocial_icon4.svg b/web/assets/default_avatars/GoToSocial_icon4.svg deleted file mode 100644 index ec6a46212..000000000 --- a/web/assets/default_avatars/GoToSocial_icon4.svg +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - diff --git a/web/assets/default_avatars/GoToSocial_icon5.png b/web/assets/default_avatars/GoToSocial_icon5.png new file mode 100644 index 0000000000000000000000000000000000000000..7fbef35f3352e75191f36b60263667a339ba9461 GIT binary patch literal 23453 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
k2Cr6xVoJtmvSjJ3w;`wc|P`?I3iF@_? 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 literal 0 HcmV?d00001 diff --git a/web/assets/default_avatars/GoToSocial_icon5.svg b/web/assets/default_avatars/GoToSocial_icon5.svg deleted file mode 100644 index c505b67d7..000000000 --- a/web/assets/default_avatars/GoToSocial_icon5.svg +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - diff --git a/web/assets/default_avatars/GoToSocial_icon6.png b/web/assets/default_avatars/GoToSocial_icon6.png new file mode 100644 index 0000000000000000000000000000000000000000..203d018874681fda4c2cf259e933a8e43a86a7ee GIT binary patch literal 20371 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 - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - diff --git a/web/assets/default_header.png b/web/assets/default_header.png new file mode 100644 index 0000000000000000000000000000000000000000..40f0484a265cc07dcb37ec9b858619cbf39d7586 GIT binary patch literal 70 zcmeAS@N?(olHy`uVBq!ia0y~yU|H2w^T* Ue^BuO0|Nttr>mdKI;Vst0LUv4TmS$7 literal 0 HcmV?d00001