Hey Beehaw mods!
I’m currently working on a Lemmy web client, but the lack of proper CORS headers is preventing anything from working :(
I just wanted to ask if the appropriate CORS headers could be added to the front-facing proxy layer. If you’re using Caddy, I believe something like this should do the trick:
reverse_proxy ... {
header_down Access-Control-Allow-Origin *
header_down Access-Control-Allow-Methods *
header_down Access-Control-Allow-Headers *
}
Relevant issue: https://github.com/LemmyNet/lemmy/issues/3109
Not a mod but looking forward to see what you come up with. Not a. If fan of the lemmy web ui
Here’s what I have planned at the moment: https://hachyderm.io/@diamond/110564684274449852
I don’t plan on making it feature-complete, just enough to be a Lemmy reader with some reply capabilities.
@[email protected] - Relevant CORS headers have been applied to /api endpoint. Please let us know if this is sufficient for your continued testing.
deleted by creator
Websocket handshakes are done over HTTP. The endpoint for Beehaw’s WS API would be
wss://beehaw.org/
, so it’s still going to use the same CORS policies as accessing the/
(root) path.deleted by creator
Huh, interesting. It seems that a WS connection to
wss://beehaw.org/api/v3/ws
works, but notwss://beehaw.org
. I remember reading somewhere that the WS API will eventually be removed, though.I’ll continue development w/ the REST API until I feel like it’s in a mostly-working state, and then I’ll probably subject myself to the WS API after. Working with the REST API does feel a lot easier.
deleted by creator
The websocket needs the right URL or it won’t work, you can’t always assume the websocket endpoint is at the root of the domain.
Right. I was reading a code snippet from somewhere else where they called into the root path, but the library that they were using probably did the appending in the background which I didn’t know.
That’s annoying, though, because setting up the right CORS headers to allow arbitrary online clients is a pain and I suspect many instance admins won’t do it.
There is an issue upstream tracking this. For now, I only mostly use Beehaw, so that’s fine.
As a side note, are you implementing the API from scratch? Because there’s a Javascript (Typescript) API that gets auto generated from the Lemmy sources that’s ready to use (supports both REST and WS).
Nope, I’m using
lemmy-js-client
. The WS part of it doesn’t do much, so I didn’t bother using it. TheLemmyWebsocket
type wasn’t also in the main import for some reason, but that wasn’t much of an issue.
Would be nice to fix so they can developer further Slemmy without hindrance
I see the request, thanks for the ping. Those CORS headers are not appropriate, it would essentially remove any protections that CORS offers. I’d rather not completely strip away that security for a single app, when others can certainly abuse or try to exploit such.
The asterisk wild-card permits scripts hosted on any site to load your resources; listing a specific <base URI> will permit scripts hosted on the specified site – and no others – to load your resources.
@[email protected] Happy to work with you on this, but I’d request a much more specific source and which resources of Beehaw you’d want that on.
Thank you for the reply, I really appreciate it! Currently, my app has been migrated to the WS API so development can continue for now until the WS is removed completely in a later release or Lemmy addresses the CORS issue upstream.
As for the security concerns, I believe that most of them are addressed in this comment that is in the particular issue that I linked above.
It’s worth noting that CORS really only applies in the browser and that the WS API currently bypasses this protection (hence me being able to continue with the development).
P/S: the app currently lives at https://slemmy.libdb.so.