clearance
This commit is contained in:
parent
e46dec38ca
commit
a2571d6e6f
@ -1,156 +0,0 @@
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
from datetime import datetime
|
||||
from werkzeug.security import generate_password_hash, check_password_hash
|
||||
import os
|
||||
from config import UPLOAD_FOLDER
|
||||
from flask_login import UserMixin
|
||||
|
||||
db = SQLAlchemy()
|
||||
|
||||
class Favorite(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
|
||||
paste_id = db.Column(db.Integer, db.ForeignKey('paste.id'), nullable=False)
|
||||
created_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
|
||||
|
||||
user = db.relationship('User', backref=db.backref('favorites', lazy=True))
|
||||
paste = db.relationship('Paste', backref=db.backref('favorited_by', lazy=True))
|
||||
|
||||
paste_favorites = db.Table(
|
||||
'paste_favorites',
|
||||
db.Column('user_id', db.Integer, db.ForeignKey('user.id'), primary_key=True),
|
||||
db.Column('paste_id', db.Integer, db.ForeignKey('paste.id'), primary_key=True)
|
||||
)
|
||||
class User(db.Model, UserMixin):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
username = db.Column(db.String(80), unique=True, nullable=False)
|
||||
password_hash = db.Column(db.String(128), nullable=False)
|
||||
role = db.Column(db.String(10), nullable=False, default='user')
|
||||
storage_used = db.Column(db.BigInteger, nullable=False, default=0) # En bytes
|
||||
storage_limit = db.Column(db.BigInteger, nullable=False, default=1 * 1024**3)
|
||||
theme_preference = db.Column(db.String(10), default="light") # Guardar "light" o "dark"
|
||||
def set_password(self, password):
|
||||
self.password_hash = generate_password_hash(password)
|
||||
|
||||
def check_password(self, password):
|
||||
return check_password_hash(self.password_hash, password)
|
||||
|
||||
def has_unlimited_storage(self):
|
||||
return self.storage_limit == -1
|
||||
|
||||
def get_storage_limit(self):
|
||||
"""Devuelve el límite de almacenamiento del usuario."""
|
||||
return self.storage_limit
|
||||
|
||||
shared_pastes = db.Table(
|
||||
'shared_pastes',
|
||||
db.Column('paste_id', db.Integer, db.ForeignKey('paste.id'), primary_key=True),
|
||||
db.Column('user_id', db.Integer, db.ForeignKey('user.id'), primary_key=True),
|
||||
db.Column('can_edit', db.Boolean, default=False) # Nuevo campo para indicar permiso de edición
|
||||
)
|
||||
|
||||
# Tabla intermedia para usuarios con permisos de edición
|
||||
paste_editors = db.Table(
|
||||
'paste_editors',
|
||||
db.Column('paste_id', db.Integer, db.ForeignKey('paste.id'), primary_key=True),
|
||||
db.Column('user_id', db.Integer, db.ForeignKey('user.id'), primary_key=True)
|
||||
)
|
||||
|
||||
class Paste(db.Model):
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
title = db.Column(db.String(255), nullable=True)
|
||||
editable = db.Column(db.Boolean, default=True)
|
||||
content_type = db.Column(db.String(50), nullable=False)
|
||||
filename = db.Column(db.String(255), nullable=True)
|
||||
owner_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
|
||||
created_at = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
|
||||
expires_at = db.Column(db.DateTime, nullable=True) # Nuevo campo de expiración
|
||||
language = db.Column(db.String(50), nullable=True)
|
||||
last_edited_at = db.Column(db.DateTime, nullable=True)
|
||||
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
|
||||
size = db.Column(db.Integer, nullable=True)
|
||||
|
||||
# Relaciones
|
||||
editors = db.relationship('User', secondary=paste_editors, backref=db.backref('editable_pastes', lazy='dynamic'))
|
||||
owner = db.relationship('User', backref=db.backref('owned_pastes', lazy=True), foreign_keys=[owner_id])
|
||||
favorites = db.relationship('User', secondary='paste_favorites', backref=db.backref('favorite_pastes', lazy='dynamic'))
|
||||
shared_with = db.relationship('User', secondary=shared_pastes, backref=db.backref('shared_pastes', lazy='dynamic'))
|
||||
|
||||
owner = db.relationship(
|
||||
'User',
|
||||
backref=db.backref('owned_pastes', lazy=True),
|
||||
foreign_keys=[owner_id]
|
||||
)
|
||||
favorites = db.relationship(
|
||||
'User',
|
||||
secondary='paste_favorites',
|
||||
backref=db.backref('favorite_pastes', lazy='dynamic')
|
||||
)
|
||||
def is_expired(self):
|
||||
""" Verifica si el paste ha expirado. """
|
||||
return self.expires_at and datetime.utcnow() > self.expires_at
|
||||
def to_dict(self):
|
||||
return {
|
||||
"id": self.id,
|
||||
"content_type": self.content_type,
|
||||
"filename": self.filename,
|
||||
"owner_id": self.owner_id,
|
||||
"created_at": self.created_at.isoformat(),
|
||||
"language": self.language,
|
||||
"user_id": self.user_id,
|
||||
"size": self.file_size
|
||||
}
|
||||
|
||||
|
||||
def get_size(self):
|
||||
file_path = os.path.join(UPLOAD_FOLDER, self.filename)
|
||||
try:
|
||||
return os.path.getsize(file_path) # Devuelve el tamaño del archivo
|
||||
except FileNotFoundError:
|
||||
return 0
|
||||
|
||||
def get_type(self):
|
||||
# Determinar el tipo de archivo basado en content_type
|
||||
if self.content_type.startswith("video"):
|
||||
return "Video"
|
||||
elif self.content_type.startswith("audio"):
|
||||
return "Audio"
|
||||
elif self.content_type.startswith("image"):
|
||||
return "Image"
|
||||
elif self.content_type in ["application/zip", "application/x-tar", "application/gzip", "application/x-bzip2", "application/x-7z-compressed", "application/x-rar-compressed"]:
|
||||
return "Compressed"
|
||||
elif self.content_type.startswith("text"):
|
||||
if self.language:
|
||||
return f"Text ({self.language})"
|
||||
return "Text"
|
||||
else:
|
||||
return "Other"
|
||||
|
||||
def has_edit_permission(self, user):
|
||||
"""
|
||||
Verifica si un usuario tiene permiso de edición en este paste.
|
||||
"""
|
||||
# Si el usuario no está autenticado, no puede tener permisos
|
||||
if not user.is_authenticated:
|
||||
print(f"[DEBUG] Unauthenticated user tried to edit paste {self.id}. Permission denied.")
|
||||
return False
|
||||
|
||||
# El dueño del paste siempre tiene permisos
|
||||
if user.id == self.owner_id:
|
||||
print(f"[DEBUG] User {user.id} is the owner of paste {self.id}. Permission granted.")
|
||||
return True
|
||||
|
||||
# Verificar si el usuario tiene permisos en `shared_pastes`
|
||||
shared_entry = db.session.query(shared_pastes).filter_by(
|
||||
paste_id=self.id,
|
||||
user_id=user.id,
|
||||
can_edit=True
|
||||
).first()
|
||||
|
||||
if shared_entry:
|
||||
print(f"[DEBUG] User {user.id} has edit permissions for paste {self.id}.")
|
||||
else:
|
||||
print(f"[DEBUG] User {user.id} does NOT have edit permissions for paste {self.id}.")
|
||||
|
||||
return shared_entry is not None
|
||||
|
2586
src/routes.py_backup
2586
src/routes.py_backup
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user