aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2018-11-13 04:25:14 +0100
committerTeddy Wing2018-11-13 04:25:14 +0100
commit6f41e70f5ba39b72f5cd3dae2d33a02f910aabb1 (patch)
treefe4da29335ba019fbbd15ad8b2622082163911b1
parentc9172dd57745015ab917fb9a2fa41ce545120448 (diff)
downloaddome-key-web-6f41e70f5ba39b72f5cd3dae2d33a02f910aabb1.tar.bz2
license: Move database query to a function
Will make it a bit easier to handle errors from `Result`s.
-rw-r--r--license-generator/src/bin/license.rs49
1 files changed, 30 insertions, 19 deletions
diff --git a/license-generator/src/bin/license.rs b/license-generator/src/bin/license.rs
index 8c30e6a..72c7c25 100644
--- a/license-generator/src/bin/license.rs
+++ b/license-generator/src/bin/license.rs
@@ -7,6 +7,7 @@ extern crate exitcode;
#[macro_use]
extern crate log;
+extern crate mysql;
#[macro_use]
extern crate serde_derive;
@@ -34,6 +35,33 @@ struct LicenseData<'a> {
email: &'a str,
}
+fn query_purchaser(
+ cx: &mut mysql::PooledConn,
+ name: &str,
+ email: &str,
+ secret: &str,
+) -> Result<Option<std::result::Result<mysql::Row, mysql::Error>>> {
+ let mut tx = cx.start_transaction(false, None, None)?;
+ let row = tx.prep_exec("
+ SELECT id FROM purchasers
+ WHERE
+ name = ?
+ AND
+ email = ?
+ AND
+ secret = ?",
+ (
+ &name,
+ &email,
+ &secret,
+ )
+ )?.next();
+
+ tx.commit()?;
+
+ Ok(row)
+}
+
fn main() -> Result<()> {
logger::init()?;
@@ -108,23 +136,8 @@ fn main() -> Result<()> {
let email = email.unwrap().to_string();
let secret = secret.unwrap().to_string();
- let mut tx = cx.start_transaction(false, None, None).unwrap();
- let row = tx.prep_exec("
- SELECT id FROM purchasers
- WHERE
- name = ?
- AND
- email = ?
- AND
- secret = ?",
- (
- &name,
- &email,
- &secret,
- )
- ).unwrap().next();
-
- if row.is_some() {
+ let purchaser = query_purchaser(&mut cx, &name, &email, &secret).unwrap();
+ if purchaser.is_some() {
let license_data = LicenseData {
name: &name,
email: &email,
@@ -140,8 +153,6 @@ Content-Disposition: attachment; filename=\"dome-key-license.zip\"\n\n")
.unwrap();
req.stdout().write_all(&zip_data.into_inner()).unwrap();
}
-
- tx.commit().unwrap();
} else {
error!(
"Missing request parameters: name: '{}', email: '{}', secret: '{}'",