From b3a47566ffeef4e5ed785a9f18b5563af9f61195 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Wed, 18 Jun 2025 00:37:54 +0000 Subject: [PATCH] Move and rename 'token' to 'access_token' where applicable. Signed-off-by: Jason Volk --- src/api/client/session/mod.rs | 2 +- src/api/router/auth.rs | 8 +++-- src/service/appservice/mod.rs | 2 +- src/service/users/device.rs | 63 +++++++++++++++++++++++++++++++++-- src/service/users/mod.rs | 50 +-------------------------- 5 files changed, 69 insertions(+), 56 deletions(-) diff --git a/src/api/client/session/mod.rs b/src/api/client/session/mod.rs index 12a7ac87..b4191e73 100644 --- a/src/api/client/session/mod.rs +++ b/src/api/client/session/mod.rs @@ -110,7 +110,7 @@ pub(crate) async fn login_route( } else { services .users - .set_token(&user_id, &device_id, &access_token) + .set_access_token(&user_id, &device_id, &access_token) .await?; } diff --git a/src/api/router/auth.rs b/src/api/router/auth.rs index 2c4553d9..5eb2f089 100644 --- a/src/api/router/auth.rs +++ b/src/api/router/auth.rs @@ -57,9 +57,13 @@ pub(super) async fn auth( }; let token = if let Some(token) = token { - match services.appservice.find_from_token(token).await { + match services + .appservice + .find_from_access_token(token) + .await + { | Some(reg_info) => Token::Appservice(Box::new(reg_info)), - | _ => match services.users.find_from_token(token).await { + | _ => match services.users.find_from_access_token(token).await { | Ok((user_id, device_id)) => Token::User((user_id, device_id)), | _ => Token::Invalid, }, diff --git a/src/service/appservice/mod.rs b/src/service/appservice/mod.rs index 99f0276c..cf7b8c90 100644 --- a/src/service/appservice/mod.rs +++ b/src/service/appservice/mod.rs @@ -115,7 +115,7 @@ impl Service { .map(|info| info.registration) } - pub async fn find_from_token(&self, token: &str) -> Option { + pub async fn find_from_access_token(&self, token: &str) -> Option { self.read() .await .values() diff --git a/src/service/users/device.rs b/src/service/users/device.rs index 96403ff5..d5afa954 100644 --- a/src/service/users/device.rs +++ b/src/service/users/device.rs @@ -2,8 +2,8 @@ use std::sync::Arc; use futures::{Stream, StreamExt}; use ruma::{ - DeviceId, MilliSecondsSinceUnixEpoch, UserId, api::client::device::Device, - events::AnyToDeviceEvent, serde::Raw, + DeviceId, MilliSecondsSinceUnixEpoch, OwnedDeviceId, OwnedUserId, UserId, + api::client::device::Device, events::AnyToDeviceEvent, serde::Raw, }; use serde_json::json; use tuwunel_core::{ @@ -38,7 +38,8 @@ pub async fn create_device( increment(&self.db.userid_devicelistversion, user_id.as_bytes()); self.db.userdeviceid_metadata.put(key, Json(val)); - self.set_token(user_id, device_id, token).await + self.set_access_token(user_id, device_id, token) + .await } /// Removes a device from a user. @@ -88,6 +89,62 @@ pub fn all_device_ids<'a>( .map(|(_, device_id): (Ignore, &DeviceId)| device_id) } +/// Replaces the access token of one device. +#[implement(super::Service)] +pub async fn set_access_token( + &self, + user_id: &UserId, + device_id: &DeviceId, + token: &str, +) -> Result { + let key = (user_id, device_id); + if self + .db + .userdeviceid_metadata + .qry(&key) + .await + .is_err() + { + return Err!(Database(error!( + ?user_id, + ?device_id, + "User does not exist or device has no metadata." + ))); + } + + // Remove old token + if let Ok(old_token) = self.db.userdeviceid_token.qry(&key).await { + self.db.token_userdeviceid.remove(&old_token); + // It will be removed from userdeviceid_token by the insert later + } + + // Assign token to user device combination + self.db.userdeviceid_token.put_raw(key, token); + self.db.token_userdeviceid.raw_put(token, key); + + Ok(()) +} + +/// Find out which user an access token belongs to. +#[implement(super::Service)] +pub async fn find_from_access_token(&self, token: &str) -> Result<(OwnedUserId, OwnedDeviceId)> { + self.db + .token_userdeviceid + .get(token) + .await + .deserialized() +} + +#[implement(super::Service)] +pub async fn get_access_token(&self, user_id: &UserId, device_id: &DeviceId) -> Result { + let key = (user_id, device_id); + self.db + .userdeviceid_token + .qry(&key) + .await + .deserialized() +} + #[implement(super::Service)] pub async fn add_to_device_event( &self, diff --git a/src/service/users/mod.rs b/src/service/users/mod.rs index e49f2b50..7ddf138c 100644 --- a/src/service/users/mod.rs +++ b/src/service/users/mod.rs @@ -7,7 +7,7 @@ use std::sync::Arc; use futures::{Stream, StreamExt, TryFutureExt}; use ruma::{ - DeviceId, OwnedDeviceId, OwnedMxcUri, OwnedUserId, UserId, + OwnedMxcUri, OwnedUserId, UserId, api::client::filter::FilterDefinition, events::{GlobalAccountDataEventType, ignored_user_list::IgnoredUserListEvent}, }; @@ -188,15 +188,6 @@ impl Service { #[inline] pub async fn count(&self) -> usize { self.db.userid_password.count().await } - /// Find out which user an access token belongs to. - pub async fn find_from_token(&self, token: &str) -> Result<(OwnedUserId, OwnedDeviceId)> { - self.db - .token_userdeviceid - .get(token) - .await - .deserialized() - } - /// Returns an iterator over all users on this homeserver (offered for /// compatibility) #[allow( @@ -337,45 +328,6 @@ impl Service { } } - pub async fn get_token(&self, user_id: &UserId, device_id: &DeviceId) -> Result { - let key = (user_id, device_id); - self.db - .userdeviceid_token - .qry(&key) - .await - .deserialized() - } - - /// Replaces the access token of one device. - pub async fn set_token(&self, user_id: &UserId, device_id: &DeviceId, token: &str) -> Result { - let key = (user_id, device_id); - if self - .db - .userdeviceid_metadata - .qry(&key) - .await - .is_err() - { - return Err!(Database(error!( - ?user_id, - ?device_id, - "User does not exist or device has no metadata." - ))); - } - - // Remove old token - if let Ok(old_token) = self.db.userdeviceid_token.qry(&key).await { - self.db.token_userdeviceid.remove(&old_token); - // It will be removed from userdeviceid_token by the insert later - } - - // Assign token to user device combination - self.db.userdeviceid_token.put_raw(key, token); - self.db.token_userdeviceid.raw_put(token, key); - - Ok(()) - } - /// Creates a new sync filter. Returns the filter id. pub fn create_filter(&self, user_id: &UserId, filter: &FilterDefinition) -> String { let filter_id = utils::random_string(4);