@@ -37,7 +37,7 @@ pub fn add_middleware(router: AxumRouter, state: SharedAppState) -> AxumRouter {
3737 /// Middleware layer to lookup add a `User` to the request if a session token is present.
3838 pub async fn session_middleware (
3939 State ( state) : State < SharedAppState > , mut cookies : CookieJar , mut request : Request , next : Next ,
40- ) -> AppResult < ( CookieJar , Response ) > {
40+ ) -> HtmlResult {
4141 if let Some ( token) = cookies. get ( "session" ) {
4242 match User :: lookup_by_session_token ( & state. db , token. value ( ) ) . await ? {
4343 Some ( user) => {
@@ -47,7 +47,7 @@ pub fn add_middleware(router: AxumRouter, state: SharedAppState) -> AxumRouter {
4747 }
4848 }
4949 let response = next. run ( request) . await ;
50- Ok ( ( cookies, response) )
50+ Ok ( ( cookies, response) . into_response ( ) )
5151 }
5252 router. layer ( axum:: middleware:: from_fn_with_state ( state, session_middleware) )
5353}
@@ -60,22 +60,20 @@ impl<S: Send + Sync> axum::extract::OptionalFromRequestParts<S> for User {
6060}
6161/// Enable extracting a `User` in a handler, returning UNAUTHORIZED if not logged in.
6262impl < S : Send + Sync > axum:: extract:: FromRequestParts < S > for User {
63- type Rejection = AppError ;
63+ type Rejection = HtmlError ;
6464 async fn from_request_parts ( parts : & mut Parts , _state : & S ) -> Result < Self , Self :: Rejection > {
6565 match parts. extensions . get :: < User > ( ) . cloned ( ) {
6666 Some ( user) => Ok ( user) ,
67- None => Err ( AppError :: Unauthorized ) ,
67+ None => bail_unauthorized ! ( ) ,
6868 }
6969 }
7070}
7171
7272/// Process a login form and send either a login or registration link via email.
73- async fn login_form (
74- State ( state) : State < SharedAppState > , Form ( form) : Form < LoginForm > ,
75- ) -> AppResult < impl IntoResponse > {
73+ async fn login_form ( State ( state) : State < SharedAppState > , Form ( form) : Form < LoginForm > ) -> HtmlResult {
7674 let email = form. email . email . to_string ( ) ;
7775 let Some ( user) = User :: lookup_by_email ( & state. db , & email) . await ? else {
78- return Err ( AppError :: Unauthorized ) ;
76+ bail_unauthorized ! ( )
7977 } ;
8078
8179 let email_id = Email :: create_login ( & state. db , & user) . await ?;
@@ -99,11 +97,11 @@ async fn login_form(
9997 match state. mailer . send ( & msg) . await {
10098 Ok ( _) => {
10199 Email :: mark_sent ( & state. db , email_id) . await ?;
102- Ok ( "Check your email!" )
100+ Ok ( "Check your email!" . into_response ( ) )
103101 }
104102 Err ( e) => {
105- Email :: mark_error ( & state. db , email_id, & e . to_string ( ) ) . await ?;
106- Err ( e)
103+ Email :: mark_error ( & state. db , email_id, e . message ( ) ) . await ?;
104+ Err ( e. into ( ) )
107105 }
108106 }
109107}
@@ -129,7 +127,7 @@ impl LoginQuery {
129127}
130128async fn login_link (
131129 user : Option < User > , State ( state) : State < SharedAppState > , Query ( query) : Query < LoginQuery > ,
132- ) -> AppResult < Response > {
130+ ) -> HtmlResult {
133131 // If user is already logged in for some reason, just follow the redirect
134132 if user. is_some ( ) {
135133 return Ok ( query. redirect ( ) . into_response ( ) ) ;
@@ -149,7 +147,7 @@ async fn login_link(
149147
150148 // Otherwise we're handling a login link. Valdiate the login token and create a new session.
151149 let Some ( user) = User :: lookup_by_login_token ( & state. db , token) . await ? else {
152- return Err ( AppError :: Unauthorized ) ;
150+ bail_unauthorized ! ( ) ;
153151 } ;
154152 let token = SessionToken :: create ( & state. db , & user) . await ?;
155153 let cookie = session_cookie ( & state. config , token) ;
0 commit comments