aboutsummaryrefslogtreecommitdiffstats
path: root/license-generator/src
diff options
context:
space:
mode:
Diffstat (limited to 'license-generator/src')
-rw-r--r--license-generator/src/lib.rs42
1 files changed, 33 insertions, 9 deletions
diff --git a/license-generator/src/lib.rs b/license-generator/src/lib.rs
index 9f73f6b..cc39cdb 100644
--- a/license-generator/src/lib.rs
+++ b/license-generator/src/lib.rs
@@ -1,6 +1,8 @@
#[macro_use]
extern crate error_chain;
extern crate mysql;
+extern crate rand;
+extern crate sha1;
mod errors {
use mysql;
@@ -17,7 +19,7 @@ use errors::*;
struct Purchaser<'a> {
name: &'a str,
email: &'a str,
- secret: Option<&'a str>,
+ secret: Option<String>,
}
impl<'a> Purchaser<'a> {
@@ -29,11 +31,20 @@ impl<'a> Purchaser<'a> {
}
}
- fn with_secret(mut self, secret: &'a str) -> Self {
+ fn with_secret(mut self, secret: String) -> Self {
self.secret = Some(secret);
self
}
+ fn generate_secret(&mut self) {
+ let random: usize = rand::random();
+
+ 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
@@ -41,13 +52,26 @@ impl<'a> Purchaser<'a> {
None, // readonly
)?;
- tx.prep_exec("
- INSERT INTO purchasers
- (name, email, secret)
- VALUES
- (?, ?, ?)",
- (self.name, self.email, self.secret),
- )?;
+ 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(())
}