Skip to content
Clone

fix(auth): keep the request id in audit records

ZhenYi committed
parent 8cc1265 commit 5b68b8b Browse files

3 files changed

+32 −23

File tree 3
Modified lib/auth/src/services/account_operations.rs View lib/auth/src/services/account_operations.rs
@@ -17,7 +17,7 @@
1717 include_expired: bool,
1818 page: proto::common::v1::PageRequest,
1919 ) -> Result<proto::v1::ListUserSessionsResponse, KenAuthError> {
20 let request_id = uuid::Uuid::now_v7().to_string();
20 let request_id = crate::share::audit::current_request_id();
2121 self.list_user_sessions_inner(
2222 Some(request_id.as_str()),
2323 proto::v1::ListUserSessionsRequest {
@@ -36,7 +36,7 @@
3636 reason: &str,
3737 bump_security_version: bool,
3838 ) -> Result<proto::v1::RevokeUserSessionsResponse, KenAuthError> {
39 let request_id = uuid::Uuid::now_v7().to_string();
39 let request_id = crate::share::audit::current_request_id();
4040 self.revoke_user_sessions_inner(
4141 Some(request_id.as_str()),
4242 proto::v1::RevokeUserSessionsRequest {
@@ -54,7 +54,7 @@
5454 version: i32,
5555 session_id: &str,
5656 ) -> Result<proto::internal::v1::AuthorityAccess, KenAuthError> {
57 let request_id = uuid::Uuid::now_v7().to_string();
57 let request_id = crate::share::audit::current_request_id();
5858 self.get_session_inner(
5959 Some(request_id.as_str()),
6060 proto::internal::v1::GetSessionRequest {
@@ -67,7 +67,7 @@
6767 .map(|response| response.access.unwrap_or_default())
6868 }
6969 pub async fn delete_account(&self, user_id: i64, reason: &str) -> Result<(), KenAuthError> {
70 let request_id = uuid::Uuid::now_v7().to_string();
70 let request_id = crate::share::audit::current_request_id();
7171 self.delete_account_inner(
7272 Some(request_id.as_str()),
7373 proto::internal::v1::DeleteAccountRequest {
@@ -79,7 +79,7 @@
7979 Ok(())
8080 }
8181 pub async fn cancel_account_deletion(&self, user_id: i64) -> Result<(), KenAuthError> {
82 let request_id = uuid::Uuid::now_v7().to_string();
82 let request_id = crate::share::audit::current_request_id();
8383 self.cancel_account_deletion_inner(
8484 Some(request_id.as_str()),
8585 proto::internal::v1::CancelAccountDeletionRequest { user_id },
@@ -88,7 +88,7 @@
8888 Ok(())
8989 }
9090 pub async fn purge_account(&self, user_id: i64) -> Result<(), KenAuthError> {
91 let request_id = uuid::Uuid::now_v7().to_string();
91 let request_id = crate::share::audit::current_request_id();
9292 self.purge_account_inner(
9393 Some(request_id.as_str()),
9494 proto::internal::v1::PurgeAccountRequest { user_id },
@@ -100,7 +100,7 @@
100100 &self,
101101 user_ids: Vec<i64>,
102102 ) -> Result<Vec<proto::internal::v1::AuthorityUser>, KenAuthError> {
103 let request_id = uuid::Uuid::now_v7().to_string();
103 let request_id = crate::share::audit::current_request_id();
104104 self.batch_get_user_inner(
105105 Some(request_id.as_str()),
106106 proto::internal::v1::BatchGetUserRequest { user_ids },
@@ -112,7 +112,7 @@
112112 &self,
113113 user_id: i64,
114114 ) -> Result<proto::common::v1::UserStatus, KenAuthError> {
115 let request_id = uuid::Uuid::now_v7().to_string();
115 let request_id = crate::share::audit::current_request_id();
116116 let user = Some(proto::common::v1::UserRef {
117117 key: Some(proto::common::v1::user_ref::Key::UserId(user_id)),
118118 });
@@ -127,7 +127,7 @@
127127 &self,
128128 key: proto::common::v1::user_ref::Key,
129129 ) -> Result<proto::common::v1::UserPublic, KenAuthError> {
130 let request_id = uuid::Uuid::now_v7().to_string();
130 let request_id = crate::share::audit::current_request_id();
131131 let user = Some(proto::common::v1::UserRef { key: Some(key) });
132132 self.get_user_public_inner(
133133 Some(request_id.as_str()),
@@ -141,7 +141,7 @@
141141 &self,
142142 user_id: i64,
143143 ) -> Result<proto::internal::v1::AuthorityUser, KenAuthError> {
144 let request_id = uuid::Uuid::now_v7().to_string();
144 let request_id = crate::share::audit::current_request_id();
145145 self.get_user_inner(
146146 Some(request_id.as_str()),
147147 proto::internal::v1::GetUserRequest { user_id },
@@ -160,7 +160,7 @@
160160 public_show_email: Option<bool>,
161161 version: i32,
162162 ) -> Result<proto::internal::v1::AuthorityUser, KenAuthError> {
163 let request_id = uuid::Uuid::now_v7().to_string();
163 let request_id = crate::share::audit::current_request_id();
164164 self.update_user_inner(
165165 Some(request_id.as_str()),
166166 proto::internal::v1::UpdateUserRequest {
@@ -182,7 +182,7 @@
182182 &self,
183183 user_ids: Vec<i64>,
184184 ) -> Result<Vec<proto::common::v1::UserPublic>, KenAuthError> {
185 let request_id = uuid::Uuid::now_v7().to_string();
185 let request_id = crate::share::audit::current_request_id();
186186 self.batch_get_user_public_inner(
187187 Some(request_id.as_str()),
188188 proto::v1::BatchGetUserPublicRequest { user_ids },
@@ -194,7 +194,7 @@
194194 &self,
195195 user_id: i64,
196196 ) -> Result<proto::common::v1::UserPublic, KenAuthError> {
197 let request_id = uuid::Uuid::now_v7().to_string();
197 let request_id = crate::share::audit::current_request_id();
198198 let user = Some(proto::common::v1::UserRef {
199199 key: Some(proto::common::v1::user_ref::Key::UserId(user_id)),
200200 });
@@ -212,7 +212,7 @@
212212 session_id: &str,
213213 reason: &str,
214214 ) -> Result<(), KenAuthError> {
215 let request_id = uuid::Uuid::now_v7().to_string();
215 let request_id = crate::share::audit::current_request_id();
216216 self.revoke_session_inner(
217217 Some(request_id.as_str()),
218218 proto::v1::RevokeSessionRequest {
@@ -230,7 +230,7 @@
230230 displayname: &str,
231231 system: bool,
232232 ) -> Result<proto::common::v1::UserPublic, KenAuthError> {
233 let request_id = uuid::Uuid::now_v7().to_string();
233 let request_id = crate::share::audit::current_request_id();
234234 self.ensure_bot_user_inner(
235235 Some(request_id.as_str()),
236236 proto::v1::EnsureBotUserRequest {
Modified lib/auth/src/services/local.rs View lib/auth/src/services/local.rs
@@ -11,7 +11,7 @@
1111 keep_session_id: &str,
1212 client_ip: &str,
1313 ) -> Result<proto::v1::ChangePasswordResponse, KenAuthError> {
14 let request_id = uuid::Uuid::now_v7().to_string();
14 let request_id = crate::share::audit::current_request_id();
1515 self.change_password_inner(
1616 Some(request_id.as_str()),
1717 proto::v1::ChangePasswordRequest {
@@ -29,7 +29,7 @@
2929 &self,
3030 user_id: i64,
3131 ) -> Result<proto::v1::GetMfaStatusResponse, KenAuthError> {
32 let request_id = uuid::Uuid::now_v7().to_string();
32 let request_id = crate::share::audit::current_request_id();
3333 self.status_impl(proto::v1::GetMfaStatusRequest { user_id })
3434 .await
3535 .map_err(|error| crate::share::auth_error::status(&error, Some(request_id.as_str())))
@@ -41,7 +41,7 @@
4141 name: &str,
4242 client_ip: &str,
4343 ) -> Result<proto::v1::ConfigureTotpResponse, KenAuthError> {
44 let request_id = uuid::Uuid::now_v7().to_string();
44 let request_id = crate::share::audit::current_request_id();
4545 self.configure_totp_impl(
4646 proto::v1::ConfigureTotpRequest {
4747 user_id,
@@ -61,7 +61,7 @@
6161 password_hash: &str,
6262 client_ip: &str,
6363 ) -> Result<proto::v1::EnableTotpResponse, KenAuthError> {
64 let request_id = uuid::Uuid::now_v7().to_string();
64 let request_id = crate::share::audit::current_request_id();
6565 self.enable_totp_impl(
6666 proto::v1::EnableTotpRequest {
6767 user_id,
@@ -81,7 +81,7 @@
8181 code: &str,
8282 client_ip: &str,
8383 ) -> Result<proto::v1::DisableTotpResponse, KenAuthError> {
84 let request_id = uuid::Uuid::now_v7().to_string();
84 let request_id = crate::share::audit::current_request_id();
8585 self.disable_totp_impl(
8686 proto::v1::DisableTotpRequest {
8787 user_id,
@@ -100,7 +100,7 @@
100100 password_hash: &str,
101101 client_ip: &str,
102102 ) -> Result<proto::v1::RegenerateRecoveryCodesResponse, KenAuthError> {
103 let request_id = uuid::Uuid::now_v7().to_string();
103 let request_id = crate::share::audit::current_request_id();
104104 self.regenerate_recovery_codes_impl(
105105 proto::v1::RegenerateRecoveryCodesRequest {
106106 user_id,
Modified lib/auth/src/share/audit.rs View lib/auth/src/share/audit.rs
@@ -8,9 +8,13 @@
88
99use crate::errors::AuthResult;
1010
11pub fn current_request_id() -> String {
12 envelope::context::request_id().unwrap_or_else(|| uuid::Uuid::now_v7().to_string())
13}
14
1115/// 写一条用户事件;事件总线之外的持久审计兜底。
1216#[allow(clippy::too_many_arguments)]
13#[tracing::instrument(skip_all, fields(user_id = user_id, request_id = %request_id.unwrap_or_default()))]
17#[tracing::instrument(skip_all, fields(user_id = user_id, request_id = tracing::field::Empty))]
1418pub async fn entry(
1519 db: &DbConn,
1620 user_id: i64,
@@ -21,6 +25,11 @@
2125 client_ip: Option<String>,
2226 user_agent: Option<String>,
2327) -> AuthResult<()> {
28 let request_id = request_id
29 .filter(|value| !value.is_empty())
30 .map(str::to_owned)
31 .or_else(envelope::context::request_id);
32 tracing::Span::current().record("request_id", request_id.as_deref().unwrap_or_default());
2433 user_events::ActiveModel {
2534 user_id: sea_orm::Set(user_id),
2635 actor_user_id: sea_orm::Set(actor_user_id),
@@ -29,7 +38,7 @@
2938 ip_address: sea_orm::Set(client_ip),
3039 user_agent: sea_orm::Set(user_agent),
3140 details: sea_orm::Set(details),
32 trace_id: sea_orm::Set(request_id.map(str::to_owned)),
41 trace_id: sea_orm::Set(request_id),
3342 ..Default::default()
3443 }
3544 .insert(db.write())