Bug de téléchargement de chat

J’ai mis un certain temps à examiner cela, mais je pense avoir trouvé la cause. Je pense que cela a à voir avec ce code :

def fetch_uploads(params:, guardian:)
  return [] if !SiteSetting.chat_allow_uploads
  guardian.user.uploads.where(id: params.upload_ids) # Spécifiquement, ici
end

Lorsqu’un nouveau message de chat est créé, cette méthode est appelée pour récupérer les pièces jointes à associer au message. Possiblement pour garantir la propriété, la méthode passe par l’utilisateur du Guardian pour récupérer les pièces jointes afin de n’autoriser que celles appartenant à cet utilisateur.

Le problème est que les pièces jointes sont dédupliquées, comme on peut le voir ici :

# avons-nous déjà cette pièce jointe ?
@upload = Upload.find_by(sha1: sha1)

# ...

# renvoie la pièce jointe précédente s'il y en a une
if @upload
  add_metadata!
  UserUpload.find_or_create_by!(user_id: user_id, upload_id: @upload.id) if user_id
  return @upload
end

Je pense qu’une solution possible serait de passer par les UserUploads au lieu de considérer uniquement les pièces jointes appartenant à l’utilisateur. UserUpload lie les pièces jointes à plusieurs utilisateurs, ce qui semble être ce dont nous avons besoin. Je ne suis pas encore sûr à 100 % de la manière de le faire correctement ; il se fait tard, donc je vais me coucher, mais si personne d’autre ne le corrige, j’essaierai de revenir plus tard pour travailler sur une PR. :slightly_smiling_face:

3 « J'aime »