nomilo/src/routes/ui/zones.rs

65 lines
1.8 KiB
Rust
Raw Normal View History

2022-04-29 16:04:12 +00:00
use serde_json::{Value, json};
2022-04-29 02:29:10 +00:00
use serde::Serialize;
use rocket::http::{Status};
2022-04-29 16:04:12 +00:00
use rocket::http::uri::Origin;
2022-04-29 02:29:10 +00:00
use crate::template::Template;
use crate::models;
use crate::DbConn;
#[derive(Serialize)]
pub struct RecordsPage {
zone: String
}
2022-04-29 16:04:12 +00:00
// TODO: Check if origin changes if application mounted on different path
2022-04-29 02:29:10 +00:00
#[get("/zone/<zone>/records")]
2022-04-29 16:04:12 +00:00
pub async fn get_zone_records_page(user_info: models::UserInfo, zone: models::AbsoluteName, conn: DbConn, origin: &Origin<'_>) -> Result<Template<'static, Value>, Status> {
2022-04-29 02:29:10 +00:00
let zone_name = zone.to_utf8();
2022-04-29 16:04:12 +00:00
let zones = conn.run(move |c| {
if user_info.is_admin() {
models::Zone::get_by_name(c, &zone_name)?;
models::Zone::get_all(c)
} else {
user_info.get_zone(c, &zone_name)?;
user_info.get_zones(c)
}
}).await.map_err(|e| models::ErrorResponse::from(e).status)?;
Ok(Template::new(
"pages/zone/records.html",
json!({
"current_zone": zone.to_utf8(),
"zones": zones,
"nav_page": origin.clone().into_normalized().path().as_str(),
"nav_sections": vec!["zones", zone.to_utf8().as_str()],
})
))
}
#[get("/zones")]
pub async fn get_zones_page(user_info: models::UserInfo, conn: DbConn, origin: &Origin<'_>) -> Result<Template<'static, Value>, Status> {
let zones = conn.run(move |c| {
2022-04-29 02:29:10 +00:00
if user_info.is_admin() {
2022-04-29 16:04:12 +00:00
models::Zone::get_all(c)
2022-04-29 02:29:10 +00:00
} else {
2022-04-29 16:04:12 +00:00
user_info.get_zones(c)
2022-04-29 02:29:10 +00:00
}
}).await.map_err(|e| models::ErrorResponse::from(e).status)?;
2022-04-29 16:04:12 +00:00
Ok(Template::new(
"pages/zones.html",
json!({
"zones": zones,
"nav_page": origin.clone().into_normalized().path().as_str(),
"nav_sections": vec!["zones"],
})
))
2022-04-29 02:29:10 +00:00
}