Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Instance agnostic links #2987

Closed
ivanjermakov opened this issue Jun 9, 2023 · 17 comments
Closed

Instance agnostic links #2987

ivanjermakov opened this issue Jun 9, 2023 · 17 comments
Labels
area: federation support federation via activitypub enhancement New feature or request

Comments

@ivanjermakov
Copy link

ivanjermakov commented Jun 9, 2023

Problem

As of now, only direct HTTP links are supported, e.g. https://lemmy.world/post/1 for posts and https://lemmy.world/u/ruud for users.

This is inconvenient when one would like to stay on a single instance following links in commens/posts.

Solution

Introduce a special format for instance agnostic links (called Lemmy links) that will be opened in the current instance:

This will open page at https://<instance>/post/1, https://lemmy.world/u/ruud, https://lemmy.world/c/[email protected], https://lemmy.world/comment/1 respectively.
It will not break existing links functionality as direct HTTP links are still supported.

In order to easily create Lemmy links, new link button can be introduced (next to the fedilink). It will copy Lemmy link into the clipboard.

Discuss

Actual link format might be something else, but the general idea is clear. It must include:

  1. Instance (domain)
  2. Object (user, comment, post)
  3. Object id

I like the idea of having a symbol prefix for each object, (# for posts, @ for users, ! for communities and ~ for comments).
This way, format is (#@!~)<id>@<instance>.

Additional context

If this request gains traction, I might be able to implement the feature myself.

@ivanjermakov ivanjermakov added the enhancement New feature or request label Jun 9, 2023
@Klobenda
Copy link

Klobenda commented Jun 9, 2023

👍 Server-side detection-and-rewrition of community/user mentions (!community@host and @user@host) to turn them into local links would be awesome - though today if a community or user hasn't been federated to your instance it won't be accessible at c/{community} etc, going to those pages should probably kick off a federation attempt.

@ivanjermakov
Copy link
Author

ivanjermakov commented Jun 9, 2023

I'm new and haven't seen the code yet, keep this in mind.
I'm not clear how ids for subjects from another instances are assigned. If you open a post from another instance it has two ids: id on the instance it was posted on and id on the current instance.
Can someone explain how ids are assigned and is there a way to tell (client-side or redirect) what id shold be used?

Suppose example:

  • Being on lemmy.world, follow link @lemmy.ml/post/1165318
  • At this point in time, client has no information where to find this post in local instance (and it also might be accessible, as @Klobenda mentioned)
  • Clicking link should redirect to https://lemmy.world/post/12774

@ivanjermakov
Copy link
Author

ivanjermakov commented Jun 9, 2023

@Klobenda it should be possible to check if community is accessible and the link is valid during page construction. If it is not it can be highlighted somehow on the UI. But this might require additional DB check which is not ideal.

@chaorace
Copy link

What's the point in overcomplicating it?

We already have a pattern for extending local syntax into agnostic syntax established for community/user URLs: /c/meta => /c/[email protected] & /u/nutomic => /u/[email protected]. Why don't we just strictly follow the same convention for the other URL types?

Yeah, sometimes federation gets in the way and you can't resolve a link locally, but that already happens for external community links and that was deemed an acceptable outcome. Keeping the syntax unified means that we can solve the fetching/resolution problem once instead of thrice. Even if the problems can't be fixed right away, it's still useful to at least implement the syntax so that mobile clients can get the memo and have support ready.

@Nutomic
Copy link
Member

Nutomic commented Jun 14, 2023

Each Activitypub object (post, comment, user, community) has an ID. In case of posts this looks like https://lemmy.world/post/1 with the domain where the creator is registered. When another instances fetches the post, it inserts it in the db and renders it as a link with the db post.id column value, eg https://lemmy.ml/post/3. So the problem is that the url id is exactly the same as the db id, which naturally differs between instances. A cleaner solution for this would be random IDs as described in #1101. This is what Peertube does for example.

@chaorace
Copy link

That makes sense, I'll comment my thoughts about that under the linked issue.

What you say does raise a new question relevant to this dicussion, however: why the schism between community/user URLs & post/comment URLs? What's the underlying motivation behind strictly marrying the backend ID & Fediverse ID in the latter case?

@ivanjermakov
Copy link
Author

ivanjermakov commented Jun 14, 2023

Also related to LemmyNet/lemmy-ui#1048

@necropola
Copy link

necropola commented Jun 24, 2023

lemmy-ui-0.18-0 kinda solved this for users and communities through LemmyNet/lemmy-ui#1462, but doing the same for posts and comments requires global UUIDs for those objects.

@Dakkaron
Copy link

Dakkaron commented Jun 25, 2023

Tbh, I wouldn't go for UUID, since that makes for super long urls.

Each post already has the info of where it's true copy lies.

So e.g. for a post that originated at lemmy.ml/post/123 and is replicated on feddit.de/post/321 this could be done:

The post could be accessed on feddit.de as:

This should be doable without much db changes.

And if you get a 404 on [email protected], because it is not locally replicated, it would be easy to show a link to the original post at lemmy.ml/post/123.

It would even be quite easy to add a button that searches for the community and replicates it to the local instance.

@KaKi87
Copy link

KaKi87 commented Jun 28, 2023

Hello,

I've just released Fediverse redirector, a userscript that, among other things, automatically redirects all Lemmy community/post links to your favourite instance.

May it make your interactions easier. :)

@marsara9
Copy link
Contributor

With #3716 I have an idea on something that can be done here. (Thinking out loud but please provide feedback)

Whenever a new post or comment gets added to the DB, either from someone submitting locally or via federation, prior to adding said comment/post to the DB, look in the body for any URL containing https://.../post/### (will use a proper Regex but I don't remember the rules for domain names off the top of my head). But any matches found will use search_query_to_object_id_local(...) to attempt to convert the URL to a local object ID. If found the URL would be replaced in the content before inserting into the DB.

Now this relies on the URL being the ap_id of the post or comment in order to successfully resolve. If possible an additional step prior to calling search_query_to_object_id_local(...) would be to call api/v3/post/ on the same domain as the URL and fetch the ap_id that way. Then feed that back into the new search method. This way ANY post that is federated with the local instance should resolve.

Finally if we want to go even further, we could use the non-local version of that search method to kickoff a remote fetch? But I fear even the API call could severely hinder performance, let alone a call to search_query_to_object_id(...).

Another thought I had was to do this in lemmy-ui but I'd need to find a way to cache the API call and resolve_object calls somehow. And even then, how long do you cache them for? Could this be done at the network layer itself?

@Nutomic
Copy link
Member

Nutomic commented Jul 27, 2023

@marsara9 You suggestion makes sense. It should definitely be implemented in the Lemmy backend for performance reasons, and so that all apps can benefit from it.

@marsara9
Copy link
Contributor

Just to be clear I've got essentially 3 proposals:

  1. only do a local search:
  • A new post or comment is about to be added to the DB
  • Do a local lookup as if any URLs that match the Regex are in the post or comment body.
  • Replace said link with the new URL, if found.
  • If nothing is found either because that link wasn't the ap_id or because that linked post or comment hasn't federated then the original link is left intact.
  1. do a remote lookup to get the ap_id first:
  • A new post or comment is about to be added to the DB
  • **Using the domain from the link, make a call to api/v3/post or api/v3/comment (depending on which Regex matched) to determine the ap_id. **
  • Do a local lookup on those ap_ids to find their internal id.
  • Replace said link with the new URL, if found.
  • If nothing is found either because that linked post or comment hasn't federated then the original link is left intact.
  1. kickoff a remote fetch so that all URLs will convert.
  • A new post or comment is about to be added to the DB
  • Using the domain from the link, make a call to api/v3/post or api/v3/comment (depending on which Regex matched) to determine the ap_id.
  • Do a remote lookup on those ap_ids to find their internal id, kicking off a federation request if the ap_id doesn't exist in the local DB.
  • Replace said link with the new URL.
  • If nothing is found either because that link wasn't valid then the original link is left intact.

(For any of the above if the domain in the link already points to the current instance this whole process is skipped)

The main downside to doing this in the backend for options 1/2 is that if the linked post or comment hasn't been federated yet, then the link will forever take the user to the remote instance. However, in theory any referenced link should be far enough in the past that it should be federated already.

@Die4Ever
Copy link

Die4Ever commented Aug 24, 2023

I also think instance agnostic links should work in the URL.

Like if a user wants to share a link with someone, they're likely going to just copy-paste from their address bar.

If I share this link https://programming.dev/post/2059750

Currently you would have to open that link, then get the permalink, then open your home instance and search for the permalink...

If instead my address bar said https://programming.dev/post/[email protected]

Then an inexperienced Lemmy user could just copy-paste out of their address bar and share the link on Reddit or whatever. Another Lemmy user should be able to paste that link into their instance's search directly without modifications. And because the real instance name of the post is in the URL, your home instance won't actually need to contact programming.dev to do the search.

For a smoother transition and to retain the local post ID, you could use a URL like

https://programming.dev/post/2059750/[email protected]

So loading the page will use the 2059750 for the local post ID and ignore the rest, but searches would use the [email protected] at the end and ignore the local ID

@phiresky
Copy link
Collaborator

phiresky commented Nov 15, 2023

There's also protocol handlers.

On your home instance, lemmy-ui (or your favourite app would register itself as a web+lemmy: protocol handler. In JS this looks like navigator.registerProtocolHandler("web+lemmy", "https://lemmy.world/resolve?url=%s", "Lemmy cross-instance link handler")

On firefox, this results in a prompt like this:

image

On chrome like this:
image

Now, all links to web+lemmy:... will go to your home instance (or app on android).

Every lemmy-ui would have a button "Open on my local instance". The button is a href to web+lemmy:https://<post/comment/community/user url>.

Edit: I think there's multiple sparate issues being discussed in this issue. I'm making it worse. Probably would make sense to split it out more or make it more generic

@Die4Ever
Copy link

Die4Ever commented Nov 16, 2023

There's also protocol handlers.

I think your idea is really good, but yeah probably a separate issue. Also I'm guessing that doesn't carry over through copy pasting links

@Die4Ever
Copy link

Die4Ever commented May 6, 2024

for posts: #[email protected]
for users: @[email protected]
for communities: [email protected]
for comments: [email protected]

Another one that would be good is the ability to mention an instance, and the link would open their list of communities? Maybe something like &retrolemmy.com, but now that we have Remote Follow maybe this isn't so necessary as you could just link to their communities page remotely

Nutomic added a commit that referenced this issue Sep 26, 2024
dessalines added a commit that referenced this issue Oct 26, 2024
* Add option to search exclusively by post title (#5015)

* Add option to search exclusively by post title

* Address format issues

* Remove duplicated 'removed' filter

* Replace url_search with search_term

* Build generic PostQuery before search match

* Create default queries. Move title_only to Search struct. Rename Url to PostURL

* Revert PostUrl to Url

* Upgrading webmention to 0.6.0, removes native-tls (#4976)

* Removing embedded pict-rs. (#5023)

Some reasons for removing this:

- Even as an optional dependency, it locks us to many specific versions
  of rust deps.
- Pict-rs is a large app that can and should be run in on its own.
- Violates the philosophy of separation of concerns.

* Adding clearurls crate to clean tracking params from links and markdown. (#5018)

* Adding clearurls crate to clean tracking params from links and markdown.

- Thanks to @jenrdikw for creating this
- Fixes #4905

* Upgrading to new version of clearurls

* Fix clippy

* Remove enable nsfw (#5017)

* Remove `local_site.enable_nsfw` in favor of `site.content_warning` (fixes #4627)

* cleanup usage of SiteView::read_local

* test

* uppercase

* SSO Support (#4881)

* Added OAUTH2 OIDC support

* Fixes and improvements based on review feedback

* use derive_new::new instead of TypedBuilder

* merge migrations into a single file

* fixes based on review feedback

* remove unnecessary hostname_ui config

* improvement based on review feedback

* improvements based on review feedback

* delete user oauth accounts at account deletion

* fixes and improvements based on review feedback

* removed auto_approve_application

* support registration application with sso

* improvements based on review feedback

* making the TokenResponse an internal struct as it should be

* remove duplicate struct

* prevent oauth linking to unverified accounts

* switched to manually entered username and removed the oauth name claim

* fix cargo fmt

* fix compile error

* improvements based on review feedback

* fixes and improvements based on review feedback

---------

Co-authored-by: privacyguard <[email protected]>

* Adding ability to restore content on user unban. (#4845)

* Adding ability to restore content on user unban.

- Fixes #4721

* Fixing api tests.

* Fix package.json

* Fixing lemmy-js-client dep.

* Adding API test for restoring content.

* Adding a default_comment_sort_type column for local_site and local_user. (#4469)

* Adding a default_comment_sort_type column for local_site and local_user.

- Renamed SortType to PostSortType in the DB and code.
- Renamed references to default_sort_type to default_post_sort_type.
- Fixes #4128

* Renaming migration to current date.

* Simplifying PostSortType.

* Simplify tests using default (#5026)

* Feature/custom emoji and tagline views (#4580)

* Add custom_emoji list route

* Add tagline list route

* Apply linting

* Remove unecessary TaglineView

* Add category filter for custom emoji

* Add create tagline endpoint

* Add update tagline endpoint

* Add delete tagline endpoint

* Format through lint.sh

* Remove custom_emojis and taglines from site resource

* Get random tagline on site requets

* Impl Crud for Tagline

Remove superfluous properties

* Move tagline endpoints under /admin

* Impl Crud for CustomEmoji

* Remove delete from tagline and custom emoji impls

* Check  markdown for tagline

* Validate markdown on tagline

* Make content fields non optional

Add error types for tagline validation

* Use process_markdown instead of process_markdown_opt

* Consolidate Tagline error types

* Remove unecessary clone

* Updat misleading comments

* Remove local_site_id from tagline and custom_emoji

* Update TaglineInserForm and TaglineUpdateForm

* Add ignore_page_limits for custom emojis

EmojiPicker needs to be able to retrieve all emojis in 1 call

* Update custom_emoji_view

Only keep get_all als helper function calling list with paging ignored

Only order on category when filtering on category

* Removing pointless get_all fn.

* remove tagline length checks

* make fields of TaglineInsertForm and TaglineUpdateForm mandatory

* move emoji order statement

* add comment for GetSiteResponse.tagline

---------

Co-authored-by: Freakazoid182 <>
Co-authored-by: SleeplessOne1917 <[email protected]>
Co-authored-by: Dessalines <[email protected]>
Co-authored-by: Felix Ableitner <[email protected]>

* Add category to RSS feeds (fixes #3446) (#5030)

* Unittest for Search by title only (#5033)

* added test for search by title only

* formatted rust files

* Upgrading to rust 1.81 (#5032)

* Remove TypedBuilder in favor of derive_new (fixes #4863) (#5020)

* Remove TypedBuilder in favor of derive_new (fixes #4863)

* fix

* fix

* Ignore zero values when setting rate limits (fixes #4280) (#5029)

* Ignore zero values when setting rate limits (fixes #4280)

Havent bothered to add an error message for such an uncommon case.

* fmt

* reorder, add test

* Always save remote image data (#4875)

* Always save remote image data

* cleanup

---------

Co-authored-by: Felix Ableitner <[email protected]>
Co-authored-by: Dessalines <[email protected]>

* Get rid of a lot of pointless mut form initializations. (#5037)

* Get rid of a lot of pointless mut form initializations.

- Fixes #5036

* Fix clippy.

* Simplify handling of NotFound SQL errors (fixes #4633) (#5031)

* Simplify handling of NotFound SQL errors (fixes #4633)

* fmt

* wip

* compiling

* clippy

* api tests

* fix

* Adding saved_only, liked_only, and disliked_only filters to search. (#5034)

* Adding saved_only, liked_only, and disliked_only filters to search.

- Fixes #4547

* Removing duplicate Url return type for search (was actually post).

- This now works like the post_title_only filter.

* Address PR comments.

* Add saved_only post_view test.

* Removing a few more Result<bool> . (#4977)

* Removing a few more Result<bool> .

* Running taplo fmt.

* Running fmt.

* Adding email taken test.

* Fixing tests.

* Adding back in missing admin check.

* Rename check_has_local_followers function.

* Conditionally hide comments on nsfw posts (fixes #4237) (#5028)

* Conditionally hide comments on nsfw posts (fixes #4237)

* fix test

* Post scheduling (fixes #234) (#5025)

* Post scheduling (fixes #234)

* clippy

* replace map_err with inspect_err

* ignore unpublished posts in read queries

* add api test

* fmt

* add some checks

* address some review comments

* allow updating schedule time

* rewrite scheduled task

* fmt

* machete

* compare date in sql, more filters

* check for community ban in sql

* remove api test (scheduled task only runs every 10 mins)

* remove mut

* add index

* remove Post::read impl

* fmt

* fix

* correctly handle changes to schedule time

* normal users can only schedule up to 10 posts

* Remove redundant local_user.auto_expand setting. (#5041)

- Fixes #4643

Co-authored-by: SleeplessOne1917 <[email protected]>

* Add ability to search for Community by its description (or title only). (#5044)

- This changes the post_title_only for Search to title_only, since its
  also used in the community query now.
- Fixes #4785

* Cleanup remaining use of Result<bool, Error> (fixes #4862) (#5047)

* Replace clippy allow annotation with expect (fixes #5012) (#5048)

* Add skip_serialize_none to OAuth structs with option fields (#5046)

* Add skip_serialize_none to OAuth structs with option fields

* PR feedback

* Remove serde and ts export from SSO db-only structs

* Apply scheduled post limit to future posts instead of past posts, and verify this in test (#5054)

* test scheduled_post_count

* fix syntax error

* fix formatting

* fix argument order

* fix user_scheduled_post_count function

* Avoid breaking changes, keep response fields as deprecated (#5058)

* Adding skip_serializing_none to another OAuth API request. (#5060)

* Handle partial settings backup (fixes #4307) (#5063)

* Handle partial settings backup (fixes #4307)

* clippy

* Avoid stack overflow when fetching nested comments, reduce max comment depth to 50 (#5009)

* Avoid stack overflow when fetching deeply nested comments

* add test case

* reduce comment depth, add docs

* decrease

* reduce max comment depth to 50

* fmt

* clippy

* cleanup

* Update Rust crate clap to v4.5.18 (#5066)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate reqwest to v0.12.8 (#5068)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate sitemap-rs to v0.2.2 (#5069)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate tracing-actix-web to v0.7.13 (#5070)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Changing renovate to run on the weekends. (#5067)

- Lemmy builds take a long time, and the current schedule only runs for
  about 4 hours once a month, and renovate also rate-limits itself to
  ~ 2 per hour. This gives it a large enough window, without clogging
  up my runner machines.

* Update Rust crate async-trait to v0.1.83 (#5065)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update dependency @types/jest to v29.5.13 (#5071)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Attempt to fix test for fetching deeply nested comment (#5072)

Co-authored-by: Dessalines <[email protected]>

* Add modlog entries for bulk removals. (#5050)

* Add modlog entries for bulk removals.

- Added unit tests for removal / restore to api_common/utils.
- Fixes #4699

* Address PR comments.

* Combining remove and restore functions.

* Trigger build.

* Trigger build 2.

* Changing allow to expect.

* Adding local site settings to reject federated upvotes or downvotes. (#5038)

* Adding local site settings to reject federated upvotes or downvotes.

- Should help defend against downvote spamming instances.
- Fixes #4086

* Adding new vote mode types.

* Simpler activitypub vote check.

* Adding undo vote for failed vote mode check.

* Update crates/api_common/src/utils.rs

---------

Co-authored-by: Nutomic <[email protected]>

* Replace `clippy::unwrap_used` in tests (#5064)

* Add LemmyResult to session_middleware tests

* Add LemmyResult to inboxes tests

* Add LemmyResult to slurs tests

* Add LemmyResult to markdown tests

* Add LemmyResult to rate_limiter tests

* Add LemmyResult to error tests

* Add LemmyResult to api_common utils tests

* Add LemmyResult to request tests

* Add LemmyResult to claims tests

* Propagate registration_applications errors

* Remove clippy::unwrap_used from community tests

* Add LemmyResult to community_view tests

* Add LemmyResult to db_schema post tests

* Add LemmyResult to site_aggregates tests

* Add LemmyResult to private_message tests

* Add LemmyResult to activity tests

* Add LemmyResult to federation_allowlist tests

* Add LemmyResult to comment_aggregates tests

* Add LemmyResult to post_report tests

* Add LemmyResult to moderator tests

* Add LemmyResult to community_aggregates tests

* Add LemmyResult to person_aggregates tests

* Add LemmyResult to language tests

* Add LemmyResult to post_aggregates tests

* Add LemmyResult to db_schema comment tests

* Add LemmyResult to actor_language tests

* Add LemmyResult to vote_view tests

* Add LemmyResult to registration_application_view tests

* Add LemmyResult to private_message_view tests

* Add LemmyResult to private_message_report_view tests

* Add LemmyResult to post_report_view tests

* Add LemmyResult to comment_report_view tests

* Add LemmyResult to sitemap tests

* Replace .expect() with .unwrap()

* Format code

* Remove clippy::unwrap_used from activity tests

* Add diesel result in db_schema tests

* Format code

* Map to_bytes() error to LemmyErrorType

* Remove clippy::unwrap_used from error tests

* Removing a few more unwraps, and cleaning up language code.

* Replace map_err with unwrap_or_default

* Replace ok_or with and_then

---------

Co-authored-by: Dessalines <[email protected]>

* Adding a get_random_community endpoint. (#5042)

* Adding a get_random_community endpoint.

- Fixes #4698

* Fixing issue from main.

* Adding ListingType to the query.

* More concise query filter.

* Resolve links to remote posts into local URL (#5057)

* move code to new file

* rewrite markdown links (fixes #2987)

* add missing file

* add helper fn

* also convert post.url

* simplify search.rs

* clippy

* also rewrite user/community links in markdown

* Call from apub handlers, cleanup

* no network requests in test

* clippy

* fix tests

* serial

* test

* no mut

* add api test

* fix api test

* Update Rust crate clap to v4.5.19 (#5080)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate html2text to v0.12.6 (#5081)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate rustls to v0.23.14 (#5083)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update rust-futures monorepo to v0.3.31 (#5090)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate actix-web-prom to 0.9.0 (#5091)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate regex to v1.11.0 (#5093)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate serde_with to v3.10.0 (#5094)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate serde_with to v3.11.0 (#5095)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update dependency ts-jest to v29.2.5 (#5089)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update dependency typescript to v5.6.2 (#5098)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update dependency eslint to v9.12.0 (#5097)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update docker/dockerfile Docker tag to v1.10 (#5099)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update pnpm to v9.12.0 (#5100)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate reqwest to v0.12.8 (#5082)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update dependency @types/node to v22.7.4 (#5096)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update tamasfe/taplo Docker tag to v0.9.3 (#5101)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update tmknom/prettier Docker tag to v3.2.5 (#5102)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Add test case for community.hidden in post_view (ref #5074) (#5106)

* Resize post thumbnails (fixes #4053) (#5107)

* Resize post thumbnails (fixes #4053)

* 256px

* Update typescript-eslint monorepo to v8.8.1 (#5103)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update renovate config (#5109)

* Update renovate config

* ignroe rust updates, run on first day of month

* fix

* Add community alphabetic sorting (#5056)

* Started

* Finished? Need to write tests

* Formatting

* Formatting

* Formatting

* Write tests

* Formatting

* Formatting

* Formatting

* Unnecessary lifetime

* Safety

* Unwrap

* Formatting

* Formatting

* Fix local_only test

* Formatting

* Name consistency

* Adding lower to community name sort.

---------

Co-authored-by: Dessalines <[email protected]>
Co-authored-by: Dessalines <[email protected]>

* Support markdown sub/superscript, use external crate for spoilers (#5135)

* Use external crate for spoiler tags

* Also add other plugins

* fix test

* Remove comment_like.post_id column which is unnecessary (ref #5122) (#5134)

* Allow admins to resolve removed or deleted objects via API (#5061)

* Allow admins to resolve removed or deleted objects via API

* Removing pointless TestUser.

---------

Co-authored-by: Dessalines <[email protected]>

* Remove individual user/community inboxes (#5124)

* Remove endpoints for individual community/user inboxes

fixes #4147
fixes #3928

* Remove shared_inbox_url columns

* fmt

* Fixing errors.

---------

Co-authored-by: Carlos Cabello <[email protected]>
Co-authored-by: Nutomic <[email protected]>
Co-authored-by: privacyguard <[email protected]>
Co-authored-by: privacyguard <[email protected]>
Co-authored-by: Freakazoid182 <[email protected]>
Co-authored-by: SleeplessOne1917 <[email protected]>
Co-authored-by: leoseg <[email protected]>
Co-authored-by: Sander Saarend <[email protected]>
Co-authored-by: Joseph Silva <[email protected]>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: netbrum <[email protected]>
Co-authored-by: Steven Vergenz <[email protected]>
Co-authored-by: Richard Schwab <[email protected]>
dessalines added a commit that referenced this issue Oct 28, 2024
…ct (#5024)

* Add test case to ensure all errors are in use

* Add test case to find errors that are only used for federation

* Move federation errors into separate enum (fixes #4926)

* clippy

* clippy

* remove serde tag

* Reduce errors dess (#5138)

* Add option to search exclusively by post title (#5015)

* Add option to search exclusively by post title

* Address format issues

* Remove duplicated 'removed' filter

* Replace url_search with search_term

* Build generic PostQuery before search match

* Create default queries. Move title_only to Search struct. Rename Url to PostURL

* Revert PostUrl to Url

* Upgrading webmention to 0.6.0, removes native-tls (#4976)

* Removing embedded pict-rs. (#5023)

Some reasons for removing this:

- Even as an optional dependency, it locks us to many specific versions
  of rust deps.
- Pict-rs is a large app that can and should be run in on its own.
- Violates the philosophy of separation of concerns.

* Adding clearurls crate to clean tracking params from links and markdown. (#5018)

* Adding clearurls crate to clean tracking params from links and markdown.

- Thanks to @jenrdikw for creating this
- Fixes #4905

* Upgrading to new version of clearurls

* Fix clippy

* Remove enable nsfw (#5017)

* Remove `local_site.enable_nsfw` in favor of `site.content_warning` (fixes #4627)

* cleanup usage of SiteView::read_local

* test

* uppercase

* SSO Support (#4881)

* Added OAUTH2 OIDC support

* Fixes and improvements based on review feedback

* use derive_new::new instead of TypedBuilder

* merge migrations into a single file

* fixes based on review feedback

* remove unnecessary hostname_ui config

* improvement based on review feedback

* improvements based on review feedback

* delete user oauth accounts at account deletion

* fixes and improvements based on review feedback

* removed auto_approve_application

* support registration application with sso

* improvements based on review feedback

* making the TokenResponse an internal struct as it should be

* remove duplicate struct

* prevent oauth linking to unverified accounts

* switched to manually entered username and removed the oauth name claim

* fix cargo fmt

* fix compile error

* improvements based on review feedback

* fixes and improvements based on review feedback

---------

Co-authored-by: privacyguard <[email protected]>

* Adding ability to restore content on user unban. (#4845)

* Adding ability to restore content on user unban.

- Fixes #4721

* Fixing api tests.

* Fix package.json

* Fixing lemmy-js-client dep.

* Adding API test for restoring content.

* Adding a default_comment_sort_type column for local_site and local_user. (#4469)

* Adding a default_comment_sort_type column for local_site and local_user.

- Renamed SortType to PostSortType in the DB and code.
- Renamed references to default_sort_type to default_post_sort_type.
- Fixes #4128

* Renaming migration to current date.

* Simplifying PostSortType.

* Simplify tests using default (#5026)

* Feature/custom emoji and tagline views (#4580)

* Add custom_emoji list route

* Add tagline list route

* Apply linting

* Remove unecessary TaglineView

* Add category filter for custom emoji

* Add create tagline endpoint

* Add update tagline endpoint

* Add delete tagline endpoint

* Format through lint.sh

* Remove custom_emojis and taglines from site resource

* Get random tagline on site requets

* Impl Crud for Tagline

Remove superfluous properties

* Move tagline endpoints under /admin

* Impl Crud for CustomEmoji

* Remove delete from tagline and custom emoji impls

* Check  markdown for tagline

* Validate markdown on tagline

* Make content fields non optional

Add error types for tagline validation

* Use process_markdown instead of process_markdown_opt

* Consolidate Tagline error types

* Remove unecessary clone

* Updat misleading comments

* Remove local_site_id from tagline and custom_emoji

* Update TaglineInserForm and TaglineUpdateForm

* Add ignore_page_limits for custom emojis

EmojiPicker needs to be able to retrieve all emojis in 1 call

* Update custom_emoji_view

Only keep get_all als helper function calling list with paging ignored

Only order on category when filtering on category

* Removing pointless get_all fn.

* remove tagline length checks

* make fields of TaglineInsertForm and TaglineUpdateForm mandatory

* move emoji order statement

* add comment for GetSiteResponse.tagline

---------

Co-authored-by: Freakazoid182 <>
Co-authored-by: SleeplessOne1917 <[email protected]>
Co-authored-by: Dessalines <[email protected]>
Co-authored-by: Felix Ableitner <[email protected]>

* Add category to RSS feeds (fixes #3446) (#5030)

* Unittest for Search by title only (#5033)

* added test for search by title only

* formatted rust files

* Upgrading to rust 1.81 (#5032)

* Remove TypedBuilder in favor of derive_new (fixes #4863) (#5020)

* Remove TypedBuilder in favor of derive_new (fixes #4863)

* fix

* fix

* Ignore zero values when setting rate limits (fixes #4280) (#5029)

* Ignore zero values when setting rate limits (fixes #4280)

Havent bothered to add an error message for such an uncommon case.

* fmt

* reorder, add test

* Always save remote image data (#4875)

* Always save remote image data

* cleanup

---------

Co-authored-by: Felix Ableitner <[email protected]>
Co-authored-by: Dessalines <[email protected]>

* Get rid of a lot of pointless mut form initializations. (#5037)

* Get rid of a lot of pointless mut form initializations.

- Fixes #5036

* Fix clippy.

* Simplify handling of NotFound SQL errors (fixes #4633) (#5031)

* Simplify handling of NotFound SQL errors (fixes #4633)

* fmt

* wip

* compiling

* clippy

* api tests

* fix

* Adding saved_only, liked_only, and disliked_only filters to search. (#5034)

* Adding saved_only, liked_only, and disliked_only filters to search.

- Fixes #4547

* Removing duplicate Url return type for search (was actually post).

- This now works like the post_title_only filter.

* Address PR comments.

* Add saved_only post_view test.

* Removing a few more Result<bool> . (#4977)

* Removing a few more Result<bool> .

* Running taplo fmt.

* Running fmt.

* Adding email taken test.

* Fixing tests.

* Adding back in missing admin check.

* Rename check_has_local_followers function.

* Conditionally hide comments on nsfw posts (fixes #4237) (#5028)

* Conditionally hide comments on nsfw posts (fixes #4237)

* fix test

* Post scheduling (fixes #234) (#5025)

* Post scheduling (fixes #234)

* clippy

* replace map_err with inspect_err

* ignore unpublished posts in read queries

* add api test

* fmt

* add some checks

* address some review comments

* allow updating schedule time

* rewrite scheduled task

* fmt

* machete

* compare date in sql, more filters

* check for community ban in sql

* remove api test (scheduled task only runs every 10 mins)

* remove mut

* add index

* remove Post::read impl

* fmt

* fix

* correctly handle changes to schedule time

* normal users can only schedule up to 10 posts

* Remove redundant local_user.auto_expand setting. (#5041)

- Fixes #4643

Co-authored-by: SleeplessOne1917 <[email protected]>

* Add ability to search for Community by its description (or title only). (#5044)

- This changes the post_title_only for Search to title_only, since its
  also used in the community query now.
- Fixes #4785

* Cleanup remaining use of Result<bool, Error> (fixes #4862) (#5047)

* Replace clippy allow annotation with expect (fixes #5012) (#5048)

* Add skip_serialize_none to OAuth structs with option fields (#5046)

* Add skip_serialize_none to OAuth structs with option fields

* PR feedback

* Remove serde and ts export from SSO db-only structs

* Apply scheduled post limit to future posts instead of past posts, and verify this in test (#5054)

* test scheduled_post_count

* fix syntax error

* fix formatting

* fix argument order

* fix user_scheduled_post_count function

* Avoid breaking changes, keep response fields as deprecated (#5058)

* Adding skip_serializing_none to another OAuth API request. (#5060)

* Handle partial settings backup (fixes #4307) (#5063)

* Handle partial settings backup (fixes #4307)

* clippy

* Avoid stack overflow when fetching nested comments, reduce max comment depth to 50 (#5009)

* Avoid stack overflow when fetching deeply nested comments

* add test case

* reduce comment depth, add docs

* decrease

* reduce max comment depth to 50

* fmt

* clippy

* cleanup

* Update Rust crate clap to v4.5.18 (#5066)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate reqwest to v0.12.8 (#5068)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate sitemap-rs to v0.2.2 (#5069)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate tracing-actix-web to v0.7.13 (#5070)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Changing renovate to run on the weekends. (#5067)

- Lemmy builds take a long time, and the current schedule only runs for
  about 4 hours once a month, and renovate also rate-limits itself to
  ~ 2 per hour. This gives it a large enough window, without clogging
  up my runner machines.

* Update Rust crate async-trait to v0.1.83 (#5065)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update dependency @types/jest to v29.5.13 (#5071)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Attempt to fix test for fetching deeply nested comment (#5072)

Co-authored-by: Dessalines <[email protected]>

* Add modlog entries for bulk removals. (#5050)

* Add modlog entries for bulk removals.

- Added unit tests for removal / restore to api_common/utils.
- Fixes #4699

* Address PR comments.

* Combining remove and restore functions.

* Trigger build.

* Trigger build 2.

* Changing allow to expect.

* Adding local site settings to reject federated upvotes or downvotes. (#5038)

* Adding local site settings to reject federated upvotes or downvotes.

- Should help defend against downvote spamming instances.
- Fixes #4086

* Adding new vote mode types.

* Simpler activitypub vote check.

* Adding undo vote for failed vote mode check.

* Update crates/api_common/src/utils.rs

---------

Co-authored-by: Nutomic <[email protected]>

* Replace `clippy::unwrap_used` in tests (#5064)

* Add LemmyResult to session_middleware tests

* Add LemmyResult to inboxes tests

* Add LemmyResult to slurs tests

* Add LemmyResult to markdown tests

* Add LemmyResult to rate_limiter tests

* Add LemmyResult to error tests

* Add LemmyResult to api_common utils tests

* Add LemmyResult to request tests

* Add LemmyResult to claims tests

* Propagate registration_applications errors

* Remove clippy::unwrap_used from community tests

* Add LemmyResult to community_view tests

* Add LemmyResult to db_schema post tests

* Add LemmyResult to site_aggregates tests

* Add LemmyResult to private_message tests

* Add LemmyResult to activity tests

* Add LemmyResult to federation_allowlist tests

* Add LemmyResult to comment_aggregates tests

* Add LemmyResult to post_report tests

* Add LemmyResult to moderator tests

* Add LemmyResult to community_aggregates tests

* Add LemmyResult to person_aggregates tests

* Add LemmyResult to language tests

* Add LemmyResult to post_aggregates tests

* Add LemmyResult to db_schema comment tests

* Add LemmyResult to actor_language tests

* Add LemmyResult to vote_view tests

* Add LemmyResult to registration_application_view tests

* Add LemmyResult to private_message_view tests

* Add LemmyResult to private_message_report_view tests

* Add LemmyResult to post_report_view tests

* Add LemmyResult to comment_report_view tests

* Add LemmyResult to sitemap tests

* Replace .expect() with .unwrap()

* Format code

* Remove clippy::unwrap_used from activity tests

* Add diesel result in db_schema tests

* Format code

* Map to_bytes() error to LemmyErrorType

* Remove clippy::unwrap_used from error tests

* Removing a few more unwraps, and cleaning up language code.

* Replace map_err with unwrap_or_default

* Replace ok_or with and_then

---------

Co-authored-by: Dessalines <[email protected]>

* Adding a get_random_community endpoint. (#5042)

* Adding a get_random_community endpoint.

- Fixes #4698

* Fixing issue from main.

* Adding ListingType to the query.

* More concise query filter.

* Resolve links to remote posts into local URL (#5057)

* move code to new file

* rewrite markdown links (fixes #2987)

* add missing file

* add helper fn

* also convert post.url

* simplify search.rs

* clippy

* also rewrite user/community links in markdown

* Call from apub handlers, cleanup

* no network requests in test

* clippy

* fix tests

* serial

* test

* no mut

* add api test

* fix api test

* Update Rust crate clap to v4.5.19 (#5080)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate html2text to v0.12.6 (#5081)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate rustls to v0.23.14 (#5083)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update rust-futures monorepo to v0.3.31 (#5090)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate actix-web-prom to 0.9.0 (#5091)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate regex to v1.11.0 (#5093)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate serde_with to v3.10.0 (#5094)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate serde_with to v3.11.0 (#5095)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update dependency ts-jest to v29.2.5 (#5089)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update dependency typescript to v5.6.2 (#5098)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update dependency eslint to v9.12.0 (#5097)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update docker/dockerfile Docker tag to v1.10 (#5099)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update pnpm to v9.12.0 (#5100)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update Rust crate reqwest to v0.12.8 (#5082)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update dependency @types/node to v22.7.4 (#5096)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update tamasfe/taplo Docker tag to v0.9.3 (#5101)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update tmknom/prettier Docker tag to v3.2.5 (#5102)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Add test case for community.hidden in post_view (ref #5074) (#5106)

* Resize post thumbnails (fixes #4053) (#5107)

* Resize post thumbnails (fixes #4053)

* 256px

* Update typescript-eslint monorepo to v8.8.1 (#5103)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

* Update renovate config (#5109)

* Update renovate config

* ignroe rust updates, run on first day of month

* fix

* Add community alphabetic sorting (#5056)

* Started

* Finished? Need to write tests

* Formatting

* Formatting

* Formatting

* Write tests

* Formatting

* Formatting

* Formatting

* Unnecessary lifetime

* Safety

* Unwrap

* Formatting

* Formatting

* Fix local_only test

* Formatting

* Name consistency

* Adding lower to community name sort.

---------

Co-authored-by: Dessalines <[email protected]>
Co-authored-by: Dessalines <[email protected]>

* Support markdown sub/superscript, use external crate for spoilers (#5135)

* Use external crate for spoiler tags

* Also add other plugins

* fix test

* Remove comment_like.post_id column which is unnecessary (ref #5122) (#5134)

* Allow admins to resolve removed or deleted objects via API (#5061)

* Allow admins to resolve removed or deleted objects via API

* Removing pointless TestUser.

---------

Co-authored-by: Dessalines <[email protected]>

* Remove individual user/community inboxes (#5124)

* Remove endpoints for individual community/user inboxes

fixes #4147
fixes #3928

* Remove shared_inbox_url columns

* fmt

* Fixing errors.

---------

Co-authored-by: Carlos Cabello <[email protected]>
Co-authored-by: Nutomic <[email protected]>
Co-authored-by: privacyguard <[email protected]>
Co-authored-by: privacyguard <[email protected]>
Co-authored-by: Freakazoid182 <[email protected]>
Co-authored-by: SleeplessOne1917 <[email protected]>
Co-authored-by: leoseg <[email protected]>
Co-authored-by: Sander Saarend <[email protected]>
Co-authored-by: Joseph Silva <[email protected]>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: netbrum <[email protected]>
Co-authored-by: Steven Vergenz <[email protected]>
Co-authored-by: Richard Schwab <[email protected]>

* Search with LemmyErrorType prefix

---------

Co-authored-by: Dessalines <[email protected]>
Co-authored-by: Carlos Cabello <[email protected]>
Co-authored-by: privacyguard <[email protected]>
Co-authored-by: privacyguard <[email protected]>
Co-authored-by: Freakazoid182 <[email protected]>
Co-authored-by: SleeplessOne1917 <[email protected]>
Co-authored-by: leoseg <[email protected]>
Co-authored-by: Sander Saarend <[email protected]>
Co-authored-by: Joseph Silva <[email protected]>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: netbrum <[email protected]>
Co-authored-by: Steven Vergenz <[email protected]>
Co-authored-by: Richard Schwab <[email protected]>
Co-authored-by: Dessalines <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area: federation support federation via activitypub enhancement New feature or request
Projects
None yet
Development

No branches or pull requests