mirror of
https://github.com/lennart-k/rustical.git
synced 2025-12-13 22:52:22 +00:00
Update askama
This commit is contained in:
@@ -8,7 +8,6 @@ publish = false
|
||||
|
||||
[dependencies]
|
||||
askama.workspace = true
|
||||
askama_actix = { workspace = true }
|
||||
actix-session = { workspace = true }
|
||||
serde = { workspace = true }
|
||||
thiserror = { workspace = true }
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<h1>{{ name }}</h1>
|
||||
{% if let Some(description) = addressbook.description %}<p>{{ description }}</p>{% endif%}
|
||||
|
||||
<pre>{{ addressbook|yaml }}</pre>
|
||||
<pre>{{ addressbook|json }}</pre>
|
||||
|
||||
<a href="/frontend/user/{{ addressbook.principal }}">Back</a>
|
||||
{% endblock %}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<h1>{{ name }}</h1>
|
||||
{% if let Some(description) = calendar.description %}<p>{{ description }}</p>{% endif%}
|
||||
|
||||
<pre>{{ calendar|yaml }}</pre>
|
||||
<pre>{{ calendar|json }}</pre>
|
||||
|
||||
<a href="/frontend/user/{{ calendar.principal }}">Back</a>
|
||||
{% endblock %}
|
||||
|
||||
@@ -6,11 +6,10 @@ use actix_web::{
|
||||
dev::ServiceResponse,
|
||||
http::{Method, StatusCode},
|
||||
middleware::{ErrorHandlerResponse, ErrorHandlers},
|
||||
web::{self, Data, Path},
|
||||
web::{self, Data, Html, Path},
|
||||
HttpRequest, HttpResponse, Responder,
|
||||
};
|
||||
use askama::Template;
|
||||
use askama_actix::TemplateToResponse;
|
||||
use assets::{Assets, EmbedService};
|
||||
use routes::{
|
||||
addressbook::{route_addressbook, route_addressbook_restore},
|
||||
@@ -44,6 +43,7 @@ async fn route_user<CS: CalendarStore, AS: AddressbookStore>(
|
||||
cal_store: Data<CS>,
|
||||
addr_store: Data<AS>,
|
||||
user: User,
|
||||
req: HttpRequest,
|
||||
) -> impl Responder {
|
||||
// TODO: Check for authorization
|
||||
let user_id = path.into_inner();
|
||||
@@ -51,14 +51,19 @@ async fn route_user<CS: CalendarStore, AS: AddressbookStore>(
|
||||
return actix_web::HttpResponse::Unauthorized().body("Unauthorized");
|
||||
}
|
||||
|
||||
UserPage {
|
||||
calendars: cal_store.get_calendars(&user.id).await.unwrap(),
|
||||
deleted_calendars: cal_store.get_deleted_calendars(&user.id).await.unwrap(),
|
||||
addressbooks: addr_store.get_addressbooks(&user.id).await.unwrap(),
|
||||
deleted_addressbooks: addr_store.get_deleted_addressbooks(&user.id).await.unwrap(),
|
||||
user_id: user.id,
|
||||
}
|
||||
.to_response()
|
||||
Html::new(
|
||||
UserPage {
|
||||
calendars: cal_store.get_calendars(&user.id).await.unwrap(),
|
||||
deleted_calendars: cal_store.get_deleted_calendars(&user.id).await.unwrap(),
|
||||
addressbooks: addr_store.get_addressbooks(&user.id).await.unwrap(),
|
||||
deleted_addressbooks: addr_store.get_deleted_addressbooks(&user.id).await.unwrap(),
|
||||
user_id: user.id,
|
||||
}
|
||||
.render()
|
||||
.unwrap(),
|
||||
)
|
||||
.respond_to(&req)
|
||||
.map_into_boxed_body()
|
||||
}
|
||||
|
||||
async fn route_root(user: Option<User>, req: HttpRequest) -> impl Responder {
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
use actix_web::{
|
||||
http::{header, StatusCode},
|
||||
web::{self, Data, Path},
|
||||
web::{self, Data, Html, Path},
|
||||
HttpRequest, HttpResponse, Responder,
|
||||
};
|
||||
use askama::Template;
|
||||
use askama_actix::TemplateToResponse;
|
||||
use rustical_store::{auth::User, Addressbook, AddressbookStore};
|
||||
|
||||
#[derive(Template)]
|
||||
@@ -17,15 +16,21 @@ pub async fn route_addressbook<AS: AddressbookStore>(
|
||||
path: Path<(String, String)>,
|
||||
store: Data<AS>,
|
||||
user: User,
|
||||
req: HttpRequest,
|
||||
) -> Result<impl Responder, rustical_store::Error> {
|
||||
let (owner, addrbook_id) = path.into_inner();
|
||||
if !user.is_principal(&owner) {
|
||||
return Ok(HttpResponse::Unauthorized().body("Unauthorized"));
|
||||
}
|
||||
Ok(AddressbookPage {
|
||||
addressbook: store.get_addressbook(&owner, &addrbook_id).await?,
|
||||
}
|
||||
.to_response())
|
||||
Ok(Html::new(
|
||||
AddressbookPage {
|
||||
addressbook: store.get_addressbook(&owner, &addrbook_id).await?,
|
||||
}
|
||||
.render()
|
||||
.unwrap(),
|
||||
)
|
||||
.respond_to(&req)
|
||||
.map_into_boxed_body())
|
||||
}
|
||||
|
||||
pub async fn route_addressbook_restore<AS: AddressbookStore>(
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
use actix_web::{
|
||||
http::{header, StatusCode},
|
||||
web::{self, Data, Path},
|
||||
web::{self, Data, Html, Path},
|
||||
HttpRequest, HttpResponse, Responder,
|
||||
};
|
||||
use askama::Template;
|
||||
use askama_actix::TemplateToResponse;
|
||||
use rustical_store::{auth::User, Calendar, CalendarStore};
|
||||
|
||||
#[derive(Template)]
|
||||
@@ -17,15 +16,21 @@ pub async fn route_calendar<C: CalendarStore>(
|
||||
path: Path<(String, String)>,
|
||||
store: Data<C>,
|
||||
user: User,
|
||||
req: HttpRequest,
|
||||
) -> Result<impl Responder, rustical_store::Error> {
|
||||
let (owner, cal_id) = path.into_inner();
|
||||
if !user.is_principal(&owner) {
|
||||
return Ok(HttpResponse::Unauthorized().body("Unauthorized"));
|
||||
}
|
||||
Ok(CalendarPage {
|
||||
calendar: store.get_calendar(&owner, &cal_id).await?,
|
||||
}
|
||||
.to_response())
|
||||
Ok(Html::new(
|
||||
CalendarPage {
|
||||
calendar: store.get_calendar(&owner, &cal_id).await?,
|
||||
}
|
||||
.render()
|
||||
.unwrap(),
|
||||
)
|
||||
.respond_to(&req)
|
||||
.map_into_boxed_body())
|
||||
}
|
||||
|
||||
pub async fn route_calendar_restore<CS: CalendarStore>(
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use actix_session::Session;
|
||||
use actix_web::{
|
||||
error::ErrorUnauthorized,
|
||||
web::{Data, Form, Redirect},
|
||||
web::{Data, Form, Html, Redirect},
|
||||
HttpRequest, HttpResponse, Responder,
|
||||
};
|
||||
use askama::Template;
|
||||
@@ -12,8 +12,10 @@ use serde::Deserialize;
|
||||
#[template(path = "pages/login.html")]
|
||||
struct LoginPage;
|
||||
|
||||
pub async fn route_get_login() -> impl Responder {
|
||||
LoginPage
|
||||
pub async fn route_get_login(req: HttpRequest) -> impl Responder {
|
||||
Html::new(LoginPage.render().unwrap())
|
||||
.respond_to(&req)
|
||||
.map_into_boxed_body()
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
|
||||
@@ -8,7 +8,6 @@ publish = false
|
||||
|
||||
[dependencies]
|
||||
askama.workspace = true
|
||||
askama_actix = { workspace = true }
|
||||
actix-session = { workspace = true }
|
||||
serde = { workspace = true }
|
||||
thiserror = { workspace = true }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use actix_web::{
|
||||
http::header::{self},
|
||||
web::{self, Data, Form, Json, Path, ServiceConfig},
|
||||
web::{self, Data, Form, Html, Json, Path, ServiceConfig},
|
||||
HttpRequest, HttpResponse, Responder,
|
||||
};
|
||||
use askama::Template;
|
||||
@@ -155,11 +155,16 @@ async fn get_nextcloud_flow(
|
||||
) -> Result<impl Responder, rustical_store::Error> {
|
||||
let flow_id = path.into_inner();
|
||||
if let Some(flow) = state.flows.read().await.get(&flow_id) {
|
||||
Ok(NextcloudLoginPage {
|
||||
username: user.displayname.unwrap_or(user.id),
|
||||
app_name: flow.app_name.to_owned(),
|
||||
}
|
||||
.respond_to(&req))
|
||||
Ok(Html::new(
|
||||
NextcloudLoginPage {
|
||||
username: user.displayname.unwrap_or(user.id),
|
||||
app_name: flow.app_name.to_owned(),
|
||||
}
|
||||
.render()
|
||||
.unwrap(),
|
||||
)
|
||||
.respond_to(&req)
|
||||
.map_into_boxed_body())
|
||||
} else {
|
||||
Ok(HttpResponse::NotFound().body("Login flow not found"))
|
||||
}
|
||||
@@ -191,10 +196,15 @@ async fn post_nextcloud_flow(
|
||||
login_name: user.id.to_owned(),
|
||||
app_password: generate_app_token(),
|
||||
});
|
||||
Ok(NextcloudLoginSuccessPage {
|
||||
app_name: flow.app_name.to_owned(),
|
||||
}
|
||||
.respond_to(&req))
|
||||
Ok(Html::new(
|
||||
NextcloudLoginSuccessPage {
|
||||
app_name: flow.app_name.to_owned(),
|
||||
}
|
||||
.render()
|
||||
.unwrap(),
|
||||
)
|
||||
.respond_to(&req)
|
||||
.map_into_boxed_body())
|
||||
} else {
|
||||
Ok(HttpResponse::NotFound().body("Login flow not found"))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user