fixing logs on multiple rooms

This commit is contained in:
2025-05-30 21:08:58 +02:00
parent a08345e676
commit f7853f96ed
8 changed files with 73 additions and 16 deletions

Binary file not shown.

View File

@@ -55,6 +55,7 @@ class Room(db.Model):
creator = db.relationship('User', backref='created_rooms', foreign_keys=[created_by]) creator = db.relationship('User', backref='created_rooms', foreign_keys=[created_by])
members = db.relationship('User', secondary=room_members, backref=db.backref('rooms', lazy='dynamic')) members = db.relationship('User', secondary=room_members, backref=db.backref('rooms', lazy='dynamic'))
member_permissions = relationship('RoomMemberPermission', back_populates='room', cascade='all, delete-orphan') member_permissions = relationship('RoomMemberPermission', back_populates='room', cascade='all, delete-orphan')
files = db.relationship('RoomFile', back_populates='room', cascade='all, delete-orphan')
def __repr__(self): def __repr__(self):
return f'<Room {self.name}>' return f'<Room {self.name}>'
@@ -91,7 +92,7 @@ class RoomFile(db.Model):
deleted_at = db.Column(db.DateTime) # New field for tracking when the file was deleted deleted_at = db.Column(db.DateTime) # New field for tracking when the file was deleted
uploader = db.relationship('User', backref='uploaded_files', foreign_keys=[uploaded_by]) uploader = db.relationship('User', backref='uploaded_files', foreign_keys=[uploaded_by])
deleter = db.relationship('User', backref='deleted_room_files', foreign_keys=[deleted_by]) deleter = db.relationship('User', backref='deleted_room_files', foreign_keys=[deleted_by])
room = db.relationship('Room', backref='files') room = db.relationship('Room', back_populates='files')
starred_by = db.relationship('User', secondary='user_starred_file', backref='starred_files') starred_by = db.relationship('User', secondary='user_starred_file', backref='starred_files')
def __repr__(self): def __repr__(self):

View File

@@ -5,6 +5,8 @@ from forms import RoomForm
from routes.room_files import user_has_permission from routes.room_files import user_has_permission
from routes.auth import require_password_change from routes.auth import require_password_change
from utils import log_event from utils import log_event
import os
import shutil
rooms_bp = Blueprint('rooms', __name__, url_prefix='/rooms') rooms_bp = Blueprint('rooms', __name__, url_prefix='/rooms')
@@ -64,6 +66,7 @@ def create_room():
}, },
user_id=current_user.id user_id=current_user.id
) )
db.session.commit()
flash('Room created successfully!', 'success') flash('Room created successfully!', 'success')
return redirect(url_for('rooms.rooms')) return redirect(url_for('rooms.rooms'))
@@ -96,6 +99,7 @@ def room(room_id):
}, },
user_id=current_user.id user_id=current_user.id
) )
db.session.commit()
return render_template('rooms/room.html', room=room, can_download=can_download, can_upload=can_upload, can_delete=can_delete, can_rename=can_rename, can_move=can_move, can_share=can_share) return render_template('rooms/room.html', room=room, can_download=can_download, can_upload=can_upload, can_delete=can_delete, can_rename=can_rename, can_move=can_move, can_share=can_share)
@@ -145,6 +149,19 @@ def add_member(room_id):
if user not in room.members: if user not in room.members:
room.members.append(user) room.members.append(user)
db.session.commit() db.session.commit()
log_event(
event_type='room_member_add',
details={
'room_id': room_id,
'room_name': room.name,
'added_user': f"{user.username} {user.last_name}",
'added_by': f"{current_user.username} {current_user.last_name}"
},
user_id=current_user.id
)
db.session.commit()
flash(f'{user.username} has been added to the room.', 'success') flash(f'{user.username} has been added to the room.', 'success')
return redirect(url_for('rooms.room_members', room_id=room_id)) return redirect(url_for('rooms.room_members', room_id=room_id))
@@ -168,8 +185,22 @@ def remove_member(room_id, user_id):
if not perm: if not perm:
flash('User is not a member of this room.', 'error') flash('User is not a member of this room.', 'error')
else: else:
user = User.query.get(user_id)
db.session.delete(perm) db.session.delete(perm)
db.session.commit() db.session.commit()
log_event(
event_type='room_member_remove',
details={
'room_id': room_id,
'room_name': room.name,
'removed_user': f"{user.username} {user.last_name}",
'removed_by': f"{current_user.username} {current_user.last_name}"
},
user_id=current_user.id
)
db.session.commit()
flash('User has been removed from the room.', 'success') flash('User has been removed from the room.', 'success')
return redirect(url_for('rooms.room_members', room_id=room_id)) return redirect(url_for('rooms.room_members', room_id=room_id))
@@ -184,6 +215,13 @@ def update_member_permissions(room_id, user_id):
if not perm: if not perm:
flash('Member not found.', 'error') flash('Member not found.', 'error')
return redirect(url_for('rooms.room_members', room_id=room_id)) return redirect(url_for('rooms.room_members', room_id=room_id))
# Get the user object
user = User.query.get(user_id)
if not user:
flash('User not found.', 'error')
return redirect(url_for('rooms.room_members', room_id=room_id))
perm.can_view = bool(request.form.get('can_view')) perm.can_view = bool(request.form.get('can_view'))
perm.can_download = bool(request.form.get('can_download')) perm.can_download = bool(request.form.get('can_download'))
perm.can_upload = bool(request.form.get('can_upload')) perm.can_upload = bool(request.form.get('can_upload'))
@@ -192,6 +230,28 @@ def update_member_permissions(room_id, user_id):
perm.can_move = bool(request.form.get('can_move')) perm.can_move = bool(request.form.get('can_move'))
perm.can_share = bool(request.form.get('can_share')) perm.can_share = bool(request.form.get('can_share'))
db.session.commit() db.session.commit()
log_event(
event_type='room_permission_update',
details={
'room_id': room_id,
'room_name': room.name,
'user': f"{user.username} {user.last_name}",
'updated_by': f"{current_user.username} {current_user.last_name}",
'permissions': {
'can_view': perm.can_view,
'can_download': perm.can_download,
'can_upload': perm.can_upload,
'can_delete': perm.can_delete,
'can_rename': perm.can_rename,
'can_move': perm.can_move,
'can_share': perm.can_share
}
},
user_id=current_user.id
)
db.session.commit()
flash('Permissions updated.', 'success') flash('Permissions updated.', 'success')
return redirect(url_for('rooms.room_members', room_id=room_id)) return redirect(url_for('rooms.room_members', room_id=room_id))
@@ -225,6 +285,7 @@ def edit_room(room_id):
}, },
user_id=current_user.id user_id=current_user.id
) )
db.session.commit()
flash('Room updated successfully!', 'success') flash('Room updated successfully!', 'success')
return redirect(url_for('rooms.rooms')) return redirect(url_for('rooms.rooms'))
@@ -249,6 +310,12 @@ def delete_room(room_id):
try: try:
print(f"Attempting to delete room {room_id} ({room_name})") print(f"Attempting to delete room {room_id} ({room_name})")
# Delete physical files
room_dir = os.path.join('/data/rooms', str(room_id))
if os.path.exists(room_dir):
shutil.rmtree(room_dir)
print(f"Deleted room directory: {room_dir}")
# Delete the room (cascade will handle the rest) # Delete the room (cascade will handle the rest)
db.session.delete(room) db.session.delete(room)
db.session.commit() db.session.commit()
@@ -263,6 +330,7 @@ def delete_room(room_id):
}, },
user_id=current_user.id user_id=current_user.id
) )
db.session.commit()
flash(f'Room "{room_name}" has been deleted.', 'success') flash(f'Room "{room_name}" has been deleted.', 'success')
except Exception as e: except Exception as e:

