fixing logs on multiple rooms
This commit is contained in:
Binary file not shown.
@@ -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):
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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:
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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' %}
|
||||||
|
|||||||
Reference in New Issue
Block a user