summaryrefslogtreecommitdiff
path: root/src/ui/handlers/index.rs
blob: 2fcb51c7b85796b5c22324f1effb2ba80fb3b2cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use axum::response::{self, IntoResponse, Redirect};

use crate::{
    error::Internal,
    token::extract::Identity,
    ui::assets::{Asset, Assets},
};

pub async fn handler(identity: Option<Identity>) -> Result<Asset, Error> {
    let _ = identity.ok_or(Error::NotLoggedIn)?;

    Assets::index().map_err(Error::Internal)
}

#[derive(Debug, thiserror::Error)]
pub enum Error {
    #[error("not logged in")]
    NotLoggedIn,
    #[error("{0}")]
    Internal(Internal),
}

impl IntoResponse for Error {
    fn into_response(self) -> response::Response {
        match self {
            Self::NotLoggedIn => Redirect::temporary("/login").into_response(),
            Self::Internal(error) => error.into_response(),
        }
    }
}