forked from navos/sheepd
54 lines
1.3 KiB
Rust
54 lines
1.3 KiB
Rust
use axum::{
|
|
Json, Router,
|
|
http::StatusCode,
|
|
routing::{get, post},
|
|
};
|
|
use axum_client_ip::{ClientIp, ClientIpSource};
|
|
use based::auth::{Sessions, User};
|
|
use owl::{prelude::*, save, set_global_db};
|
|
use rand::RngCore;
|
|
use serde::{Deserialize, Serialize};
|
|
use serde_json::json;
|
|
use std::net::SocketAddr;
|
|
mod api;
|
|
mod server_core;
|
|
use server_core::route::{join_device, login_user};
|
|
|
|
fn generate_token() -> String {
|
|
let mut rng = rand::rng();
|
|
let mut token = vec![0u8; 32];
|
|
rng.fill_bytes(&mut token);
|
|
|
|
hex::encode(token)
|
|
}
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
tracing_subscriber::fmt::init();
|
|
|
|
let db = Database::in_memory();
|
|
set_global_db!(db);
|
|
|
|
User::create("admin".to_string(), "admin", based::auth::UserRole::Admin)
|
|
.await
|
|
.unwrap();
|
|
|
|
let device = Router::new()
|
|
.route("/join", post(join_device))
|
|
.layer(ClientIpSource::ConnectInfo.into_extension()); // Direct IP
|
|
// .layer(ClientIpSource::XRealIp.into_extension()) // Proxy
|
|
|
|
let user = Router::new().route("/login", post(login_user));
|
|
|
|
let app = Router::new().merge(device).merge(user);
|
|
|
|
log::info!("Starting server");
|
|
|
|
let listener = tokio::net::TcpListener::bind("0.0.0.0:8000").await.unwrap();
|
|
axum::serve(
|
|
listener,
|
|
app.into_make_service_with_connect_info::<SocketAddr>(),
|
|
)
|
|
.await
|
|
.unwrap();
|
|
}
|