u/src/utils.rs
2023-04-28 13:19:02 -04:00

37 lines
1 KiB
Rust

use sqlx::SqlitePool;
const API_KEY_ALPHABET: &str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
const FILENAME_ALPHABET: &str = "0123456789abcdefghijklmnopqrstuvwxyz";
pub fn gen_filename() -> String {
let alphabet = &FILENAME_ALPHABET.chars().collect::<Vec<_>>()[..];
nanoid::nanoid!(8, alphabet)
}
pub fn gen_key() -> String {
let alphabet = &API_KEY_ALPHABET.chars().collect::<Vec<_>>()[..];
nanoid::nanoid!(64, alphabet)
}
pub fn gen_revocation_key() -> String {
let alphabet = &API_KEY_ALPHABET.chars().collect::<Vec<_>>()[..];
nanoid::nanoid!(128, alphabet)
}
pub async fn check_admin_key(pool: &SqlitePool) -> anyhow::Result<()> {
let query = sqlx::query!("select admin from api_keys where admin = true")
.fetch_all(pool)
.await?;
if query.is_empty() {
let key = gen_key();
sqlx::query!("insert into api_keys (key, admin) values ($1, true)", key)
.execute(pool)
.await?;
println!("created admin key: {}", key);
}
Ok(())
}