merge: remote-tracking branch 'origin/feat/store-session-hello-new'

This commit is contained in:
izzy
2025-06-07 17:31:15 +01:00
8 changed files with 1540 additions and 1045 deletions

2521
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -11,6 +11,8 @@ members = [
[patch.crates-io] [patch.crates-io]
redis23 = { package = "redis", version = "0.23.3", git = "https://github.com/revoltchat/redis-rs", rev = "523b2937367e17bd0073722bf6e23d06042cb4e4" } redis23 = { package = "redis", version = "0.23.3", git = "https://github.com/revoltchat/redis-rs", rev = "523b2937367e17bd0073722bf6e23d06042cb4e4" }
#authifier = { package = "authifier", version = "1.0.10", path = "../authifier/crates/authifier" }
#rocket_authifier = { package = "rocket_authifier", version = "1.0.10", path = "../authifier/crates/rocket_authifier" }
# I'm 99% sure this is overloading the GitHub worker # I'm 99% sure this is overloading the GitHub worker
# hence builds have been failing since, let's just # hence builds have been failing since, let's just

View File

@@ -17,6 +17,7 @@ use redis_kiss::{PayloadType, REDIS_PAYLOAD_TYPE, REDIS_URI};
use revolt_config::report_internal_error; use revolt_config::report_internal_error;
use revolt_database::{ use revolt_database::{
events::{client::EventV1, server::ClientMessage}, events::{client::EventV1, server::ClientMessage},
iso8601_timestamp::Timestamp,
Database, User, UserHint, Database, User, UserHint,
}; };
use revolt_presence::{create_session, delete_session}; use revolt_presence::{create_session, delete_session};
@@ -100,6 +101,10 @@ pub async fn client(db: &'static Database, stream: TcpStream, addr: SocketAddr)
info!("User {addr:?} authenticated as @{}", user.username); info!("User {addr:?} authenticated as @{}", user.username);
let _ = db
.update_session_last_seen(&session_id, Timestamp::now_utc())
.await;
// Create local state. // Create local state.
let mut state = State::from(user, session_id); let mut state = State::from(user, session_id);
let user_id = state.cache.user_id.clone(); let user_id = state.cache.user_id.clone();

View File

@@ -3,18 +3,21 @@
"_object_type": "User", "_object_type": "User",
"_id": "__ID:0__", "_id": "__ID:0__",
"username": "Owner", "username": "Owner",
"last_acknowledged_policy_change": "2025-06-07T04:04:48+0000",
"discriminator": "0001" "discriminator": "0001"
}, },
{ {
"_object_type": "User", "_object_type": "User",
"_id": "__ID:1__", "_id": "__ID:1__",
"username": "Member", "username": "Member",
"last_acknowledged_policy_change": "2025-06-07T04:04:48+0000",
"discriminator": "0001" "discriminator": "0001"
}, },
{ {
"_object_type": "User", "_object_type": "User",
"_id": "__ID:2__", "_id": "__ID:2__",
"username": "Member", "username": "Member",
"last_acknowledged_policy_change": "2025-06-07T04:04:48+0000",
"discriminator": "0002" "discriminator": "0002"
}, },
{ {
@@ -23,6 +26,9 @@
"channel_type": "Group", "channel_type": "Group",
"name": "My Group", "name": "My Group",
"owner": "__ID:0__", "owner": "__ID:0__",
"recipients": ["__ID:0__", "__ID:1__"] "recipients": [
"__ID:0__",
"__ID:1__"
]
} }
] ]

View File

