summaryrefslogtreecommitdiff
path: root/src/ui/routes/me.rs
blob: f1f118fd63bfb6564813a419a134aaee9fdb7f24 (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
31
32
pub mod get {
    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(),
            }
        }
    }
}