beginnings of SqliteDatabase
This commit is contained in:
parent
0006004db1
commit
d4639c3152
4 changed files with 66 additions and 6 deletions
|
@ -19,7 +19,7 @@ color-eyre = { version = "0.6.2" }
|
|||
ldap3 = { version = "0.11.3", default-features = false, features = ["tls-rustls"] }
|
||||
secrecy = { version = "0.8.0", features = ["serde"] }
|
||||
serde = { version = "1.0.196", features = ["derive"] }
|
||||
sqlx = { version = "0.7.3", features = ["runtime-tokio", "tls-rustls"] }
|
||||
sqlx = { version = "0.7.3", features = ["runtime-tokio", "tls-rustls", "sqlite"] }
|
||||
tokio = { version = "1.36.0", features = ["macros", "rt-multi-thread"] }
|
||||
tracing = "0.1.40"
|
||||
tracing-error = "0.2.0"
|
||||
|
|
14
src/auth.rs
14
src/auth.rs
|
@ -1,7 +1,11 @@
|
|||
use secrecy::SecretString;
|
||||
use serde::Deserialize;
|
||||
use std::sync::Arc;
|
||||
|
||||
use tokio::sync::Mutex;
|
||||
use tracing::instrument;
|
||||
|
||||
use crate::db::SqliteDatabase;
|
||||
#[derive(Debug, Clone, Deserialize)]
|
||||
pub struct Password(pub SecretString);
|
||||
|
||||
|
@ -10,21 +14,21 @@ pub struct UserToken(pub SecretString);
|
|||
|
||||
#[derive(Debug)]
|
||||
pub struct Authenticator {
|
||||
// TODO
|
||||
db: Arc<Mutex<SqliteDatabase>>,
|
||||
}
|
||||
|
||||
impl Authenticator {
|
||||
pub fn new(/* database credentials ? */) -> Self {
|
||||
Self {}
|
||||
pub fn new(db: Arc<Mutex<SqliteDatabase>>) -> Self {
|
||||
Self { db }
|
||||
}
|
||||
|
||||
#[instrument]
|
||||
pub fn create_user_token(&mut self, username: &str, password: &Password) -> UserToken {
|
||||
pub async fn create_user_token(&mut self, username: &str, password: &Password) -> UserToken {
|
||||
todo!()
|
||||
}
|
||||
|
||||
#[instrument]
|
||||
pub fn verify_user_token(&self, token: &UserToken) -> bool {
|
||||
pub async fn verify_user_token(&self, token: &UserToken) -> bool {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
55
src/db.rs
Normal file
55
src/db.rs
Normal file
|
@ -0,0 +1,55 @@
|
|||
use sqlx::{query, Connection, SqliteConnection};
|
||||
|
||||
use crate::auth::UserToken;
|
||||
|
||||
// TODO: allow configuring this via envar
|
||||
const DB_URI_DEFAULT: &str = "sqlite://sqlite.db";
|
||||
|
||||
pub trait Database {
|
||||
async fn get_token(&self, username: &str) -> UserToken;
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct SqliteDatabase {
|
||||
conn: SqliteConnection,
|
||||
}
|
||||
|
||||
impl SqliteDatabase {
|
||||
pub async fn open() -> Self {
|
||||
let mut db = Self {
|
||||
conn: SqliteConnection::connect(DB_URI_DEFAULT)
|
||||
.await
|
||||
.expect("Failed to open SQLite database"),
|
||||
};
|
||||
|
||||
db.init().await;
|
||||
|
||||
db
|
||||
}
|
||||
|
||||
pub async fn init(&mut self) {
|
||||
query(
|
||||
"CREATE TABLE IF NOT EXISTS user_tokens (
|
||||
id INTEGER PRIMARY KEY NOT NULL,
|
||||
username VARCHAR(255),
|
||||
token NCHAR(30),
|
||||
created DATETIME,
|
||||
valid BOOLEAN,
|
||||
);",
|
||||
)
|
||||
.execute(&mut self.conn)
|
||||
.await
|
||||
.expect("Failed to initialize table user_tokens");
|
||||
}
|
||||
}
|
||||
|
||||
impl Database for SqliteDatabase {
|
||||
async fn get_token(&self, username: &str) -> UserToken {
|
||||
todo!()
|
||||
// query(
|
||||
// "
|
||||
// SELECT token, created, valid
|
||||
// ",
|
||||
// )
|
||||
}
|
||||
}
|
|
@ -20,6 +20,7 @@
|
|||
#![forbid(unsafe_code)]
|
||||
|
||||
mod auth;
|
||||
mod db;
|
||||
mod server;
|
||||
|
||||
use color_eyre::Result;
|
||||
|
|
Loading…
Reference in a new issue