Pull request #1269: tls: hide saved private key

Merge in DNS/adguard-home from 1898-hide-private-key to master

Squashed commit of the following:

commit 542569bbc098541f8e191cc5c1e5509a65fe2c5f
Merge: a07d715f 756c7064
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date:   Fri Aug 27 13:29:15 2021 +0300

    Merge branch 'master' into 1898-hide-private-key

commit a07d715f0f0932fdad4ec3f1e1a265b43809e21b
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date:   Thu Aug 26 19:45:39 2021 +0300

    fix bug

commit 9f2b70719a24aab827c2dc300fc94bf2202527a7
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date:   Thu Aug 26 19:07:17 2021 +0300

    fixes

commit e79f0e620844531a737fff5a88f5c2cffc403f51
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date:   Thu Aug 26 18:35:32 2021 +0300

    more documentation to god of documentation

commit 47790964ed05f50c075f6b6497b1517b0d974bea
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date:   Thu Aug 26 18:23:08 2021 +0300

    changed var named && fixed description

commit d35de5a34eafb3ffbd1148982dd31735a2000377
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date:   Thu Aug 26 18:11:13 2021 +0300

    revert locales

commit 514ab1a5d90039bf9aad1389dd0ed966fd1a7e65
Merge: 5d9b992a 16092e8b
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date:   Thu Aug 26 14:41:27 2021 +0300

    Merge branch 'master' into 1898-hide-private-key

commit 5d9b992a236dec276a46a035509da6938a7da7bf
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date:   Thu Aug 26 14:41:13 2021 +0300

    here we go again

commit 2e7b30df5f19953f4e055394083be62b23028ad6
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date:   Fri Aug 20 17:11:49 2021 +0300

    update deps

commit 5e58c3e22a77c42f321deb9707f34f031b345d75
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date:   Fri Aug 20 17:10:19 2021 +0300

    small fix

commit c2096377de0a8ecf4f36567322ad9171c5fb5ab2
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date:   Fri Aug 20 17:07:45 2021 +0300

    fixes && updated translations

commit ada2d4784e6288b1740b8564b6ffc1ef8f0dcf68
Merge: dc5ce072 550b1798
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date:   Fri Aug 20 13:17:34 2021 +0300

    Merge branch 'master' into 1898-hide-private-key

commit dc5ce0721b5c095ed79f2a302ad90d9616785f93
Author: Dmitriy Seregin <d.seregin@adguard.com>
Date:   Fri Aug 13 20:12:18 2021 +0300

    tls: hide saved private key

    If private key saved as a string, then hide it from the answer to UI
This commit is contained in:
Dmitry Seregin 2021-08-27 13:42:31 +03:00
parent 756c70644d
commit 8454e65cd9
15 changed files with 476 additions and 309 deletions

View File

