scufflecloud_core/
http_ext.rs

1use core_db_types::models::UserSession;
2use ext_traits::OptionExt;
3use tonic::Code;
4use tonic_types::ErrorDetails;
5
6use crate::middleware::ExpiredSession;
7
8pub(crate) trait CoreRequestExt: ext_traits::RequestExt {
9    fn session(&self) -> Option<&UserSession> {
10        self.extensions().get::<UserSession>()
11    }
12
13    fn session_or_err(&self) -> Result<&UserSession, tonic::Status> {
14        self.session()
15            .into_tonic_err(Code::Unauthenticated, "you must be logged in", ErrorDetails::new())
16    }
17
18    fn expired_session_or_err(&self) -> Result<&UserSession, tonic::Status> {
19        self.extensions().get::<ExpiredSession>().map(|s| &s.0).into_tonic_err(
20            Code::Unauthenticated,
21            "you must be logged in",
22            ErrorDetails::new(),
23        )
24    }
25}
26
27impl<T> CoreRequestExt for T where T: ext_traits::RequestExt {}