@@ -3,18 +3,21 @@
"_object_type": "User", "_object_type": "User",
"_id": "__ID:0__", "_id": "__ID:0__",
"username": "Owner", "username": "Owner",
"last_acknowledged_policy_change": "2025-06-07T04:04:48+0000",
"discriminator": "0001" "discriminator": "0001"
}, },
{ {
"_object_type": "User", "_object_type": "User",
"_id": "__ID:1__", "_id": "__ID:1__",
"username": "Moderator", "username": "Moderator",
"last_acknowledged_policy_change": "2025-06-07T04:04:48+0000",
"discriminator": "0001" "discriminator": "0001"
}, },
{ {
"_object_type": "User", "_object_type": "User",
"_id": "__ID:2__", "_id": "__ID:2__",
"username": "User", "username": "User",
"last_acknowledged_policy_change": "2025-06-07T04:04:48+0000",
"discriminator": "0001" "discriminator": "0001"
}, },
{ {
@@ -39,7 +42,9 @@
"_id": "__ID:4__", "_id": "__ID:4__",
"owner": "__ID:0__", "owner": "__ID:0__",
"name": "Server", "name": "Server",
"channels": ["__ID:3__"], "channels": [
"__ID:3__"
],
"roles": { "roles": {
"__ID:5__": { "__ID:5__": {
"name": "Moderator", "name": "Moderator",
@@ -66,7 +71,9 @@
"user": "__ID:0__", "user": "__ID:0__",
"server": "__ID:4__" "server": "__ID:4__"
}, },
"roles": ["__ID:6__"], "roles": [
"__ID:6__"
],
"joined_at": 1698318340195 "joined_at": 1698318340195
}, },
{ {
@@ -75,7 +82,9 @@
"user": "__ID:1__", "user": "__ID:1__",
"server": "__ID:4__" "server": "__ID:4__"
}, },
"roles": ["__ID:5__"], "roles": [
"__ID:5__"
],
"joined_at": 1698318340195 "joined_at": 1698318340195
}, },
{ {
@@ -86,4 +95,4 @@
}, },
"joined_at": 1698318340195 "joined_at": 1698318340195
} }
] ]

View File

@@ -1,4 +1,5 @@
use authifier::models::Session; use authifier::models::Session;
use iso8601_timestamp::Timestamp;
use revolt_result::Result; use revolt_result::Result;
use crate::{FieldsUser, PartialUser, RelationshipStatus, User}; use crate::{FieldsUser, PartialUser, RelationshipStatus, User};
@@ -61,4 +62,6 @@ pub trait AbstractUsers: Sync + Send {
/// Remove push subscription for a session by session id (TODO: remove) /// Remove push subscription for a session by session id (TODO: remove)
async fn remove_push_subscription_by_session_id(&self, session_id: &str) -> Result<()>; async fn remove_push_subscription_by_session_id(&self, session_id: &str) -> Result<()>;
async fn update_session_last_seen(&self, session_id: &str, when: Timestamp) -> Result<()>;
} }

View File

@@ -1,6 +1,7 @@
use ::mongodb::options::{Collation, CollationStrength, FindOneOptions, FindOptions}; use ::mongodb::options::{Collation, CollationStrength, FindOneOptions, FindOptions};
use authifier::models::Session; use authifier::models::Session;
use futures::StreamExt; use futures::StreamExt;
use iso8601_timestamp::{typenum as t, Timestamp, UtcOffset};
use revolt_result::Result; use revolt_result::Result;
use crate::DocumentId; use crate::DocumentId;
@@ -317,7 +318,26 @@ impl AbstractUsers for MongoDb {
) )
.await .await
.map(|_| ()) .map(|_| ())
.map_err(|_| create_database_error!("update_one", COL)) .map_err(|_| create_database_error!("update_one", "sessions"))
}
async fn update_session_last_seen(&self, session_id: &str, when: Timestamp) -> Result<()> {
let formatted: &str = &when.format();
self.col::<Session>("sessions")
.update_one(
doc! {
"_id": session_id
},
doc! {
"$set": {
"last_seen": formatted
}
},
)
.await
.map(|_| ())
.map_err(|_| create_database_error!("update_one", "sessions"))
} }
} }

View File

@@ -1,4 +1,5 @@
use authifier::models::Session; use authifier::models::Session;
use iso8601_timestamp::Timestamp;
use revolt_result::Result; use revolt_result::Result;
use crate::{FieldsUser, PartialUser, RelationshipStatus, User}; use crate::{FieldsUser, PartialUser, RelationshipStatus, User};
@@ -168,4 +169,8 @@ impl AbstractUsers for ReferenceDb {
async fn remove_push_subscription_by_session_id(&self, _session_id: &str) -> Result<()> { async fn remove_push_subscription_by_session_id(&self, _session_id: &str) -> Result<()> {
todo!() todo!()
} }
async fn update_session_last_seen(&self, _session_id: &str, _when: Timestamp) -> Result<()> {
todo!()
}
} }