Add config
This commit is contained in:
parent
db604e3eed
commit
aef17a7361
5 changed files with 60 additions and 1 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -4,3 +4,4 @@
|
||||||
|
|
||||||
*.db
|
*.db
|
||||||
*.sqlite
|
*.sqlite
|
||||||
|
/config.toml
|
||||||
|
|
4
config.toml.example
Normal file
4
config.toml.example
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
padlock_secret = ""
|
||||||
|
|
||||||
|
[database]
|
||||||
|
connection_string = "sqlite://sqlite.db"
|
29
src/config.rs
Normal file
29
src/config.rs
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
use serde::Deserialize;
|
||||||
|
|
||||||
|
use crate::secrets::PadlockGenerationSecret;
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Deserialize)]
|
||||||
|
pub struct Config {
|
||||||
|
database: DatabaseConfig,
|
||||||
|
#[serde(default)]
|
||||||
|
auth_backends: Vec<AuthBackend>,
|
||||||
|
#[serde(with = "hex::serde")]
|
||||||
|
padlock_secret: PadlockGenerationSecret,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Deserialize)]
|
||||||
|
pub struct DatabaseConfig {
|
||||||
|
connection_string: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Deserialize)]
|
||||||
|
#[serde(tag = "type")]
|
||||||
|
pub enum AuthBackend {
|
||||||
|
#[serde(rename = "LDAP")]
|
||||||
|
Ldap(LdapBackendConfig),
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Deserialize)]
|
||||||
|
pub struct LdapBackendConfig {
|
||||||
|
server_address: String,
|
||||||
|
}
|
15
src/main.rs
15
src/main.rs
|
@ -20,11 +20,15 @@
|
||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
|
|
||||||
mod auth;
|
mod auth;
|
||||||
|
mod config;
|
||||||
mod db;
|
mod db;
|
||||||
mod secrets;
|
mod secrets;
|
||||||
mod server;
|
mod server;
|
||||||
|
|
||||||
|
use std::path::Path;
|
||||||
|
|
||||||
use color_eyre::Result;
|
use color_eyre::Result;
|
||||||
|
use config::Config;
|
||||||
use tracing::{event, instrument, Level};
|
use tracing::{event, instrument, Level};
|
||||||
use tracing_error::ErrorLayer;
|
use tracing_error::ErrorLayer;
|
||||||
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter};
|
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter};
|
||||||
|
@ -47,6 +51,15 @@ fn init() -> Result<()> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[instrument]
|
||||||
|
async fn load_config(path: &str) -> Result<Config> {
|
||||||
|
event!(Level::DEBUG, "Loading config");
|
||||||
|
|
||||||
|
let content = tokio::fs::read_to_string(path).await?;
|
||||||
|
|
||||||
|
Ok(toml::from_str(&content)?)
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
#[instrument]
|
#[instrument]
|
||||||
async fn main() -> Result<()> {
|
async fn main() -> Result<()> {
|
||||||
|
@ -54,6 +67,8 @@ async fn main() -> Result<()> {
|
||||||
|
|
||||||
event!(Level::INFO, "Hello, world!");
|
event!(Level::INFO, "Hello, world!");
|
||||||
|
|
||||||
|
let config = load_config("config.toml").await?;
|
||||||
|
|
||||||
tokio::spawn(server::run()).await??;
|
tokio::spawn(server::run()).await??;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use std::fmt::Debug;
|
use std::{convert::Infallible, fmt::Debug};
|
||||||
|
|
||||||
|
use hex::FromHex;
|
||||||
use secrecy::{ExposeSecret, SecretString, SecretVec};
|
use secrecy::{ExposeSecret, SecretString, SecretVec};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
@ -50,6 +51,7 @@ impl From<String> for ServerPadlock {
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
pub struct ServerHash(pub Vec<u8>);
|
pub struct ServerHash(pub Vec<u8>);
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
pub struct PadlockGenerationSecret(pub SecretVec<u8>);
|
pub struct PadlockGenerationSecret(pub SecretVec<u8>);
|
||||||
impl Debug for PadlockGenerationSecret {
|
impl Debug for PadlockGenerationSecret {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
@ -63,3 +65,11 @@ impl Clone for PadlockGenerationSecret {
|
||||||
PadlockGenerationSecret(self.0.expose_secret().clone().into())
|
PadlockGenerationSecret(self.0.expose_secret().clone().into())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl FromHex for PadlockGenerationSecret {
|
||||||
|
type Error = Infallible;
|
||||||
|
|
||||||
|
fn from_hex<T: AsRef<[u8]>>(hex: T) -> Result<Self, Self::Error> {
|
||||||
|
Ok(Self(hex.as_ref().to_vec().into()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue