actix-admin 0.9.0

An admin interface for actix-web
Documentation
use actix_session::Session;
use actix_web::{error, web, Error, HttpResponse};
use tera::Context;

use crate::prelude::*;

use super::add_auth_context;

pub fn get_admin_ctx(session: Session, data: &web::Data<ActixAdmin>) -> Context {
    let actix_admin = data.get_ref();

    let mut ctx = Context::new();
    ctx.insert("entity_names", &actix_admin.entity_names);

    add_auth_context(&session, actix_admin, &mut ctx);

    ctx
}

pub async fn index(session: Session, data: web::Data<ActixAdmin>) -> Result<HttpResponse, Error> {
    let actix_admin = &data.into_inner();

    let mut ctx = Context::new();
    ctx.insert("entity_names", &actix_admin.entity_names);
    ctx.insert(
        "notifications",
        &Vec::<crate::ActixAdminNotification>::new(),
    );

    add_auth_context(&session, actix_admin, &mut ctx);

    let body = actix_admin
        .tera
        .render("index.html", &ctx)
        .map_err(|e| error::ErrorInternalServerError(format!("Template error: {e}")))?;
    Ok(HttpResponse::Ok().content_type("text/html").body(body))
}

pub async fn not_found(data: web::Data<ActixAdmin>) -> Result<HttpResponse, Error> {
    let body = data
        .get_ref()
        .tera
        .render("not_found.html", &Context::new())
        .map_err(|e| error::ErrorInternalServerError(format!("Template error: {e}")))?;
    Ok(HttpResponse::NotFound()
        .content_type("text/html")
        .body(body))
}