Update track_client_activity to handle missing rustdesk_id

- When rustdesk_id is not provided, update the most recent client for the API token
- This ensures user agents are updated even for clients not sending rustdesk_id
- Improves client reconnection handling
parent c2f2f165
...@@ -810,37 +810,58 @@ def track_client_activity(api_token, rustdesk_id=None): ...@@ -810,37 +810,58 @@ def track_client_activity(api_token, rustdesk_id=None):
try: try:
if not api_token or not api_token.is_valid(): if not api_token or not api_token.is_valid():
return return
from app.models import ClientActivity from app.models import ClientActivity
from flask import request from flask import request
# Get client info # Get client info
ip_address = request.headers.get('X-Forwarded-For', request.remote_addr) ip_address = request.headers.get('X-Forwarded-For', request.remote_addr)
user_agent = request.headers.get('User-Agent') user_agent = request.headers.get('User-Agent')
# Check if client already exists if rustdesk_id:
client = ClientActivity.query.filter_by( # If rustdesk_id is provided, use specific client
api_token_id=api_token.id, client = ClientActivity.query.filter_by(
rustdesk_id=rustdesk_id or 'unknown'
).first()
if client:
# Update existing client
client.last_seen = datetime.utcnow()
client.ip_address = ip_address
client.user_agent = user_agent
else:
# Create new client
client = ClientActivity(
api_token_id=api_token.id, api_token_id=api_token.id,
rustdesk_id=rustdesk_id or 'unknown', rustdesk_id=rustdesk_id
ip_address=ip_address, ).first()
user_agent=user_agent
) if client:
db.session.add(client) # Update existing client
client.last_seen = datetime.utcnow()
client.ip_address = ip_address
client.user_agent = user_agent
else:
# Create new client
client = ClientActivity(
api_token_id=api_token.id,
rustdesk_id=rustdesk_id,
ip_address=ip_address,
user_agent=user_agent
)
db.session.add(client)
else:
# If no rustdesk_id provided, update the most recent client for this API token
client = ClientActivity.query.filter_by(
api_token_id=api_token.id
).order_by(ClientActivity.last_seen.desc()).first()
if client:
# Update most recent client
client.last_seen = datetime.utcnow()
client.ip_address = ip_address
client.user_agent = user_agent
else:
# Create new client with unknown rustdesk_id
client = ClientActivity(
api_token_id=api_token.id,
rustdesk_id='unknown',
ip_address=ip_address,
user_agent=user_agent
)
db.session.add(client)
db.session.commit() db.session.commit()
except Exception as e: except Exception as e:
logger.error(f"Failed to track client activity: {str(e)}") logger.error(f"Failed to track client activity: {str(e)}")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment