Hello good folks, I have a bit of a problem.
A while ago, I wrote a Pastebin app. Simple really, nothing to get excited about. Lately, Pastebin.com has announced that by August 1st, all calls to the API will be HTTPS-only, and calls to the API over HTTP will be rejected. No problem in the application, because fphttpclient supports HTTPS, so I simply convert all the "http" in my code to "https". Voila! It works for Linux and Mac, because most (if not all) Linux distributions have OpenSSL installed by default, and Mac users can find it a simple install step away. Windows users...
I did some testing in a Windows 10 VM, and the app works just fine as long as OpenSSL binaries matching the application's architecture are either present in the application directory, or copied to C:\windows\system32. So that means my Windows users have to search for a binary, download one that matches the architecture of my Pastebin app, unzip the archive, and finally place the .dll files in the appropriate place. I'd rather spare them that bit of pain. "But edvard," you might say, "your users downloaded and used
your application just fine, this should be trivial." I'd like to say so, but I'd rather be safe than sorry and make it as painless as possible.
Some things I've thought up (in order of difficulty):
1- Post a simple README on my SourceForge page that warns people of the situation before downloading, and maybe some instructions.
2- Do a check if SSL is installed on the machine at app startup, and popping up a warning (with instructions) if it is not found.
3- Use a network library other than fphttpclient that contains an SSL implementation, so installing 3rd-party libraries is not necessary.
There is a 4th option, bundling the DLLs in the package for Windows users, but I am not interested in being a distributor of someone else's binaries and keeping up to speed on all the licensing requirements.
I'd like to do #2, but I have no idea how to do such a simple check (Google was no help). #3 could be elegant, or it could be a total kluge, and I have no idea either way, SO:
- Do you think #1 should be enough? (I'm thinking it's the least I
should do, really)
- I like #2, but how would I implement it?
- Is #3 even possible? (using Indy, I suppose... dunno really)
- Is there another way to go about this that I am totally missing?