LCOV - code coverage report
Current view: top level - src/bin - bliki.rs (source / functions) Coverage Total Hit
Test: bliki.lcov Lines: 0.0 % 52 0
Test Date: 2025-11-27 15:46:07 Functions: 0.0 % 3 0

            Line data    Source code
       1              : use axum_extra::extract::cookie::Key;
       2              : use clap::{Arg, Command};
       3              : use std::{
       4              :     fs,
       5              :     sync::{Arc, Mutex},
       6              : };
       7              : use tokio::net::TcpListener;
       8              : 
       9            0 : fn bliki_cmd() -> Command {
      10            0 :     Command::new("bliki")
      11            0 :         .about("A personal site")
      12            0 :         .arg(
      13            0 :             Arg::new("template_dir")
      14            0 :                 .short('D')
      15            0 :                 .default_value("templates")
      16            0 :                 .help("The directory where templates are"),
      17              :         )
      18            0 :         .arg(
      19            0 :             Arg::new("dbpath")
      20            0 :                 .short('d')
      21            0 :                 .default_value("bliki.sqlite3")
      22            0 :                 .help("Path to the SQLite database to use"),
      23              :         )
      24            0 :         .arg(
      25            0 :             Arg::new("asset_dir")
      26            0 :                 .short('a')
      27            0 :                 .default_value("./public")
      28            0 :                 .help("Path to server assets (js, css, icons, etc) from"),
      29              :         )
      30            0 :         .arg(
      31            0 :             Arg::new("upload_dir")
      32            0 :                 .short('U')
      33            0 :                 .default_value("./uploads")
      34            0 :                 .help("Directory where media uploads will be stored"),
      35              :         )
      36            0 :         .arg(
      37            0 :             Arg::new("host")
      38            0 :                 .short('H')
      39            0 :                 .default_value("0.0.0.0")
      40            0 :                 .help("The host to serve bliki under"),
      41              :         )
      42            0 :         .arg(
      43            0 :             Arg::new("port").short('p').default_value("3000").help("The port to serve bliki under"),
      44              :         )
      45            0 :         .arg(Arg::new("key").short('k').help("The cookie to sign cookies with"))
      46            0 : }
      47              : 
      48              : #[tokio::main]
      49            0 : async fn main() -> anyhow::Result<()> {
      50            0 :     let cmd = bliki_cmd();
      51            0 :     let args = cmd.get_matches();
      52            0 :     let host = args.get_one::<String>("host").unwrap();
      53            0 :     let port = args.get_one::<String>("port").unwrap();
      54            0 :     let addr = format!("{0}:{1}", host, port);
      55            0 :     let template_dir = args.get_one::<String>("template_dir").unwrap();
      56            0 :     let dbpath = args.get_one::<String>("dbpath").unwrap();
      57            0 :     let db = bliki::db::new(dbpath.into())?;
      58            0 :     let asset_dir = args.get_one::<String>("asset_dir").unwrap();
      59            0 :     let upload_dir = args.get_one::<String>("upload_dir").unwrap();
      60            0 :     let key_file = args.get_one::<String>("key").unwrap();
      61            0 :     let key_bytes = fs::read(key_file)?;
      62            0 :     let key = Key::from(key_bytes.as_slice());
      63            0 :     tracing_subscriber::fmt::init();
      64            0 :     let app = bliki::new(Arc::new(Mutex::new(db)), template_dir, asset_dir, upload_dir, key);
      65            0 :     let listener = TcpListener::bind(addr).await?;
      66            0 :     axum::serve(listener, app).await?;
      67            0 :     Ok(())
      68            0 : }
        

Generated by: LCOV version 2.0-1