.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
~/.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)- 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 - 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
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=<-' linkie/path
will make the path 302 redirect to the url provided on stdin. Doesn't support more than one url or anything that's not a url. For instance:
curl -F 'u=<-' linkie/_ <<EOF
http://example.com
http://example.com?2
EOF
linkie/path => http://example.comhttp//example.com?2
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