add cors support

This commit is contained in:
Mitchell Marino 2023-04-16 16:33:42 -05:00
parent 2f8ddf0754
commit ed5f50183a
3 changed files with 59 additions and 2 deletions

View File

@ -8,6 +8,8 @@ edition = "2021"
[dependencies]
tokio = { version = "1.27", features = ["full"] }
axum = "0.6"
tower = "0.4"
tower-http = { version = "0.4", features = ["cors"]}
axum-auth = { version = "0.4", features = ["auth-bearer"]}
sqlx = { version = "0.6", features = ["postgres", "runtime-tokio-rustls", "all-types"] }
serde = { version = "1.0", features = ["derive"] }

View File

@ -215,6 +215,48 @@ pub async fn get_event(
.into_response()
}
pub async fn delete_event(
AuthBearer(token): AuthBearer,
State(app_state): State<AppState>,
Query(get_event_query): Query<GetEventQuery>,
) -> impl IntoResponse {
if let Err(err) = handle_token(token, &app_state, Role::Student) {
return err;
};
let result = query!(
r#"
DELETE FROM events
WHERE id = $1
"#,
get_event_query.id
)
.execute(&app_state.db_pool)
.await;
match result {
Ok(result) => {
if result.rows_affected() != 1 {
(
StatusCode::NOT_FOUND,
Json(json!({
"error": format!("Event {} not found.", get_event_query.id)
})),
)
} else {
(StatusCode::OK, Json(json!({})))
}
}
Err(err) => (
StatusCode::INTERNAL_SERVER_ERROR,
Json(json!({
"error": format!("Unknown error getting event: {:?}", err)
})),
),
}
.into_response()
}
pub async fn create_event(
AuthBearer(token): AuthBearer,
State(app_state): State<AppState>,

View File

@ -7,6 +7,8 @@ mod report;
mod user;
mod winner;
use std::net::SocketAddr;
use axum::{
routing::{delete, get, post, put},
Router,
@ -14,7 +16,7 @@ use axum::{
use jsonwebtoken::{DecodingKey, EncodingKey};
use sqlx::postgres::PgPoolOptions;
use sqlx::PgPool;
use std::net::SocketAddr;
use tower_http::cors::{self, CorsLayer};
use user::{signin, signup};
#[derive(Clone)]
@ -45,7 +47,12 @@ async fn main() {
.route("/", get(root))
.route("/user/signup", post(signup))
.route("/user/signin", post(signin))
.route("/event", get(events::get_event).post(events::create_event))
.route(
"/event",
get(events::get_event)
.post(events::create_event)
.delete(events::delete_event),
)
.route("/event/preview", get(events::get_events_preview))
.route("/event/future", get(events::get_all_events))
.route("/event/recent", get(events::get_recent_events))
@ -65,6 +72,12 @@ async fn main() {
jwt_decode,
});
// Create CORS midleware to allow the web build of the UI to work.
let cors = CorsLayer::new()
.allow_methods(cors::Any)
.allow_origin(cors::Any);
let app = app.layer(cors);
// run our app with hyper
// `axum::Server` is a re-export of `hyper::Server`
let addr = SocketAddr::from(([0, 0, 0, 0], 3000));