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 {}