BobbyWibowo / lolisafe

Blazing fast file uploader and awesome bunker written in node! 🚀
MIT License
317 stars 56 forks source link

[FEATURE REQUEST] Multiple domain support #331

Closed hyperdefined closed 2 years ago

hyperdefined commented 3 years ago

A nice feature would be to support multiple domains. An option under the dashboard that would allow users to set which domain they want their files to link under.

Could possibly do something where you can access a file with any domain. So let's say I upload a file and it's called domain.tld/pnrTMp.png, using domain2.tld/pnrTMp,png would also work. The file wouldn't be limited to just the one domain.

Now for connecting multiple domains, I think the best option would to set a "main" domain that everyone defaults to. You would add each domain in the config and setup a server block for each domain with the lolisafe nginx config.

I have no clue how hard this would be to implement.

Chiaki commented 3 years ago

@hyperdefined as I can see from your description, all files would be stored on one server. Otherwise keeping a direct link for a file would require a multi-server infrastructure. So, if you have a single server which manages multiple domains you can try:

  1. point lolisafe database folder to shared path.
  2. point file directory to shared path.

By shared I mean a path which available for access by all domains.

Then you can set up lolisafe for each domain or create alias for primary domain. Depends of what behavior for file management you want.

hyperdefined commented 3 years ago

That is a solution for now, but when someone uploads, it still returns the domain listed in the config.js.

On each user's account, there will be a domain option listed on which domain returns when they upload. This would be set under their account settings. Not all uploads will be tracked with each domain, just which domain gets returned. The files would be in the same spot. (This would allow me to use domain1.com/123.png and domain2.com/123.png. Each upload would not be "domain specific.")

With my NGINX config, I would just point all domains to the lolisafe folder like usual. Under the config.js, there would be a new list for which domains users can choose from.

BobbyWibowo commented 3 years ago

If it's just simply allowing users to choose which domain to reply with on every new uploads, that will only require a few changes on the backend, I'd think

Although, instead of a user preference type of thing, preferably we'd go with good ol' browser preference like everything else in Config tab But since those work by HTTP headers in the first place, technically speaking the said preference will also be usable anywhere else, if they know what they're doing (e.g. using the downloadable ShareX config, a.k.a just adding the appropriate header on whichever uploader utility they use)

But yeah, feels like a low priority to me so far

Like, I do have some other domains redirecting to my installation's uploaded files' domain too, but I treat it more as a fun side thing, so I didn't bother doing more than some blog posts to announce their existences, haha (also that they had always been rather inappropriate domains)

hyperdefined commented 3 years ago

That's pretty much it, allowing users to change what domain replies back.

I would prefer if it works with ShareX, since I mainly use that.

It's just a little idea I thought of, I have some domains laying around that I don't use 😄

hyperdefined commented 3 years ago

I added a "random" domain option on my fork. When you upload a file, it will select a random domain from a list and return that one. This is a temp way around this for now but I hope to have a way so users can set which one returns when they upload.

It's a bit messy for now, I've never really done coding in this language before so I had to wing it.

I first changed the config to include these new options:

mainDomain: 'https://legoshi.club',
useMultipleDomains: true,
domains: ['https://u.legoshi.club', 'https://u.legoshi.lol', 'https://u.legoshi.dev'],

I then changed how the domain is received from the config: (see section)

let domainToUse = null

if (config.useMultipleDomains) {
    const random = Math.floor(Math.random() * config.domains.length)
    domainToUse = config.domains[random]
} else {
    domainToUse = mainDomain
}

I also had to change this line so it gets the mainDomain for albums.

I also added configs via NGINX so they all point to the same location. This works fine for now.