kanidmd_core/https/views/
apps.rs1use askama::Template;
2use axum::{
3 extract::State,
4 http::uri::Uri,
5 response::{IntoResponse, Response},
6 Extension,
7};
8use axum_htmx::HxPushUrl;
9
10use kanidm_proto::internal::{AppLink, UserAuthToken};
11
12use super::constants::Urls;
13use super::navbar::NavbarCtx;
14use crate::https::views::errors::HtmxError;
15use crate::https::{
16 extractors::DomainInfo, extractors::VerifiedClientInformation, middleware::KOpId, ServerState,
17};
18
19#[derive(Template)]
20#[template(path = "apps.html")]
21struct AppsView {
22 navbar_ctx: NavbarCtx,
23 apps_partial: AppsPartialView,
24}
25
26#[derive(Template)]
27#[template(path = "apps_partial.html")]
28struct AppsPartialView {
29 apps: Vec<AppLink>,
30}
31
32pub(crate) async fn view_apps_get(
33 State(state): State<ServerState>,
34 Extension(kopid): Extension<KOpId>,
35 VerifiedClientInformation(client_auth_info): VerifiedClientInformation,
36 DomainInfo(domain_info): DomainInfo,
37) -> axum::response::Result<Response> {
38 let app_links = state
42 .qe_r_ref
43 .handle_list_applinks(client_auth_info.clone(), kopid.eventid)
44 .await
45 .map_err(|old| HtmxError::new(&kopid, old, domain_info.clone()))?;
46 let uat: &UserAuthToken = client_auth_info
47 .pre_validated_uat()
48 .map_err(|op_err| HtmxError::new(&kopid, op_err, domain_info.clone()))?;
49
50 let apps_partial = AppsPartialView { apps: app_links };
51
52 println!("{:?}", &uat.ui_hints);
53 Ok({
54 let apps_view = AppsView {
55 navbar_ctx: NavbarCtx::new(domain_info, &uat.ui_hints),
56
57 apps_partial,
58 };
59 (HxPushUrl(Uri::from_static(Urls::Apps.as_ref())), apps_view).into_response()
60 })
61}