summaryrefslogtreecommitdiff
path: root/server/src/main.rs
diff options
context:
space:
mode:
authorKjetil Orbekk <kj@orbekk.com>2022-10-13 08:12:59 -0400
committerKjetil Orbekk <kj@orbekk.com>2022-10-13 08:12:59 -0400
commitaccb9032b9abe595020a27dd2f7b666cb7028f67 (patch)
tree4c92937ad368e93e9bb9ddf9a0ebb31e8288c04b /server/src/main.rs
parent8b5d16152ffb7d55811a7a558f67620a94e4cbf0 (diff)
Add AuthenticatedSession request extractor
Diffstat (limited to 'server/src/main.rs')
-rw-r--r--server/src/main.rs46
1 files changed, 15 insertions, 31 deletions
diff --git a/server/src/main.rs b/server/src/main.rs
index fd28789..b961c17 100644
--- a/server/src/main.rs
+++ b/server/src/main.rs
@@ -1,6 +1,6 @@
use std::{collections::HashMap, env, str::FromStr, sync::Arc};
-use auth::{AuthenticatedSession, LoggedInUser};
+use auth::AuthenticatedSession;
use axum::{
extract::{Extension, Query},
response::Redirect,
@@ -8,23 +8,21 @@ use axum::{
Json, Router,
};
use protocol::{Table, UserInfo};
+use server::ContextExtension;
use tower_cookies::{Cookie, CookieManagerLayer, Cookies};
use tower_http::trace::TraceLayer;
use tracing::info;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
mod auth;
mod error;
-use crate::auth::{Authenticator, SessionId};
+mod server;
use crate::error::BridgeError;
+use crate::{
+ auth::{Authenticator, SessionId},
+ server::ServerContext,
+};
use sqlx::{postgres::PgPoolOptions, PgPool};
-pub struct ServerContext {
- pub app_url: String,
- pub authenticator: Authenticator,
- pub db: PgPool,
-}
-type ContextExtension = Extension<Arc<ServerContext>>;
-
#[tokio::main]
async fn main() {
dotenv::dotenv().ok();
@@ -60,6 +58,7 @@ async fn main() {
let app = Router::new()
.route("/api/user/info", get(user_info))
+ // .route("/api/user/table", get(user_table))
.route("/api/login", get(login))
.route(auth::LOGIN_CALLBACK, get(login_callback))
.layer(CookieManagerLayer::new())
@@ -73,36 +72,21 @@ async fn main() {
}
async fn user_info(
- _user: LoggedInUser,
- cookies: Cookies,
+ session: Option<AuthenticatedSession>,
extension: ContextExtension,
) -> Result<Json<Option<UserInfo>>, BridgeError> {
- let cookie = match cookies.get("user-id") {
+ let mut session = match session {
None => return Ok(Json(None)),
- Some(v) => v,
+ Some(s) => s,
};
-
- let session_id: SessionId = match SessionId::from_str(cookie.value()) {
- Err(e) => {
- info!("Clearing cookie that failed to parse {cookie:?}: {e}");
- cookies.remove(cookie.into_owned());
- return Ok(Json(None));
- }
- Ok(s) => s,
- };
- let mut session =
- match crate::auth::fetch_authenticated_session(&extension.db, &session_id).await? {
- None => return Ok(Json(None)),
- Some(v) => v,
- };
Ok(Json(Some(UserInfo {
username: extension.authenticator.user_info(&mut session).await?,
- table: get_table(&extension.db, &session).await?,
+ table: user_table(extension, &session).await?,
})))
}
-async fn get_table(
- db: &PgPool,
+async fn user_table(
+ extension: ContextExtension,
session: &AuthenticatedSession,
) -> Result<Option<Table>, BridgeError> {
Ok(sqlx::query_as!(
@@ -115,7 +99,7 @@ async fn get_table(
"#,
session.player_id
)
- .fetch_optional(db)
+ .fetch_optional(&extension.db)
.await?)
}