diff --git a/__pycache__/models.cpython-313.pyc b/__pycache__/models.cpython-313.pyc index 15107a8..434b637 100644 Binary files a/__pycache__/models.cpython-313.pyc and b/__pycache__/models.cpython-313.pyc differ diff --git a/models.py b/models.py index 02a1fb8..b9d1cbc 100644 --- a/models.py +++ b/models.py @@ -55,6 +55,7 @@ class Room(db.Model): creator = db.relationship('User', backref='created_rooms', foreign_keys=[created_by]) members = db.relationship('User', secondary=room_members, backref=db.backref('rooms', lazy='dynamic')) 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): return f'' @@ -91,7 +92,7 @@ class RoomFile(db.Model): 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]) 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') def __repr__(self): diff --git a/routes/__pycache__/main.cpython-313.pyc b/routes/__pycache__/main.cpython-313.pyc index ed33182..cd40288 100644 Binary files a/routes/__pycache__/main.cpython-313.pyc and b/routes/__pycache__/main.cpython-313.pyc differ diff --git a/routes/__pycache__/room_files.cpython-313.pyc b/routes/__pycache__/room_files.cpython-313.pyc index 6f88d64..a06282a 100644 Binary files a/routes/__pycache__/room_files.cpython-313.pyc and b/routes/__pycache__/room_files.cpython-313.pyc differ diff --git a/routes/__pycache__/rooms.cpython-313.pyc b/routes/__pycache__/rooms.cpython-313.pyc index 2d9fe1d..7e72093 100644 Binary files a/routes/__pycache__/rooms.cpython-313.pyc and b/routes/__pycache__/rooms.cpython-313.pyc differ diff --git a/routes/rooms.py b/routes/rooms.py index b0abf7a..e4793e1 100644 --- a/routes/rooms.py +++ b/routes/rooms.py @@ -5,6 +5,8 @@ from forms import RoomForm from routes.room_files import user_has_permission from routes.auth import require_password_change from utils import log_event +import os +import shutil rooms_bp = Blueprint('rooms', __name__, url_prefix='/rooms') @@ -64,6 +66,7 @@ def create_room(): }, user_id=current_user.id ) + db.session.commit() flash('Room created successfully!', 'success') return redirect(url_for('rooms.rooms')) @@ -96,6 +99,7 @@ def room(room_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) @@ -145,6 +149,19 @@ def add_member(room_id): if user not in room.members: room.members.append(user) 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') 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: flash('User is not a member of this room.', 'error') else: + user = User.query.get(user_id) db.session.delete(perm) 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') 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: flash('Member not found.', 'error') 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_download = bool(request.form.get('can_download')) 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_share = bool(request.form.get('can_share')) 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') 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 ) + db.session.commit() flash('Room updated successfully!', 'success') return redirect(url_for('rooms.rooms')) @@ -249,6 +310,12 @@ def delete_room(room_id): try: 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) db.session.delete(room) db.session.commit() @@ -263,6 +330,7 @@ def delete_room(room_id): }, user_id=current_user.id ) + db.session.commit() flash(f'Room "{room_name}" has been deleted.', 'success') except Exception as e: diff --git a/templates/rooms/rooms.html b/templates/rooms/rooms.html index a45472f..5273ff4 100644 --- a/templates/rooms/rooms.html +++ b/templates/rooms/rooms.html @@ -110,9 +110,9 @@

{{ room.name }}

-
- - 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?