@ -44,6 +44,7 @@ and this project adheres to
### Changed ### Changed
- Don't show the private key in API responses if it was saved as a string ([#1898]).
- Better OpenWrt detection ([#3435]). - Better OpenWrt detection ([#3435]).
- DNS-over-HTTPS queries that come from HTTP proxies in the `trusted_proxies` - DNS-over-HTTPS queries that come from HTTP proxies in the `trusted_proxies`
list now use the real IP address of the client instead of the address of the list now use the real IP address of the client instead of the address of the
@ -95,6 +96,7 @@ and this project adheres to
[#1381]: https://github.com/AdguardTeam/AdGuardHome/issues/1381 [#1381]: https://github.com/AdguardTeam/AdGuardHome/issues/1381
[#1691]: https://github.com/AdguardTeam/AdGuardHome/issues/1691 [#1691]: https://github.com/AdguardTeam/AdGuardHome/issues/1691
[#1898]: https://github.com/AdguardTeam/AdGuardHome/issues/1898
[#2141]: https://github.com/AdguardTeam/AdGuardHome/issues/2141 [#2141]: https://github.com/AdguardTeam/AdGuardHome/issues/2141
[#2145]: https://github.com/AdguardTeam/AdGuardHome/issues/2145 [#2145]: https://github.com/AdguardTeam/AdGuardHome/issues/2145
[#2280]: https://github.com/AdguardTeam/AdGuardHome/issues/2280 [#2280]: https://github.com/AdguardTeam/AdGuardHome/issues/2280

619
client/package-lock.json generated vendored
View File

@ -70,15 +70,6 @@
"ms": "^2.1.1" "ms": "^2.1.1"
} }
}, },
"json5": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
"integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
"dev": true,
"requires": {
"minimist": "^1.2.5"
}
},
"ms": { "ms": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@ -1188,16 +1179,6 @@
"regenerator-runtime": "^0.13.4" "regenerator-runtime": "^0.13.4"
} }
}, },
"@babel/runtime-corejs3": {
"version": "7.9.6",
"resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.9.6.tgz",
"integrity": "sha512-6toWAfaALQjt3KMZQc6fABqZwUDDuWzz+cAfPhqyEnzxvdWOAkjwPNxgF8xlmo7OWLsSjaKjsskpKHRLaMArOA==",
"dev": true,
"requires": {
"core-js-pure": "^3.0.0",
"regenerator-runtime": "^0.13.4"
}
},
"@babel/template": { "@babel/template": {
"version": "7.8.6", "version": "7.8.6",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz",
@ -1909,11 +1890,6 @@
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true "dev": true
}, },
"kind-of": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
"integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
},
"micromatch": { "micromatch": {
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
@ -2875,13 +2851,15 @@
"dev": true "dev": true
}, },
"array-includes": { "array-includes": {
"version": "3.1.1", "version": "3.1.3",
"resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz",
"integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==",
"dev": true, "dev": true,
"requires": { "requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3", "define-properties": "^1.1.3",
"es-abstract": "^1.17.0", "es-abstract": "^1.18.0-next.2",
"get-intrinsic": "^1.1.1",
"is-string": "^1.0.5" "is-string": "^1.0.5"
} }
}, },
@ -2907,13 +2885,26 @@
"dev": true "dev": true
}, },
"array.prototype.flat": { "array.prototype.flat": {
"version": "1.2.3", "version": "1.2.4",
"resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz",
"integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==",
"dev": true, "dev": true,
"requires": { "requires": {
"call-bind": "^1.0.0",
"define-properties": "^1.1.3", "define-properties": "^1.1.3",
"es-abstract": "^1.17.0-next.1" "es-abstract": "^1.18.0-next.1"
}
},
"array.prototype.flatmap": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz",
"integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==",
"dev": true,
"requires": {
"call-bind": "^1.0.0",
"define-properties": "^1.1.3",
"es-abstract": "^1.18.0-next.1",
"function-bind": "^1.1.1"
} }
}, },
"arrify": { "arrify": {
@ -3197,11 +3188,6 @@
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true "dev": true
}, },
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
},
"supports-color": { "supports-color": {
"version": "7.1.0", "version": "7.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
@ -3863,6 +3849,15 @@
"unset-value": "^1.0.0" "unset-value": "^1.0.0"
} }
}, },
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"requires": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
}
},
"caller-callsite": { "caller-callsite": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
@ -4325,12 +4320,6 @@
"integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
"dev": true "dev": true
}, },
"contains-path": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
"integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
"dev": true
},
"content-disposition": { "content-disposition": {
"version": "0.5.3", "version": "0.5.3",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
@ -4550,12 +4539,6 @@
} }
} }
}, },
"core-js-pure": {
"version": "3.6.5",
"resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz",
"integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==",
"dev": true
},
"core-util-is": { "core-util-is": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
@ -5421,21 +5404,27 @@
} }
}, },
"es-abstract": { "es-abstract": {
"version": "1.17.5", "version": "1.18.5",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz",
"integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==",
"requires": { "requires": {
"call-bind": "^1.0.2",
"es-to-primitive": "^1.2.1", "es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1", "function-bind": "^1.1.1",
"get-intrinsic": "^1.1.1",
"has": "^1.0.3", "has": "^1.0.3",
"has-symbols": "^1.0.1", "has-symbols": "^1.0.2",
"is-callable": "^1.1.5", "internal-slot": "^1.0.3",
"is-regex": "^1.0.5", "is-callable": "^1.2.3",
"object-inspect": "^1.7.0", "is-negative-zero": "^2.0.1",
"is-regex": "^1.1.3",
"is-string": "^1.0.6",
"object-inspect": "^1.11.0",
"object-keys": "^1.1.1", "object-keys": "^1.1.1",
"object.assign": "^4.1.0", "object.assign": "^4.1.2",
"string.prototype.trimleft": "^2.1.1", "string.prototype.trimend": "^1.0.4",
"string.prototype.trimright": "^2.1.1" "string.prototype.trimstart": "^1.0.4",
"unbox-primitive": "^1.0.1"
} }
}, },
"es-to-primitive": { "es-to-primitive": {
@ -5658,22 +5647,38 @@
} }
}, },
"eslint-import-resolver-node": { "eslint-import-resolver-node": {
"version": "0.3.3", "version": "0.3.6",
"resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
"integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==", "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
"dev": true, "dev": true,
"requires": { "requires": {
"debug": "^2.6.9", "debug": "^3.2.7",
"resolve": "^1.13.1" "resolve": "^1.20.0"
}, },
"dependencies": { "dependencies": {
"debug": { "debug": {
"version": "2.6.9", "version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"ms": "2.0.0" "ms": "^2.1.1"
}
},
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true
},
"resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
"dev": true,
"requires": {
"is-core-module": "^2.2.0",
"path-parse": "^1.0.6"
} }
} }
} }
@ -5741,15 +5746,6 @@
"path-exists": "^4.0.0" "path-exists": "^4.0.0"
} }
}, },
"json5": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
"integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
"dev": true,
"requires": {
"minimist": "^1.2.5"
}
},
"loader-utils": { "loader-utils": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
@ -5837,44 +5833,53 @@
} }
}, },
"eslint-module-utils": { "eslint-module-utils": {
"version": "2.6.0", "version": "2.6.2",
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz",
"integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"debug": "^2.6.9", "debug": "^3.2.7",
"pkg-dir": "^2.0.0" "pkg-dir": "^2.0.0"
}, },
"dependencies": { "dependencies": {
"debug": { "debug": {
"version": "2.6.9", "version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"ms": "2.0.0" "ms": "^2.1.1"
} }
},
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true
} }
} }
}, },
"eslint-plugin-import": { "eslint-plugin-import": {
"version": "2.20.2", "version": "2.24.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.1.tgz",
"integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==", "integrity": "sha512-KSFWhNxPH8OGJwpRJJs+Z7I0a13E2iFQZJIvSnCu6KUs4qmgAm3xN9GYBCSoiGWmwA7gERZPXqYQjcoCROnYhQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"array-includes": "^3.0.3", "array-includes": "^3.1.3",
"array.prototype.flat": "^1.2.1", "array.prototype.flat": "^1.2.4",
"contains-path": "^0.1.0",
"debug": "^2.6.9", "debug": "^2.6.9",
"doctrine": "1.5.0", "doctrine": "^2.1.0",
"eslint-import-resolver-node": "^0.3.2", "eslint-import-resolver-node": "^0.3.6",
"eslint-module-utils": "^2.4.1", "eslint-module-utils": "^2.6.2",
"find-up": "^2.0.0",
"has": "^1.0.3", "has": "^1.0.3",
"is-core-module": "^2.6.0",
"minimatch": "^3.0.4", "minimatch": "^3.0.4",
"object.values": "^1.1.0", "object.values": "^1.1.4",
"read-pkg-up": "^2.0.0", "pkg-up": "^2.0.0",
"resolve": "^1.12.0" "read-pkg-up": "^3.0.0",
"resolve": "^1.20.0",
"tsconfig-paths": "^3.10.1"
}, },
"dependencies": { "dependencies": {
"debug": { "debug": {
@ -5887,20 +5892,23 @@
} }
}, },
"doctrine": { "doctrine": {
"version": "1.5.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
"integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
"dev": true, "dev": true,
"requires": { "requires": {
"esutils": "^2.0.2", "esutils": "^2.0.2"
"isarray": "^1.0.0"
} }
}, },
"isarray": { "resolve": {
"version": "1.0.0", "version": "1.20.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
"dev": true "dev": true,
"requires": {
"is-core-module": "^2.2.0",
"path-parse": "^1.0.6"
}
} }
} }
}, },
@ -5930,22 +5938,23 @@
} }
}, },
"eslint-plugin-react": { "eslint-plugin-react": {
"version": "7.20.0", "version": "7.24.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz",
"integrity": "sha512-rqe1abd0vxMjmbPngo4NaYxTcR3Y4Hrmc/jg4T+sYz63yqlmJRknpEQfmWY+eDWPuMmix6iUIK+mv0zExjeLgA==", "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"array-includes": "^3.1.1", "array-includes": "^3.1.3",
"array.prototype.flatmap": "^1.2.4",
"doctrine": "^2.1.0", "doctrine": "^2.1.0",
"has": "^1.0.3", "has": "^1.0.3",
"jsx-ast-utils": "^2.2.3", "jsx-ast-utils": "^2.4.1 || ^3.0.0",
"object.entries": "^1.1.1", "minimatch": "^3.0.4",
"object.fromentries": "^2.0.2", "object.entries": "^1.1.4",
"object.values": "^1.1.1", "object.fromentries": "^2.0.4",
"object.values": "^1.1.4",
"prop-types": "^15.7.2", "prop-types": "^15.7.2",
"resolve": "^1.15.1", "resolve": "^2.0.0-next.3",
"string.prototype.matchall": "^4.0.2", "string.prototype.matchall": "^4.0.5"
"xregexp": "^4.3.0"
}, },
"dependencies": { "dependencies": {
"doctrine": { "doctrine": {
@ -5957,6 +5966,16 @@
"esutils": "^2.0.2" "esutils": "^2.0.2"
} }
}, },
"jsx-ast-utils": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz",
"integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==",
"dev": true,
"requires": {
"array-includes": "^3.1.2",
"object.assign": "^4.1.2"
}
},
"prop-types": { "prop-types": {
"version": "15.7.2", "version": "15.7.2",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
@ -5967,6 +5986,16 @@
"object-assign": "^4.1.1", "object-assign": "^4.1.1",
"react-is": "^16.8.1" "react-is": "^16.8.1"
} }
},
"resolve": {
"version": "2.0.0-next.3",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz",
"integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==",
"dev": true,
"requires": {
"is-core-module": "^2.2.0",
"path-parse": "^1.0.6"
}
} }
} }
}, },
@ -6883,6 +6912,16 @@
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true "dev": true
}, },
"get-intrinsic": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
"integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.1"
}
},
"get-package-type": { "get-package-type": {
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
@ -7191,15 +7230,28 @@
"function-bind": "^1.1.1" "function-bind": "^1.1.1"
} }
}, },
"has-bigints": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
"integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA=="
},
"has-flag": { "has-flag": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
}, },
"has-symbols": { "has-symbols": {
"version": "1.0.1", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
"integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
},
"has-tostringtag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
"integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
"requires": {
"has-symbols": "^1.0.2"
}
}, },
"has-value": { "has-value": {
"version": "1.0.0", "version": "1.0.0",
@ -7824,14 +7876,13 @@
} }
}, },
"internal-slot": { "internal-slot": {
"version": "1.0.2", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
"integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
"dev": true,
"requires": { "requires": {
"es-abstract": "^1.17.0-next.1", "get-intrinsic": "^1.1.0",
"has": "^1.0.3", "has": "^1.0.3",
"side-channel": "^1.0.2" "side-channel": "^1.0.4"
} }
}, },
"interpret": { "interpret": {
@ -7929,6 +7980,14 @@
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
}, },
"is-bigint": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
"integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
"requires": {
"has-bigints": "^1.0.1"
}
},
"is-binary-path": { "is-binary-path": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
@ -7938,6 +7997,15 @@
"binary-extensions": "^1.0.0" "binary-extensions": "^1.0.0"
} }
}, },
"is-boolean-object": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
"integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
"requires": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
}
},
"is-buffer": { "is-buffer": {
"version": "1.1.6", "version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
@ -7945,9 +8013,9 @@
"dev": true "dev": true
}, },
"is-callable": { "is-callable": {
"version": "1.1.5", "version": "1.2.4",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
"integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w=="
}, },
"is-ci": { "is-ci": {
"version": "2.0.0", "version": "2.0.0",
@ -7958,6 +8026,15 @@
"ci-info": "^2.0.0" "ci-info": "^2.0.0"
} }
}, },
"is-core-module": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
"integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==",
"dev": true,
"requires": {
"has": "^1.0.3"
}
},
"is-data-descriptor": { "is-data-descriptor": {
"version": "0.1.4", "version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
@ -8060,6 +8137,11 @@
"integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
"dev": true "dev": true
}, },
"is-negative-zero": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
"integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w=="
},
"is-number": { "is-number": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
@ -8080,6 +8162,14 @@
} }
} }
}, },
"is-number-object": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
"integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
"requires": {
"has-tostringtag": "^1.0.0"
}
},
"is-path-cwd": { "is-path-cwd": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
@ -8131,11 +8221,12 @@
"integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
}, },
"is-regex": { "is-regex": {
"version": "1.0.5", "version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
"integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
"requires": { "requires": {
"has": "^1.0.3" "call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
} }
}, },
"is-regexp": { "is-regexp": {
@ -8150,10 +8241,12 @@
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
}, },
"is-string": { "is-string": {
"version": "1.0.5", "version": "1.0.7",
"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
"integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
"dev": true "requires": {
"has-tostringtag": "^1.0.0"
}
}, },
"is-symbol": { "is-symbol": {
"version": "1.0.3", "version": "1.0.3",
@ -10121,9 +10214,9 @@
"dev": true "dev": true
}, },
"json5": { "json5": {
"version": "2.1.3", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
"integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
"dev": true, "dev": true,
"requires": { "requires": {
"minimist": "^1.2.5" "minimist": "^1.2.5"
@ -10237,24 +10330,25 @@
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
}, },
"load-json-file": { "load-json-file": {
"version": "2.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
"integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
"dev": true, "dev": true,
"requires": { "requires": {
"graceful-fs": "^4.1.2", "graceful-fs": "^4.1.2",
"parse-json": "^2.2.0", "parse-json": "^4.0.0",
"pify": "^2.0.0", "pify": "^3.0.0",
"strip-bom": "^3.0.0" "strip-bom": "^3.0.0"
}, },
"dependencies": { "dependencies": {
"parse-json": { "parse-json": {
"version": "2.2.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
"integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
"dev": true, "dev": true,
"requires": { "requires": {
"error-ex": "^1.2.0" "error-ex": "^1.3.1",
"json-parse-better-errors": "^1.0.1"
} }
} }
} }
@ -11327,9 +11421,9 @@
"dev": true "dev": true
}, },
"object-inspect": { "object-inspect": {
"version": "1.7.0", "version": "1.11.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
"integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg=="
}, },
"object-is": { "object-is": {
"version": "1.1.2", "version": "1.1.2",
@ -11355,37 +11449,36 @@
} }
}, },
"object.assign": { "object.assign": {
"version": "4.1.0", "version": "4.1.2",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
"integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
"requires": { "requires": {
"define-properties": "^1.1.2", "call-bind": "^1.0.0",
"function-bind": "^1.1.1", "define-properties": "^1.1.3",
"has-symbols": "^1.0.0", "has-symbols": "^1.0.1",
"object-keys": "^1.0.11" "object-keys": "^1.1.1"
} }
}, },
"object.entries": { "object.entries": {
"version": "1.1.1", "version": "1.1.4",
"resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.1.tgz", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz",
"integrity": "sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==", "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==",
"dev": true, "dev": true,
"requires": { "requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3", "define-properties": "^1.1.3",
"es-abstract": "^1.17.0-next.1", "es-abstract": "^1.18.2"
"function-bind": "^1.1.1",
"has": "^1.0.3"
} }
}, },
"object.fromentries": { "object.fromentries": {
"version": "2.0.2", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz",
"integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3", "define-properties": "^1.1.3",
"es-abstract": "^1.17.0-next.1", "es-abstract": "^1.18.0-next.2",
"function-bind": "^1.1.1",
"has": "^1.0.3" "has": "^1.0.3"
} }
}, },
@ -11409,15 +11502,14 @@
} }
}, },
"object.values": { "object.values": {
"version": "1.1.1", "version": "1.1.4",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz",
"integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==",
"dev": true, "dev": true,
"requires": { "requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3", "define-properties": "^1.1.3",
"es-abstract": "^1.17.0-next.1", "es-abstract": "^1.18.2"
"function-bind": "^1.1.1",
"has": "^1.0.3"
} }
}, },
"obuf": { "obuf": {
@ -11791,9 +11883,9 @@
"dev": true "dev": true
}, },
"pify": { "pify": {
"version": "2.3.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
"dev": true "dev": true
}, },
"pinkie": { "pinkie": {
@ -12718,35 +12810,35 @@
} }
}, },
"read-pkg": { "read-pkg": {
"version": "2.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
"integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
"dev": true, "dev": true,
"requires": { "requires": {
"load-json-file": "^2.0.0", "load-json-file": "^4.0.0",
"normalize-package-data": "^2.3.2", "normalize-package-data": "^2.3.2",
"path-type": "^2.0.0" "path-type": "^3.0.0"
}, },
"dependencies": { "dependencies": {
"path-type": { "path-type": {
"version": "2.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
"integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
"dev": true, "dev": true,
"requires": { "requires": {
"pify": "^2.0.0" "pify": "^3.0.0"
} }
} }
} }
}, },
"read-pkg-up": { "read-pkg-up": {
"version": "2.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
"integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
"dev": true, "dev": true,
"requires": { "requires": {
"find-up": "^2.0.0", "find-up": "^2.0.0",
"read-pkg": "^2.0.0" "read-pkg": "^3.0.0"
} }
}, },
"readable-stream": { "readable-stream": {
@ -12894,12 +12986,12 @@
} }
}, },
"regexp.prototype.flags": { "regexp.prototype.flags": {
"version": "1.3.0", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz",
"integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==",
"requires": { "requires": {
"define-properties": "^1.1.3", "call-bind": "^1.0.2",
"es-abstract": "^1.17.0-next.1" "define-properties": "^1.1.3"
} }
}, },
"regexpp": { "regexpp": {
@ -13572,13 +13664,13 @@
"optional": true "optional": true
}, },
"side-channel": { "side-channel": {
"version": "1.0.2", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"dev": true,
"requires": { "requires": {
"es-abstract": "^1.17.0-next.1", "call-bind": "^1.0.0",
"object-inspect": "^1.7.0" "get-intrinsic": "^1.0.2",
"object-inspect": "^1.9.0"
} }
}, },
"signal-exit": { "signal-exit": {
@ -14101,6 +14193,15 @@
"resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
"integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY="
}, },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
"safe-buffer": "~5.1.0"
}
},
"string-length": { "string-length": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz",
@ -14163,64 +14264,37 @@
} }
}, },
"string.prototype.matchall": { "string.prototype.matchall": {
"version": "4.0.2", "version": "4.0.5",
"resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz",
"integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3", "define-properties": "^1.1.3",
"es-abstract": "^1.17.0", "es-abstract": "^1.18.2",
"has-symbols": "^1.0.1", "get-intrinsic": "^1.1.1",
"internal-slot": "^1.0.2", "has-symbols": "^1.0.2",
"regexp.prototype.flags": "^1.3.0", "internal-slot": "^1.0.3",
"side-channel": "^1.0.2" "regexp.prototype.flags": "^1.3.1",
"side-channel": "^1.0.4"
} }
}, },
"string.prototype.trimend": { "string.prototype.trimend": {
"version": "1.0.1", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
"integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
"requires": { "requires": {
"define-properties": "^1.1.3", "call-bind": "^1.0.2",
"es-abstract": "^1.17.5" "define-properties": "^1.1.3"
}
},
"string.prototype.trimleft": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
"integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
"requires": {
"define-properties": "^1.1.3",
"es-abstract": "^1.17.5",
"string.prototype.trimstart": "^1.0.0"
}
},
"string.prototype.trimright": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
"integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
"requires": {
"define-properties": "^1.1.3",
"es-abstract": "^1.17.5",
"string.prototype.trimend": "^1.0.0"
} }
}, },
"string.prototype.trimstart": { "string.prototype.trimstart": {
"version": "1.0.1", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
"integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
"requires": { "requires": {
"define-properties": "^1.1.3", "call-bind": "^1.0.2",
"es-abstract": "^1.17.5" "define-properties": "^1.1.3"
}
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
"safe-buffer": "~5.1.0"
} }
}, },
"stringify-entities": { "stringify-entities": {
@ -15111,6 +15185,17 @@
"integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
"dev": true "dev": true
}, },
"tsconfig-paths": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz",
"integrity": "sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q==",
"dev": true,
"requires": {
"json5": "^2.2.0",
"minimist": "^1.2.0",
"strip-bom": "^3.0.0"
}
},
"tslib": { "tslib": {
"version": "1.13.0", "version": "1.13.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
@ -15194,6 +15279,17 @@
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz",
"integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==" "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q=="
}, },
"unbox-primitive": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
"integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
"requires": {
"function-bind": "^1.1.1",
"has-bigints": "^1.0.1",
"has-symbols": "^1.0.2",
"which-boxed-primitive": "^1.0.2"
}
},
"unherit": { "unherit": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz",
@ -16247,6 +16343,18 @@
"isexe": "^2.0.0" "isexe": "^2.0.0"
} }
}, },
"which-boxed-primitive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
"integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
"requires": {
"is-bigint": "^1.0.1",
"is-boolean-object": "^1.1.0",
"is-number-object": "^1.0.4",
"is-string": "^1.0.5",
"is-symbol": "^1.0.3"
}
},
"which-module": { "which-module": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
@ -16361,15 +16469,6 @@
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
"dev": true "dev": true
}, },
"xregexp": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.3.0.tgz",
"integrity": "sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==",
"dev": true,
"requires": {
"@babel/runtime-corejs3": "^7.8.3"
}
},
"xtend": { "xtend": {
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",

4
client/package.json vendored
View File

@ -64,9 +64,9 @@
"eslint-config-airbnb": "^18.1.0", "eslint-config-airbnb": "^18.1.0",
"eslint-import-resolver-webpack": "^0.12.1", "eslint-import-resolver-webpack": "^0.12.1",
"eslint-loader": "^4.0.2", "eslint-loader": "^4.0.2",
"eslint-plugin-import": "^2.20.2", "eslint-plugin-import": "^2.22.1",
"eslint-plugin-jsx-a11y": "^6.2.3", "eslint-plugin-jsx-a11y": "^6.2.3",
"eslint-plugin-react": "^7.20.0", "eslint-plugin-react": "^7.24.0",
"eslint-plugin-react-hooks": "^2.5.0", "eslint-plugin-react-hooks": "^2.5.0",
"file-loader": "6.0.0", "file-loader": "6.0.0",
"html-webpack-plugin": "^4.3.0", "html-webpack-plugin": "^4.3.0",

View File

@ -613,5 +613,6 @@
"port_53_faq_link": "Port 53 is often occupied by \"DNSStubListener\" or \"systemd-resolved\" services. Please read <0>this instruction</0> on how to resolve this.", "port_53_faq_link": "Port 53 is often occupied by \"DNSStubListener\" or \"systemd-resolved\" services. Please read <0>this instruction</0> on how to resolve this.",
"adg_will_drop_dns_queries": "AdGuard Home will be dropping all DNS queries from this client.", "adg_will_drop_dns_queries": "AdGuard Home will be dropping all DNS queries from this client.",
"client_not_in_allowed_clients": "The client is not allowed because it is not in the \"Allowed clients\" list.", "client_not_in_allowed_clients": "The client is not allowed because it is not in the \"Allowed clients\" list.",
"experimental": "Experimental" "experimental": "Experimental",
"use_saved_key": "Use the previously saved key"
} }

