Durée de validité d'un lien de téléchargement sur le VFS


#1

Bonjour,

Pour le développement de mon application vidéo de streaming (que j’avais évoquée il y a pas mal de temps déjà), j’ai besoin de récupérer les fichiers médias stockés sur le VFS. Pour cela j’utilise cozy-client et la fonction getDownloadLinkById() qui génère un lien de téléchargement pour accéder aux fichiers binaires.

L’application fait alors des GET sur les fichiers avec des ranges.

Le problème est que c’est une application de streaming, et que j’ai donc besoin d’avoir accès au fichier binaire pendant toute la durée de visionnage. Or, au bout de environ 10 min le server me renvoie une erreur 400 Bad Request avec comme détail “Wrong download token”.

Je suppose donc que le lien n’est valide que pour quelques temps avant d’expirer. Il me faut alors ré-exécuter getDonwloadLinkById() pour obtenir un nouveau lien valide.

Y a t-il un autre moyen pour accéder à un fichier sur le VFS de manière permanente ? Ou au moins augmenter la durée de validité ?

Merci d’avance.


#2

Hello @asuuga,

Pour l’instant, je crois que Cozy n’est pas vraiment adapté à cet usage, et qu’il n’est pas possible de modifier la durée de vie de l’URL publique d’un fichier.

J’invoque @nono, notre architecte, pour une réponse plus complète.


#3

D’accord merci, je vais attendre la réponse de l’expert !


#4

Bonjour,

Y a t-il un autre moyen pour accéder à un fichier sur le VFS de manière permanente ? Ou au moins augmenter la durée de validité ?

La route de la stack GET /files/download/:file-id permet de faire ça, à condition de passer un entête HTTP Authorization: Bearer $token. Cette route ne peut pas être utilisée comme src sur une balise img par exemple (car l’entête HTTP Authorization ne pourra pas être envoyé), et c’est pourquoi, nous avons ajouté une deuxième route (celle utilisée par getDonwloadLinkById()) qui permet d’avoir une URL avec un secret qui ne nécessite pas cet entête. Et pour garder une sécurité acceptable, on limite fortement la durée de validité de cet URL.


#5

Bonjour,

Ah je pensais que c’était la route POST /files/downloads?Id=file_id qui nécessitait cet entête avec le token :sweat_smile:

J’ai reformulé mes requêtes avec la route GET /files/download/:file-id et l’entête Authorization: Bearer $token et cette fois le serveur me répond :

{"error":"Invalid JWT token"}

J’ai alors manuellement ajouté le cookie de la session dans l’entête (Cookie: cozysessid=...) grâce aux outils de dev du navigateur, et là le serveur m’a répondu correctement.

Ma question est alors : comment récupérer ce cookie depuis l’application js ?


#6

Hello,

Voici comment récupérer le jeton dont tu as besoin dans le requête :
https://docs.cozy.io/en/tutorials/app/#behind-the-magic


#7

Oups, j’avais effectivement oublié le cookie… Merci ça fonctionne nickel ! :+1: