Implement "Instant Share" server
Needless to say, thank you for the super useful tool!
We need to share LinqPad scripts across the team, but we cannot use default "Instant Share" server for obvious security reasons.
We need to share scripts conveniently, so UNC share is not an option.
Idea is to set up proxy server, which will redirect requests to https://www.linqpad.net/share/api/uploads to our own server with our own implementation.
It is possible to guess instant share server implementation looking into request content (from Fiddler as a proxy) and/or decompiling the LINQPad and checking ShareQueryForm.cs. However before hacking around I would be happy to get any kind of advise.
I am especially interested in the case how edition of existing scripts can be implemented. Say user A shared script, user B opened it, improved and re-published. Seems this creates another file on the server. I guess that each LINQPad instance generates its own updatekey (InstantShareUpdateKey) and this is the key which allows update and delete the query. If we need different users to edit the same query, we need add some special logic, or simple allow everyone edit and delete every script.
Sorry for the long message. Any hints or suggestions are greatly appreciated!
Thanks again!
Ilya.
Comments
Re-read my post, fixing typos:
We need to share scripts continently conveniently, so UNC share is not at an option.
Decompiling ShareQueryForm will be the easiest way to figure out the protocol. It's not especially complicated: there are two functions, one to upload a query and one to delete it.
There's no concept of editing a query: when you share, edit and share again, you're uploading a new query. The database uses a hash of the query content as a key, so if you upload an identical query, you get the same URI.
Thanks so much!
We use Resilio Sync to synchronize a query folder across all machines with a separate developer folder (local references) and the other which references our local NuGet. I'd like to have the option to have multiple root level folders.