| .github/workflows | ||
| src | ||
| .gitignore | ||
| package.json | ||
| README.md | ||
| test.py | ||
| wrangler.toml | ||
linkie 
A simple url shortener. Largely adapting VandyHacks/vhl.ink with the aim of providing a more ptpb-like experience (i.e the fewest keystrokes from a cli possible while still being reasonably secure for private use)
(I'm not sure how this button works, there's some setting up of KV namespaces necessary, I'd recommend following the below instructions)
Deploying
- Come up with a username and password. Write them to
~/.netrcfor your target domain. e.gmachine linkie.username.workers.dev username person password password1 - Take your username and password as
username:password, base64 encode that string and add "Basic " at the start, this is$AUTH_KEY wrangler kv:namespace create KVwrangler kv:namespace create AUTHwrangler kv:key put --binding AUTH "$AUTH_KEY" 1(or any truthy value you prefer)wrangler r2 bucket create files- Update the namespace IDs in
wrangler.tomlper the two above namespaces. For test namespaces, pass--previewto the namespace create commands and update the preview IDs as well - also add the binding for the r2 bucket,
{ binding = "FILES", bucket_name = "files" } - While you're in wrangler.toml, update the custom domain in
routes[0].patternand the unauth redirect url invars.REDIR_URLto your desired values wrangler dev -rto test with provided preview namespaces, orwrangler deploy- Install python3 and python3-requests, then run
DEPLOY_HOST=https://linkie.username.workers.dev AUTH_KEY=$AUTH_KEY python3 test.pyto run tests to ensure linkie is functioning normally. If the script outputs nothing other thanRunning on $DEPLOY_HOST, the tests succeeded. - If you want Github Actions to handle deploying and testing, fork this repo, add
AUTH_KEYas an Actions secret, also create an API token with access to Workers and add another Actions secret asCF_API_TOKEN, and finally add a normal Actions variable withDEPLOY_HOSTas above so the test knows what to hit
Usage
curl -n -d u=http://example.com linkie/path will make http://linkie/path 302 redirect to the provided url. use .netrc to store the auth username/password (inspired by ix.io). Yes it supports emoji
curl -n -F "u=@filename.json" linkie/path now does file uploading to the connected R2 bucket, so that's neat. just don't forget the u=
curl -n -d u=http://example.com linkie/_, if you provide an underscore as the path linkie will generate a four character path from a-z0-9. if it has a collision five times in a row it'll return 500.. at that point i'd probably increase the length of the random ids in the function at the top of index.js to 5 or something, and also i should get off the internet because i've generated 36^4 short urls with this service and that's insane
See test.py for more usage and test cases