diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 56 |
1 files changed, 30 insertions, 26 deletions
diff --git a/src/main.rs b/src/main.rs index ca69b7f..050a9ec 100644 --- a/src/main.rs +++ b/src/main.rs @@ -162,39 +162,43 @@ fn main() -> std::io::Result<()> { } else if action == "create" { - match req.query() { - Query::None => respond(303, "/purl.cgi"), + let url:&str = match req.query() { + Query::None => "Error, no url in query", + Query::Err(_e) => "Error reading query string", Query::Some(map) => { - if map.iter().count() != 1 { - respond(400, "Incorrect number of query items"); + if !map.contains_key("url") { + "Error, no url in query" + } else { + &map["url"] } - let url:&str = &map["url"]; - if !Url::parse(url).is_ok() { - respond(400, "Invalid url"); - } - - let user:&str = req.var("REMOTE_USER").unwrap_or("none"); - let mut short:String = gen_short(); + }, + }; + if url.starts_with("Error") { + respond(400, url); + } else if !Url::parse(url).is_ok() { + respond(400, "Invalid url"); + } - for i in 1..5 { - match db.query_opt("SELECT url FROM shorts WHERE short = $1 LIMIT 1", &[&short]).unwrap() { - Some(_row) => short = gen_short(), // If a row was returned, the short was not unique. Continue loop - None => break, // If nothing was returned, the short IS unique. Break out of loop - } + let user:&str = req.var("REMOTE_USER").unwrap_or("none"); - // Throw error if we couldn't create a unique short in fire tries - if i == 5 { respond(500, "Could not find unique short"); } - } + let mut short:String = gen_short(); - match db.execute("INSERT INTO shorts (url, short, created_by) VALUES ($1, $2, $3);", &[&url, &short, &user]) { - Ok(_v) => respond(200, &format!("{}{}", shortprefix, short)), - Err(_e) => respond(500, "Could not save shortened url to database"), - }; - exit(0); + for i in 1..5 { + match db.query_opt("SELECT url FROM shorts WHERE short = $1 LIMIT 1", &[&short]).unwrap() { + Some(_row) => short = gen_short(), // If a row was returned, the short was not unique. Continue loop + None => break, // If nothing was returned, the short IS unique. Break out of loop + } - }, - Query::Err(_e) => respond(400,"Error reading query string"), + // Throw error if we couldn't create a unique short in fire tries + if i == 5 { respond(500, "Could not find unique short"); } } + + match db.execute("INSERT INTO shorts (url, short, created_by) VALUES ($1, $2, $3);", &[&url, &short, &user]) { + Ok(_v) => respond(200, &format!("{}{}", shortprefix, short)), + Err(_e) => respond(500, "Could not save shortened url to database"), + }; + exit(0); + } else { |