Settings

Theme

ShowHN: GetURL - A CLI tool to get a public link for any file

github.com

119 points by uams 13 years ago · 52 comments

Reader

uamsOP 13 years ago

Something I threw together over the weekend. I've been using filepicker on a website of mine. Realized that I could hack it to upload and share files in a simple tool.

Inspired by cloudApp, when I found myself wanting a command line version.

  • chefsurfing 13 years ago

    Well done! Also you deserve a big thanks from Filepicker.io - this is great inbound marketing for them.

adlwalrus 13 years ago

Seems like this could be done with more respect for user/data sovereignty if done with Node.js. Essentially, you'd cat the file into the script, it would spin up an HTTP server, do some port knocking or whatever NAT-traversal-fu is necessary, then spit out a link with either your raw IP, or a preconfigured dynDNS domain name.

This way we aren't carelessly littering our data all over the "cloud".

  • HerraBRE 13 years ago

    Tooting my own horn again, but you just asked for https://pagekite.net/:

    $ pagekite.py /path/to/file.blah yourname.pagekite.me

    ... send people a link to https://yourname.pagekite.me/file.blah and it streams from your disk. CTRL+C and it's offline with no copies stored anywhere in the cloud. Works with entire folders too (append +indexes to generate indexes), which is good for static HTML demos. If you want a harder-to-guess URL, append the +hide flag to the command above.

    And yes, it's open source and you can run your own relay/reverse-proxy if you don't want to rely on me. Give it a try! :-)

  • wizard_2 13 years ago

    Know any port knocking as a service companies? If there was a reliable way to get a udp connection between hosts that I didn't have to write myself, I'd be tempted to take this on.

    • tcas 13 years ago

      I think the term you're looking for is UDP hole punching, port knocking is performing a special sequence of connections (i.e. try TCP on 8100 then UDP on 4000 then TCP on 2000) to open up an additional port (like SSH) to a certain IP.

      I'd be curious if there exists such a company or even any good open source libraries that can tie into other servers.

    • charliesome 13 years ago

      > Know any port knocking as a service companies?

      Are you serious?

nyan_sandwich 13 years ago

Another:

    cat file | curl -F 'sprunge=<-' sprunge.us
corford 13 years ago

Nice work and very handy.

I hadn't come across filepicker.io before and reading through the geturl code something jumped out at me:

APIKEY = check_output(['curl', '--silent', "%(fpurl)s/getKey?email=%(email)s" % {'fpurl': FPAPIURL, 'email': email}])

From that, it looks like any random person can fill up your filepicker.io space providing they have your API key or know the email address you used to register the account with. Made sense when I read a bit more about what filepicker.io actually does (i.e. a client-side embeddable javascript file uploader) but it's something to be aware of (especially if you link your account up to an S3 backend!).

  • liyanchang 13 years ago

    One of the founders, just wanted to reply and say, yes, you are entirely right. We put up that endpoint for a separate purpose, didn't expect people to find it (underestimating people is clearly a bad strategy) and will be locking it down to require a password to create/find a apikey.

    In general, the apikey doesn't actually provide very much security as is; by it's public by it's very nature as you have to put it client side and expose it to all your users. We've got HMAC and secret keys in the pipeline for next week :D

    • xxbondsxx 13 years ago

      Will those security changes break GetURL?

      Also, isn't it normal to check the referrer when using API keys? That's what Facebook does -- API keys only work from certain domains, which effectively restricts their access. The downside is that you need to maintain separate API keys for every domain (staging, sandbox, etc), but the advantage is that they don't rely on the honor system :P

nvk 13 years ago

Neat, +1 on the 'brew' addition intent :)

Zash 13 years ago

I have no idea why I haven't installed xsel already. The help mentions a secondary clipboard. X has a secondary clipboard? Is there a way to paste that (like middle click for the primary)?

TazeTSchnitzel 13 years ago

