Start a a new UI framework, providing both a login page and a landing page. #299

Merged
savanni merged 30 commits from visions-ui-framework into main 2025-03-28 13:11:04 +00:00
Showing only changes of commit aa7229eae4 - Show all commits

View File

@ -94,26 +94,27 @@ struct UserOverview {
#[derive(Deserialize, Serialize)]
#[serde(tag = "type", content = "content", rename_all = "kebab-case")]
#[typeshare]
enum VResponse<A> {
enum AuthResponse<A> {
Success(A),
PasswordReset(SessionId),
Nothing,
}
#[axum::debug_handler]
async fn check_password(
request: Json<AuthRequest>,
) -> (StatusCode, Json<Option<VResponse<SessionId>>>) {
) -> (StatusCode, Json<Option<AuthResponse<SessionId>>>) {
let Json(request) = request;
if request.username == "vakarian" && request.password == "aoeu" {
(
StatusCode::OK,
Json(Some(VResponse::Success("vakarian-session-id".into()))),
Json(Some(AuthResponse::Success("vakarian-session-id".into()))),
)
} else if request.username == "shephard" && request.password == "aoeu" {
(
StatusCode::OK,
Json(Some(VResponse::PasswordReset("shephard-session-id".into()))),
Json(Some(AuthResponse::PasswordReset(
"shephard-session-id".into(),
))),
)
} else {
(StatusCode::UNAUTHORIZED, Json(None))
@ -154,7 +155,7 @@ fn parse_session_header(headers: HeaderMap) -> ResultExt<Option<SessionId>, AppE
}
}
async fn auth_required<B, F, Fut>(headers: HeaderMap, f: F) -> (StatusCode, Json<VResponse<B>>)
async fn auth_required<B, F, Fut>(headers: HeaderMap, f: F) -> (StatusCode, Json<Option<B>>)
where
F: Fn() -> Fut,
Fut: Future<Output = (StatusCode, B)>,
@ -163,16 +164,14 @@ where
ResultExt::Ok(Some(session_id)) => {
if session_id == "vakarian-session-id".into() {
let (code, result) = f().await;
(code, Json(VResponse::Success(result)))
} else if session_id == "shephard-id".into() {
(StatusCode::OK, Json(VResponse::PasswordReset("shephard-session-id".into())))
(code, Json(Some(result)))
} else {
(StatusCode::UNAUTHORIZED, Json(VResponse::Nothing))
(StatusCode::UNAUTHORIZED, Json(None))
}
}
ResultExt::Ok(None) => (StatusCode::UNAUTHORIZED, Json(VResponse::Nothing)),
ResultExt::Err(AppError::Unauthorized) => (StatusCode::UNAUTHORIZED, Json(VResponse::Nothing)),
ResultExt::Err(AppError::BadRequest) => (StatusCode::BAD_REQUEST, Json(VResponse::Nothing)),
ResultExt::Ok(None) => (StatusCode::UNAUTHORIZED, Json(None)),
ResultExt::Err(AppError::Unauthorized) => (StatusCode::UNAUTHORIZED, Json(None)),
ResultExt::Err(AppError::BadRequest) => (StatusCode::BAD_REQUEST, Json(None)),
ResultExt::Fatal(err) => {
panic!("{}", err);
}