fc-server: restore dashboard routes; add extract_session middleware

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I91b71875b936ba2a1efbede1cb1ed4886a6a6964
This commit is contained in:
raf 2026-02-05 22:30:08 +03:00
commit 4d8564f56b
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF
2 changed files with 8 additions and 23 deletions

View file

@ -1207,8 +1207,7 @@ async fn logout_action(
.into_response() .into_response()
} }
pub fn router(state: AppState) -> Router<AppState> { pub fn router() -> Router<AppState> {
let _ = state; // used by middleware layer in mod.rs
Router::new() Router::new()
.route("/login", get(login_page).post(login_action)) .route("/login", get(login_page).post(login_action))
.route("/logout", axum::routing::post(logout_action)) .route("/logout", axum::routing::post(logout_action))

View file

@ -126,8 +126,13 @@ pub fn router(state: AppState, config: &ServerConfig) -> Router {
let mut app = Router::new() let mut app = Router::new()
// Static assets // Static assets
.route("/static/style.css", get(serve_style_css)) .route("/static/style.css", get(serve_style_css))
// Dashboard routes with session extraction middleware // Dashboard routes (SSR templates) with session extraction
.nest( .merge(dashboard::router().route_layer(middleware::from_fn_with_state(
state.clone(),
extract_session,
)))
// API routes
.nest(
"/api/v1", "/api/v1",
Router::new() Router::new()
.merge(projects::router()) .merge(projects::router())
@ -151,25 +156,6 @@ pub fn router(state: AppState, config: &ServerConfig) -> Router {
.merge(metrics::router()) .merge(metrics::router())
// Webhooks use their own HMAC auth, outside the API key gate // Webhooks use their own HMAC auth, outside the API key gate
.merge(webhooks::router()) .merge(webhooks::router())
// API routes with Bearer token auth
.nest(
"/api/v1",
Router::new()
.merge(projects::router())
.merge(jobsets::router())
.merge(evaluations::router())
.merge(builds::router())
.merge(logs::router())
.merge(auth::router())
.merge(search::router())
.merge(badges::router())
.merge(channels::router())
.merge(admin::router())
.route_layer(middleware::from_fn_with_state(
state.clone(),
require_api_key,
)),
)
.layer(TraceLayer::new_for_http()) .layer(TraceLayer::new_for_http())
.layer(cors_layer) .layer(cors_layer)
.layer(RequestBodyLimitLayer::new(config.max_body_size)) .layer(RequestBodyLimitLayer::new(config.max_body_size))