Structure du fichier content.json¶
Tout les sites ZeroNet ont un fichier content.json
. (Exemple de fichier content.json)
Ce fichier aura, entre autre, une liste de tout les fichiers sur votre site et une signature crée avec votre clée privée. C'est utilisé pour assurer l'authenticité des fichiers du site et éviter des modifications non souhaités. (NB: seulement vous, ou des personnes que vous avez choissit, peuvent mettre à jour le contenu du site).
Voici une liste des champs supporté dans le fichier content.json
:
Champs générés automatiquement¶
Ces chaps sint ajoutés automatiquement lorsque le site est créé ou cloné.
address¶
L'adresse de votre site
Example: 1TaLk3zM7ZRskJvrh3ZNCDVGXvkJusPKQ
address_index¶
L'index de la sous-clé BIP 32 correspondant à l'adresse de votre site. Ajouté automatiquement lorsque que vous clonez un site. Cela permet de regénéré votre clé privé à partir de votre BIP32 source (ou 'seed').
Example: 30926910
cloned_from¶
Seulement pour les sites clonés. L'adresse du site depuis lequel il a été cloné.
Example: 1BLogC9LN4oPDcruNz3qo1ysa133E9AGg8
clone_root¶
Seulement pour les sites clonés. Le sous-répertoire du site qui a été cloné.
Example: template-new
files¶
Taille et sha512 des fichiers automatiquement téléchargés appartenant au site. Automatiquement ajouté avec la commande zeronet.py siteSign siteaddress privatekey
.
Example:
"css/all.css": { "sha512": "869b09328f07bac538c313c4702baa5276544346418378199fa5cef644c139e8", "size": 148208 }
files_optional¶
Taille et sha512 des fichiers optionnels appartenant au site. Automatiquement ajouté avec la commande zeronet.py siteSign siteaddress privatekey
.
Example:
"data/myvideo.mp4": { "sha512": "538c09328aa52765443464135cef644c144346418378199fa5cef61837819538", "size": 832103 }
modified¶
Temps (timestamps) lorsque le content.json est généré.
Example: 1425857522.076
sign (deprecated)¶
Signature ECDSA du contenu du fichier content.json. (champs dans l'ordre, sans espace et les noeuds sign
et signers_sign
). Pour compatibilité avec les version antérieur, sera retiré bientôt.
Example:
"sign": [ 43117356513690007125104018825100786623580298637039067305407092800990252156956, 94139380599940414070721501960181245022427741524702752954181461080408625270000 ],
signers_sign¶
Les adresses authorisés à signer le principale content.json signé utilisant la clé privée de l'adresse du site. Plusieurs entrées sont possible ici, permettant d'activer la fonctionalité multisig.
Format de la chaine de caractère signé: [number_of_signers_required]:[signer address],[signer address]
Example:
signs_required: 1:1PcxwuHYxuJEmM4ydtB1vbiAY6WkNgsz9G,1CK6KHY6MHgYvmRQ4PAafKYDrg1ejbH1cE signers_sign: MEUCIQDuz+CzOVvFkv1P2ra9i5E1p1G0/1cOGecm7GpLpMLhuwIgBIbCL0YHXD1S2+x48QS5VO/rISrkdLiUR+o+x1X0y1A=
Le messagne signé ci-dessus a été signé avec l'adresse "1PcxwuHYxuJEmM4ydtB1vbiAY6WkNgsz9G".
signs¶
Signature ECDSA pour le contenu du content.json :
sign
,signs
champs JSON sont retirés- JSON reformatté avec ses champs dans l'ordre alphabétique et sans espace
- Signature généré sur les données formatées avec Electrum Bitcoin format de signature de message :
- Message encodé:
sha256("\x18" || "Bitcoin Signed Message:\n" || num_to_var_int(len(message)) || message)
- Format:
recovery_id || r || s
, où 27 ≤ recovery_id ≤ 30; taille de la signature = 1 + 32 + 32 = 65 bytes. - La double barre verticale
||
représente la concatenation des bytes.
- Message encodé:
Exemple:
"signs": { "1TaLk3zM7ZRskJvrh3ZNCDVGXvkJusPKQ": "G6/QXFKvACPQ7LhoZG4fgqmeOSK99vGM2arVWkm9pV/WPCfc2ulv6iuQnuzw4v5z82qWswcRq907VPdBsdb9VRo=" },
zeronet_version¶
La version de Zeronet utilisé pour générer le fichier content.json
.
Exemple: 0.2.5
Champs optionels¶
Les champs suivants peuvent être ajouté si besoin.
background-color¶
Couleur de fond du wrapper.
Exemple: #F5F5F5
cloneable¶
Authorise n'importe qui à cloner le site si true.
To make your site properly cloneable you have to have a separate folder of data files for a clean start (e.g. without any blog posts). To do this you have to add the -default postfix to your data files and directories. During the cloning process, only directories with the -default postfix are copied. The postfix is removed from the new site.
description¶
Description de votre site, il sera affiché sous son titre dans ZeroHello.
Example: Forum décentralisé (démo)
domain¶
Le nom de domaine Namecoin pour votre site. ZeroHello lien redirigera vers celui-ci le plugin Zeroname est activé.
Example: Blog.ZeroNetwork.bit
ignore¶
Ne pas signer les fichiers associés à cette règle.
Exemple: ((js|css)/(?!all.(js|css))|data/users/.*)
(ignore tout les fichiers js et css sauf all.js et all.css et ignore le contenu du dossier data/users/
)
Note: Quelques restrictions sur les combinaisons possibles.
includes¶
Ajoute un autre content.json au site. C'est souvent utilisé pour ajouter un sous content.json pour les données des utilisateurs.
Exemple:
"includes": { "data/users/content.json": { "signers": [ # Signataire autorisé pour ce site "1LSxsKfC9S9TVXGGNSM3vPHjyW82jgCX5f" ], "signers_required": 1 # Nombre de signature valide nécessaire pour accepter le fichier "files_allowed": "data.json", # Fichiers autorisés (peut être une expression régulière) "includes_allowed": false, # Si des sous-includes sont autorisés "max_size": 10000, # Taille maximale du content.json inclus et fichiers signés (en bytes) } }
merged_type¶
Le type de groupe ('merger') ce site fait partie.
Exemple: ZeroMe
optional¶
Expression régulière pour les fichiers optionnels.
Exemple: (data/mp4/.*|updater/.*)
(tout dans le répertoire data/mp4
et updater/
est optionnel)
Note: Quelques restrictions sur les combinaisons possibles.
signs_required¶
Le nombre de signature valide nécessaire pour accepter le fichier. Permet d'obtenir des site Multisig.
Exemple: 1
title¶
Le titre du site, visible depuis le navigateur et sur ZeroHello.
Exemple: ZeroTalk
translate¶
Fichier à traduire. (utilise les fichiers de language json qui sont dans le répertoire languages
)
Exemple: ["index.html", "js/all.js"]
favicon¶
Le favicon du site. Va remplacer l'icône Zeronet qui est utilisé par défault avec l'icône spécifié. Il peut être .ico, .png, .svg, etc.
Exemple: favicon.ico
user_contents¶
Règles autorisées pour le contenu de l'utilisateur dans ce répertoire.
Noeud | Déscription |
---|---|
archived | Efface le contenu du répertoire de l'utilisateur spécifié qui a été signé avant la date specifié (key: directory name, value: timestamp) |
archived_before | Efface tout le contenu des répertoires d'utilisateur qui ont été signé avant la date spécifié (unix timestamp) |
cert_signers | Nom de domaine acceptée et addresse de signataire valide |
cert_signers_pattern | Expression régulière accepté pour les signataire de certificat |
permission_rules | Noms de fichiers autorisés et taille du répertoire autorisés par domaine |
permissions | Permission cas par cas |
Exemple:
"user_contents": { "archived": { "1165u6pt5mQNFjyhMVwy6azB7bZuQGLA9b": 1523088096 }, "archived_before": 1523088096, "cert_signers": { "zeroid.bit": [ "1iD5ZQJMNXu43w1qLB8sfdHVKppVMduGz" ] }, "cert_signers_pattern": "1Zero[0-9].*", "permission_rules": { ".*": { "files_allowed": "data.json", "files_allowed_optional" : "\\.(png|jpeg|jpg|gif|webm|mp4|ogg|mp3|pdf|epub|zip|tar\\.gz)(\\.piecemap\\.msgpack)", "max_size": 10000, "max_size_optional": 10000000 }, "bitid/.*@zeroid.bit": { "max_size": 40000 }, "bitmsg/.*@zeroid.bit": { "max_size": 15000 } }, "permissions": { "bad@zeroid.bit": false, "nofish@zeroid.bit": { "max_size": 100000 } } }
Note: Quelques restrictions sur les combinaisons possibles.
viewport¶
Contenu pour le meta tag "viewport". (A utiliser pour les pages mobile-friendly)
Exemple: width=device-width, initial-scale=1.0
Regular expression limitations¶
Pour éviter des attaques ReDoS, les restrictions suivantes sur chaque expression sont appliqués:
- Le
.
caractère est obligatoire avant la répitions des caractères*,+,{
- Une expression peut avoir au maximum 9 répétitions
- La longueur maximale d'une expression est de 255 caractères
Exemples:¶
((?!json).)*$
pas autorisé à cause du)
avant le caractère*
. Alternative :.*(?!json)$
(.*.epub|.*.jpg|.*.jpeg|.*.png|data/.*.gif|.*.avi|.*.ogg|.*.webm|.*.mp4|.*.mp3|.*.mkv|.*.eot)
pas autorisé car possède 12 répétitions.*
. Alternative:.*(epub|jpg|jpeg|png|data/gif|avi|ogg|webm|mp4|mp3|mkv|eot)