Cors layer added
header, origin and method limitations
This commit is contained in:
16
backend/Cargo.lock
generated
16
backend/Cargo.lock
generated
@@ -150,6 +150,8 @@ dependencies = [
|
|||||||
"sqlx",
|
"sqlx",
|
||||||
"time",
|
"time",
|
||||||
"tokio",
|
"tokio",
|
||||||
|
"tower",
|
||||||
|
"tower-http",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2243,6 +2245,20 @@ dependencies = [
|
|||||||
"tracing",
|
"tracing",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tower-http"
|
||||||
|
version = "0.6.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags",
|
||||||
|
"bytes",
|
||||||
|
"http",
|
||||||
|
"pin-project-lite",
|
||||||
|
"tower-layer",
|
||||||
|
"tower-service",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tower-layer"
|
name = "tower-layer"
|
||||||
version = "0.3.3"
|
version = "0.3.3"
|
||||||
|
|||||||
@@ -15,3 +15,5 @@ chrono = { version = "0.4.44", features = ["serde"] }
|
|||||||
jsonwebtoken = { version = "10.3.0", features = ["rust_crypto"] }
|
jsonwebtoken = { version = "10.3.0", features = ["rust_crypto"] }
|
||||||
argon2 = "0.5.3"
|
argon2 = "0.5.3"
|
||||||
time = "0.3.47"
|
time = "0.3.47"
|
||||||
|
tower = "0.5.3"
|
||||||
|
tower-http = { version = "0.6.8", features = ["cors"] }
|
||||||
|
|||||||
@@ -2,15 +2,18 @@
|
|||||||
pub struct Env {
|
pub struct Env {
|
||||||
pub db_url: String,
|
pub db_url: String,
|
||||||
pub token_secret: String,
|
pub token_secret: String,
|
||||||
|
pub origin: String
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Env {
|
impl Env {
|
||||||
pub fn load() -> Env {
|
pub fn load() -> Env {
|
||||||
let db_url = std::env::var("DATABASE_URL").expect("DATABASE_URL must be set");
|
let db_url = std::env::var("DATABASE_URL").expect("DATABASE_URL must be set");
|
||||||
let token_secret = std::env::var("TOKEN_SECRET").expect("TOKEN_SECRET must be set");
|
let token_secret = std::env::var("TOKEN_SECRET").expect("TOKEN_SECRET must be set");
|
||||||
|
let origin = std::env::var("ORIGIN").expect("ORIGIN must be set")
|
||||||
Env {
|
Env {
|
||||||
db_url,
|
db_url,
|
||||||
token_secret,
|
token_secret,
|
||||||
|
origin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,12 +6,20 @@ mod models;
|
|||||||
mod router;
|
mod router;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use axum::{Router, routing};
|
use axum::{
|
||||||
|
Router,
|
||||||
|
http::{
|
||||||
|
HeaderValue, Method,
|
||||||
|
header::{ACCEPT, AUTHORIZATION, CONTENT_TYPE},
|
||||||
|
},
|
||||||
|
routing,
|
||||||
|
};
|
||||||
use dotenv::dotenv;
|
use dotenv::dotenv;
|
||||||
use models::*;
|
use models::*;
|
||||||
use router::create_router;
|
use router::create_router;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use sqlx::{PgPool, postgres::PgPoolOptions};
|
use sqlx::{PgPool, postgres::PgPoolOptions};
|
||||||
|
use tower_http::cors::CorsLayer;
|
||||||
|
|
||||||
use crate::env::Env;
|
use crate::env::Env;
|
||||||
|
|
||||||
@@ -24,7 +32,7 @@ pub struct AppState {
|
|||||||
async fn main() {
|
async fn main() {
|
||||||
dotenv().ok();
|
dotenv().ok();
|
||||||
let env = Env::load();
|
let env = Env::load();
|
||||||
let database_url = std::env::var("DATABASE_URL").expect("DATABASE_URL variable not set");
|
let database_url = &env.db_url;
|
||||||
let pool = match PgPoolOptions::new().connect(&database_url).await {
|
let pool = match PgPoolOptions::new().connect(&database_url).await {
|
||||||
Ok(pool) => {
|
Ok(pool) => {
|
||||||
println!("Database connection successful");
|
println!("Database connection successful");
|
||||||
@@ -35,10 +43,19 @@ async fn main() {
|
|||||||
std::process::exit(1);
|
std::process::exit(1);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let cors = CorsLayer::new()
|
||||||
|
.allow_origin(env.origin.parse::<HeaderValue>().unwrap())
|
||||||
|
.allow_methods([Method::GET, Method::POST, Method::PATCH, Method::DELETE])
|
||||||
|
.allow_credentials(true)
|
||||||
|
.allow_headers([AUTHORIZATION, ACCEPT, CONTENT_TYPE]);
|
||||||
|
|
||||||
let app = create_router(Arc::new(AppState {
|
let app = create_router(Arc::new(AppState {
|
||||||
db: pool.clone(),
|
db: pool.clone(),
|
||||||
env: env.clone(),
|
env: env.clone(),
|
||||||
}));
|
}))
|
||||||
|
.layer(cors);
|
||||||
|
|
||||||
let listener = tokio::net::TcpListener::bind("0.0.0.0:8001").await.unwrap();
|
let listener = tokio::net::TcpListener::bind("0.0.0.0:8001").await.unwrap();
|
||||||
axum::serve(listener, app).await;
|
axum::serve(listener, app).await;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user