File preview

This commit is contained in:
2025-06-01 12:31:10 +02:00
parent c0a97a1714
commit aeefd17b10
8 changed files with 280 additions and 8 deletions

View File

@@ -1021,4 +1021,71 @@ def init_routes(main_bp):
}
logger.info(f"Sending response: {response_data}")
return jsonify(response_data)
return jsonify(response_data)
@main_bp.route('/settings/events/download')
@login_required
def download_events():
if not current_user.is_admin:
flash('Only administrators can download event logs.', 'error')
return redirect(url_for('main.dashboard'))
# Get filter parameters
event_type = request.args.get('event_type')
date_range = request.args.get('date_range', '7d')
user_id = request.args.get('user_id')
# Calculate date range
end_date = datetime.utcnow()
if date_range == '24h':
start_date = end_date - timedelta(days=1)
elif date_range == '7d':
start_date = end_date - timedelta(days=7)
elif date_range == '30d':
start_date = end_date - timedelta(days=30)
else:
start_date = None
# Build query
query = Event.query
if event_type:
query = query.filter_by(event_type=event_type)
if start_date:
query = query.filter(Event.timestamp >= start_date)
if user_id:
query = query.filter_by(user_id=user_id)
# Get all events
events = query.order_by(Event.timestamp.desc()).all()
# Create CSV content
import csv
import io
output = io.StringIO()
writer = csv.writer(output)
# Write header
writer.writerow(['Timestamp', 'Event Type', 'User', 'Details', 'IP Address'])
# Write data
for event in events:
user_name = f"{event.user.username} {event.user.last_name}" if event.user else "System"
writer.writerow([
event.timestamp.strftime('%Y-%m-%d %H:%M:%S'),
event.event_type,
user_name,
str(event.details),
event.ip_address
])
# Create the response
output.seek(0)
return Response(
output,
mimetype='text/csv',
headers={
'Content-Disposition': f'attachment; filename=event_log_{datetime.utcnow().strftime("%Y%m%d_%H%M%S")}.csv'
}
)