feat: use settings.page.base_domain to generate default deployment hostname

This commit is contained in:
Aravinth Manivannan 2022-11-10 17:34:21 +05:30
parent dd38dd05d1
commit 30be3a293d
Signed by: realaravinth
GPG key ID: AD9F0F08E855ED88

View file

@ -15,6 +15,8 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
use crate::settings::Settings;
// source: https://www.randomlists.com/data/nouns.json // source: https://www.randomlists.com/data/nouns.json
const LEN: usize = 876; const LEN: usize = 876;
const WORDLIST: [&str; LEN] = [ const WORDLIST: [&str; LEN] = [
@ -896,7 +898,22 @@ const WORDLIST: [&str; LEN] = [
"zoo", "zoo",
]; ];
pub fn get_random_subdomain() -> String { struct ID<'a> {
first: &'a str,
second: &'a str,
third: &'a str,
}
impl<'a> ID<'a> {
fn hostname(&self, base_domain: &str) -> String {
format!(
"{}-{}-{}.{}",
self.first, self.second, self.third, base_domain
)
}
}
fn get_random_id() -> ID<'static> {
use rand::{rngs::ThreadRng, thread_rng, Rng}; use rand::{rngs::ThreadRng, thread_rng, Rng};
let mut rng: ThreadRng = thread_rng(); let mut rng: ThreadRng = thread_rng();
@ -921,7 +938,16 @@ pub fn get_random_subdomain() -> String {
let first = WORDLIST[first]; let first = WORDLIST[first];
let second = WORDLIST[second]; let second = WORDLIST[second];
let third = WORDLIST[third]; let third = WORDLIST[third];
format!("{first}-{second}-{third}") ID {
first,
second,
third,
}
}
pub fn get_random_subdomain(s: &Settings) -> String {
let id = get_random_id();
id.hostname(&s.page.base_domain)
} }
#[cfg(test)] #[cfg(test)]
@ -929,11 +955,18 @@ mod tests {
use super::*; use super::*;
#[test] #[test]
fn test_get_random_subdomain() { fn test_subdomains() {
let sub = get_random_subdomain(); // test random ID
let splits: Vec<&str> = sub.split('-').collect(); let id = get_random_id();
assert_ne!(splits[0], splits[1]); assert_ne!(id.first, id.second);
assert_ne!(splits[0], splits[2]); assert_ne!(id.first, id.third);
assert_ne!(splits[1], splits[2]); assert_ne!(id.third, id.second);
// test ID::hostname
let delimiter = "foobar21312";
assert_eq!(
id.hostname(delimiter),
format!("{}-{}-{}.{delimiter}", id.first, id.second, id.third,)
);
} }
} }