summaryrefslogtreecommitdiff
path: root/internal
AgeCommit message (Collapse)AuthorFiles
2025-04-28[feature] proof of work scraper deterrence (#4043)Libravatar kim7
This adds a proof-of-work based scraper deterrence to GoToSocial's middleware stack on profile and status web pages. Heavily inspired by https://github.com/TecharoHQ/anubis, but massively stripped back for our own usecase. Todo: - ~~add configuration option so this is disabled by default~~ - ~~fix whatever weirdness is preventing this working with CSP (even in debug)~~ - ~~use our standard templating mechanism going through apiutil helper func~~ - ~~probably some absurdly small performance improvements to be made in pooling re-used hex encode / hash encode buffers~~ the web endpoints aren't as hot a path as API / ActivityPub, will leave as-is for now as it is already very minimal and well optimized - ~~verify the cryptographic assumptions re: using a portion of token as challenge data~~ this isn't a serious application of cryptography, if it turns out to be a problem we'll fix it, but it definitely should not be easily possible to guess a SHA256 hash from the first 1/4 of it even if mathematically it might make it a bit easier - ~~theme / make look nice??~~ - ~~add a spinner~~ - ~~add entry in example configuration~~ - ~~add documentation~~ Verification page originally based on https://github.com/LucienV1/powtect Co-authored-by: tobi <tobi.smethurst@protonmail.com> Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4043 Reviewed-by: tobi <tsmethurst@noreply.codeberg.org> Co-authored-by: kim <grufwub@gmail.com> Co-committed-by: kim <grufwub@gmail.com>
2025-04-27[chore] Rewrite all remaining Github linksLibravatar Daenney21
2025-04-27[chore] add woodpecker ci/cd pipelines (#4061)Libravatar tobi1
Removes our now unused drone stuff and adds pipelines for our new woodpecker instance. Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4061 Co-authored-by: tobi <tobi.smethurst@protonmail.com> Co-committed-by: tobi <tobi.smethurst@protonmail.com>
2025-04-26[chore] Fix daenney being bad at sed (#4060)Libravatar Daenney2
Co-authored-by: Daenney <daenney@users.noreply.github.com> Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4060 Co-authored-by: Daenney <daenney@noreply.codeberg.org> Co-committed-by: Daenney <daenney@noreply.codeberg.org>
2025-04-26[feature] Move to code.superseriousbusiness.orgLibravatar Daenney1138
2025-04-26[chore] fix testrig build (#4059)Libravatar tobi1
2025-04-26[feature] Update attachment format, receive + send `focalPoint` prop + use ↵Libravatar tobi11
it on the frontend (#4052) * [feature] Update attachment format, receive + send `focalPoint` prop + use it on the frontend * whoops * boop * restore function signature of ExtractAttachments
2025-04-26[performance] rewrite timelines to rely on new timeline cache type (#3941)Libravatar kim92
* start work rewriting timeline cache type * further work rewriting timeline caching * more work integration new timeline code * remove old code * add local timeline, fix up merge conflicts * remove old use of go-bytes * implement new timeline code into more areas of codebase, pull in latest go-mangler, go-mutexes, go-structr * remove old timeline package, add local timeline cache * remove references to old timeline types that needed starting up in tests * start adding page validation * fix test-identified timeline cache package issues * fix up more tests, fix missing required changes, etc * add exclusion for test.out in gitignore * clarify some things better in code comments * tweak cache size limits * fix list timeline cache fetching * further list timeline fixes * linter, ssssssssshhhhhhhhhhhh please * fix linter hints * reslice the output if it's beyond length of 'lim' * remove old timeline initialization code, bump go-structr to v0.9.4 * continued from previous commit * improved code comments * don't allow multiple entries for BoostOfID values to prevent repeated boosts of same boosts * finish writing more code comments * some variable renaming, for ease of following * change the way we update lo,hi paging values during timeline load * improved code comments for updated / returned lo , hi paging values * finish writing code comments for the StatusTimeline{} type itself * fill in more code comments * update go-structr version to latest with changed timeline unique indexing logic * have a local and public timeline *per user* * rewrite calls to public / local timeline calls * remove the zero length check, as lo, hi values might still be set * simplify timeline cache loading, fix lo/hi returns, fix timeline invalidation side-effects missing for some federated actions * swap the lo, hi values :facepalm: * add (now) missing slice reverse of tag timeline statuses when paging ASC * remove local / public caches (is out of scope for this work), share more timeline code * remove unnecessary change * again, remove more unused code * remove unused function to appease the linter * move boost checking to prepare function * fix use of timeline.lastOrder, fix incorrect range functions used * remove comments for repeat code * remove the boost logic from prepare function * do a maximum of 5 loads, not 10 * add repeat boost filtering logic, update go-structr, general improvements * more code comments * add important note * fix timeline tests now that timelines are returned in page order * remove unused field * add StatusTimeline{} tests * add more status timeline tests * start adding preloading support * ensure repeat boosts are marked in preloaded entries * share a bunch of the database load code in timeline cache, don't clear timelines on relationship change * add logic to allow dynamic clear / preloading of timelines * comment-out unused functions, but leave in place as we might end-up using them * fix timeline preload state check * much improved status timeline code comments * more code comments, don't bother inserting statuses if timeline not preloaded * shift around some logic to make sure things aren't accidentally left set * finish writing code comments * remove trim-after-insert behaviour * fix-up some comments referring to old logic * remove unsetting of lo, hi * fix preload repeatBoost checking logic * don't return on status filter errors, these are usually transient * better concurrency safety in Clear() and Done() * fix test broken due to addition of preloader * fix repeatBoost logic that doesn't account for already-hidden repeatBoosts * ensure edit submodels are dropped on cache insertion * update code-comment to expand CAS accronym * use a plus1hULID() instead of 24h * remove unused functions * add note that public / local timeline requester can be nil * fix incorrect visibility filtering of tag timeline statuses * ensure we filter home timeline statuses on local only * some small re-orderings to confirm query params in correct places * fix the local only home timeline filter func
2025-04-25[chore] Move deps to code.superseriousbusiness.org (#4054)Libravatar tobi83
2025-04-22[chore/frontend] Reorder JS a little bit to avoid visible text changes (#4039)Libravatar tobi3
2025-04-22[bugfix] Use util.IsNil for checking DomainPermission (#4040)Libravatar tobi1
2025-04-19[bugfix] Fix '+'-separated scopes not being recognized (#4028)Libravatar tobi4
* [bugfix] Fix '+'-separated scopes not being recognized * comment
2025-04-19[chore] Little settings panel report view tweak (#4025)v0.19.0-rc2Libravatar tobi1
2025-04-19[chore] Update robots.txt with latest ai bullshit (#4024)Libravatar tobi1
2025-04-18[bugfix] new token API issues (#4022)Libravatar kim3
* fix incorrect endpoint being registered for /token/{id} * update the maximum page value for tokens endpoint to 100 * update the available tokens page options * set a default limit of 25 to match the first available settings panel option * ensure OnInvalidateToken() hook is called during token delete
2025-04-18[feature/frontend] Hide "engagement" stats, edits, and other info under a ↵Libravatar tobi2
little drop down to unclutter status info bar (#4021) * dick about with stats a bit * more dicking abuot * lil tweaks * more about-dicking * weee * comments * fixie uppie
2025-04-14[bugfix] websocket header token not always returned (#4009)Libravatar kim1
* always include headerToken response if provided, because Chrome *sigh* * wording * Update internal/api/client/streaming/stream.go Co-authored-by: Ilia Pozdnyakov <iliazeus@proton.me> --------- Co-authored-by: Ilia Pozdnyakov <iliazeus@proton.me>
2025-04-14ensure 'none' gets included in serializable visibilities (#4007)Libravatar kim2
2025-04-14[bugfix] media v2 endpoint fix unset url (#4008)Libravatar kim2
* update semantics of when media URL is left unset * fix test
2025-04-14don't panic on non-fully populated status edits, it may not always be ↵Libravatar kim1
possible (#4006)
2025-04-11[bugfix] Fix setting bot on/off (#3986)Libravatar tobi5
* [bugfix] Fix setting bot on/off * read client messages in tests * test fix
2025-04-10[feature] Implement /oauth/revoke for token revocation (#3983)Libravatar tobi6
2025-04-09[chore] add IPPrefixes type so we don't need separate rate limit parsed ↵Libravatar kim8
field (#3982) * add IPPrefixes type so we don't need separate rate limit parsed field * sshhhh please linter, mommy's working
2025-04-07[feature] add TOTP two-factor authentication (2FA) (#3960)Libravatar tobi25
* [feature] add TOTP two-factor authentication (2FA) * use byteutil.S2B to avoid allocations when comparing + generating password hashes * don't bother with string conversion for consts * use io.ReadFull * use MustGenerateSecret for backup codes * rename util functions
2025-04-07[bugfix] Don't assume `"manuallyApprovesFollowers": true` if not set (#3978)Libravatar tobi3
* [bugfix] Don't assume `"manuallyApprovesFollowers": true` if not set * whoops, tests
2025-04-06[bugfix] Change email `Date` header to use RFC2822 (#3972)Libravatar tobi2
2025-04-06[chore] Migrate accounts to new table, relax uniqueness constraint of actor ↵Libravatar tobi42
`url` and collections (#3928) * [chore] Migrate accounts to new table, relax uniqueness constraint of actor url and collections * fiddle with it! (that's what she said) * remove unused cache fields * sillyness * fix tiny whoopsie
2025-04-04[feature] Allow editing domain blocks/allows, fix comment import (#3967)Libravatar tobi21
* start implementing editing of existing domain permissions * [feature] Allow editing domain blocks/allows, fix comment import * [bugfix] Use "comment" via /api/v1/instance * fix the stuff
2025-04-02[bugfix] Fix update users query in migration (#3963)Libravatar tobi1
2025-03-31[feature] Use blurhashes in frontend, tidy up gallery view a bit (#3948)Libravatar tobi7
* [feature] Use blurhashes in frontend, tidy up gallery view a bit * weeeeeeeeeeeeeeeee * beep boop
2025-03-30[docs] Fix Swagger URL for the "edit status" operation (#3932)Libravatar Leonid Shevtsov1
2025-03-26[feature] Allow user to choose "gallery" style layout for web view of ↵Libravatar tobi26
profile (#3917) * [feature] Allow user to choose "gallery" style web layout * find a bug and squish it up and all day long you'll have good luck * just a sec * [performance] reindex public timeline + tinker with query a bit * fiddling * should be good now * last bit of finagling, i'm done now i prommy * panic normally
2025-03-26[chore] bumps our spf13/viper version (#3943)Libravatar kim1
* bumps our spf13/viper version * fixes the one breaking change
2025-03-24feat: Relax URL matching (#3925)Libravatar Daenney4
* feat: Relax URL matching Instead of only linkifying things with an explicit http or https scheme, the xurls.Relaxed also matches links with known TLDs. This means that text like 'banana.com' will also be matched, despite the missing http/https scheme. This also works to linkify email addresses, which is handy. This should also ensure we catch links without a scheme for the purpose of spam checking.
2025-03-24[feature] Parse funkwhale `Album` as Statusable to allow barebones ↵Libravatar tobi8
interacting with bandwagon (#3931) * bump activity version * parse funkwhale / bandwagon album as statusable
2025-03-19[bugfix] Fix set obfuscate = null error in adoptPerm (#3922)Libravatar tobi2
* [chore] More tests for domain allow + block subscriptions * [bugfix] Fix set `obfuscate = null` error in adoptPerm * fmt
2025-03-18[bugfix] Avoid nil ptr if maintenance router can't be started (#3919)Libravatar tobi1
2025-03-18[performance] reindex public timeline + tinker with query a bit (#3918)Libravatar tobi2
2025-03-17[feature] Application creation + management via API + settings panel (#3906)Libravatar tobi23
* [feature] Application creation + management via API + settings panel * fix docs links * add errnorows test * use known application as shorter * add comment about side effects
2025-03-11[bugfix] Fix panic when opening instance actor in web view (#3898)Libravatar tobi1
2025-03-10[chore] add warning message when wazero compiler not supported (#3894)Libravatar kim1
* add warning message when wazero compiler not supported, update supported platforms in README * whoops don't return a reason string for arm64, since it should always be supported
2025-03-10[performance] Optimize local timeline + local status count queries (#3892)Libravatar tobi4
* [performance] Optimize local timeline + local status count queries * remove if not exists from create view
2025-03-09[bugfix] Fix `length for type varchar must be at least 1` on Postgres (#3885)Libravatar tobi1
2025-03-07[feature] Parse content warning to HTML, serialize via client API as ↵Libravatar tobi44
plaintext (#3876) * [feature] Parse content warning as HTML, serialize via API to plaintext * tidy up some cruft * whoops * oops * i'm da joker baybee * clemency muy lorde * rename some of the text functions for clarity * jiggle the opts * fiddle de deee * hopefully the last test fix i ever have to do in my beautiful life
2025-03-06[bugfix] Store and expose status content type (#3870)Libravatar ewwwin24
* Add ContentType to internal models * Add ContentType to API models StatusSource and StatusEdit * Add helpers to convert between API/internal StatusContentType * Write status content type on create/edit * Add migration * Update API docs go run github.com/go-swagger/go-swagger/cmd/swagger generate spec --scan-models --exclude-deps --output docs/api/swagger.yaml * ensure ContentType is updated anywhere Text is * Update docs, take care of TODOs * Set ContentType in more places where Text is set * We don't actually use ContentType on the API status model * Update StatusSource test * Remove unused helper function I copied * Revert change to StatusContentType swagger annotation I'm going to include this in a follow-on PR instead. * Add test for updating content type in edits * Return a value from processContentType instead of modifying the existing status Fixes an issue that was caught by the test I just added - the recorded edit would be marked with the *new* content type instead of the old one, which is obviously bad * Add test for handling of statuses with no stored content type * repurpose an existing test status instead of adding a new one to avoid breaking other tests * Add test to ensure newly created statuses always have content type saved * Do include content type on status API model actually This is mostly important when deleting and redrafting. The comment on `apimodel.Status.Text` implies that it's not sent except in response to status deletion, but actually this doesn't seem to be the case; it also appears to be present in responses to creations and normal fetches and stuff. So I'm treating `ContentType` the same here. * Update new tests to check content type on API statuses * Check content type of API statuses in all tests where text is checked * update other api tests with status content type field * Add test ensuring text and content type are returned when deleting a status * Convert processContentType to free function and remove unused parameter * check for the correct value in the deletion test * Be explicit about this test status having an empty content type * Use omitempty consistently on API models * clean up the final diff a bit * one more swagger regen for the road * Handle nil statuses in processContentType * Don't pass processContentType the entire edit form, it doesn't need it * Move processContentType to common.go and use for creation as well * Remove unused parameters to ContentTypeToAPIContentType
2025-03-05[bugfix] Return useful err on `server start` failure (#3879)Libravatar tobi5
* [bugfix] Return useful err on `server start` failure * remove scheduler started func * remove tryUntil
2025-03-04[feature] Add token review / delete to backend + settings panel (#3845)Libravatar tobi14
2025-03-03[bugfix] Fix app migration (#3868)Libravatar tobi1
* [bugfix] Fix app migration * use temporary index during migration * create temporary index for the migration * include local = true in temporary index * tweak migration a bit for SPEED
2025-03-03[bugfix] fix refreshed additional media info being ignored (#3867)Libravatar kim2
* fix refreshed additional media info being ignored when force flag already set * also update to always iterate through all additional info fields * make similar changes for emoji, even if not necessary, just to keep in-sync
2025-03-03[feature] Refactor tokens, allow multiple app redirect_uris (#3849)Libravatar tobi70
* [feature] Refactor tokens, allow multiple app redirect_uris * move + tweak handlers a bit * return error for unset oauth2.ClientStore funcs * wrap UpdateToken with cache * panic handling * cheeky little time optimization * unlock on error