Small URL Generator
Problem this snippet solves:
The Small URL Generator takes a long URL, examines its length, and assigns it a variable length key based on the original URL's length. The key is then stored in a subtable along with the original URL. When a user accesses the small URL (http:/// ), they are then redirected to the original long URL. This Small URL Generator also has the ability to create custom URL keys. Click here for the accompanying tech tip
Code :
when RULE_INIT {
set static::small_url_timeout 86400
set static::small_url_lifetime 86400
set static::small_url_response_header " \
Small URL Generator Small URL Generator
\
"
set static::small_url_response_footer " "
}
when HTTP_REQUEST {
if { ([HTTP::uri] starts_with "/create?") and ([HTTP::query] ne "") } {
set url [URI::decode [string tolower [URI::query [HTTP::uri] url]]]
set custom_url_key [string tolower [URI::query [HTTP::uri] custom_url_key]]
if { $custom_url_key ne "" } {
if { ([table lookup -subtable small_url $custom_url_key] ne "") } {
HTTP::respond 200 content "$static::small_url_response_header \
Error: the custom Small URL \
http://[HTTP::host]/$custom_url_key has already been taken. Please try again. \
$static::small_url_response_footer"
} else {
set url_key $custom_url_key
log local0. "Custom Small URL created for $url with custom key $url_key" }
} else {
switch -glob [string length $url] {
{[1-9]} { set url_key_length 3 }
{1[0-9]} { set url_key_length 3 }
{2[0-9]} { set url_key_length 4 }
{3[0-9]} { set url_key_length 5 }
default { set url_key_length 6 }
}
set url_key [string tolower [scan [string map {/ "" + ""} [b64encode [md5 $url]]] "%${url_key_length}s"]]
}
if { ([table lookup -subtable small_url $url_key] eq "") } {
table add -subtable small_url $url_key $url $static::small_url_timeout $static::small_url_lifetime
log local0. "Small URL created for $url with key $url_key"
} else {
log local0. "Small URL for $url already exists with key $url_key"
}
HTTP::respond 200 content "$static::small_url_response_header The Small URL for \
$url is \
http://[HTTP::host]/$url_key $static::small_url_response_footer"
} else {
set url_key [string map {/ ""} [HTTP::path]]
set url [table lookup -subtable small_url $url_key]
if { [string length $url] != 0 } {
log local0. "Found key $url_key, redirecting to $url"
HTTP::redirect $url
} else {
HTTP::respond 200 content "$static::small_url_response_header \
$static::small_url_response_footer"
}
}
}Published Mar 18, 2015
Version 1.0George_Watkins_
Historic F5 Account
Joined September 17, 2008
George_Watkins_
Historic F5 Account
Joined September 17, 2008
No CommentsBe the first to comment