58 lines
1.3 KiB
Rust
58 lines
1.3 KiB
Rust
use axum::{
|
|
extract::Query,
|
|
routing::{get, post},
|
|
Form, Json, Router,
|
|
};
|
|
use serde::{Deserialize, Serialize};
|
|
use tracing::{event, instrument, Level};
|
|
|
|
use crate::auth::Password;
|
|
|
|
#[instrument]
|
|
pub async fn run() -> color_eyre::Result<()> {
|
|
let app = Router::new()
|
|
.route("/tls-check/success", get(|| async { "OK" }))
|
|
.route("/api-login", post(api_login));
|
|
let listener = tokio::net::TcpListener::bind("[::]:8080").await?;
|
|
axum::serve(listener, app).await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
|
|
struct ApiError {
|
|
error: String,
|
|
message: String,
|
|
}
|
|
|
|
type ApiResult<T> = Result<T, Json<ApiError>>;
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
|
|
struct ApiVersion {
|
|
api_version: String,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Deserialize)]
|
|
struct LoginRequest {
|
|
username: String,
|
|
password: Password,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize)]
|
|
struct LoginResponse {
|
|
username: String,
|
|
token: String,
|
|
}
|
|
|
|
#[instrument]
|
|
async fn api_login(
|
|
Query(ApiVersion { api_version }): Query<ApiVersion>,
|
|
Form(LoginRequest { username, password }): Form<LoginRequest>,
|
|
) -> ApiResult<Json<LoginResponse>> {
|
|
event!(Level::WARN, "Creating dummy token");
|
|
|
|
Ok(Json(LoginResponse {
|
|
username,
|
|
token: "invalid".to_string(),
|
|
}))
|
|
}
|