Skip to content

Commit e22155f

Browse files
authored
Merge pull request #5879 from Turbo87/auth
auth: Move authentication-related code back into `authenticate_user()` fn
2 parents 6180c8c + 51eff8e commit e22155f

File tree

1 file changed

+26
-18
lines changed

1 file changed

+26
-18
lines changed

src/auth.rs

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -55,26 +55,8 @@ impl AuthCheck {
5555
}
5656

5757
pub fn check<B>(&self, request: &Request<B>) -> AppResult<AuthenticatedUser> {
58-
controllers::util::verify_origin(request)?;
59-
6058
let auth = authenticate_user(request)?;
6159

62-
if let Some(reason) = &auth.user().account_lock_reason {
63-
let still_locked = if let Some(until) = auth.user().account_lock_until {
64-
until > Utc::now().naive_utc()
65-
} else {
66-
true
67-
};
68-
if still_locked {
69-
return Err(account_locked(reason, auth.user().account_lock_until));
70-
}
71-
}
72-
73-
request.add_custom_metadata("uid", auth.user_id());
74-
if let Some(id) = auth.api_token_id() {
75-
request.add_custom_metadata("tokenid", id);
76-
}
77-
7860
if let Some(token) = auth.api_token() {
7961
if !self.allow_token {
8062
let error_message =
@@ -153,6 +135,8 @@ impl AuthenticatedUser {
153135
}
154136

155137
fn authenticate_user<B>(req: &Request<B>) -> AppResult<AuthenticatedUser> {
138+
controllers::util::verify_origin(req)?;
139+
156140
let conn = req.app().db_write()?;
157141

158142
let user_id_from_session = req
@@ -163,6 +147,10 @@ fn authenticate_user<B>(req: &Request<B>) -> AppResult<AuthenticatedUser> {
163147
let user = User::find(&conn, id)
164148
.map_err(|err| err.chain(internal("user_id from cookie not found in database")))?;
165149

150+
ensure_not_locked(&user)?;
151+
152+
req.add_custom_metadata("uid", id);
153+
166154
return Ok(AuthenticatedUser { user, token: None });
167155
}
168156

@@ -184,6 +172,11 @@ fn authenticate_user<B>(req: &Request<B>) -> AppResult<AuthenticatedUser> {
184172
let user = User::find(&conn, token.user_id)
185173
.map_err(|err| err.chain(internal("user_id from token not found in database")))?;
186174

175+
ensure_not_locked(&user)?;
176+
177+
req.add_custom_metadata("uid", token.user_id);
178+
req.add_custom_metadata("tokenid", token.id);
179+
187180
return Ok(AuthenticatedUser {
188181
user,
189182
token: Some(token),
@@ -194,6 +187,21 @@ fn authenticate_user<B>(req: &Request<B>) -> AppResult<AuthenticatedUser> {
194187
return Err(internal("no cookie session or auth header found").chain(forbidden()));
195188
}
196189

190+
fn ensure_not_locked(user: &User) -> AppResult<()> {
191+
if let Some(reason) = &user.account_lock_reason {
192+
let still_locked = if let Some(until) = user.account_lock_until {
193+
until > Utc::now().naive_utc()
194+
} else {
195+
true
196+
};
197+
if still_locked {
198+
return Err(account_locked(reason, user.account_lock_until));
199+
}
200+
}
201+
202+
Ok(())
203+
}
204+
197205
#[cfg(test)]
198206
mod tests {
199207
use super::*;

0 commit comments

Comments
 (0)