feat: central function for random string
This commit is contained in:
parent
21f2a21609
commit
0023e52f79
3 changed files with 12 additions and 17 deletions
|
@ -4,8 +4,7 @@ use lettre::{
|
||||||
Message, SmtpTransport, Transport,
|
Message, SmtpTransport, Transport,
|
||||||
};
|
};
|
||||||
use maud::html;
|
use maud::html;
|
||||||
use rand::{distributions::Alphanumeric, thread_rng, Rng};
|
use skynet_ldap_backend::{db_init, get_config, read_csv, Accounts, AccountsNew, Config, Record, get_now_iso, random_string};
|
||||||
use skynet_ldap_backend::{db_init, get_config, read_csv, Accounts, AccountsNew, Config, Record, get_now_iso};
|
|
||||||
use sqlx::{Pool, Sqlite};
|
use sqlx::{Pool, Sqlite};
|
||||||
|
|
||||||
#[async_std::main]
|
#[async_std::main]
|
||||||
|
@ -26,7 +25,7 @@ async fn main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// generate a auth key
|
// generate a auth key
|
||||||
let auth = generate_auth();
|
let auth = random_string(50);
|
||||||
|
|
||||||
match send_mail(&config, &record, &auth) {
|
match send_mail(&config, &record, &auth) {
|
||||||
Ok(_) => match save_to_db(&db, &record, &auth).await {
|
Ok(_) => match save_to_db(&db, &record, &auth).await {
|
||||||
|
@ -75,11 +74,6 @@ async fn check_pending(db: &Pool<Sqlite>, mail: &str) -> bool {
|
||||||
.is_empty()
|
.is_empty()
|
||||||
}
|
}
|
||||||
|
|
||||||
// from https://rust-lang-nursery.github.io/rust-cookbook/algorithms/randomness.html#create-random-passwords-from-a-set-of-alphanumeric-characters
|
|
||||||
fn generate_auth() -> String {
|
|
||||||
thread_rng().sample_iter(&Alphanumeric).take(30).map(char::from).collect()
|
|
||||||
}
|
|
||||||
|
|
||||||
// using https://github.com/lettre/lettre/blob/57886c367d69b4d66300b322c94bd910b1eca364/examples/maud_html.rs
|
// using https://github.com/lettre/lettre/blob/57886c367d69b4d66300b322c94bd910b1eca364/examples/maud_html.rs
|
||||||
fn send_mail(config: &Config, record: &Record, auth: &str) -> Result<Response, lettre::transport::smtp::Error> {
|
fn send_mail(config: &Config, record: &Record, auth: &str) -> Result<Response, lettre::transport::smtp::Error> {
|
||||||
let recipient = &record.name_first;
|
let recipient = &record.name_first;
|
||||||
|
|
|
@ -7,9 +7,11 @@ use std::env;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::time::{SystemTime, UNIX_EPOCH};
|
use std::time::{SystemTime, UNIX_EPOCH};
|
||||||
use chrono::{Datelike, SecondsFormat, Utc};
|
use chrono::{Datelike, SecondsFormat, Utc};
|
||||||
|
use rand::distributions::Alphanumeric;
|
||||||
|
use rand::{Rng, thread_rng};
|
||||||
use tide::prelude::*;
|
use tide::prelude::*;
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Serialize, sqlx::FromRow)]
|
#[derive(Debug, Clone, Deserialize, Serialize, sqlx::FromRow)]
|
||||||
pub struct AccountsNew {
|
pub struct AccountsNew {
|
||||||
pub mail: String,
|
pub mail: String,
|
||||||
pub auth_code: String,
|
pub auth_code: String,
|
||||||
|
@ -295,3 +297,8 @@ pub fn read_csv(config: &Config) -> Result<Vec<Record>, Box<dyn std::error::Erro
|
||||||
|
|
||||||
Ok(records)
|
Ok(records)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// from https://rust-lang-nursery.github.io/rust-cookbook/algorithms/randomness.html#create-random-passwords-from-a-set-of-alphanumeric-characters
|
||||||
|
pub fn random_string(len: usize) -> String {
|
||||||
|
thread_rng().sample_iter(&Alphanumeric).take(len).map(char::from).collect()
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::{get_now, Accounts, AccountsPending, State};
|
use crate::{Accounts, AccountsPending, State, get_now_iso, AccountsNew, random_string};
|
||||||
use ldap3::exop::PasswordModify;
|
use ldap3::exop::PasswordModify;
|
||||||
use ldap3::result::ExopResult;
|
use ldap3::result::ExopResult;
|
||||||
use ldap3::{LdapConn, Scope};
|
use ldap3::{LdapConn, Scope};
|
||||||
|
@ -155,12 +155,6 @@ async fn db_pending_clear_expired(pool: &Pool<Sqlite>) -> Result<Vec<AccountsPen
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_random_string(length: usize) -> String {
|
|
||||||
use rand::distributions::Alphanumeric;
|
|
||||||
use rand::{thread_rng, Rng};
|
|
||||||
|
|
||||||
thread_rng().sample_iter(&Alphanumeric).take(length).map(char::from).collect()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
pub struct LdapUserVerify {
|
pub struct LdapUserVerify {
|
||||||
|
@ -267,7 +261,7 @@ async fn account_verification_new_account(ldap: &mut LdapConn, user_details: &Ac
|
||||||
|
|
||||||
let dn = format!("uid={},ou=users,dc=skynet,dc=ie", user);
|
let dn = format!("uid={},ou=users,dc=skynet,dc=ie", user);
|
||||||
let home_directory = format!("/home/{}", user);
|
let home_directory = format!("/home/{}", user);
|
||||||
let password_tmp = create_random_string(50);
|
let password_tmp = random_string(50);
|
||||||
let labeled_uri = format!("ldap:///ou=groups,dc=skynet,dc=ie??sub?(&(objectclass=posixgroup)(memberuid={}))", user);
|
let labeled_uri = format!("ldap:///ou=groups,dc=skynet,dc=ie??sub?(&(objectclass=posixgroup)(memberuid={}))", user);
|
||||||
let sk_mail = format!("{}@skynet.ie", user);
|
let sk_mail = format!("{}@skynet.ie", user);
|
||||||
let sk_created = get_sk_created();
|
let sk_created = get_sk_created();
|
||||||
|
|
Loading…
Reference in a new issue