Build Docker image
This commit is contained in:
2
player-server/.gitignore
vendored
Normal file
2
player-server/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
target
|
||||
.idea
|
1376
player-server/Cargo.lock
generated
Normal file
1376
player-server/Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
13
player-server/Cargo.toml
Normal file
13
player-server/Cargo.toml
Normal file
@ -0,0 +1,13 @@
|
||||
[package]
|
||||
name = "player-server"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
actix-files = "0.6.0"
|
||||
actix-web = "4"
|
||||
env_logger = "0.9.0"
|
||||
log = "0.4"
|
||||
clap = { version = "3.1.6", features = ["derive", "env"] }
|
59
player-server/src/main.rs
Normal file
59
player-server/src/main.rs
Normal file
@ -0,0 +1,59 @@
|
||||
use std::path::Path;
|
||||
|
||||
use actix_files::Files;
|
||||
use actix_web::{App, HttpResponse, HttpServer, middleware::Logger, web};
|
||||
use clap::Parser;
|
||||
|
||||
/// Music web player server
|
||||
#[derive(Parser, Debug, Clone)]
|
||||
#[clap(author, version, about, long_about = None)]
|
||||
struct Args {
|
||||
/// Listen address
|
||||
#[clap(short, long, env, default_value = "0.0.0.0:8000")]
|
||||
listen_address: String,
|
||||
|
||||
/// Path to files
|
||||
#[clap(short, long)]
|
||||
files_path: String,
|
||||
|
||||
/// Api URL
|
||||
#[clap(long, env)]
|
||||
api_url: String,
|
||||
|
||||
/// Api token
|
||||
#[clap(long, env)]
|
||||
api_token: String,
|
||||
}
|
||||
|
||||
/// Serve main file, modifying api url & token values
|
||||
async fn main_js_file(data: web::Data<Args>) -> HttpResponse {
|
||||
let path = Path::new(&data.files_path).join("main.dart.js");
|
||||
let file = std::fs::read_to_string(path).unwrap();
|
||||
let script = file
|
||||
.replace("<<<API_URL>>>", &data.api_url)
|
||||
.replace("<<<API_TOKEN>>>", &data.api_token);
|
||||
|
||||
HttpResponse::Ok()
|
||||
.content_type("application/javascript")
|
||||
.body(script)
|
||||
}
|
||||
|
||||
#[actix_web::main]
|
||||
async fn main() -> std::io::Result<()> {
|
||||
let args: Args = Args::parse();
|
||||
|
||||
env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
|
||||
log::info!("starting HTTP server at {}", args.listen_address);
|
||||
|
||||
let args_cp = args.clone();
|
||||
HttpServer::new(move || {
|
||||
App::new()
|
||||
.service(web::resource("main.dart.js").to(main_js_file))
|
||||
.service(Files::new("/", &args_cp.files_path).index_file("index.html"))
|
||||
.wrap(Logger::default())
|
||||
.app_data(web::Data::new(args_cp.clone()))
|
||||
})
|
||||
.bind(args.listen_address)?
|
||||
.run()
|
||||
.await
|
||||
}
|
Reference in New Issue
Block a user