View File

@ -451,7 +451,6 @@ export const findActiveDhcp = (name) => async (dispatch, getState) => {
dispatch(addErrorToast({ error: 'dhcp_static_ip_error' })); dispatch(addErrorToast({ error: 'dhcp_static_ip_error' }));
} }
if (isError) { if (isError) {
dispatch(addErrorToast({ error: 'dhcp_error' })); dispatch(addErrorToast({ error: 'dhcp_error' }));
} }

View File

@ -39,7 +39,6 @@ import CustomRules from '../../containers/CustomRules';
import Services from '../Filters/Services'; import Services from '../Filters/Services';
import Logs from '../Logs'; import Logs from '../Logs';
const ROUTES = [ const ROUTES = [
{ {
path: MENU_URLS.root, path: MENU_URLS.root,

View File

@ -17,7 +17,6 @@ const renderLink = ({ url, name }) => <a
<strong>{name}</strong> <strong>{name}</strong>
</a>; </a>;
const getTrackerInfo = (trackerData) => [{ const getTrackerInfo = (trackerData) => [{
key: 'name_table_header', key: 'name_table_header',
value: trackerData, value: trackerData,

View File

@ -20,7 +20,6 @@ const renderInterfaces = (interfaces) => Object.keys(interfaces)
return <option value={name} key={name}>{optionContent}</option>; return <option value={name} key={name}>{optionContent}</option>;
}); });
const getInterfaceValues = ({ const getInterfaceValues = ({
gateway_ip, gateway_ip,
hardware_address, hardware_address,

View File

@ -18,7 +18,7 @@ import i18n from '../../../i18n';
import KeyStatus from './KeyStatus'; import KeyStatus from './KeyStatus';
import CertificateStatus from './CertificateStatus'; import CertificateStatus from './CertificateStatus';
import { import {
DNS_OVER_QUIC_PORT, DNS_OVER_TLS_PORT, FORM_NAME, STANDARD_HTTPS_PORT, DNS_OVER_QUIC_PORT, DNS_OVER_TLS_PORT, FORM_NAME, STANDARD_HTTPS_PORT, ENCRYPTION_SOURCE,
} from '../../../helpers/constants'; } from '../../../helpers/constants';
const validate = (values) => { const validate = (values) => {
@ -46,6 +46,7 @@ const clearFields = (change, setTlsConfig, t) => {
server_name: '', server_name: '',
force_https: false, force_https: false,
enabled: false, enabled: false,
private_key_saved: false,
}; };
// eslint-disable-next-line no-alert // eslint-disable-next-line no-alert
if (window.confirm(t('encryption_reset'))) { if (window.confirm(t('encryption_reset'))) {
@ -83,6 +84,7 @@ let Form = (props) => {
setTlsConfig, setTlsConfig,
certificateSource, certificateSource,
privateKeySource, privateKeySource,
privateKeySaved,
} = props; } = props;
const isSavingDisabled = invalid const isSavingDisabled = invalid
@ -265,7 +267,7 @@ let Form = (props) => {
</div> </div>
</div> </div>
{certificateSource === 'content' && ( {certificateSource === ENCRYPTION_SOURCE.CONTENT && (
<Field <Field
id="certificate_chain" id="certificate_chain"
name="certificate_chain" name="certificate_chain"
@ -277,7 +279,7 @@ let Form = (props) => {
disabled={!isEnabled} disabled={!isEnabled}
/> />
)} )}
{certificateSource === 'path' && ( {certificateSource === ENCRYPTION_SOURCE.PATH && (
<Field <Field
id="certificate_path" id="certificate_path"
name="certificate_path" name="certificate_path"
@ -318,7 +320,7 @@ let Form = (props) => {
component={renderRadioField} component={renderRadioField}
type="radio" type="radio"
className="form-control mr-2" className="form-control mr-2"
value="path" value={ENCRYPTION_SOURCE.PATH}
placeholder={t('encryption_key_source_path')} placeholder={t('encryption_key_source_path')}
disabled={!isEnabled} disabled={!isEnabled}
/> />
@ -327,28 +329,15 @@ let Form = (props) => {
component={renderRadioField} component={renderRadioField}
type="radio" type="radio"
className="form-control mr-2" className="form-control mr-2"
value="content" value={ENCRYPTION_SOURCE.CONTENT}
placeholder={t('encryption_key_source_content')} placeholder={t('encryption_key_source_content')}
disabled={!isEnabled} disabled={!isEnabled}
/> />
</div> </div>
</div> </div>
{privateKeySource === 'content' && ( {privateKeySource === ENCRYPTION_SOURCE.PATH && (
<Field <Field
id="private_key"
name="private_key"
component="textarea"
type="text"
className="form-control form-control--textarea"
placeholder={t('encryption_key_input')}
onChange={handleChange}
disabled={!isEnabled}
/>
)}
{privateKeySource === 'path' && (
<Field
id="private_key_path"
name="private_key_path" name="private_key_path"
component={renderInputField} component={renderInputField}
type="text" type="text"
@ -358,6 +347,36 @@ let Form = (props) => {
disabled={!isEnabled} disabled={!isEnabled}
/> />
)} )}
{privateKeySource === ENCRYPTION_SOURCE.CONTENT && [
<Field
key="private_key_saved"
name="private_key_saved"
type="checkbox"
className="form__group form__group--settings mb-2"
component={CheckboxField}
disabled={!isEnabled}
placeholder={t('use_saved_key')}
onChange={(event) => {
if (event.target.checked) {
change('private_key', '');
}
if (handleChange) {
handleChange(event);
}
}}
/>,
<Field
id="private_key"
key="private_key"
name="private_key"
component="textarea"
type="text"
className="form-control form-control--textarea"
placeholder={t('encryption_key_input')}
onChange={handleChange}
disabled={!isEnabled || privateKeySaved}
/>,
]}
</div> </div>
<div className="form__status"> <div className="form__status">
{(privateKey || privateKeyPath) && ( {(privateKey || privateKeyPath) && (
@ -422,6 +441,7 @@ Form.propTypes = {
setTlsConfig: PropTypes.func.isRequired, setTlsConfig: PropTypes.func.isRequired,
certificateSource: PropTypes.string, certificateSource: PropTypes.string,
privateKeySource: PropTypes.string, privateKeySource: PropTypes.string,
privateKeySaved: PropTypes.bool,
}; };
const selector = formValueSelector(FORM_NAME.ENCRYPTION); const selector = formValueSelector(FORM_NAME.ENCRYPTION);
@ -434,6 +454,7 @@ Form = connect((state) => {
const privateKeyPath = selector(state, 'private_key_path'); const privateKeyPath = selector(state, 'private_key_path');
const certificateSource = selector(state, 'certificate_source'); const certificateSource = selector(state, 'certificate_source');
const privateKeySource = selector(state, 'key_source'); const privateKeySource = selector(state, 'key_source');
const privateKeySaved = selector(state, 'private_key_saved');
return { return {
isEnabled, isEnabled,
certificateChain, certificateChain,
@ -442,6 +463,7 @@ Form = connect((state) => {
privateKeyPath, privateKeyPath,
certificateSource, certificateSource,
privateKeySource, privateKeySource,
privateKeySaved,
}; };
})(Form); })(Form);

View File

@ -29,9 +29,13 @@ class Encryption extends Component {
}, DEBOUNCE_TIMEOUT); }, DEBOUNCE_TIMEOUT);
getInitialValues = (data) => { getInitialValues = (data) => {
const { certificate_chain, private_key } = data; const { certificate_chain, private_key, private_key_saved } = data;
const certificate_source = certificate_chain ? 'content' : 'path'; const certificate_source = certificate_chain
const key_source = private_key ? 'content' : 'path'; ? ENCRYPTION_SOURCE.CONTENT
: ENCRYPTION_SOURCE.PATH;
const key_source = private_key || private_key_saved
? ENCRYPTION_SOURCE.CONTENT
: ENCRYPTION_SOURCE.PATH;
return { return {
...data, ...data,
@ -41,7 +45,9 @@ class Encryption extends Component {
}; };
getSubmitValues = (values) => { getSubmitValues = (values) => {
const { certificate_source, key_source, ...config } = values; const {
certificate_source, key_source, private_key_saved, ...config
} = values;
if (certificate_source === ENCRYPTION_SOURCE.PATH) { if (certificate_source === ENCRYPTION_SOURCE.PATH) {
config.certificate_chain = ''; config.certificate_chain = '';
@ -49,10 +55,15 @@ class Encryption extends Component {
config.certificate_path = ''; config.certificate_path = '';
} }
if (values.key_source === ENCRYPTION_SOURCE.PATH) { if (key_source === ENCRYPTION_SOURCE.PATH) {
config.private_key = ''; config.private_key = '';
} else { } else {
config.private_key_path = ''; config.private_key_path = '';
if (private_key_saved) {
config.private_key = '';
config.private_key_saved = private_key_saved;
}
} }
return config; return config;
@ -71,6 +82,7 @@ class Encryption extends Component {
private_key, private_key,
certificate_path, certificate_path,
private_key_path, private_key_path,
private_key_saved,
} = encryption; } = encryption;
const initialValues = this.getInitialValues({ const initialValues = this.getInitialValues({
@ -84,6 +96,7 @@ class Encryption extends Component {
private_key, private_key,
certificate_path, certificate_path,
private_key_path, private_key_path,
private_key_saved,
}); });
return ( return (

View File

@ -1,3 +1,4 @@
// eslint-disable-next-line import/no-extraneous-dependencies
import twosky from 'MainRoot/.twosky.json'; import twosky from 'MainRoot/.twosky.json';
export const { export const {

View File

@ -47,7 +47,6 @@ Submit = connect((state) => {
}; };
})(Submit); })(Submit);
export default flow([ export default flow([
withTranslation(), withTranslation(),
reduxForm({ reduxForm({

View File

@ -211,13 +211,24 @@ type tlsConfigStatus struct {
// field ordering is important -- yaml fields will mirror ordering from here // field ordering is important -- yaml fields will mirror ordering from here
type tlsConfig struct { type tlsConfig struct {
tlsConfigStatus `json:",inline"` tlsConfigStatus `json:",inline"`
tlsConfigSettingsExt `json:",inline"`
}
// tlsConfigSettingsExt is used to (un)marshal PrivateKeySaved to ensure that
// clients don't send and receive previously saved private keys.
type tlsConfigSettingsExt struct {
tlsConfigSettings `json:",inline"` tlsConfigSettings `json:",inline"`
// If private key saved as a string, we set this flag to true
// and omit key from answer.
PrivateKeySaved bool `yaml:"-" json:"private_key_saved,inline"`
} }
func (t *TLSMod) handleTLSStatus(w http.ResponseWriter, _ *http.Request) { func (t *TLSMod) handleTLSStatus(w http.ResponseWriter, _ *http.Request) {
t.confLock.Lock() t.confLock.Lock()
data := tlsConfig{ data := tlsConfig{
tlsConfigSettingsExt: tlsConfigSettingsExt{
tlsConfigSettings: t.conf, tlsConfigSettings: t.conf,
},
tlsConfigStatus: t.status, tlsConfigStatus: t.status,
} }
t.confLock.Unlock() t.confLock.Unlock()
@ -231,18 +242,22 @@ func (t *TLSMod) handleTLSValidate(w http.ResponseWriter, r *http.Request) {
return return
} }
if setts.PrivateKeySaved {
setts.PrivateKey = t.conf.PrivateKey
}
if !WebCheckPortAvailable(setts.PortHTTPS) { if !WebCheckPortAvailable(setts.PortHTTPS) {
httpError(w, http.StatusBadRequest, "port %d is not available, cannot enable HTTPS on it", setts.PortHTTPS) httpError(w, http.StatusBadRequest, "port %d is not available, cannot enable HTTPS on it", setts.PortHTTPS)
return return
} }
status := tlsConfigStatus{} status := tlsConfigStatus{}
if tlsLoadConfig(&setts, &status) { if tlsLoadConfig(&setts.tlsConfigSettings, &status) {
status = validateCertificates(string(setts.CertificateChainData), string(setts.PrivateKeyData), setts.ServerName) status = validateCertificates(string(setts.CertificateChainData), string(setts.PrivateKeyData), setts.ServerName)
} }
data := tlsConfig{ data := tlsConfig{
tlsConfigSettings: setts, tlsConfigSettingsExt: setts,
tlsConfigStatus: status, tlsConfigStatus: status,
} }
marshalTLS(w, data) marshalTLS(w, data)
@ -290,15 +305,19 @@ func (t *TLSMod) handleTLSConfigure(w http.ResponseWriter, r *http.Request) {
return return
} }
if data.PrivateKeySaved {
data.PrivateKey = t.conf.PrivateKey
}
if !WebCheckPortAvailable(data.PortHTTPS) { if !WebCheckPortAvailable(data.PortHTTPS) {
httpError(w, http.StatusBadRequest, "port %d is not available, cannot enable HTTPS on it", data.PortHTTPS) httpError(w, http.StatusBadRequest, "port %d is not available, cannot enable HTTPS on it", data.PortHTTPS)
return return
} }
status := tlsConfigStatus{} status := tlsConfigStatus{}
if !tlsLoadConfig(&data, &status) { if !tlsLoadConfig(&data.tlsConfigSettings, &status) {
data2 := tlsConfig{ data2 := tlsConfig{
tlsConfigSettings: data, tlsConfigSettingsExt: data,
tlsConfigStatus: t.status, tlsConfigStatus: t.status,
} }
marshalTLS(w, data2) marshalTLS(w, data2)
@ -308,7 +327,7 @@ func (t *TLSMod) handleTLSConfigure(w http.ResponseWriter, r *http.Request) {
status = validateCertificates(string(data.CertificateChainData), string(data.PrivateKeyData), data.ServerName) status = validateCertificates(string(data.CertificateChainData), string(data.PrivateKeyData), data.ServerName)
restartHTTPS := t.setConfig(data, status) restartHTTPS := t.setConfig(data.tlsConfigSettings, status)
t.setCertFileTime() t.setCertFileTime()
onConfigModified() onConfigModified()
@ -320,7 +339,7 @@ func (t *TLSMod) handleTLSConfigure(w http.ResponseWriter, r *http.Request) {
} }
data2 := tlsConfig{ data2 := tlsConfig{
tlsConfigSettings: data, tlsConfigSettingsExt: data,
tlsConfigStatus: t.status, tlsConfigStatus: t.status,
} }
@ -335,7 +354,7 @@ func (t *TLSMod) handleTLSConfigure(w http.ResponseWriter, r *http.Request) {
// goroutine due to the same reason. // goroutine due to the same reason.
if restartHTTPS { if restartHTTPS {
go func() { go func() {
Context.web.TLSConfigChanged(context.Background(), data) Context.web.TLSConfigChanged(context.Background(), data.tlsConfigSettings)
}() }()
} }
} }
@ -514,8 +533,8 @@ func parsePrivateKey(der []byte) (crypto.PrivateKey, string, error) {
} }
// unmarshalTLS handles base64-encoded certificates transparently // unmarshalTLS handles base64-encoded certificates transparently
func unmarshalTLS(r *http.Request) (tlsConfigSettings, error) { func unmarshalTLS(r *http.Request) (tlsConfigSettingsExt, error) {
data := tlsConfigSettings{} data := tlsConfigSettingsExt{}
err := json.NewDecoder(r.Body).Decode(&data) err := json.NewDecoder(r.Body).Decode(&data)
if err != nil { if err != nil {
return data, fmt.Errorf("failed to parse new TLS config json: %w", err) return data, fmt.Errorf("failed to parse new TLS config json: %w", err)
@ -559,8 +578,8 @@ func marshalTLS(w http.ResponseWriter, data tlsConfig) {
} }
if data.PrivateKey != "" { if data.PrivateKey != "" {
encoded := base64.StdEncoding.EncodeToString([]byte(data.PrivateKey)) data.PrivateKeySaved = true
data.PrivateKey = encoded data.PrivateKey = ""
} }
err := json.NewEncoder(w).Encode(data) err := json.NewEncoder(w).Encode(data)

View File

@ -4,6 +4,13 @@
## v0.107: API changes ## v0.107: API changes
### The new field `"private_key_saved"` in `TlsConfig`
* The new field `"private_key_saved"` in `POST /control/tls/configure`,
`POST /control/tls/validate` and `GET /control/tls/status` is true if the
private key was previously saved as a string and now the private key omitted
from communication between server and client due to security issues.
### The new field `"cache_optimistic"` in DNS configuration ### The new field `"cache_optimistic"` in DNS configuration
* The new optional field `"cache_optimistic"` in `POST /control/dns_config` * The new optional field `"cache_optimistic"` in `POST /control/dns_config`

View File

@ -2075,6 +2075,14 @@
'private_key': 'private_key':
'type': 'string' 'type': 'string'
'description': 'Base64 string with PEM-encoded private key' 'description': 'Base64 string with PEM-encoded private key'
'private_key_saved':
'type': 'boolean'
'example': true
'description': >
Set to true if the user has previously saved a private key as
a string. This is used so that the server and the client don't
have to send the private key between each other every time,
which might lead to security issues.
'certificate_path': 'certificate_path':
'type': 'string' 'type': 'string'
'description': 'Path to certificate file' 'description': 'Path to certificate file'