Added web player
This commit is contained in:
49
furumi-server/src/web/mod.rs
Normal file
49
furumi-server/src/web/mod.rs
Normal file
@@ -0,0 +1,49 @@
|
||||
pub mod auth;
|
||||
pub mod browse;
|
||||
pub mod meta;
|
||||
pub mod stream;
|
||||
pub mod transcoder;
|
||||
|
||||
use std::path::PathBuf;
|
||||
use std::sync::Arc;
|
||||
|
||||
use axum::{
|
||||
Router,
|
||||
middleware,
|
||||
routing::get,
|
||||
};
|
||||
|
||||
/// Shared state passed to all web handlers.
|
||||
#[derive(Clone)]
|
||||
pub struct WebState {
|
||||
pub root: Arc<PathBuf>,
|
||||
pub token: Arc<String>,
|
||||
}
|
||||
|
||||
/// Build the axum Router for the web player.
|
||||
pub fn build_router(root: PathBuf, token: String) -> Router {
|
||||
let state = WebState {
|
||||
root: Arc::new(root),
|
||||
token: Arc::new(token),
|
||||
};
|
||||
|
||||
let api = Router::new()
|
||||
.route("/browse", get(browse::handler))
|
||||
.route("/stream/*path", get(stream::handler))
|
||||
.route("/meta/*path", get(meta::handler));
|
||||
|
||||
let authed_routes = Router::new()
|
||||
.route("/", get(player_html))
|
||||
.nest("/api", api)
|
||||
.route_layer(middleware::from_fn_with_state(state.clone(), auth::require_auth));
|
||||
|
||||
Router::new()
|
||||
.route("/login", get(auth::login_page).post(auth::login_submit))
|
||||
.route("/logout", get(auth::logout))
|
||||
.merge(authed_routes)
|
||||
.with_state(state)
|
||||
}
|
||||
|
||||
async fn player_html() -> axum::response::Html<&'static str> {
|
||||
axum::response::Html(include_str!("player.html"))
|
||||
}
|
||||
Reference in New Issue
Block a user