# content.json的结构

每个ZeroNet站点都有一个`content.json`文件。 ([content.json示例文件](https://github.com/HelloZeroNet/ZeroTalk/blob/master/content.json))

除其他外，此文件将包含您网站上所有文件的列表以及使用您的私钥创建的签名。 这用于确保站点文件的真实性并避免篡改（即：只有您或您信任的人才能更新您站点的内容）。

以下是支持的`content.json`键列表：

---

## 自动生成

_创建或克隆站点时会自动添加这些键。_

### address

您的网站地址

**示例**: 1TaLk3zM7ZRskJvrh3ZNCDVGXvkJusPKQ


---


### address_index

The site address's BIP32 sub-key index of your BIP32 seed. Auto-added when you clone a site. It allows recovery of the site's privatekey from your BIP32 seed.

**示例**: 30926910

---


### cloned_from

仅适用于克隆网站。 克隆站点的站点地址。

**示例**: 1BLogC9LN4oPDcruNz3qo1ysa133E9AGg8

---


### clone_root

仅适用于克隆网站。 从中克隆的网站上的子目录。

**示例**: template-new


---


### files

Size and sha512 hashes of automatically downloaded files contained in your site. Automatically added by the command `zeronet.py siteSign siteaddress privatekey`.

**示例**:
```python
    "css/all.css": {
      "sha512": "869b09328f07bac538c313c4702baa5276544346418378199fa5cef644c139e8",
      "size": 148208
    }
```


---


### files_optional

Size and sha512 hashes of optional files contained in your site. Automatically added by the command `zeronet.py siteSign siteaddress privatekey`.

**示例**:
```python
    "data/myvideo.mp4": {
      "sha512": "538c09328aa52765443464135cef644c144346418378199fa5cef61837819538",
      "size": 832103
    }
```



---


### modified

生成content.json的时间。

**示例**: 1425857522.076


---


### sign (deprecated)

ECDSA sign of the content.json file content. (keys sorted, without whitespace and the `sign` and `signers_sign` nodes). For backward compatibility, will be removed soon.

**示例**:
```python
  "sign": [
    43117356513690007125104018825100786623580298637039067305407092800990252156956,
    94139380599940414070721501960181245022427741524702752954181461080408625270000
  ],
```


---


### signers_sign

Possible signer addresses for the root content.json signed using the site address private key. Multiple entries are allowed here, allowing for site Multisig functionality.

**Format of the signed string**: [number_of_signers_required]:[signer address],[signer address]

*示例*:
```
signs_required: 1:1PcxwuHYxuJEmM4ydtB1vbiAY6WkNgsz9G,1CK6KHY6MHgYvmRQ4PAafKYDrg1ejbH1cE
signers_sign: MEUCIQDuz+CzOVvFkv1P2ra9i5E1p1G0/1cOGecm7GpLpMLhuwIgBIbCL0YHXD1S2+x48QS5VO/rISrkdLiUR+o+x1X0y1A=
```

上述签名消息使用的签名地址是"1PcxwuHYxuJEmM4ydtB1vbiAY6WkNgsz9G".

---


### signs

ECDSA signature for the the content.json file content:

 - `sign`, `signs` JSON nodes removed
 - JSON dumped with keys sorted alphabetically, without whitespace
 - Signature generated on the dumped data, using Electrum Bitcoin message signature format:
    * [Message encoding](https://github.com/vbuterin/pybitcointools/blob/87806f3c984e258a5f30814a089b5c29cbcf0952/bitcoin/main.py#L405): `sha256("\x18" || "Bitcoin Signed Message:\n" || num_to_var_int(len(message)) || message)`
    * [Serialization format](https://github.com/MuxZeroNet/zerolib/blob/f13126e04bf99b1b416a7ea5b5cad7924cdc15a4/zerolib/integrity/bitcoin.py#L82-L93): `recovery_id || r || s`, where 27 ≤ recovery_id ≤ 30; signature length = 1 + 32 + 32 = 65 bytes.
    * Double vertical bar `||` denotes byte concatenation.

**示例**:
```python
  "signs": {
    "1TaLk3zM7ZRskJvrh3ZNCDVGXvkJusPKQ": "G6/QXFKvACPQ7LhoZG4fgqmeOSK99vGM2arVWkm9pV/WPCfc2ulv6iuQnuzw4v5z82qWswcRq907VPdBsdb9VRo="
  },
```


----


### zeronet_version

ZeroNet版本用于生成content.json文件。

**Example**: 0.2.5

---

## 可选设置

_如果需要功能，可以添加这些选项。_


### background-color

包装器的背景颜色

**示例**: #F5F5F5


---


### cloneable

如果为**true**，则允许克隆网站。

为了使您的网站可以正确克隆，您必须有一个单独的数据文件夹，以便干净克隆（例如，没有任何博客文章）。要做到这一点，你必须这样做
将 **-default** 后缀添加到数据文件和目录上。在克隆过程中，仅复制具有 **-default** 后缀的目录，后缀将在新站点中被自动删除。


---


### description

您的网站描述，显示在ZeroHello的网站标题下。

**示例**: Decentralized forum demo


---


### domain

您网站的Namecoin域名。 如果用户启用了Zeroname插件，ZeroHello将链接到此。

**示例**: Blog.ZeroNetwork.bit




---


### ignore

不要签署与此模式匹配的文件。

**示例**: `((js|css)/(?!all.(js|css))|data/users/.*)` (ignore all js and css files except all.js and all.css and don't add anything from the `data/users/` directory)

注意: [一些限制](#regular-expression-limitations) 应用于正则表达式中.

---


### includes

在网站中包含另一个content.json。 这通常用于后续管理用户数据的content.json文件。

**示例**:

```python
"includes": {
  "data/users/content.json": {
    "signers": [  # Possible signers address for the file
      "1LSxsKfC9S9TVXGGNSM3vPHjyW82jgCX5f"
    ],
    "signers_required": 1 # The *number* of Valid signs required to accept the file (Multisig possibility),
    "files_allowed": "data.json", # Preg pattern for the allowed files in the include file
    "includes_allowed": false, # Whether nested includes are allowed
    "max_size": 10000, # Max allowed size of included content.json and files it signs (in bytes)
  }
}
```


---


### merged_type

该网站所属的合并类型。

**示例**: `ZeroMe`


---


### optional

Preg模式的可选文件。

**示例**: `(data/mp4/.*|updater/.*)` (data/mp4和updater目录下的所有内容都是可选的)

注意: [一些限制](#regular-expression-limitations) 应用于正则表达式中.

---


### signs_required

接受该文件所需的有效标志**数量**。 允许Multisig功能。


**示例**: 1


---


### title

该网站的标题，在浏览器标题和ZeroHello中可见。

**示例**: ZeroTalk


----


### translate

文件需要翻译。 （在`languages`目录中使用语言json文件）

**示例**: ["index.html", "js/all.js"]


----


### favicon

该网站的图标。 用站点特定的图标替换默认的ZeroNet徽标。 可以是.ico，.png，.svg等。

**示例**: favicon.ico


----


### user_contents

当前目录中允许的用户内容的规则。

Node                   | 描述
                  ---  | ---
**archived**           | 删除早于指定时间戳签名的指定用户内容文件夹(键：文件夹名，值：时间戳)
**archived_before**    | 删除所有签名早于指定时间戳的用户内容文件夹
**cert_signers**       | 接受的域名和有效的签名者地址
**permission_rules**   | 基于签名域名或授权方法的允许文件名和总目录大小
**permissions**        | 每个用户的权限。(false = 禁止的用户)

**示例**:
```python
  "user_contents": {
    "archived": {
      "1165u6pt5mQNFjyhMVwy6azB7bZuQGLA9b": 1523088096
    },
    "archived_before": 1523088096,
    "cert_signers": {
      "zeroid.bit": [ "1iD5ZQJMNXu43w1qLB8sfdHVKppVMduGz" ]
    },
    "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 }
    }
  }
```

注意: [一些限制](#regular-expression-limitations) 应用于正则表达式中.

----


### viewport

视区元标记的内容。 （用于适合移动设备的页面）

**示例**: width=device-width, initial-scale=1.0


----

## 正则表达式限制

为避免[ReDoS](https://en.wikipedia.org/wiki/ReDoS)算法复杂性攻击，以下限制适用于每种模式：

 - 在`*,+,{`的重复字符之前，`.`字符是必需的
 - 单个模式允许最多9次重复
 - 模式的最大长度为255个字符
 
### 示例:

 - `((?!json).)*$` not allowed, because of `)` before the `*` character. Possible fix: `.*(?!json)$`
 - `(.*.epub|.*.jpg|.*.jpeg|.*.png|data/.*.gif|.*.avi|.*.ogg|.*.webm|.*.mp4|.*.mp3|.*.mkv|.*.eot)` not allowed, because it has 12 `.*` repetition patterns. Possible fix: `.*(epub|jpg|jpeg|png|data/gif|avi|ogg|webm|mp4|mp3|mkv|eot)`
