1 ! Copyright (C) 2006 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: generic assocs help html httpd
4 io kernel math namespaces prettyprint sequences store strings ;
10 "wee-url.store" load-store wee-store set-global
11 H{ } clone wee-shortcuts wee-store get store-variable
13 : responder-url "responder-url" get ;
15 : wee-url ( string -- url )
24 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" ;
26 : random-letter letter-bank length random letter-bank nth ;
28 : random-url ( -- string )
29 6 random 1+ [ drop random-letter ] map >string
30 dup wee-shortcuts get key? [ drop random-url ] when ;
32 : prepare-wee-url ( url -- url )
33 CHAR: : over member? [ "http://" swap append ] unless ;
35 : set-symmetric-hash ( obj1 obj2 hash -- )
36 3dup set-at swapd set-at ;
38 : add-shortcut ( url-long -- url-short )
39 dup wee-shortcuts get at* [
43 random-url [ wee-shortcuts get set-symmetric-hash ] keep
44 wee-store get save-store
49 "wee-url.com - wee URLs since 2007" [
50 <form "get" =method responder-url =action form>
52 <input "text" =type "url" =name input/>
53 <input "submit" =type "Submit" =value input/>
55 ] simple-html-document ;
57 : url-submitted ( url-long url-short -- )
59 "URL: " write write nl
61 <a dup wee-url =href a> wee-url write </a> nl
63 <a responder-url =href a> "wee-url" write </a> nl
64 ] simple-html-document ;
66 : url-submit ( url -- )
68 prepare-wee-url [ add-shortcut ] keep url-submitted ;
74 ] simple-html-document ;
76 : wee-url-responder ( url -- )
84 [ permanent-redirect ] [ drop url-error ] if
89 "wee-url" "responder" set
90 [ wee-url-responder ] "get" set