mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-03 17:08:13 +00:00
69 lines
2.3 KiB
Rust
69 lines
2.3 KiB
Rust
use log::{info, warn};
|
|
use sqlx::{MySql, Pool};
|
|
|
|
use errors::{anyhow, AnyhowResult};
|
|
use hashing::bcrypt::bcrypt_password_hash::bcrypt_password_hash;
|
|
use hashing::md5::email_to_gravatar_hash::email_to_gravatar_hash;
|
|
use mysql_queries::queries::users::user::create_account::{create_account, CreateAccountArgs};
|
|
use tokens::tokens::users::UserToken;
|
|
|
|
pub const ADMIN_USERNAME : &str = "admin";
|
|
pub const HANASHI_USERNAME : &str = "hanashi";
|
|
|
|
// We want deterministic tokens for some records
|
|
pub const ADMIN_USER_TOKEN : &str = "user_4jgh4dk9tmr6t";
|
|
pub const HANASHI_USER_TOKEN : &str = "user_fcfteany0ds60";
|
|
|
|
pub async fn seed_user_accounts(mysql_pool: &Pool<MySql>) -> AnyhowResult<()> {
|
|
info!("Seeding user accounts...");
|
|
|
|
// NB: This is idempotent and will only install the accounts once.
|
|
let users = [
|
|
(ADMIN_USERNAME, "password", Some(ADMIN_USER_TOKEN)),
|
|
(HANASHI_USERNAME, "password", Some(HANASHI_USER_TOKEN)),
|
|
("test", "password", None),
|
|
];
|
|
|
|
for (username, password, maybe_user_token) in users {
|
|
let maybe_user_token = maybe_user_token.map(|token| UserToken::new_from_str(token));
|
|
let result = seed_user(username, password, maybe_user_token, &mysql_pool).await;
|
|
match result {
|
|
Ok(_) => info!("Seeded {}", username),
|
|
Err(err) => warn!(r#"
|
|
Could not seed user {} : {:?}
|
|
(No worries: if there's a duplicate key error, we probably already
|
|
seeded the user on a previous invocation!)
|
|
"#, username, err),
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
async fn seed_user(
|
|
username: &str,
|
|
password: &str,
|
|
maybe_user_token: Option<UserToken>,
|
|
mysql_pool: &Pool<MySql>,
|
|
) -> AnyhowResult<()> {
|
|
info!("Seeding user {} ...", username);
|
|
|
|
let display_name = username.clone();
|
|
let username = username.to_lowercase();
|
|
let email_address = format!("{}@storyteller.ai", username);
|
|
let email_gravatar_hash = email_to_gravatar_hash(&email_address);
|
|
let password_hash = bcrypt_password_hash(password)?;
|
|
|
|
create_account(mysql_pool, CreateAccountArgs {
|
|
username: &username,
|
|
display_name,
|
|
email_address: &email_address,
|
|
email_gravatar_hash: &email_gravatar_hash,
|
|
password_hash: &password_hash,
|
|
ip_address: "127.0.0.1",
|
|
maybe_user_token: maybe_user_token.as_ref(),
|
|
}).await.map_err(|err| anyhow!("err: {:?}", err))?;
|
|
|
|
Ok(())
|
|
}
|