diff --git a/license_server/src/utils.rs b/license_server/src/utils.rs index b490034..b4c32c2 100644 --- a/license_server/src/utils.rs +++ b/license_server/src/utils.rs @@ -1,3 +1,5 @@ +use rand::{seq::SliceRandom, thread_rng}; + pub fn empty_to_none>(s: S) -> Option { let s = s.into(); if s.is_empty() { @@ -6,3 +8,18 @@ pub fn empty_to_none>(s: S) -> Option { Some(s) } } + +const RAND_LINCENSE_STR_SRC: &str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + +pub fn generate_product_license_id() -> String { + let choices = RAND_LINCENSE_STR_SRC.as_bytes(); + let mut rng = thread_rng(); + let mut code: Vec = vec![]; + while code.len() < 10 { + match choices.choose(&mut rng) { + Some(c) => code.push(String::from_utf8(vec![*c]).unwrap()), + None => continue, + } + } + code.join("") +}