Since I have web hosting and use GitHub, here's my method:

    cp file_name ~/Projects/2012/ajf.me/ajf.me/imagedump/ && cd ~/Projects/2012/ajf.me/ajf.me/ && git add imagedump && git commit -m 'new file' && cd .. && ./update.sh
Elaborate, sure, but it does the job. update.sh runs git push and then does an SSH into my server and a git pull. (Because I'm too lazy to actually set up git on my own server)
  • SoftwareMaven 13 years ago

    You don't need to set up a git server on your own sever. Just create a git repo, add it as a remote revenue to your local repo, and use ssh+git to push changes directly.

    But if you have your own server, why don't you just scp it directly there? That's the piece most people are missing.

    • xxbondsxx 13 years ago

      SCP is really the solution here. But to be fair, I only discovered scp after a year or two of CLI work. I might have been tempted to hack something together like Taze's solution in my earlier days

lttlrck 13 years ago

This is awesome, it actually makes filepicker.io useful for me. My main use-case for Dropbox has turned out to be for this kind of sharing... geturl is waaaaaay easier.

netvarun 13 years ago

This a nice nifty script. Thanks!

Something I noticed (https://www.filepicker.io/pricing/): Since filepicker.io charges by number of files and NOT by total size of files, a free account could potentially host a huge amount of data.

Eg: 5000 files, each of 1 GB = 5 TB!!!

Synthpixel 13 years ago

It couldn't handle files with spaces, plus the link it gives initiates a download for the file instead allowing you to view it in the browser. Considering most of the time I want to quickly upload a file in this manner the file is a screenshot, this is basically useless for me.

egonschiele 13 years ago

Very nice! But no Python 2.6 support?

grakic 13 years ago

What about storage usage?

  > To make it easier to get started, if you haven't
  > put in your S3 credentials we will store them on
  > our servers, but as your usage increases we will
  > ask you to move to your own storage.
tldnr 13 years ago

Nice tool, I made something similar for dropbox a while back that symlinks/copies files into your DB folder.

https://github.com/BRMatt/dotfiles/blob/master/bin/dropup

slig 13 years ago

Nice! There's an opportunity for some company sponsor this (a la localtunnel.com and twilio).

  • brettcvz 13 years ago

    Given that it uses Filepicker.io, probably makes sense for us to take a look. The idea of turning files into URLs is one that we really like

MateusCaruccio 13 years ago

Inspired by geturl, I built this: http://news.ycombinator.com/item?id=4626779

pro: no storage backend needed con: works only behind a UPnP router (most are ok)

soraggi 13 years ago

I really liked it, so I ported it to perl implementing a basic caching system (SHA1), I hope you don't mind: https://github.com/psychotropic/Get--Url/

3rd3 13 years ago

I still prefer Dropbox because you have better control about what you upload.

Simply copy your files into ~/Dropbox/Public, right-click and choose Dropbox > Copy Public URL. Voilà!

  • cowsaysoink 13 years ago

    Except that Dropbox has now discontinued their public folders in exchange for there get link everywhere (which requires you to click add to dropbox or a download button rather than direct access).

    • 3rd3 13 years ago

      I’m not sure what you mean. The method I wrote about still seem to work.

      • cowsaysoink 13 years ago

        All new accounts no longer have a public folder.

        • azernik 13 years ago

          Yes - all that means is that now you can move a file into anywhere in your Dropbox, right-click it, and click (in the Nautilus plugin) "Share Link" and get a publicly available link.

          The only thing that the Public folder did differently was that it did the equivalent of "Share Link" for every file in it, and also had a public index of files in the folder.

syassami 13 years ago

Very awesome tool, it's a great way of sharing nice and quickly!

Macphisto 13 years ago

Nice utility!

Just a note:

28: exit("`curl` is requrired. Please install it")

  • uamsOP 13 years ago

    Haha. I'll fix that when I get a chance; pull requests are encouraged :D

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection