|
|
@ -782,6 +782,34 @@ impl<'r> FromRequest<'r> for AdminToken { |
|
|
|
ip, |
|
|
|
}) |
|
|
|
} else { |
|
|
|
let header_authorization = request.headers().get_one("authorization"); |
|
|
|
if let Some(access_token) = header_authorization { |
|
|
|
if crate::ratelimit::check_limit_admin(&ip.ip).is_err() { |
|
|
|
return Outcome::Error((Status::Unauthorized, "Too many requests, try again later.")); |
|
|
|
} |
|
|
|
|
|
|
|
let access_token = access_token.trim_start_matches("Bearer").trim(); |
|
|
|
let access_token = data_encoding::BASE64.decode(access_token.as_bytes()); |
|
|
|
let access_token = match access_token { |
|
|
|
Ok(a) => String::from_utf8(a), |
|
|
|
Err(_) => { |
|
|
|
return Outcome::Error((Status::Unauthorized, "Invalid admin token, please try again.")); |
|
|
|
} |
|
|
|
}; |
|
|
|
let access_token = match access_token { |
|
|
|
Ok(a) => a, |
|
|
|
Err(_) => { |
|
|
|
return Outcome::Error((Status::Unauthorized, "Invalid admin token, please try again.")); |
|
|
|
} |
|
|
|
}; |
|
|
|
if !_validate_token(&access_token) { |
|
|
|
error!("Invalid admin token. IP: {}", ip.ip); |
|
|
|
return Outcome::Error((Status::Unauthorized, "Invalid admin token, please try again.")); |
|
|
|
} |
|
|
|
return Outcome::Success(Self { |
|
|
|
ip, |
|
|
|
}); |
|
|
|
} |
|
|
|
let cookies = request.cookies(); |
|
|
|
|
|
|
|
let access_token = match cookies.get(COOKIE_NAME) { |
|
|
|