feat: config network

This commit is contained in:
nathan 2023-03-15 10:02:28 +08:00
parent bbcfe33fe7
commit b2c59409b8
6 changed files with 38 additions and 7 deletions

View File

@ -1,7 +1,7 @@
application:
port: 8000
host: 0.0.0.0
secret_key: "d8b242c8a47de60e1ebf4e6bb7d3315cdd4b4071919fe1065566f23a354753ae"
server_key: ""
database:
host: "localhost"
port: 5432

11
crates/token/Cargo.toml Normal file
View File

@ -0,0 +1,11 @@
[package]
name = "token"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
jsonwebtoken = "8.2.0"
jwt = "0.16.0"
serde = { version = "1.0", features = ["derive"] }

14
crates/token/src/lib.rs Normal file
View File

@ -0,0 +1,14 @@
pub fn add(left: usize, right: usize) -> usize {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}

View File

@ -31,7 +31,9 @@ impl Application {
let server = run(
listener,
state,
config.application.secret_key.clone(),
certificate,
server_key,
// config.application.server_key.clone(),
config.redis_uri.clone(),
)
.await?;
@ -51,10 +53,10 @@ impl Application {
pub async fn run(
listener: TcpListener,
state: State,
certificate: Secret<String>,
secret_key: Secret<String>,
redis_uri: Secret<String>,
) -> Result<Server, anyhow::Error> {
let (cert, _server_key) = create_certificate()?;
let redis_store = RedisSessionStore::new(redis_uri.expose_secret()).await?;
let server = HttpServer::new(move || {
let secret_key = Key::from(secret_key.expose_secret().as_bytes());

View File

@ -1,3 +1,4 @@
use crate::self_signed::create_certificate;
use config::{Config as InnerConfig, FileFormat};
use secrecy::Secret;
use serde_aux::field_attributes::deserialize_number_from_string;
@ -24,7 +25,8 @@ pub struct ApplicationSettings {
#[serde(deserialize_with = "deserialize_number_from_string")]
pub port: u16,
pub host: String,
pub secret_key: Secret<String>,
pub certificate: Secret<String>,
pub server_key: Secret<String>,
}
#[derive(serde::Deserialize, Clone, Debug)]
@ -61,6 +63,7 @@ impl DatabaseSetting {
pub fn get_configuration() -> Result<Config, config::ConfigError> {
let base_path = std::env::current_dir().expect("Failed to determine the current directory");
let configuration_dir = base_path.join("configuration");
let (certificate, server_key) = create_certificate()?;
let environment: Environment = std::env::var("APP_ENVIRONMENT")
.unwrap_or_else(|_| "local".into())

View File

@ -1,9 +1,10 @@
use rcgen::{Certificate, CertificateParams, KeyPair, RcgenError, SanType};
use secrecy::Secret;
pub const CA_CRT: &str = include_str!("../cert/cert.pem");
pub const CA_KEY: &str = include_str!("../cert/key.pem");
pub fn create_certificate() -> Result<(String, String), RcgenError> {
pub fn create_certificate() -> Result<(Secret<String>, Secret<String>), RcgenError> {
let key = KeyPair::from_pem(CA_KEY)?;
let params = CertificateParams::from_ca_cert_pem(CA_CRT, key)?;
let ca_cert = Certificate::from_params(params)?;
@ -23,7 +24,7 @@ pub fn create_certificate() -> Result<(String, String), RcgenError> {
// 1. localhost
// 2. 127.0.0.1
let gen_cert = Certificate::from_params(params)?;
let server_crt = gen_cert.serialize_pem_with_signer(&ca_cert)?;
let server_key = gen_cert.serialize_private_key_pem();
let server_crt = Secret::new(gen_cert.serialize_pem_with_signer(&ca_cert)?);
let server_key = Secret::new(gen_cert.serialize_private_key_pem());
Ok((server_crt, server_key))
}