View File

@@ -110,9 +110,9 @@
<p class="text-muted mb-0" id="deleteFileName{{ room.id }}">{{ room.name }}</p> <p class="text-muted mb-0" id="deleteFileName{{ room.id }}">{{ room.name }}</p>
</div> </div>
</div> </div>
<div class="alert alert-info"> <div class="alert alert-warning">
<i class="fas fa-info-circle me-2"></i> <i class="fas fa-exclamation-triangle text-warning"></i>
This item will be moved to trash. You can restore it from the trash page within 30 days. This Room will be permanently deleted. This action cannot be undone. Are you sure you want to proceed?
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">

View File

@@ -23,10 +23,6 @@
<option value="room_delete">Room Delete</option> <option value="room_delete">Room Delete</option>
<option value="room_update">Room Update</option> <option value="room_update">Room Update</option>
<option value="room_open">Room Open</option> <option value="room_open">Room Open</option>
<option value="room_list_view">Room List View</option>
<option value="room_search">Room Search</option>
<option value="room_join">Room Join</option>
<option value="room_leave">Room Leave</option>
<option value="room_member_permissions_update">Room Member Permissions Update</option> <option value="room_member_permissions_update">Room Member Permissions Update</option>
<option value="conversation_create">Conversation Create</option> <option value="conversation_create">Conversation Create</option>
<option value="conversation_delete">Conversation Delete</option> <option value="conversation_delete">Conversation Delete</option>
@@ -100,14 +96,6 @@
<span class="badge bg-primary">Room Update</span> <span class="badge bg-primary">Room Update</span>
{% elif event.event_type == 'room_open' %} {% elif event.event_type == 'room_open' %}
<span class="badge bg-info">Room Open</span> <span class="badge bg-info">Room Open</span>
{% elif event.event_type == 'room_list_view' %}
<span class="badge bg-secondary">Room List View</span>
{% elif event.event_type == 'room_search' %}
<span class="badge bg-info">Room Search</span>
{% elif event.event_type == 'room_join' %}
<span class="badge bg-info">Room Join</span>
{% elif event.event_type == 'room_leave' %}
<span class="badge bg-secondary">Room Leave</span>
{% elif event.event_type == 'room_member_permissions_update' %} {% elif event.event_type == 'room_member_permissions_update' %}
<span class="badge bg-primary">Room Member Permissions Update</span> <span class="badge bg-primary">Room Member Permissions Update</span>
{% elif event.event_type == 'conversation_create' %} {% elif event.event_type == 'conversation_create' %}