Note : sujet déplacé de Soumission via endpoint http (centralisé) et format de signature pour mieux faire ressortir cette option.
Il y a une autre option que je n’ai pas encore explorée mais qui serait à la fois plus élégante et plus facile à implémenter côté client.
L’API RPC d’un nœud IPFS n’est pas faite pour être exposée toute entière sur internet (Kubo RPC API | IPFS Docs), mais :
- on peut se contenter d’en exposer une seule partie, seule
/api/v0/block/put
(ou /api/v0/add
et /api/v0/dag/put
) et /api/v0/pubsub/pub
sont nécessaires ici
- c’est équivalent à ce que fait https://submit.datapod.coinduf.eu/ mais en plus direct (pas de json/base64 inutile)
- ça permet d’utiliser les lib existantes js-kubo-rpc-client,
rs-ipfs-api
et ipfs_client_flutter par exemple, est c’est pas beaucoup plus compliqué à implémenter au moins partiellement dans un langage qui n’a pas ça
Les inconvénients sont les mêmes que d’utiliser mon endpoint http au sens où on peut remplir le nœud ipfs de garbage jusqu’au moment où il déclenche sa garbage collection.
J’écris ça ici mais je vais le laisser de côté pour l’instant parce que ce n’est pas nécessaire, on a déjà quelque chose qui marche donc pas la peine de faire mieux pour l’instant.
1 Like
C’était pas plus compliqué que ça sur nginx :
location /api/v0/dag/ {
proxy_pass http://localhost:5001;
proxy_set_header Host $host;
}
location /api/v0/block/ {
proxy_pass http://localhost:5001;
proxy_set_header Host $host;
}
location /api/v0/pubsub/ {
proxy_pass http://localhost:5001;
proxy_set_header Host $host;
}
J’ai fait un script qui démontre que ça marche : src/scripts/rpcDatapod.ts · d3b47dfdd78c69ea07efd72389c50530d5a0729c · nodes / Duniter Datapod · GitLab. Donc ça va être vraiment très simple d’intégrer les datapods à Cesium même sans gérer du p2p avec Helia, il suffira d’utiliser l’API RPC GitHub - ipfs/js-kubo-rpc-client: A client library for the Kubo RPC API. Valable également pour Ğecko @poka
Pour l’instant, j’ai fait ça sur le même noeud IPFS que mon datapod, mais ce n’est pas forcément une bonne idée niveau sécurité. En effet, on n’a pas envie que n’importe qui puisse remplir le nœud et déclencher le ramasse miette alors que le datapod est en train d’indexer. Le mieux est de faire un nœud IPFS dédié à part, ce qui est très simple puisqu’il s’agit uniquement d’un docker et un proxy-pass.
[edit] le souci de ça est qu’il est possible d’épingler via la partie put
de l’API :
await kubo.dag.put(obj, { pin: true })
donc il faudrait trouver un autre moyen pour désactiver le pinning si on ne veut pas qu’un petit malin en profite pour forcer le nœud à épingler tous ses fichiers.
1 Like