diff options
| author | 2025-10-15 18:57:57 +0200 | |
|---|---|---|
| committer | 2025-10-17 15:33:49 +0200 | |
| commit | 6fee55dcff976f3eeae5879fe91d2f27780d0da4 (patch) | |
| tree | d028c3ac30a84fc6095c9ca9dd4d136f905d8887 /internal/web/profile.go | |
| parent | [bugfix] Fix HTTP return code for Likes of remote statuses (#4504) (diff) | |
| download | gotosocial-6fee55dcff976f3eeae5879fe91d2f27780d0da4.tar.xz | |
[chore] Rationalize HTTP return codes for fedi endpoints, other tidying up (#4503)
# 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.
This pull request does some refactoring of the fedi API endpoints and processing functions, and the authenticate + pub key deref functions, to try to return fewer silly HTTP codes like 410 Gone (when a *remote* account is gone, not a local one), and 500 errors where something isn't really an error.
Also does some general tidying up and renaming for consistency.
## 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.
- [ ] 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/4503
Co-authored-by: tobi <tobi.smethurst@protonmail.com>
Co-committed-by: tobi <tobi.smethurst@protonmail.com>
Diffstat (limited to 'internal/web/profile.go')
| -rw-r--r-- | internal/web/profile.go | 38 |
1 files changed, 13 insertions, 25 deletions
diff --git a/internal/web/profile.go b/internal/web/profile.go index 458557b8b..e619961d7 100644 --- a/internal/web/profile.go +++ b/internal/web/profile.go @@ -19,7 +19,6 @@ package web import ( "context" - "fmt" "net/http" "strings" @@ -63,27 +62,32 @@ func (m *Module) prepareProfile(c *gin.Context) *profile { } // Parse + normalize account username from the URL. - requestedUsername, errWithCode := apiutil.ParseUsername(c.Param(apiutil.UsernameKey)) + requestedUser, errWithCode := apiutil.ParseUsername(c.Param(apiutil.UsernameKey)) if errWithCode != nil { apiutil.WebErrorHandler(c, errWithCode, instanceGet) return nil } - requestedUsername = strings.ToLower(requestedUsername) + requestedUser = strings.ToLower(requestedUser) // Check what type of content is being requested. // If we're getting an AP request on this endpoint // we should render the AP representation instead. - contentType, err := apiutil.NegotiateAccept(c, apiutil.HTMLOrActivityPubHeaders...) + accept, err := apiutil.NegotiateAccept(c, apiutil.HTMLOrActivityPubHeaders...) if err != nil { apiutil.WebErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), instanceGet) return nil } - if contentType == string(apiutil.AppActivityJSON) || - contentType == string(apiutil.AppActivityLDJSON) { + if apiutil.ASContentType(accept) { // AP account representation has // been requested, return that. - m.returnAPAccount(c, requestedUsername, contentType) + user, errWithCode := m.processor.Fedi().UserGet(c.Request.Context(), requestedUser) + if errWithCode != nil { + apiutil.WebErrorHandler(c, errWithCode, m.processor.InstanceGetV1) + return nil + } + + apiutil.JSONType(c, http.StatusOK, accept, user) return nil } @@ -91,7 +95,7 @@ func (m *Module) prepareProfile(c *gin.Context) *profile { // // Proceed with getting the web // representation of the account. - account, errWithCode := m.processor.Account().GetWeb(ctx, requestedUsername) + account, errWithCode := m.processor.Account().GetWeb(ctx, requestedUser) if errWithCode != nil { apiutil.WebErrorHandler(c, errWithCode, instanceGet) return nil @@ -102,7 +106,7 @@ func (m *Module) prepareProfile(c *gin.Context) *profile { // // TODO: change this to 410? if account.Suspended { - err := fmt.Errorf("target account %s is suspended", requestedUsername) + err := gtserror.Newf("target account %s is suspended", requestedUser) apiutil.WebErrorHandler(c, gtserror.NewErrorNotFound(err), instanceGet) return nil } @@ -342,19 +346,3 @@ func (m *Module) profileGallery(c *gin.Context, p *profile) { apiutil.TemplateWebPage(c, page) } - -// returnAPAccount returns an ActivityPub representation of -// target account. It will do http signature authentication. -func (m *Module) returnAPAccount( - c *gin.Context, - targetUsername string, - contentType string, -) { - user, errWithCode := m.processor.Fedi().UserGet(c.Request.Context(), targetUsername, c.Request.URL) - if errWithCode != nil { - apiutil.WebErrorHandler(c, errWithCode, m.processor.InstanceGetV1) - return - } - - apiutil.JSONType(c, http.StatusOK, contentType, user) -} |
