summaryrefslogtreecommitdiff
path: root/src/resources
diff options
context:
space:
mode:
Diffstat (limited to 'src/resources')
-rw-r--r--src/resources/templates.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/resources/templates.rs b/src/resources/templates.rs
index 7578256..88c1fad 100644
--- a/src/resources/templates.rs
+++ b/src/resources/templates.rs
@@ -2,6 +2,7 @@ use std::collections::HashMap;
use exun::{RawUnexpected, ResultErrorExt};
use raise::yeet;
+use serde::Serialize;
use tera::{Function, Tera, Value};
use unic_langid::subtags::Language;
@@ -36,6 +37,37 @@ pub fn initialize() -> tera::Result<Tera> {
Ok(tera)
}
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub enum ErrorPage {
+ InvalidRequest,
+ ClientNotFound,
+ MissingRedirectUri,
+ InvalidRedirectUri,
+}
+
+pub fn error_page(
+ tera: &Tera,
+ language: Language,
+ mut translations: languages::Translations,
+ error: ErrorPage,
+) -> Result<String, RawUnexpected> {
+ translations.refresh()?;
+ let mut tera = extend_tera(tera, language, translations)?;
+ tera.full_reload()?;
+
+ let error = serde_variant::to_variant_name(&error)?;
+ let header = format!("errorHeader_{error}");
+ let message = format!("errorMessage_{error}");
+
+ let mut context = tera::Context::new();
+ context.insert("lang", language.as_str());
+ context.insert("errorHeader", &header);
+ context.insert("errormessage", &message);
+
+ tera.render("error.html", &context).unexpect()
+}
+
pub fn login_page(
tera: &Tera,
params: &AuthorizationParameters,