add cors support
This commit is contained in:
parent
2f8ddf0754
commit
ed5f50183a
@ -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"] }
|
||||
|
||||
@ -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>,
|
||||
|
||||
17
src/main.rs
17
src/main.rs
@ -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));
|
||||
|
||||
Loading…
Reference in New Issue
Block a user