from flask_login import current_user from models import RoomMemberPermission from datetime import datetime, timezone def user_has_permission(room, perm_name): """ Check if the current user has a specific permission in a room. Args: room: Room object perm_name: Name of the permission to check (e.g., 'can_view', 'can_upload') Returns: bool: True if user has permission, False otherwise """ # Admin users have all permissions if current_user.is_admin: return True # Check if user is a member of the room if current_user not in room.members: return False # Get user's permissions for this room permission = RoomMemberPermission.query.filter_by( room_id=room.id, user_id=current_user.id ).first() # If no specific permissions are set, user only has view access if not permission: return perm_name == 'can_view' # Check the specific permission return getattr(permission, perm_name, False) def clean_path(path): """ Clean a file path by removing leading/trailing slashes and normalizing separators. Args: path: Path string to clean Returns: str: Cleaned path """ if not path: return '' return path.strip('/\\') def timeago(date): """Convert a datetime to a human-readable time ago string.""" if not date: return '' # Convert naive datetime to UTC if it's naive if date.tzinfo is None: date = date.replace(tzinfo=timezone.utc) now = datetime.now(timezone.utc) diff = now - date if diff.days > 365: years = diff.days // 365 return f'{years} year{"s" if years != 1 else ""} ago' elif diff.days > 30: months = diff.days // 30 return f'{months} month{"s" if months != 1 else ""} ago' elif diff.days > 0: return f'{diff.days} day{"s" if diff.days != 1 else ""} ago' elif diff.seconds > 3600: hours = diff.seconds // 3600 return f'{hours} hour{"s" if hours != 1 else ""} ago' elif diff.seconds > 60: minutes = diff.seconds // 60 return f'{minutes} minute{"s" if minutes != 1 else ""} ago' else: return 'just now'