aboutsummaryrefslogtreecommitdiffstats
path: root/license-generator/src/purchaser.rs
diff options
context:
space:
mode:
Diffstat (limited to 'license-generator/src/purchaser.rs')
-rw-r--r--license-generator/src/purchaser.rs62
1 files changed, 62 insertions, 0 deletions
diff --git a/license-generator/src/purchaser.rs b/license-generator/src/purchaser.rs
new file mode 100644
index 0000000..2a7727c
--- /dev/null
+++ b/license-generator/src/purchaser.rs
@@ -0,0 +1,62 @@
+use mysql;
+use rand::{self, Rng};
+use sha1;
+
+use errors::*;
+
+struct Purchaser<'a> {
+ name: &'a str,
+ email: &'a str,
+ secret: Option<String>,
+}
+
+impl<'a> Purchaser<'a> {
+ fn new(name: &'a str, email: &'a str) -> Self {
+ Purchaser {
+ name: name,
+ email: email,
+ secret: None,
+ }
+ }
+
+ fn generate_secret(&mut self) {
+ let mut rng = rand::thread_rng();
+ let random: usize = rng.gen_range(1_000_000_000, ::std::usize::MAX);
+
+ let source = format!("{}{}{}", self.name, self.email, random);
+ let digest = sha1::Sha1::from(source).hexdigest();
+
+ self.secret = Some(digest);
+ }
+
+ fn insert(&self, cx: &mut mysql::Conn) -> Result<()> {
+ let mut tx = cx.start_transaction(
+ false, // consistent_snapshot
+ None, // isolation_level
+ None, // readonly
+ )?;
+
+ match self.secret {
+ Some(ref s) => {
+ tx.prep_exec("
+ INSERT INTO purchasers
+ (name, email, secret)
+ VALUES
+ (?, ?, ?)",
+ (self.name, self.email, s),
+ )?;
+ },
+ None => {
+ tx.prep_exec("
+ INSERT INTO purchasers
+ (name, email)
+ VALUES
+ (?, ?)",
+ (self.name, self.email),
+ )?;
+ },
+ }
+
+ Ok(())
+ }
+}