fix: don't ignore QR token timestamp from sync messages

This commit is contained in:
link2xt
2025-09-09 03:07:55 +00:00
parent 214a1d3e2d
commit eea848f72b
3 changed files with 40 additions and 14 deletions

View File

@@ -258,8 +258,8 @@ impl Context {
for item in &items.items {
match &item.data {
SyncDataOrUnknown::SyncData(data) => match data {
AddQrToken(token) => self.add_qr_token(token).await,
DeleteQrToken(token) => self.delete_qr_token(token).await,
AddQrToken(token) => self.add_qr_token(token, item.timestamp).await,
DeleteQrToken(token) => self.delete_qr_token(token, item.timestamp).await,
AlterChat { id, action } => self.sync_alter_chat(id, action).await,
SyncData::Config { key, val } => self.sync_config(key, val).await,
SyncData::SaveMessage { src, dest } => self.save_message(src, dest).await,
@@ -284,21 +284,28 @@ impl Context {
}
}
async fn add_qr_token(&self, token: &QrTokenData) -> Result<()> {
async fn add_qr_token(&self, token: &QrTokenData, timestamp: i64) -> Result<()> {
let grpid = token.grpid.as_deref();
token::save(self, Namespace::InviteNumber, grpid, &token.invitenumber).await?;
token::save(self, Namespace::Auth, grpid, &token.auth).await?;
token::save(
self,
Namespace::InviteNumber,
grpid,
&token.invitenumber,
timestamp,
)
.await?;
token::save(self, Namespace::Auth, grpid, &token.auth, timestamp).await?;
Ok(())
}
async fn delete_qr_token(&self, token: &QrTokenData) -> Result<()> {
async fn delete_qr_token(&self, token: &QrTokenData, timestamp: i64) -> Result<()> {
self.sql
.execute(
"DELETE FROM tokens
WHERE foreign_key IN
(SELECT foreign_key FROM tokens
WHERE token=? OR token=?)",
(&token.invitenumber, &token.auth),
WHERE token=? OR token=? AND timestamp <= ?)",
(&token.invitenumber, &token.auth, timestamp),
)
.await?;
Ok(())