.github/workflows | ||
src | ||
tools | ||
.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
~/.netrc
for 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 KV
wrangler kv:namespace create AUTH
wrangler 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.toml
per the two above namespaces. For test namespaces, pass--preview
to 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].pattern
and the unauth redirect url invars.REDIR_URL
to your desired values wrangler dev -r
to 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.py
to 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_KEY
as 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_HOST
as above so the test knows what to hit
Usage
sharex doesn't send files properly, linkie doesn't support it for file uploading. url shortening is fine though
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