use crate::config::{StarkingdomsApiConfigRealm, CONFIG}; use crate::error::{APIError, APIErrorsResponse}; use crate::AppState; use actix_web::web::Data; use actix_web::{get, HttpResponse}; use log::error; use serde::Serialize; use std::collections::HashMap; use tera::Context; #[derive(Serialize)] pub struct RealmsListTemplateContext { pub realms: HashMap, pub back_to: String, } #[get("/select-realm")] pub async fn select_realm(state: Data) -> HttpResponse { let context = match Context::from_serialize(&RealmsListTemplateContext { back_to: format!("{}/callback", CONFIG.base), realms: CONFIG.realms.clone(), }) { Ok(r) => r, Err(e) => { error!("[context] error creating render context: {}", e); return HttpResponse::InternalServerError().json(APIErrorsResponse { errors: vec![APIError { code: "ERR_INTERNAL_SERVER_ERROR".to_string(), message: "There was an error processing your request. Please try again later." .to_string(), path: None, }], }); } }; match state.templates.render("select_realm.tera", &context) { Ok(r) => HttpResponse::Ok().content_type("text/html").body(r), Err(e) => { error!("[context] error creating render context: {}", e); HttpResponse::InternalServerError().json(APIErrorsResponse { errors: vec![APIError { code: "ERR_INTERNAL_SERVER_ERROR".to_string(), message: "There was an error processing your request. Please try again later." .to_string(), path: None, }], }) } } }