Compare commits
No commits in common. "develop" and "v2.9.6" have entirely different histories.
5
Jenkinsfile
vendored
5
Jenkinsfile
vendored
@ -62,13 +62,12 @@ pipeline {
|
|||||||
stage('Backend') {
|
stage('Backend') {
|
||||||
steps {
|
steps {
|
||||||
echo 'Checking Syntax ...'
|
echo 'Checking Syntax ...'
|
||||||
sh 'docker pull nginxproxymanager/nginx-full:certbot-node'
|
|
||||||
// See: https://github.com/yarnpkg/yarn/issues/3254
|
// See: https://github.com/yarnpkg/yarn/issues/3254
|
||||||
sh '''docker run --rm \\
|
sh '''docker run --rm \\
|
||||||
-v "$(pwd)/backend:/app" \\
|
-v "$(pwd)/backend:/app" \\
|
||||||
-v "$(pwd)/global:/app/global" \\
|
-v "$(pwd)/global:/app/global" \\
|
||||||
-w /app \\
|
-w /app \\
|
||||||
nginxproxymanager/nginx-full:certbot-node \\
|
node:latest \\
|
||||||
sh -c "yarn install && yarn eslint . && rm -rf node_modules"
|
sh -c "yarn install && yarn eslint . && rm -rf node_modules"
|
||||||
'''
|
'''
|
||||||
|
|
||||||
@ -221,7 +220,7 @@ pipeline {
|
|||||||
}
|
}
|
||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
sh 'docker-compose down --remove-orphans --volumes -t 30'
|
sh 'docker-compose down --rmi all --remove-orphans --volumes -t 30'
|
||||||
sh 'echo Reverting ownership'
|
sh 'echo Reverting ownership'
|
||||||
sh 'docker run --rm -v $(pwd):/data jc21/ci-tools chown -R $(id -u):$(id -g) /data'
|
sh 'docker run --rm -v $(pwd):/data jc21/ci-tools chown -R $(id -u):$(id -g) /data'
|
||||||
}
|
}
|
||||||
|
383
README.md
383
README.md
@ -1,13 +1,23 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://nginxproxymanager.com/github.png">
|
<img src="https://nginxproxymanager.com/github.png">
|
||||||
<br><br>
|
<br><br>
|
||||||
<img src="https://img.shields.io/badge/version-2.9.19-green.svg?style=for-the-badge">
|
<img src="https://img.shields.io/badge/version-2.9.6-green.svg?style=for-the-badge">
|
||||||
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
|
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
|
||||||
<img src="https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge">
|
<img src="https://img.shields.io/docker/stars/jc21/nginx-proxy-manager.svg?style=for-the-badge">
|
||||||
</a>
|
</a>
|
||||||
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
|
<a href="https://hub.docker.com/repository/docker/jc21/nginx-proxy-manager">
|
||||||
<img src="https://img.shields.io/docker/pulls/jc21/nginx-proxy-manager.svg?style=for-the-badge">
|
<img src="https://img.shields.io/docker/pulls/jc21/nginx-proxy-manager.svg?style=for-the-badge">
|
||||||
</a>
|
</a>
|
||||||
|
<a href="https://ci.nginxproxymanager.com/blue/organizations/jenkins/nginx-proxy-manager/branches/">
|
||||||
|
<img src="https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fci.nginxproxymanager.com%2Fjob%2Fnginx-proxy-manager%2Fjob%2Fmaster&style=for-the-badge">
|
||||||
|
</a>
|
||||||
|
<a href="https://gitter.im/nginx-proxy-manager/community">
|
||||||
|
<img alt="Gitter" src="https://img.shields.io/gitter/room/nginx-proxy-manager/community?style=for-the-badge">
|
||||||
|
</a>
|
||||||
|
<a href="https://reddit.com/r/nginxproxymanager">
|
||||||
|
<img alt="Reddit" src="https://img.shields.io/reddit/subreddit-subscribers/nginxproxymanager?label=Reddit%20Community&style=for-the-badge">
|
||||||
|
</a>
|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
This project comes as a pre-built docker image that enables you to easily forward to your websites
|
This project comes as a pre-built docker image that enables you to easily forward to your websites
|
||||||
@ -65,19 +75,31 @@ services:
|
|||||||
- '80:80'
|
- '80:80'
|
||||||
- '81:81'
|
- '81:81'
|
||||||
- '443:443'
|
- '443:443'
|
||||||
|
environment:
|
||||||
|
DB_MYSQL_HOST: "db"
|
||||||
|
DB_MYSQL_PORT: 3306
|
||||||
|
DB_MYSQL_USER: "npm"
|
||||||
|
DB_MYSQL_PASSWORD: "npm"
|
||||||
|
DB_MYSQL_NAME: "npm"
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/data
|
- ./data:/data
|
||||||
- ./letsencrypt:/etc/letsencrypt
|
- ./letsencrypt:/etc/letsencrypt
|
||||||
|
db:
|
||||||
|
image: 'jc21/mariadb-aria:latest'
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: 'npm'
|
||||||
|
MYSQL_DATABASE: 'npm'
|
||||||
|
MYSQL_USER: 'npm'
|
||||||
|
MYSQL_PASSWORD: 'npm'
|
||||||
|
volumes:
|
||||||
|
- ./data/mysql:/var/lib/mysql
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Bring up your stack by running
|
3. Bring up your stack
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose up -d
|
docker-compose up -d
|
||||||
|
|
||||||
# If using docker-compose-plugin
|
|
||||||
docker compose up -d
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Log in to the Admin UI
|
4. Log in to the Admin UI
|
||||||
@ -98,12 +120,345 @@ Immediately after logging in with this default user you will be asked to modify
|
|||||||
|
|
||||||
## Contributors
|
## Contributors
|
||||||
|
|
||||||
Special thanks to [all of our contributors](https://github.com/NginxProxyManager/nginx-proxy-manager/graphs/contributors).
|
Special thanks to the following contributors:
|
||||||
|
|
||||||
|
<!-- prettier-ignore-start -->
|
||||||
## Getting Support
|
<!-- markdownlint-disable -->
|
||||||
|
<table>
|
||||||
1. [Found a bug?](https://github.com/NginxProxyManager/nginx-proxy-manager/issues)
|
<tr>
|
||||||
2. [Discussions](https://github.com/NginxProxyManager/nginx-proxy-manager/discussions)
|
<td align="center">
|
||||||
3. [Development Gitter](https://gitter.im/nginx-proxy-manager/community)
|
<a href="https://github.com/Subv">
|
||||||
4. [Reddit](https://reddit.com/r/nginxproxymanager)
|
<img src="https://avatars1.githubusercontent.com/u/357072?s=460&u=d8adcdc91d749ae53e177973ed9b6bb6c4c894a3&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Sebastian Valle</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/Indemnity83">
|
||||||
|
<img src="https://avatars3.githubusercontent.com/u/35218?s=460&u=7082004ff35138157c868d7d9c683ccebfce5968&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Kyle Klaus</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/theraw">
|
||||||
|
<img src="https://avatars1.githubusercontent.com/u/32969774?s=460&u=6b359971e15685fb0359e6a8c065a399b40dc228&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>ƬHE ЯAW</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/spalger">
|
||||||
|
<img src="https://avatars2.githubusercontent.com/u/1329312?s=400&u=565223e38f1c052afb4c5dcca3fcf1c63ba17ae7&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Spencer</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/Xantios">
|
||||||
|
<img src="https://avatars3.githubusercontent.com/u/1507836?s=460&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Xantios Krugor</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/dpanesso">
|
||||||
|
<img src="https://avatars2.githubusercontent.com/u/2687121?s=460&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>David Panesso</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/IronTooch">
|
||||||
|
<img src="https://avatars3.githubusercontent.com/u/27360514?s=460&u=69bf854a6647c55725f62ecb8d39249c6c0b2602&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>IronTooch</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/damianog">
|
||||||
|
<img src="https://avatars1.githubusercontent.com/u/2786682?s=460&u=76c6136fae797abb76b951cd8a246dcaecaf21af&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Damiano</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/tfmm">
|
||||||
|
<img src="https://avatars3.githubusercontent.com/u/6880538?s=460&u=ce0160821cc4aa802df8395200f2d4956a5bc541&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Russ</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/margaale">
|
||||||
|
<img src="https://avatars3.githubusercontent.com/u/20794934?s=460&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Marcelo Castagna</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/Steven-Harris">
|
||||||
|
<img src="https://avatars2.githubusercontent.com/u/7720242?s=460&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Steven Harris</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/jlesage">
|
||||||
|
<img src="https://avatars0.githubusercontent.com/u/1791123?s=460&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Jocelyn Le Sage</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/cmer">
|
||||||
|
<img src="https://avatars0.githubusercontent.com/u/412?s=460&u=67dd8b2e3661bfd6f68ec1eaa5b9821bd8a321cd&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Carl Mercier</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/the1ts">
|
||||||
|
<img src="https://avatars1.githubusercontent.com/u/84956?s=460&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Paul Mansfield</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/OhHeyAlan">
|
||||||
|
<img src="https://avatars0.githubusercontent.com/u/11955126?s=460&u=fbaa5a1a4f73ef8960132c703349bfd037fe2630&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>OhHeyAlan</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/dogmatic69">
|
||||||
|
<img src="https://avatars2.githubusercontent.com/u/94674?s=460&u=ca7647de53145c6283b6373ade5dc94ba99347db&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Carl Sutton</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/tg44">
|
||||||
|
<img src="https://avatars0.githubusercontent.com/u/31839?s=460&u=ad32f4cadfef5e5fb09cdfa4b7b7b36a99ba6811&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Gergő Törcsvári</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/vrenjith">
|
||||||
|
<img src="https://avatars3.githubusercontent.com/u/2093241?s=460&u=96ce93a9bebabdd0a60a2dc96cd093a41d5edaba&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>vrenjith</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/duhruh">
|
||||||
|
<img src="https://avatars2.githubusercontent.com/u/1133969?s=460&u=c0691e6131ec6d516416c1c6fcedb5034f877bbe&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>David Rivera</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/jipjan">
|
||||||
|
<img src="https://avatars2.githubusercontent.com/u/1384618?s=460&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Jaap-Jan de Wit</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/jmwebslave">
|
||||||
|
<img src="https://avatars2.githubusercontent.com/u/6118262?s=460&u=7db409c47135b1e141c366bbb03ed9fae6ac2638&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>James Morgan</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/chaptergy">
|
||||||
|
<img src="https://avatars2.githubusercontent.com/u/26956711?s=460&u=7d9adebabb6b4e7af7cb05d98d751087a372304b&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>chaptergy</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/Philip-Mooney">
|
||||||
|
<img src="https://avatars0.githubusercontent.com/u/48624631?s=460&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Philip Mooney</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/WaterCalm">
|
||||||
|
<img src="https://avatars1.githubusercontent.com/u/23502129?s=400&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>WaterCalm</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/lebrou34">
|
||||||
|
<img src="https://avatars1.githubusercontent.com/u/16373103?s=460&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>lebrou34</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/lightglitch">
|
||||||
|
<img src="https://avatars0.githubusercontent.com/u/196953?s=460&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Mário Franco</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/klutchell">
|
||||||
|
<img src="https://avatars3.githubusercontent.com/u/20458272?s=460&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Kyle Harding</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/ahgraber">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/24922003?s=460&u=8376c9f00af9b6057ba4d2fb03b4f1b20a75277f&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Alex Graber</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/MooBaloo">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/9493496?s=460&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>MooBaloo</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/Shuro">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/944030?s=460&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Shuro</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/lorisbergeron">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/51918567?s=460&u=778e4ff284b7d7304450f98421c99f79298371fb&v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Loris Bergeron</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/hepelayo">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/8243119?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>hepelayo</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/jonasled">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/46790650?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Jonas Leder</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/stegmannb">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/12850482?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Bastian Stegmann</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/Stealthii">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/998920?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Stealthii</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/thegamingninja">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/8020534?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>THEGamingninja</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/italobb">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/1801687?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Italo Borssatto</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/GurjinderSingh">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/3470709?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Gurjinder Singh</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/phantomski77">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/69464125?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>David Dosoudil</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/ijaron">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/5156472?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>ijaron</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/nielscil">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/9073152?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Niels Bouma</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/ogarai">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/2949572?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Orko Garai</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/baruffaldi">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/36949?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Filippo Baruffaldi</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/bikram990">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/6782131?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Bikramjeet Singh</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/razvanstoica89">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/28236583?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Razvan Stoica</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/psharma04">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/22587474?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>RBXII3</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/demize">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/264914?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>demize</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/PUP-Loki">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/75944209?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>PUP-Loki</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/DSorlov">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/8133650?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Daniel Sörlöv</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/Theyooo">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/58510131?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Theyooo</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/mrdink">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/514751?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Justin Peacock</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/ChrisTracy">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/58871574?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Chris Tracy</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href="https://github.com/Fuechslein">
|
||||||
|
<img src="https://avatars.githubusercontent.com/u/15112818?v=4" width="80" alt=""/>
|
||||||
|
<br /><sub><b>Fuechslein</b></sub>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<!-- markdownlint-enable -->
|
||||||
|
<!-- prettier-ignore-end -->
|
||||||
|
@ -40,12 +40,13 @@ app.use(function (req, res, next) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
res.set({
|
res.set({
|
||||||
'X-XSS-Protection': '1; mode=block',
|
'Strict-Transport-Security': 'includeSubDomains; max-age=631138519; preload',
|
||||||
'X-Content-Type-Options': 'nosniff',
|
'X-XSS-Protection': '1; mode=block',
|
||||||
'X-Frame-Options': x_frame_options,
|
'X-Content-Type-Options': 'nosniff',
|
||||||
'Cache-Control': 'no-cache, no-store, max-age=0, must-revalidate',
|
'X-Frame-Options': x_frame_options,
|
||||||
Pragma: 'no-cache',
|
'Cache-Control': 'no-cache, no-store, max-age=0, must-revalidate',
|
||||||
Expires: 0
|
Pragma: 'no-cache',
|
||||||
|
Expires: 0
|
||||||
});
|
});
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
@ -74,7 +75,7 @@ app.use(function (err, req, res, next) {
|
|||||||
|
|
||||||
// Not every error is worth logging - but this is good for now until it gets annoying.
|
// Not every error is worth logging - but this is good for now until it gets annoying.
|
||||||
if (typeof err.stack !== 'undefined' && err.stack) {
|
if (typeof err.stack !== 'undefined' && err.stack) {
|
||||||
if (process.env.NODE_ENV === 'development' || process.env.DEBUG) {
|
if (process.env.NODE_ENV === 'development') {
|
||||||
log.debug(err.stack);
|
log.debug(err.stack);
|
||||||
} else if (typeof err.public == 'undefined' || !err.public) {
|
} else if (typeof err.public == 'undefined' || !err.public) {
|
||||||
log.warn(err.message);
|
log.warn(err.message);
|
||||||
|
131
backend/index.js
131
backend/index.js
@ -44,85 +44,84 @@ async function appStart () {
|
|||||||
|
|
||||||
async function createDbConfigFromEnvironment() {
|
async function createDbConfigFromEnvironment() {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const envMysqlHost = process.env.DB_MYSQL_HOST || null;
|
const envMysqlHost = process.env.DB_MYSQL_HOST || null;
|
||||||
const envMysqlPort = process.env.DB_MYSQL_PORT || null;
|
const envMysqlPort = process.env.DB_MYSQL_PORT || null;
|
||||||
const envMysqlUser = process.env.DB_MYSQL_USER || null;
|
const envMysqlUser = process.env.DB_MYSQL_USER || null;
|
||||||
const envMysqlName = process.env.DB_MYSQL_NAME || null;
|
const envMysqlName = process.env.DB_MYSQL_NAME || null;
|
||||||
let envSqliteFile = process.env.DB_SQLITE_FILE || null;
|
const envSqliteFile = process.env.DB_SQLITE_FILE || null;
|
||||||
|
|
||||||
const fs = require('fs');
|
if ((envMysqlHost && envMysqlPort && envMysqlUser && envMysqlName) || envSqliteFile) {
|
||||||
const filename = (process.env.NODE_CONFIG_DIR || './config') + '/' + (process.env.NODE_ENV || 'default') + '.json';
|
const fs = require('fs');
|
||||||
let configData = {};
|
const filename = (process.env.NODE_CONFIG_DIR || './config') + '/' + (process.env.NODE_ENV || 'default') + '.json';
|
||||||
|
let configData = {};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
configData = require(filename);
|
configData = require(filename);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
if (configData.database && configData.database.engine && !configData.database.fromEnv) {
|
if (configData.database && configData.database.engine && !configData.database.fromEnv) {
|
||||||
logger.info('Manual db configuration already exists, skipping config creation from environment variables');
|
logger.info('Manual db configuration already exists, skipping config creation from environment variables');
|
||||||
resolve();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((!envMysqlHost || !envMysqlPort || !envMysqlUser || !envMysqlName) && !envSqliteFile){
|
|
||||||
envSqliteFile = '/data/database.sqlite';
|
|
||||||
logger.info(`No valid environment variables for database provided, using default SQLite file '${envSqliteFile}'`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (envMysqlHost && envMysqlPort && envMysqlUser && envMysqlName) {
|
|
||||||
const newConfig = {
|
|
||||||
fromEnv: true,
|
|
||||||
engine: 'mysql',
|
|
||||||
host: envMysqlHost,
|
|
||||||
port: envMysqlPort,
|
|
||||||
user: envMysqlUser,
|
|
||||||
password: process.env.DB_MYSQL_PASSWORD,
|
|
||||||
name: envMysqlName,
|
|
||||||
};
|
|
||||||
|
|
||||||
if (JSON.stringify(configData.database) === JSON.stringify(newConfig)) {
|
|
||||||
// Config is unchanged, skip overwrite
|
|
||||||
resolve();
|
resolve();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.info('Generating MySQL knex configuration from environment variables');
|
if (envMysqlHost && envMysqlPort && envMysqlUser && envMysqlName) {
|
||||||
configData.database = newConfig;
|
const newConfig = {
|
||||||
|
fromEnv: true,
|
||||||
|
engine: 'mysql',
|
||||||
|
host: envMysqlHost,
|
||||||
|
port: envMysqlPort,
|
||||||
|
user: envMysqlUser,
|
||||||
|
password: process.env.DB_MYSQL_PASSWORD,
|
||||||
|
name: envMysqlName,
|
||||||
|
};
|
||||||
|
|
||||||
} else {
|
if (JSON.stringify(configData.database) === JSON.stringify(newConfig)) {
|
||||||
const newConfig = {
|
// Config is unchanged, skip overwrite
|
||||||
fromEnv: true,
|
resolve();
|
||||||
engine: 'knex-native',
|
return;
|
||||||
knex: {
|
|
||||||
client: 'sqlite3',
|
|
||||||
connection: {
|
|
||||||
filename: envSqliteFile
|
|
||||||
},
|
|
||||||
useNullAsDefault: true
|
|
||||||
}
|
}
|
||||||
};
|
|
||||||
if (JSON.stringify(configData.database) === JSON.stringify(newConfig)) {
|
|
||||||
// Config is unchanged, skip overwrite
|
|
||||||
resolve();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.info('Generating SQLite knex configuration');
|
logger.info('Generating MySQL db configuration from environment variables');
|
||||||
configData.database = newConfig;
|
configData.database = newConfig;
|
||||||
}
|
|
||||||
|
|
||||||
// Write config
|
|
||||||
fs.writeFile(filename, JSON.stringify(configData, null, 2), (err) => {
|
|
||||||
if (err) {
|
|
||||||
logger.error('Could not write db config to config file: ' + filename);
|
|
||||||
reject(err);
|
|
||||||
} else {
|
} else {
|
||||||
logger.debug('Wrote db configuration to config file: ' + filename);
|
const newConfig = {
|
||||||
resolve();
|
fromEnv: true,
|
||||||
|
engine: 'knex-native',
|
||||||
|
knex: {
|
||||||
|
client: 'sqlite3',
|
||||||
|
connection: {
|
||||||
|
filename: envSqliteFile
|
||||||
|
},
|
||||||
|
useNullAsDefault: true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if (JSON.stringify(configData.database) === JSON.stringify(newConfig)) {
|
||||||
|
// Config is unchanged, skip overwrite
|
||||||
|
resolve();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info('Generating Sqlite db configuration from environment variables');
|
||||||
|
configData.database = newConfig;
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
// Write config
|
||||||
|
fs.writeFile(filename, JSON.stringify(configData, null, 2), (err) => {
|
||||||
|
if (err) {
|
||||||
|
logger.error('Could not write db config to config file: ' + filename);
|
||||||
|
reject(err);
|
||||||
|
} else {
|
||||||
|
logger.info('Wrote db configuration to config file: ' + filename);
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,6 +118,7 @@ const internalAccessList = {
|
|||||||
// Sanity check that something crazy hasn't happened
|
// Sanity check that something crazy hasn't happened
|
||||||
throw new error.InternalValidationError('Access List could not be updated, IDs do not match: ' + row.id + ' !== ' + data.id);
|
throw new error.InternalValidationError('Access List could not be updated, IDs do not match: ' + row.id + ' !== ' + data.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
// patch name if specified
|
// patch name if specified
|
||||||
@ -204,7 +205,6 @@ const internalAccessList = {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.then(internalNginx.reload)
|
|
||||||
.then(() => {
|
.then(() => {
|
||||||
// Add to audit log
|
// Add to audit log
|
||||||
return internalAuditLog.add(access, {
|
return internalAuditLog.add(access, {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const https = require('https');
|
|
||||||
const tempWrite = require('temp-write');
|
const tempWrite = require('temp-write');
|
||||||
const moment = require('moment');
|
const moment = require('moment');
|
||||||
const logger = require('../logger').ssl;
|
const logger = require('../logger').ssl;
|
||||||
@ -14,9 +13,6 @@ const internalHost = require('./host');
|
|||||||
const letsencryptStaging = process.env.NODE_ENV !== 'production';
|
const letsencryptStaging = process.env.NODE_ENV !== 'production';
|
||||||
const letsencryptConfig = '/etc/letsencrypt.ini';
|
const letsencryptConfig = '/etc/letsencrypt.ini';
|
||||||
const certbotCommand = 'certbot';
|
const certbotCommand = 'certbot';
|
||||||
const archiver = require('archiver');
|
|
||||||
const path = require('path');
|
|
||||||
const { isArray } = require('lodash');
|
|
||||||
|
|
||||||
function omissions() {
|
function omissions() {
|
||||||
return ['is_deleted'];
|
return ['is_deleted'];
|
||||||
@ -116,7 +112,7 @@ const internalCertificate = {
|
|||||||
data.owner_user_id = access.token.getUserId(1);
|
data.owner_user_id = access.token.getUserId(1);
|
||||||
|
|
||||||
if (data.provider === 'letsencrypt') {
|
if (data.provider === 'letsencrypt') {
|
||||||
data.nice_name = data.domain_names.join(', ');
|
data.nice_name = data.domain_names.sort().join(', ');
|
||||||
}
|
}
|
||||||
|
|
||||||
return certificateModel
|
return certificateModel
|
||||||
@ -171,7 +167,6 @@ const internalCertificate = {
|
|||||||
// 3. Generate the LE config
|
// 3. Generate the LE config
|
||||||
return internalNginx.generateLetsEncryptRequestConfig(certificate)
|
return internalNginx.generateLetsEncryptRequestConfig(certificate)
|
||||||
.then(internalNginx.reload)
|
.then(internalNginx.reload)
|
||||||
.then(async() => await new Promise((r) => setTimeout(r, 5000)))
|
|
||||||
.then(() => {
|
.then(() => {
|
||||||
// 4. Request cert
|
// 4. Request cert
|
||||||
return internalCertificate.requestLetsEncryptSsl(certificate);
|
return internalCertificate.requestLetsEncryptSsl(certificate);
|
||||||
@ -340,71 +335,6 @@ const internalCertificate = {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {Access} access
|
|
||||||
* @param {Object} data
|
|
||||||
* @param {Number} data.id
|
|
||||||
* @returns {Promise}
|
|
||||||
*/
|
|
||||||
download: (access, data) => {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
access.can('certificates:get', data)
|
|
||||||
.then(() => {
|
|
||||||
return internalCertificate.get(access, data);
|
|
||||||
})
|
|
||||||
.then((certificate) => {
|
|
||||||
if (certificate.provider === 'letsencrypt') {
|
|
||||||
const zipDirectory = '/etc/letsencrypt/live/npm-' + data.id;
|
|
||||||
|
|
||||||
if (!fs.existsSync(zipDirectory)) {
|
|
||||||
throw new error.ItemNotFoundError('Certificate ' + certificate.nice_name + ' does not exists');
|
|
||||||
}
|
|
||||||
|
|
||||||
let certFiles = fs.readdirSync(zipDirectory)
|
|
||||||
.filter((fn) => fn.endsWith('.pem'))
|
|
||||||
.map((fn) => fs.realpathSync(path.join(zipDirectory, fn)));
|
|
||||||
const downloadName = 'npm-' + data.id + '-' + `${Date.now()}.zip`;
|
|
||||||
const opName = '/tmp/' + downloadName;
|
|
||||||
internalCertificate.zipFiles(certFiles, opName)
|
|
||||||
.then(() => {
|
|
||||||
logger.debug('zip completed : ', opName);
|
|
||||||
const resp = {
|
|
||||||
fileName: opName
|
|
||||||
};
|
|
||||||
resolve(resp);
|
|
||||||
}).catch((err) => reject(err));
|
|
||||||
} else {
|
|
||||||
throw new error.ValidationError('Only Let\'sEncrypt certificates can be downloaded');
|
|
||||||
}
|
|
||||||
}).catch((err) => reject(err));
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {String} source
|
|
||||||
* @param {String} out
|
|
||||||
* @returns {Promise}
|
|
||||||
*/
|
|
||||||
zipFiles(source, out) {
|
|
||||||
const archive = archiver('zip', { zlib: { level: 9 } });
|
|
||||||
const stream = fs.createWriteStream(out);
|
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
source
|
|
||||||
.map((fl) => {
|
|
||||||
let fileName = path.basename(fl);
|
|
||||||
logger.debug(fl, 'added to certificate zip');
|
|
||||||
archive.file(fl, { name: fileName });
|
|
||||||
});
|
|
||||||
archive
|
|
||||||
.on('error', (err) => reject(err))
|
|
||||||
.pipe(stream);
|
|
||||||
|
|
||||||
stream.on('close', () => resolve());
|
|
||||||
archive.finalize();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Access} access
|
* @param {Access} access
|
||||||
* @param {Object} data
|
* @param {Object} data
|
||||||
@ -477,7 +407,7 @@ const internalCertificate = {
|
|||||||
// Query is used for searching
|
// Query is used for searching
|
||||||
if (typeof search_query === 'string') {
|
if (typeof search_query === 'string') {
|
||||||
query.where(function () {
|
query.where(function () {
|
||||||
this.where('nice_name', 'like', '%' + search_query + '%');
|
this.where('name', 'like', '%' + search_query + '%');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -828,18 +758,16 @@ const internalCertificate = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request a certificate using the http challenge
|
|
||||||
* @param {Object} certificate the certificate row
|
* @param {Object} certificate the certificate row
|
||||||
* @returns {Promise}
|
* @returns {Promise}
|
||||||
*/
|
*/
|
||||||
requestLetsEncryptSsl: (certificate) => {
|
requestLetsEncryptSsl: (certificate) => {
|
||||||
logger.info('Requesting Let\'sEncrypt certificates for Cert #' + certificate.id + ': ' + certificate.domain_names.join(', '));
|
logger.info('Requesting Let\'sEncrypt certificates for Cert #' + certificate.id + ': ' + certificate.domain_names.join(', '));
|
||||||
|
|
||||||
const cmd = certbotCommand + ' certonly ' +
|
const cmd = certbotCommand + ' certonly --non-interactive ' +
|
||||||
'--config "' + letsencryptConfig + '" ' +
|
'--config "' + letsencryptConfig + '" ' +
|
||||||
'--cert-name "npm-' + certificate.id + '" ' +
|
'--cert-name "npm-' + certificate.id + '" ' +
|
||||||
'--agree-tos ' +
|
'--agree-tos ' +
|
||||||
'--authenticator webroot ' +
|
|
||||||
'--email "' + certificate.meta.letsencrypt_email + '" ' +
|
'--email "' + certificate.meta.letsencrypt_email + '" ' +
|
||||||
'--preferred-challenges "dns,http" ' +
|
'--preferred-challenges "dns,http" ' +
|
||||||
'--domains "' + certificate.domain_names.join(',') + '" ' +
|
'--domains "' + certificate.domain_names.join(',') + '" ' +
|
||||||
@ -871,21 +799,13 @@ const internalCertificate = {
|
|||||||
logger.info(`Requesting Let'sEncrypt certificates via ${dns_plugin.display_name} for Cert #${certificate.id}: ${certificate.domain_names.join(', ')}`);
|
logger.info(`Requesting Let'sEncrypt certificates via ${dns_plugin.display_name} for Cert #${certificate.id}: ${certificate.domain_names.join(', ')}`);
|
||||||
|
|
||||||
const credentialsLocation = '/etc/letsencrypt/credentials/credentials-' + certificate.id;
|
const credentialsLocation = '/etc/letsencrypt/credentials/credentials-' + certificate.id;
|
||||||
// Escape single quotes and backslashes
|
const credentialsCmd = 'mkdir -p /etc/letsencrypt/credentials 2> /dev/null; echo \'' + certificate.meta.dns_provider_credentials.replace('\'', '\\\'') + '\' > \'' + credentialsLocation + '\' && chmod 600 \'' + credentialsLocation + '\'';
|
||||||
const escapedCredentials = certificate.meta.dns_provider_credentials.replaceAll('\'', '\\\'').replaceAll('\\', '\\\\');
|
const prepareCmd = 'pip install ' + dns_plugin.package_name + '==' + dns_plugin.package_version + ' ' + dns_plugin.dependencies;
|
||||||
const credentialsCmd = 'mkdir -p /etc/letsencrypt/credentials 2> /dev/null; echo \'' + escapedCredentials + '\' > \'' + credentialsLocation + '\' && chmod 600 \'' + credentialsLocation + '\'';
|
|
||||||
let prepareCmd = 'pip install ' + dns_plugin.package_name + (dns_plugin.version_requirement || '') + ' ' + dns_plugin.dependencies;
|
|
||||||
|
|
||||||
// Special case for cloudflare
|
|
||||||
if (dns_plugin.package_name === 'certbot-dns-cloudflare') {
|
|
||||||
prepareCmd = 'pip install certbot-dns-cloudflare --index-url https://www.piwheels.org/simple --prefer-binary';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Whether the plugin has a --<name>-credentials argument
|
// Whether the plugin has a --<name>-credentials argument
|
||||||
const hasConfigArg = certificate.meta.dns_provider !== 'route53';
|
const hasConfigArg = certificate.meta.dns_provider !== 'route53';
|
||||||
|
|
||||||
let mainCmd = certbotCommand + ' certonly ' +
|
let mainCmd = certbotCommand + ' certonly --non-interactive ' +
|
||||||
'--config "' + letsencryptConfig + '" ' +
|
|
||||||
'--cert-name "npm-' + certificate.id + '" ' +
|
'--cert-name "npm-' + certificate.id + '" ' +
|
||||||
'--agree-tos ' +
|
'--agree-tos ' +
|
||||||
'--email "' + certificate.meta.letsencrypt_email + '" ' +
|
'--email "' + certificate.meta.letsencrypt_email + '" ' +
|
||||||
@ -980,11 +900,10 @@ const internalCertificate = {
|
|||||||
renewLetsEncryptSsl: (certificate) => {
|
renewLetsEncryptSsl: (certificate) => {
|
||||||
logger.info('Renewing Let\'sEncrypt certificates for Cert #' + certificate.id + ': ' + certificate.domain_names.join(', '));
|
logger.info('Renewing Let\'sEncrypt certificates for Cert #' + certificate.id + ': ' + certificate.domain_names.join(', '));
|
||||||
|
|
||||||
const cmd = certbotCommand + ' renew --force-renewal ' +
|
const cmd = certbotCommand + ' renew --force-renewal --non-interactive ' +
|
||||||
'--config "' + letsencryptConfig + '" ' +
|
'--config "' + letsencryptConfig + '" ' +
|
||||||
'--cert-name "npm-' + certificate.id + '" ' +
|
'--cert-name "npm-' + certificate.id + '" ' +
|
||||||
'--preferred-challenges "dns,http" ' +
|
'--preferred-challenges "dns,http" ' +
|
||||||
'--no-random-sleep-on-renew ' +
|
|
||||||
'--disable-hook-validation ' +
|
'--disable-hook-validation ' +
|
||||||
(letsencryptStaging ? '--staging' : '');
|
(letsencryptStaging ? '--staging' : '');
|
||||||
|
|
||||||
@ -1010,11 +929,9 @@ const internalCertificate = {
|
|||||||
|
|
||||||
logger.info(`Renewing Let'sEncrypt certificates via ${dns_plugin.display_name} for Cert #${certificate.id}: ${certificate.domain_names.join(', ')}`);
|
logger.info(`Renewing Let'sEncrypt certificates via ${dns_plugin.display_name} for Cert #${certificate.id}: ${certificate.domain_names.join(', ')}`);
|
||||||
|
|
||||||
let mainCmd = certbotCommand + ' renew ' +
|
let mainCmd = certbotCommand + ' renew --non-interactive ' +
|
||||||
'--config "' + letsencryptConfig + '" ' +
|
|
||||||
'--cert-name "npm-' + certificate.id + '" ' +
|
'--cert-name "npm-' + certificate.id + '" ' +
|
||||||
'--disable-hook-validation ' +
|
'--disable-hook-validation' +
|
||||||
'--no-random-sleep-on-renew ' +
|
|
||||||
(letsencryptStaging ? ' --staging' : '');
|
(letsencryptStaging ? ' --staging' : '');
|
||||||
|
|
||||||
// Prepend the path to the credentials file as an environment variable
|
// Prepend the path to the credentials file as an environment variable
|
||||||
@ -1040,8 +957,7 @@ const internalCertificate = {
|
|||||||
revokeLetsEncryptSsl: (certificate, throw_errors) => {
|
revokeLetsEncryptSsl: (certificate, throw_errors) => {
|
||||||
logger.info('Revoking Let\'sEncrypt certificates for Cert #' + certificate.id + ': ' + certificate.domain_names.join(', '));
|
logger.info('Revoking Let\'sEncrypt certificates for Cert #' + certificate.id + ': ' + certificate.domain_names.join(', '));
|
||||||
|
|
||||||
const mainCmd = certbotCommand + ' revoke ' +
|
const mainCmd = certbotCommand + ' revoke --non-interactive ' +
|
||||||
'--config "' + letsencryptConfig + '" ' +
|
|
||||||
'--cert-path "/etc/letsencrypt/live/npm-' + certificate.id + '/fullchain.pem" ' +
|
'--cert-path "/etc/letsencrypt/live/npm-' + certificate.id + '/fullchain.pem" ' +
|
||||||
'--delete-after-revoke ' +
|
'--delete-after-revoke ' +
|
||||||
(letsencryptStaging ? '--staging' : '');
|
(letsencryptStaging ? '--staging' : '');
|
||||||
@ -1134,94 +1050,6 @@ const internalCertificate = {
|
|||||||
} else {
|
} else {
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
},
|
|
||||||
|
|
||||||
testHttpsChallenge: async (access, domains) => {
|
|
||||||
await access.can('certificates:list');
|
|
||||||
|
|
||||||
if (!isArray(domains)) {
|
|
||||||
throw new error.InternalValidationError('Domains must be an array of strings');
|
|
||||||
}
|
|
||||||
if (domains.length === 0) {
|
|
||||||
throw new error.InternalValidationError('No domains provided');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a test challenge file
|
|
||||||
const testChallengeDir = '/data/letsencrypt-acme-challenge/.well-known/acme-challenge';
|
|
||||||
const testChallengeFile = testChallengeDir + '/test-challenge';
|
|
||||||
fs.mkdirSync(testChallengeDir, {recursive: true});
|
|
||||||
fs.writeFileSync(testChallengeFile, 'Success', {encoding: 'utf8'});
|
|
||||||
|
|
||||||
async function performTestForDomain (domain) {
|
|
||||||
logger.info('Testing http challenge for ' + domain);
|
|
||||||
const url = `http://${domain}/.well-known/acme-challenge/test-challenge`;
|
|
||||||
const formBody = `method=G&url=${encodeURI(url)}&bodytype=T&requestbody=&headername=User-Agent&headervalue=None&locationid=1&ch=false&cc=false`;
|
|
||||||
const options = {
|
|
||||||
method: 'POST',
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/x-www-form-urlencoded',
|
|
||||||
'Content-Length': Buffer.byteLength(formBody)
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const result = await new Promise((resolve) => {
|
|
||||||
|
|
||||||
const req = https.request('https://www.site24x7.com/tools/restapi-tester', options, function (res) {
|
|
||||||
let responseBody = '';
|
|
||||||
|
|
||||||
res.on('data', (chunk) => responseBody = responseBody + chunk);
|
|
||||||
res.on('end', function () {
|
|
||||||
const parsedBody = JSON.parse(responseBody + '');
|
|
||||||
if (res.statusCode !== 200) {
|
|
||||||
logger.warn(`Failed to test HTTP challenge for domain ${domain}`, res);
|
|
||||||
resolve(undefined);
|
|
||||||
}
|
|
||||||
resolve(parsedBody);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Make sure to write the request body.
|
|
||||||
req.write(formBody);
|
|
||||||
req.end();
|
|
||||||
req.on('error', function (e) { logger.warn(`Failed to test HTTP challenge for domain ${domain}`, e);
|
|
||||||
resolve(undefined); });
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!result) {
|
|
||||||
// Some error occurred while trying to get the data
|
|
||||||
return 'failed';
|
|
||||||
} else if (`${result.responsecode}` === '200' && result.htmlresponse === 'Success') {
|
|
||||||
// Server exists and has responded with the correct data
|
|
||||||
return 'ok';
|
|
||||||
} else if (`${result.responsecode}` === '200') {
|
|
||||||
// Server exists but has responded with wrong data
|
|
||||||
logger.info(`HTTP challenge test failed for domain ${domain} because of invalid returned data:`, result.htmlresponse);
|
|
||||||
return 'wrong-data';
|
|
||||||
} else if (`${result.responsecode}` === '404') {
|
|
||||||
// Server exists but responded with a 404
|
|
||||||
logger.info(`HTTP challenge test failed for domain ${domain} because code 404 was returned`);
|
|
||||||
return '404';
|
|
||||||
} else if (`${result.responsecode}` === '0' || (typeof result.reason === 'string' && result.reason.toLowerCase() === 'host unavailable')) {
|
|
||||||
// Server does not exist at domain
|
|
||||||
logger.info(`HTTP challenge test failed for domain ${domain} the host was not found`);
|
|
||||||
return 'no-host';
|
|
||||||
} else {
|
|
||||||
// Other errors
|
|
||||||
logger.info(`HTTP challenge test failed for domain ${domain} because code ${result.responsecode} was returned`);
|
|
||||||
return `other:${result.responsecode}`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const results = {};
|
|
||||||
|
|
||||||
for (const domain of domains){
|
|
||||||
results[domain] = await performTestForDomain(domain);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove the test challenge file
|
|
||||||
fs.unlinkSync(testChallengeFile);
|
|
||||||
|
|
||||||
return results;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -9,9 +9,6 @@ const CLOUDFRONT_URL = 'https://ip-ranges.amazonaws.com/ip-ranges.json';
|
|||||||
const CLOUDFARE_V4_URL = 'https://www.cloudflare.com/ips-v4';
|
const CLOUDFARE_V4_URL = 'https://www.cloudflare.com/ips-v4';
|
||||||
const CLOUDFARE_V6_URL = 'https://www.cloudflare.com/ips-v6';
|
const CLOUDFARE_V6_URL = 'https://www.cloudflare.com/ips-v6';
|
||||||
|
|
||||||
const regIpV4 = /^(\d+\.?){4}\/\d+/;
|
|
||||||
const regIpV6 = /^(([\da-fA-F]+)?:)+\/\d+/;
|
|
||||||
|
|
||||||
const internalIpRanges = {
|
const internalIpRanges = {
|
||||||
|
|
||||||
interval_timeout: 1000 * 60 * 60 * 6, // 6 hours
|
interval_timeout: 1000 * 60 * 60 * 6, // 6 hours
|
||||||
@ -77,14 +74,14 @@ const internalIpRanges = {
|
|||||||
return internalIpRanges.fetchUrl(CLOUDFARE_V4_URL);
|
return internalIpRanges.fetchUrl(CLOUDFARE_V4_URL);
|
||||||
})
|
})
|
||||||
.then((cloudfare_data) => {
|
.then((cloudfare_data) => {
|
||||||
let items = cloudfare_data.split('\n').filter((line) => regIpV4.test(line));
|
let items = cloudfare_data.split('\n');
|
||||||
ip_ranges = [... ip_ranges, ... items];
|
ip_ranges = [... ip_ranges, ... items];
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
return internalIpRanges.fetchUrl(CLOUDFARE_V6_URL);
|
return internalIpRanges.fetchUrl(CLOUDFARE_V6_URL);
|
||||||
})
|
})
|
||||||
.then((cloudfare_data) => {
|
.then((cloudfare_data) => {
|
||||||
let items = cloudfare_data.split('\n').filter((line) => regIpV6.test(line));
|
let items = cloudfare_data.split('\n');
|
||||||
ip_ranges = [... ip_ranges, ... items];
|
ip_ranges = [... ip_ranges, ... items];
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
const migrate_name = 'stream_domain';
|
|
||||||
const logger = require('../logger').migrate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Migrate
|
|
||||||
*
|
|
||||||
* @see http://knexjs.org/#Schema
|
|
||||||
*
|
|
||||||
* @param {Object} knex
|
|
||||||
* @param {Promise} Promise
|
|
||||||
* @returns {Promise}
|
|
||||||
*/
|
|
||||||
exports.up = function (knex/*, Promise*/) {
|
|
||||||
logger.info('[' + migrate_name + '] Migrating Up...');
|
|
||||||
|
|
||||||
return knex.schema.table('stream', (table) => {
|
|
||||||
table.renameColumn('forward_ip', 'forwarding_host');
|
|
||||||
})
|
|
||||||
.then(function () {
|
|
||||||
logger.info('[' + migrate_name + '] stream Table altered');
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Undo Migrate
|
|
||||||
*
|
|
||||||
* @param {Object} knex
|
|
||||||
* @param {Promise} Promise
|
|
||||||
* @returns {Promise}
|
|
||||||
*/
|
|
||||||
exports.down = function (knex/*, Promise*/) {
|
|
||||||
logger.info('[' + migrate_name + '] Migrating Down...');
|
|
||||||
|
|
||||||
return knex.schema.table('stream', (table) => {
|
|
||||||
table.renameColumn('forwarding_host', 'forward_ip');
|
|
||||||
})
|
|
||||||
.then(function () {
|
|
||||||
logger.info('[' + migrate_name + '] stream Table altered');
|
|
||||||
});
|
|
||||||
};
|
|
@ -1,50 +0,0 @@
|
|||||||
const migrate_name = 'stream_domain';
|
|
||||||
const logger = require('../logger').migrate;
|
|
||||||
const internalNginx = require('../internal/nginx');
|
|
||||||
|
|
||||||
async function regenerateDefaultHost(knex) {
|
|
||||||
const row = await knex('setting').select('*').where('id', 'default-site').first();
|
|
||||||
|
|
||||||
if (!row) {
|
|
||||||
return Promise.resolve();
|
|
||||||
}
|
|
||||||
|
|
||||||
return internalNginx.deleteConfig('default')
|
|
||||||
.then(() => {
|
|
||||||
return internalNginx.generateConfig('default', row);
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
return internalNginx.test();
|
|
||||||
})
|
|
||||||
.then(() => {
|
|
||||||
return internalNginx.reload();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Migrate
|
|
||||||
*
|
|
||||||
* @see http://knexjs.org/#Schema
|
|
||||||
*
|
|
||||||
* @param {Object} knex
|
|
||||||
* @param {Promise} Promise
|
|
||||||
* @returns {Promise}
|
|
||||||
*/
|
|
||||||
exports.up = function (knex) {
|
|
||||||
logger.info('[' + migrate_name + '] Migrating Up...');
|
|
||||||
|
|
||||||
return regenerateDefaultHost(knex);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Undo Migrate
|
|
||||||
*
|
|
||||||
* @param {Object} knex
|
|
||||||
* @param {Promise} Promise
|
|
||||||
* @returns {Promise}
|
|
||||||
*/
|
|
||||||
exports.down = function (knex) {
|
|
||||||
logger.info('[' + migrate_name + '] Migrating Down...');
|
|
||||||
|
|
||||||
return regenerateDefaultHost(knex);
|
|
||||||
};
|
|
@ -5,29 +5,33 @@
|
|||||||
"main": "js/index.js",
|
"main": "js/index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ajv": "^6.12.0",
|
"ajv": "^6.12.0",
|
||||||
"archiver": "^5.3.0",
|
|
||||||
"batchflow": "^0.4.0",
|
"batchflow": "^0.4.0",
|
||||||
"bcrypt": "^5.0.0",
|
"bcrypt": "^5.0.0",
|
||||||
"body-parser": "^1.19.0",
|
"body-parser": "^1.19.0",
|
||||||
"compression": "^1.7.4",
|
"compression": "^1.7.4",
|
||||||
"config": "^3.3.1",
|
"config": "^3.3.1",
|
||||||
|
"diskdb": "^0.1.17",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"express-fileupload": "^1.1.9",
|
"express-fileupload": "^1.1.9",
|
||||||
"gravatar": "^1.8.0",
|
"gravatar": "^1.8.0",
|
||||||
|
"html-entities": "^1.2.1",
|
||||||
"json-schema-ref-parser": "^8.0.0",
|
"json-schema-ref-parser": "^8.0.0",
|
||||||
"jsonwebtoken": "^8.5.1",
|
"jsonwebtoken": "^8.5.1",
|
||||||
"knex": "^0.20.13",
|
"knex": "^0.20.13",
|
||||||
"liquidjs": "^9.11.10",
|
"liquidjs": "^9.11.10",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"moment": "^2.29.4",
|
"moment": "^2.24.0",
|
||||||
"mysql": "^2.18.1",
|
"mysql": "^2.18.1",
|
||||||
"node-rsa": "^1.0.8",
|
"node-rsa": "^1.0.8",
|
||||||
"nodemon": "^2.0.2",
|
"nodemon": "^2.0.2",
|
||||||
"objection": "^2.2.16",
|
"objection": "^2.1.3",
|
||||||
"path": "^0.12.7",
|
"path": "^0.12.7",
|
||||||
|
"pg": "^7.12.1",
|
||||||
|
"restler": "^3.4.0",
|
||||||
"signale": "^1.4.0",
|
"signale": "^1.4.0",
|
||||||
"sqlite3": "^4.1.1",
|
"sqlite3": "^4.1.1",
|
||||||
"temp-write": "^4.0.0"
|
"temp-write": "^4.0.0",
|
||||||
|
"unix-timestamp": "^0.2.0"
|
||||||
},
|
},
|
||||||
"signale": {
|
"signale": {
|
||||||
"displayDate": true,
|
"displayDate": true,
|
||||||
|
@ -68,32 +68,6 @@ router
|
|||||||
.catch(next);
|
.catch(next);
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* Test HTTP challenge for domains
|
|
||||||
*
|
|
||||||
* /api/nginx/certificates/test-http
|
|
||||||
*/
|
|
||||||
router
|
|
||||||
.route('/test-http')
|
|
||||||
.options((req, res) => {
|
|
||||||
res.sendStatus(204);
|
|
||||||
})
|
|
||||||
.all(jwtdecode())
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GET /api/nginx/certificates/test-http
|
|
||||||
*
|
|
||||||
* Test HTTP challenge for domains
|
|
||||||
*/
|
|
||||||
.get((req, res, next) => {
|
|
||||||
internalCertificate.testHttpsChallenge(res.locals.access, JSON.parse(req.query.domains))
|
|
||||||
.then((result) => {
|
|
||||||
res.status(200)
|
|
||||||
.send(result);
|
|
||||||
})
|
|
||||||
.catch(next);
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specific certificate
|
* Specific certificate
|
||||||
*
|
*
|
||||||
@ -235,34 +209,6 @@ router
|
|||||||
.catch(next);
|
.catch(next);
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* Download LE Certs
|
|
||||||
*
|
|
||||||
* /api/nginx/certificates/123/download
|
|
||||||
*/
|
|
||||||
router
|
|
||||||
.route('/:certificate_id/download')
|
|
||||||
.options((req, res) => {
|
|
||||||
res.sendStatus(204);
|
|
||||||
})
|
|
||||||
.all(jwtdecode())
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GET /api/nginx/certificates/123/download
|
|
||||||
*
|
|
||||||
* Renew certificate
|
|
||||||
*/
|
|
||||||
.get((req, res, next) => {
|
|
||||||
internalCertificate.download(res.locals.access, {
|
|
||||||
id: parseInt(req.params.certificate_id, 10)
|
|
||||||
})
|
|
||||||
.then((result) => {
|
|
||||||
res.status(200)
|
|
||||||
.download(result.fileName);
|
|
||||||
})
|
|
||||||
.catch(next);
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validate Certs before saving
|
* Validate Certs before saving
|
||||||
*
|
*
|
||||||
|
@ -153,7 +153,7 @@
|
|||||||
"example": "john@example.com",
|
"example": "john@example.com",
|
||||||
"format": "email",
|
"format": "email",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"minLength": 6,
|
"minLength": 8,
|
||||||
"maxLength": 100
|
"maxLength": 100
|
||||||
},
|
},
|
||||||
"password": {
|
"password": {
|
||||||
|
@ -157,17 +157,6 @@
|
|||||||
"targetSchema": {
|
"targetSchema": {
|
||||||
"type": "boolean"
|
"type": "boolean"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "Test HTTP Challenge",
|
|
||||||
"description": "Tests whether the HTTP challenge should work",
|
|
||||||
"href": "/nginx/certificates/{definitions.identity.example}/test-http",
|
|
||||||
"access": "private",
|
|
||||||
"method": "GET",
|
|
||||||
"rel": "info",
|
|
||||||
"http_header": {
|
|
||||||
"$ref": "../examples.json#/definitions/auth_header"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -20,20 +20,9 @@
|
|||||||
"minimum": 1,
|
"minimum": 1,
|
||||||
"maximum": 65535
|
"maximum": 65535
|
||||||
},
|
},
|
||||||
"forwarding_host": {
|
"forward_ip": {
|
||||||
"anyOf": [
|
"type": "string",
|
||||||
{
|
"format": "ipv4"
|
||||||
"$ref": "../definitions.json#/definitions/domain_name"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"format": "ipv4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "string",
|
|
||||||
"format": "ipv6"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"forwarding_port": {
|
"forwarding_port": {
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
@ -66,8 +55,8 @@
|
|||||||
"incoming_port": {
|
"incoming_port": {
|
||||||
"$ref": "#/definitions/incoming_port"
|
"$ref": "#/definitions/incoming_port"
|
||||||
},
|
},
|
||||||
"forwarding_host": {
|
"forward_ip": {
|
||||||
"$ref": "#/definitions/forwarding_host"
|
"$ref": "#/definitions/forward_ip"
|
||||||
},
|
},
|
||||||
"forwarding_port": {
|
"forwarding_port": {
|
||||||
"$ref": "#/definitions/forwarding_port"
|
"$ref": "#/definitions/forwarding_port"
|
||||||
@ -118,15 +107,15 @@
|
|||||||
"additionalProperties": false,
|
"additionalProperties": false,
|
||||||
"required": [
|
"required": [
|
||||||
"incoming_port",
|
"incoming_port",
|
||||||
"forwarding_host",
|
"forward_ip",
|
||||||
"forwarding_port"
|
"forwarding_port"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
"incoming_port": {
|
"incoming_port": {
|
||||||
"$ref": "#/definitions/incoming_port"
|
"$ref": "#/definitions/incoming_port"
|
||||||
},
|
},
|
||||||
"forwarding_host": {
|
"forward_ip": {
|
||||||
"$ref": "#/definitions/forwarding_host"
|
"$ref": "#/definitions/forward_ip"
|
||||||
},
|
},
|
||||||
"forwarding_port": {
|
"forwarding_port": {
|
||||||
"$ref": "#/definitions/forwarding_port"
|
"$ref": "#/definitions/forwarding_port"
|
||||||
@ -165,8 +154,8 @@
|
|||||||
"incoming_port": {
|
"incoming_port": {
|
||||||
"$ref": "#/definitions/incoming_port"
|
"$ref": "#/definitions/incoming_port"
|
||||||
},
|
},
|
||||||
"forwarding_host": {
|
"forward_ip": {
|
||||||
"$ref": "#/definitions/forwarding_host"
|
"$ref": "#/definitions/forward_ip"
|
||||||
},
|
},
|
||||||
"forwarding_port": {
|
"forwarding_port": {
|
||||||
"$ref": "#/definitions/forwarding_port"
|
"$ref": "#/definitions/forwarding_port"
|
||||||
|
@ -169,26 +169,19 @@ const setupCertbotPlugins = () => {
|
|||||||
.andWhere('provider', 'letsencrypt')
|
.andWhere('provider', 'letsencrypt')
|
||||||
.then((certificates) => {
|
.then((certificates) => {
|
||||||
if (certificates && certificates.length) {
|
if (certificates && certificates.length) {
|
||||||
let plugins = [];
|
let plugins = [];
|
||||||
let promises = [];
|
let promises = [];
|
||||||
let install_cloudflare_plugin = false;
|
|
||||||
|
|
||||||
certificates.map(function (certificate) {
|
certificates.map(function (certificate) {
|
||||||
if (certificate.meta && certificate.meta.dns_challenge === true) {
|
if (certificate.meta && certificate.meta.dns_challenge === true) {
|
||||||
const dns_plugin = dns_plugins[certificate.meta.dns_provider];
|
const dns_plugin = dns_plugins[certificate.meta.dns_provider];
|
||||||
|
const packages_to_install = `${dns_plugin.package_name}==${dns_plugin.package_version} ${dns_plugin.dependencies}`;
|
||||||
|
|
||||||
if (dns_plugin.package_name === 'certbot-dns-cloudflare') {
|
if (plugins.indexOf(packages_to_install) === -1) plugins.push(packages_to_install);
|
||||||
install_cloudflare_plugin = true;
|
|
||||||
} else {
|
|
||||||
const packages_to_install = `${dns_plugin.package_name}${dns_plugin.version_requirement || ''} ${dns_plugin.dependencies}`;
|
|
||||||
if (plugins.indexOf(packages_to_install) === -1) plugins.push(packages_to_install);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure credentials file exists
|
// Make sure credentials file exists
|
||||||
const credentials_loc = '/etc/letsencrypt/credentials/credentials-' + certificate.id;
|
const credentials_loc = '/etc/letsencrypt/credentials/credentials-' + certificate.id;
|
||||||
// Escape single quotes and backslashes
|
const credentials_cmd = '[ -f \'' + credentials_loc + '\' ] || { mkdir -p /etc/letsencrypt/credentials 2> /dev/null; echo \'' + certificate.meta.dns_provider_credentials.replace('\'', '\\\'') + '\' > \'' + credentials_loc + '\' && chmod 600 \'' + credentials_loc + '\'; }';
|
||||||
const escapedCredentials = certificate.meta.dns_provider_credentials.replaceAll('\'', '\\\'').replaceAll('\\', '\\\\');
|
|
||||||
const credentials_cmd = '[ -f \'' + credentials_loc + '\' ] || { mkdir -p /etc/letsencrypt/credentials 2> /dev/null; echo \'' + escapedCredentials + '\' > \'' + credentials_loc + '\' && chmod 600 \'' + credentials_loc + '\'; }';
|
|
||||||
promises.push(utils.exec(credentials_cmd));
|
promises.push(utils.exec(credentials_cmd));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -198,10 +191,6 @@ const setupCertbotPlugins = () => {
|
|||||||
promises.push(utils.exec(install_cmd));
|
promises.push(utils.exec(install_cmd));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (install_cloudflare_plugin) {
|
|
||||||
promises.push(utils.exec('pip install certbot-dns-cloudflare --index-url https://www.piwheels.org/simple --prefer-binary'));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (promises.length) {
|
if (promises.length) {
|
||||||
return Promise.all(promises)
|
return Promise.all(promises)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
{% if certificate -%}
|
{% if certificate -%}
|
||||||
listen 443 ssl{% if http2_support %} http2{% endif %};
|
listen 443 ssl{% if http2_support %} http2{% endif %};
|
||||||
{% if ipv6 -%}
|
{% if ipv6 -%}
|
||||||
listen [::]:443 ssl{% if http2_support %} http2{% endif %};
|
listen [::]:443;
|
||||||
{% else -%}
|
{% else -%}
|
||||||
#listen [::]:443;
|
#listen [::]:443;
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -7,17 +7,15 @@
|
|||||||
server {
|
server {
|
||||||
listen 80 default;
|
listen 80 default;
|
||||||
{% if ipv6 -%}
|
{% if ipv6 -%}
|
||||||
listen [::]:80 default;
|
listen [::]:80;
|
||||||
{% else -%}
|
{% else -%}
|
||||||
#listen [::]:80 default;
|
#listen [::]:80;
|
||||||
{% endif %}
|
{% endif %}
|
||||||
server_name default-host.localhost;
|
server_name default-host.localhost;
|
||||||
access_log /data/logs/default-host_access.log combined;
|
access_log /data/logs/default-host_access.log combined;
|
||||||
error_log /data/logs/default-host_error.log warn;
|
error_log /data/logs/default-host_error.log warn;
|
||||||
{% include "_exploits.conf" %}
|
{% include "_exploits.conf" %}
|
||||||
|
|
||||||
include conf.d/include/letsencrypt-acme-challenge.conf;
|
|
||||||
|
|
||||||
{%- if value == "404" %}
|
{%- if value == "404" %}
|
||||||
location / {
|
location / {
|
||||||
return 404;
|
return 404;
|
||||||
|
@ -12,7 +12,7 @@ server {
|
|||||||
#listen [::]:{{ incoming_port }};
|
#listen [::]:{{ incoming_port }};
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
proxy_pass {{ forwarding_host }}:{{ forwarding_port }};
|
proxy_pass {{ forward_ip }}:{{ forwarding_port }};
|
||||||
|
|
||||||
# Custom
|
# Custom
|
||||||
include /data/nginx/custom/server_stream[.]conf;
|
include /data/nginx/custom/server_stream[.]conf;
|
||||||
@ -27,7 +27,7 @@ server {
|
|||||||
{% else -%}
|
{% else -%}
|
||||||
#listen [::]:{{ incoming_port }} udp;
|
#listen [::]:{{ incoming_port }} udp;
|
||||||
{% endif %}
|
{% endif %}
|
||||||
proxy_pass {{ forwarding_host }}:{{ forwarding_port }};
|
proxy_pass {{ forward_ip }}:{{ forwarding_port }};
|
||||||
|
|
||||||
# Custom
|
# Custom
|
||||||
include /data/nginx/custom/server_stream[.]conf;
|
include /data/nginx/custom/server_stream[.]conf;
|
||||||
|
@ -77,10 +77,10 @@ acorn@^7.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c"
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c"
|
||||||
integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==
|
integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==
|
||||||
|
|
||||||
ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.6:
|
ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0:
|
||||||
version "6.12.6"
|
version "6.12.3"
|
||||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
|
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706"
|
||||||
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
|
integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==
|
||||||
dependencies:
|
dependencies:
|
||||||
fast-deep-equal "^3.1.1"
|
fast-deep-equal "^3.1.1"
|
||||||
fast-json-stable-stringify "^2.0.0"
|
fast-json-stable-stringify "^2.0.0"
|
||||||
@ -136,6 +136,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
|
|||||||
"@types/color-name" "^1.1.1"
|
"@types/color-name" "^1.1.1"
|
||||||
color-convert "^2.0.1"
|
color-convert "^2.0.1"
|
||||||
|
|
||||||
|
ansi-styles@~1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178"
|
||||||
|
integrity sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=
|
||||||
|
|
||||||
anymatch@~3.1.1:
|
anymatch@~3.1.1:
|
||||||
version "3.1.1"
|
version "3.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
|
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
|
||||||
@ -149,35 +154,6 @@ aproba@^1.0.3:
|
|||||||
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
|
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
|
||||||
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
|
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
|
||||||
|
|
||||||
archiver-utils@^2.1.0:
|
|
||||||
version "2.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2"
|
|
||||||
integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==
|
|
||||||
dependencies:
|
|
||||||
glob "^7.1.4"
|
|
||||||
graceful-fs "^4.2.0"
|
|
||||||
lazystream "^1.0.0"
|
|
||||||
lodash.defaults "^4.2.0"
|
|
||||||
lodash.difference "^4.5.0"
|
|
||||||
lodash.flatten "^4.4.0"
|
|
||||||
lodash.isplainobject "^4.0.6"
|
|
||||||
lodash.union "^4.6.0"
|
|
||||||
normalize-path "^3.0.0"
|
|
||||||
readable-stream "^2.0.0"
|
|
||||||
|
|
||||||
archiver@^5.3.0:
|
|
||||||
version "5.3.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.0.tgz#dd3e097624481741df626267564f7dd8640a45ba"
|
|
||||||
integrity sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==
|
|
||||||
dependencies:
|
|
||||||
archiver-utils "^2.1.0"
|
|
||||||
async "^3.2.0"
|
|
||||||
buffer-crc32 "^0.2.1"
|
|
||||||
readable-stream "^3.6.0"
|
|
||||||
readdir-glob "^1.0.0"
|
|
||||||
tar-stream "^2.2.0"
|
|
||||||
zip-stream "^4.1.0"
|
|
||||||
|
|
||||||
are-we-there-yet@~1.1.2:
|
are-we-there-yet@~1.1.2:
|
||||||
version "1.1.5"
|
version "1.1.5"
|
||||||
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
|
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
|
||||||
@ -245,11 +221,6 @@ astral-regex@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
|
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
|
||||||
integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
|
integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
|
||||||
|
|
||||||
async@^3.2.0:
|
|
||||||
version "3.2.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
|
|
||||||
integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
|
|
||||||
|
|
||||||
atob@^2.1.2:
|
atob@^2.1.2:
|
||||||
version "2.1.2"
|
version "2.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
|
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
|
||||||
@ -260,11 +231,6 @@ balanced-match@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||||
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
||||||
|
|
||||||
base64-js@^1.3.1:
|
|
||||||
version "1.5.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
|
|
||||||
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
|
|
||||||
|
|
||||||
base@^0.11.1:
|
base@^0.11.1:
|
||||||
version "0.11.2"
|
version "0.11.2"
|
||||||
resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
|
resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
|
||||||
@ -301,15 +267,6 @@ binary-extensions@^2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9"
|
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9"
|
||||||
integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==
|
integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==
|
||||||
|
|
||||||
bl@^4.0.3:
|
|
||||||
version "4.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
|
|
||||||
integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
|
|
||||||
dependencies:
|
|
||||||
buffer "^5.5.0"
|
|
||||||
inherits "^2.0.4"
|
|
||||||
readable-stream "^3.4.0"
|
|
||||||
|
|
||||||
blueimp-md5@^2.16.0:
|
blueimp-md5@^2.16.0:
|
||||||
version "2.17.0"
|
version "2.17.0"
|
||||||
resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.17.0.tgz#f4fcac088b115f7b4045f19f5da59e9d01b1bb96"
|
resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.17.0.tgz#f4fcac088b115f7b4045f19f5da59e9d01b1bb96"
|
||||||
@ -376,23 +333,15 @@ braces@~3.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
fill-range "^7.0.1"
|
fill-range "^7.0.1"
|
||||||
|
|
||||||
buffer-crc32@^0.2.1, buffer-crc32@^0.2.13:
|
|
||||||
version "0.2.13"
|
|
||||||
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
|
|
||||||
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
|
|
||||||
|
|
||||||
buffer-equal-constant-time@1.0.1:
|
buffer-equal-constant-time@1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
|
resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
|
||||||
integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
|
integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
|
||||||
|
|
||||||
buffer@^5.5.0:
|
buffer-writer@2.0.0:
|
||||||
version "5.7.1"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
|
resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04"
|
||||||
integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
|
integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==
|
||||||
dependencies:
|
|
||||||
base64-js "^1.3.1"
|
|
||||||
ieee754 "^1.1.13"
|
|
||||||
|
|
||||||
busboy@^0.3.1:
|
busboy@^0.3.1:
|
||||||
version "0.3.1"
|
version "0.3.1"
|
||||||
@ -454,6 +403,15 @@ camelcase@^5.0.0, camelcase@^5.3.1:
|
|||||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
|
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
|
||||||
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
|
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
|
||||||
|
|
||||||
|
chalk@^0.4.0:
|
||||||
|
version "0.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f"
|
||||||
|
integrity sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=
|
||||||
|
dependencies:
|
||||||
|
ansi-styles "~1.0.0"
|
||||||
|
has-color "~0.1.0"
|
||||||
|
strip-ansi "~0.1.0"
|
||||||
|
|
||||||
chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.2:
|
chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.2:
|
||||||
version "2.4.2"
|
version "2.4.2"
|
||||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||||
@ -499,7 +457,7 @@ chokidar@^3.2.2:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
fsevents "~2.1.2"
|
fsevents "~2.1.2"
|
||||||
|
|
||||||
chownr@^1.1.4:
|
chownr@^1.1.1:
|
||||||
version "1.1.4"
|
version "1.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
|
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
|
||||||
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
|
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
|
||||||
@ -604,16 +562,6 @@ component-emitter@^1.2.1:
|
|||||||
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
|
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
|
||||||
integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
|
integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
|
||||||
|
|
||||||
compress-commons@^4.1.0:
|
|
||||||
version "4.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.1.tgz#df2a09a7ed17447642bad10a85cc9a19e5c42a7d"
|
|
||||||
integrity sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==
|
|
||||||
dependencies:
|
|
||||||
buffer-crc32 "^0.2.13"
|
|
||||||
crc32-stream "^4.0.2"
|
|
||||||
normalize-path "^3.0.0"
|
|
||||||
readable-stream "^3.6.0"
|
|
||||||
|
|
||||||
compressible@~2.0.16:
|
compressible@~2.0.16:
|
||||||
version "2.0.18"
|
version "2.0.18"
|
||||||
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
|
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
|
||||||
@ -695,22 +643,6 @@ core-util-is@~1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||||
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
||||||
|
|
||||||
crc-32@^1.2.0:
|
|
||||||
version "1.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208"
|
|
||||||
integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==
|
|
||||||
dependencies:
|
|
||||||
exit-on-epipe "~1.0.1"
|
|
||||||
printj "~1.1.0"
|
|
||||||
|
|
||||||
crc32-stream@^4.0.2:
|
|
||||||
version "4.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.2.tgz#c922ad22b38395abe9d3870f02fa8134ed709007"
|
|
||||||
integrity sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==
|
|
||||||
dependencies:
|
|
||||||
crc-32 "^1.2.0"
|
|
||||||
readable-stream "^3.4.0"
|
|
||||||
|
|
||||||
cross-spawn@^6.0.5:
|
cross-spawn@^6.0.5:
|
||||||
version "6.0.5"
|
version "6.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
|
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
|
||||||
@ -839,6 +771,15 @@ dicer@0.3.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
streamsearch "0.1.2"
|
streamsearch "0.1.2"
|
||||||
|
|
||||||
|
diskdb@^0.1.17:
|
||||||
|
version "0.1.17"
|
||||||
|
resolved "https://registry.yarnpkg.com/diskdb/-/diskdb-0.1.17.tgz#8abd095196b33b406791f1494b6b13b4422240c4"
|
||||||
|
integrity sha1-ir0JUZazO0BnkfFJS2sTtEIiQMQ=
|
||||||
|
dependencies:
|
||||||
|
chalk "^0.4.0"
|
||||||
|
merge "^1.1.3"
|
||||||
|
node-uuid "^1.4.1"
|
||||||
|
|
||||||
doctrine@^3.0.0:
|
doctrine@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
|
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
|
||||||
@ -890,7 +831,7 @@ encodeurl@~1.0.2:
|
|||||||
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
|
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
|
||||||
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
|
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
|
||||||
|
|
||||||
end-of-stream@^1.1.0, end-of-stream@^1.4.1:
|
end-of-stream@^1.1.0:
|
||||||
version "1.4.4"
|
version "1.4.4"
|
||||||
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
|
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
|
||||||
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
|
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
|
||||||
@ -1040,11 +981,6 @@ etag@~1.8.1:
|
|||||||
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
|
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
|
||||||
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
|
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
|
||||||
|
|
||||||
exit-on-epipe@~1.0.1:
|
|
||||||
version "1.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692"
|
|
||||||
integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==
|
|
||||||
|
|
||||||
expand-brackets@^2.1.4:
|
expand-brackets@^2.1.4:
|
||||||
version "2.1.4"
|
version "2.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
|
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
|
||||||
@ -1301,12 +1237,7 @@ fresh@0.5.2:
|
|||||||
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
|
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
|
||||||
integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
|
integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
|
||||||
|
|
||||||
fs-constants@^1.0.0:
|
fs-minipass@^1.2.5:
|
||||||
version "1.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
|
|
||||||
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
|
|
||||||
|
|
||||||
fs-minipass@^1.2.7:
|
|
||||||
version "1.2.7"
|
version "1.2.7"
|
||||||
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
|
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
|
||||||
integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
|
integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
|
||||||
@ -1390,18 +1321,6 @@ glob@^7.1.3:
|
|||||||
once "^1.3.0"
|
once "^1.3.0"
|
||||||
path-is-absolute "^1.0.0"
|
path-is-absolute "^1.0.0"
|
||||||
|
|
||||||
glob@^7.1.4:
|
|
||||||
version "7.1.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
|
|
||||||
integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
|
|
||||||
dependencies:
|
|
||||||
fs.realpath "^1.0.0"
|
|
||||||
inflight "^1.0.4"
|
|
||||||
inherits "2"
|
|
||||||
minimatch "^3.0.4"
|
|
||||||
once "^1.3.0"
|
|
||||||
path-is-absolute "^1.0.0"
|
|
||||||
|
|
||||||
global-dirs@^2.0.1:
|
global-dirs@^2.0.1:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201"
|
resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201"
|
||||||
@ -1458,11 +1377,6 @@ graceful-fs@^4.1.15, graceful-fs@^4.1.2:
|
|||||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
|
||||||
integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
|
integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
|
||||||
|
|
||||||
graceful-fs@^4.2.0:
|
|
||||||
version "4.2.8"
|
|
||||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
|
|
||||||
integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==
|
|
||||||
|
|
||||||
gravatar@^1.8.0:
|
gravatar@^1.8.0:
|
||||||
version "1.8.1"
|
version "1.8.1"
|
||||||
resolved "https://registry.yarnpkg.com/gravatar/-/gravatar-1.8.1.tgz#743bbdf3185c3433172e00e0e6ff5f6b30c58997"
|
resolved "https://registry.yarnpkg.com/gravatar/-/gravatar-1.8.1.tgz#743bbdf3185c3433172e00e0e6ff5f6b30c58997"
|
||||||
@ -1473,6 +1387,11 @@ gravatar@^1.8.0:
|
|||||||
querystring "0.2.0"
|
querystring "0.2.0"
|
||||||
yargs "^15.4.1"
|
yargs "^15.4.1"
|
||||||
|
|
||||||
|
has-color@~0.1.0:
|
||||||
|
version "0.1.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f"
|
||||||
|
integrity sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=
|
||||||
|
|
||||||
has-flag@^3.0.0:
|
has-flag@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
||||||
@ -1531,6 +1450,11 @@ homedir-polyfill@^1.0.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
parse-passwd "^1.0.0"
|
parse-passwd "^1.0.0"
|
||||||
|
|
||||||
|
html-entities@^1.2.1:
|
||||||
|
version "1.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44"
|
||||||
|
integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==
|
||||||
|
|
||||||
http-cache-semantics@^4.0.0:
|
http-cache-semantics@^4.0.0:
|
||||||
version "4.1.0"
|
version "4.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
|
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
|
||||||
@ -1558,6 +1482,11 @@ http-errors@~1.7.2:
|
|||||||
statuses ">= 1.5.0 < 2"
|
statuses ">= 1.5.0 < 2"
|
||||||
toidentifier "1.0.0"
|
toidentifier "1.0.0"
|
||||||
|
|
||||||
|
iconv-lite@0.2.11:
|
||||||
|
version "0.2.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.2.11.tgz#1ce60a3a57864a292d1321ff4609ca4bb965adc8"
|
||||||
|
integrity sha1-HOYKOleGSiktEyH/RgnKS7llrcg=
|
||||||
|
|
||||||
iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
|
iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
|
||||||
version "0.4.24"
|
version "0.4.24"
|
||||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
||||||
@ -1565,11 +1494,6 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
|
|||||||
dependencies:
|
dependencies:
|
||||||
safer-buffer ">= 2.1.2 < 3"
|
safer-buffer ">= 2.1.2 < 3"
|
||||||
|
|
||||||
ieee754@^1.1.13:
|
|
||||||
version "1.2.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
|
|
||||||
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
|
|
||||||
|
|
||||||
ignore-by-default@^1.0.1:
|
ignore-by-default@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
|
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
|
||||||
@ -1613,7 +1537,7 @@ inflight@^1.0.4:
|
|||||||
once "^1.3.0"
|
once "^1.3.0"
|
||||||
wrappy "1"
|
wrappy "1"
|
||||||
|
|
||||||
inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4:
|
inherits@2, inherits@2.0.4, inherits@~2.0.3, inherits@~2.0.4:
|
||||||
version "2.0.4"
|
version "2.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||||
@ -2013,13 +1937,6 @@ latest-version@^5.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
package-json "^6.3.0"
|
package-json "^6.3.0"
|
||||||
|
|
||||||
lazystream@^1.0.0:
|
|
||||||
version "1.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4"
|
|
||||||
integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=
|
|
||||||
dependencies:
|
|
||||||
readable-stream "^2.0.5"
|
|
||||||
|
|
||||||
levn@^0.3.0, levn@~0.3.0:
|
levn@^0.3.0, levn@~0.3.0:
|
||||||
version "0.3.0"
|
version "0.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
|
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
|
||||||
@ -2072,21 +1989,6 @@ locate-path@^5.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
p-locate "^4.1.0"
|
p-locate "^4.1.0"
|
||||||
|
|
||||||
lodash.defaults@^4.2.0:
|
|
||||||
version "4.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
|
|
||||||
integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=
|
|
||||||
|
|
||||||
lodash.difference@^4.5.0:
|
|
||||||
version "4.5.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c"
|
|
||||||
integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=
|
|
||||||
|
|
||||||
lodash.flatten@^4.4.0:
|
|
||||||
version "4.4.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
|
|
||||||
integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
|
|
||||||
|
|
||||||
lodash.includes@^4.3.0:
|
lodash.includes@^4.3.0:
|
||||||
version "4.3.0"
|
version "4.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
|
resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
|
||||||
@ -2122,11 +2024,6 @@ lodash.once@^4.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
|
resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
|
||||||
integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=
|
integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=
|
||||||
|
|
||||||
lodash.union@^4.6.0:
|
|
||||||
version "4.6.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88"
|
|
||||||
integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=
|
|
||||||
|
|
||||||
lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21:
|
lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21:
|
||||||
version "4.17.21"
|
version "4.17.21"
|
||||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||||
@ -2178,6 +2075,11 @@ merge-descriptors@1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
|
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
|
||||||
integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
|
integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
|
||||||
|
|
||||||
|
merge@^1.1.3:
|
||||||
|
version "1.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145"
|
||||||
|
integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==
|
||||||
|
|
||||||
methods@~1.1.2:
|
methods@~1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
|
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
|
||||||
@ -2241,7 +2143,7 @@ minimist@^1.2.0, minimist@^1.2.5:
|
|||||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
|
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
|
||||||
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
||||||
|
|
||||||
minipass@^2.6.0, minipass@^2.9.0:
|
minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
|
||||||
version "2.9.0"
|
version "2.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
|
resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
|
||||||
integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
|
integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
|
||||||
@ -2249,7 +2151,7 @@ minipass@^2.6.0, minipass@^2.9.0:
|
|||||||
safe-buffer "^5.1.2"
|
safe-buffer "^5.1.2"
|
||||||
yallist "^3.0.0"
|
yallist "^3.0.0"
|
||||||
|
|
||||||
minizlib@^1.3.3:
|
minizlib@^1.2.1:
|
||||||
version "1.3.3"
|
version "1.3.3"
|
||||||
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
|
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
|
||||||
integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
|
integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
|
||||||
@ -2264,17 +2166,17 @@ mixin-deep@^1.2.0:
|
|||||||
for-in "^1.0.2"
|
for-in "^1.0.2"
|
||||||
is-extendable "^1.0.1"
|
is-extendable "^1.0.1"
|
||||||
|
|
||||||
mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5:
|
mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3:
|
||||||
version "0.5.5"
|
version "0.5.5"
|
||||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
|
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
|
||||||
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
|
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
minimist "^1.2.5"
|
minimist "^1.2.5"
|
||||||
|
|
||||||
moment@^2.29.4:
|
moment@^2.24.0:
|
||||||
version "2.29.4"
|
version "2.27.0"
|
||||||
resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108"
|
resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d"
|
||||||
integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
|
integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==
|
||||||
|
|
||||||
ms@2.0.0:
|
ms@2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
@ -2396,6 +2298,11 @@ node-rsa@^1.0.8:
|
|||||||
dependencies:
|
dependencies:
|
||||||
asn1 "^0.2.4"
|
asn1 "^0.2.4"
|
||||||
|
|
||||||
|
node-uuid@^1.4.1:
|
||||||
|
version "1.4.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907"
|
||||||
|
integrity sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=
|
||||||
|
|
||||||
nodemon@^2.0.2:
|
nodemon@^2.0.2:
|
||||||
version "2.0.4"
|
version "2.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.4.tgz#55b09319eb488d6394aa9818148c0c2d1c04c416"
|
resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.4.tgz#55b09319eb488d6394aa9818148c0c2d1c04c416"
|
||||||
@ -2433,9 +2340,9 @@ normalize-path@^3.0.0, normalize-path@~3.0.0:
|
|||||||
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
|
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
|
||||||
|
|
||||||
normalize-url@^4.1.0:
|
normalize-url@^4.1.0:
|
||||||
version "4.5.1"
|
version "4.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a"
|
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129"
|
||||||
integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==
|
integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==
|
||||||
|
|
||||||
npm-bundled@^1.0.1:
|
npm-bundled@^1.0.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
@ -2519,12 +2426,12 @@ object.pick@^1.2.0, object.pick@^1.3.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
isobject "^3.0.1"
|
isobject "^3.0.1"
|
||||||
|
|
||||||
objection@^2.2.16:
|
objection@^2.1.3:
|
||||||
version "2.2.16"
|
version "2.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/objection/-/objection-2.2.16.tgz#552ec6d625a7f80d6e204fc63732cbd3fc56f31c"
|
resolved "https://registry.yarnpkg.com/objection/-/objection-2.2.2.tgz#1a3c9010270e3677940d2bc91aeaeb3c0f103800"
|
||||||
integrity sha512-sq8erZdxW5ruPUK6tVvwDxyO16U49XAn/BmOm2zaNhNA2phOPCe2/7+R70nDEF1SFrgJOrwDu/PtoxybuJxnjQ==
|
integrity sha512-+1Ap7u9NQRochzDW5/BggUlKi94JfZGTJwQJuNXo8DwmAb8czEirvxcWBcX91/MmQq0BQUJjM4RPSiZhnkkWQw==
|
||||||
dependencies:
|
dependencies:
|
||||||
ajv "^6.12.6"
|
ajv "^6.12.0"
|
||||||
db-errors "^0.2.3"
|
db-errors "^0.2.3"
|
||||||
|
|
||||||
on-finished@~2.3.0:
|
on-finished@~2.3.0:
|
||||||
@ -2636,6 +2543,11 @@ package-json@^6.3.0:
|
|||||||
registry-url "^5.0.0"
|
registry-url "^5.0.0"
|
||||||
semver "^6.2.0"
|
semver "^6.2.0"
|
||||||
|
|
||||||
|
packet-reader@1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74"
|
||||||
|
integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==
|
||||||
|
|
||||||
parent-module@^1.0.0:
|
parent-module@^1.0.0:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
|
resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
|
||||||
@ -2696,9 +2608,9 @@ path-key@^2.0.1:
|
|||||||
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
|
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
|
||||||
|
|
||||||
path-parse@^1.0.6:
|
path-parse@^1.0.6:
|
||||||
version "1.0.7"
|
version "1.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
|
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
|
||||||
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
|
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
|
||||||
|
|
||||||
path-root-regex@^0.1.0:
|
path-root-regex@^0.1.0:
|
||||||
version "0.1.2"
|
version "0.1.2"
|
||||||
@ -2725,11 +2637,63 @@ path@^0.12.7:
|
|||||||
process "^0.11.1"
|
process "^0.11.1"
|
||||||
util "^0.10.3"
|
util "^0.10.3"
|
||||||
|
|
||||||
|
pg-connection-string@0.1.3:
|
||||||
|
version "0.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-0.1.3.tgz#da1847b20940e42ee1492beaf65d49d91b245df7"
|
||||||
|
integrity sha1-2hhHsglA5C7hSSvq9l1J2RskXfc=
|
||||||
|
|
||||||
pg-connection-string@2.1.0:
|
pg-connection-string@2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.1.0.tgz#e07258f280476540b24818ebb5dca29e101ca502"
|
resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.1.0.tgz#e07258f280476540b24818ebb5dca29e101ca502"
|
||||||
integrity sha512-bhlV7Eq09JrRIvo1eKngpwuqKtJnNhZdpdOlvrPrA4dxqXPjxSrbNrfnIDmTpwMyRszrcV4kU5ZA4mMsQUrjdg==
|
integrity sha512-bhlV7Eq09JrRIvo1eKngpwuqKtJnNhZdpdOlvrPrA4dxqXPjxSrbNrfnIDmTpwMyRszrcV4kU5ZA4mMsQUrjdg==
|
||||||
|
|
||||||
|
pg-int8@1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c"
|
||||||
|
integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==
|
||||||
|
|
||||||
|
pg-packet-stream@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/pg-packet-stream/-/pg-packet-stream-1.1.0.tgz#e45c3ae678b901a2873af1e17b92d787962ef914"
|
||||||
|
integrity sha512-kRBH0tDIW/8lfnnOyTwKD23ygJ/kexQVXZs7gEyBljw4FYqimZFxnMMx50ndZ8In77QgfGuItS5LLclC2TtjYg==
|
||||||
|
|
||||||
|
pg-pool@^2.0.10:
|
||||||
|
version "2.0.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-2.0.10.tgz#842ee23b04e86824ce9d786430f8365082d81c4a"
|
||||||
|
integrity sha512-qdwzY92bHf3nwzIUcj+zJ0Qo5lpG/YxchahxIN8+ZVmXqkahKXsnl2aiJPHLYN9o5mB/leG+Xh6XKxtP7e0sjg==
|
||||||
|
|
||||||
|
pg-types@^2.1.0:
|
||||||
|
version "2.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3"
|
||||||
|
integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==
|
||||||
|
dependencies:
|
||||||
|
pg-int8 "1.0.1"
|
||||||
|
postgres-array "~2.0.0"
|
||||||
|
postgres-bytea "~1.0.0"
|
||||||
|
postgres-date "~1.0.4"
|
||||||
|
postgres-interval "^1.1.0"
|
||||||
|
|
||||||
|
pg@^7.12.1:
|
||||||
|
version "7.18.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/pg/-/pg-7.18.2.tgz#4e219f05a00aff4db6aab1ba02f28ffa4513b0bb"
|
||||||
|
integrity sha512-Mvt0dGYMwvEADNKy5PMQGlzPudKcKKzJds/VbOeZJpb6f/pI3mmoXX0JksPgI3l3JPP/2Apq7F36O63J7mgveA==
|
||||||
|
dependencies:
|
||||||
|
buffer-writer "2.0.0"
|
||||||
|
packet-reader "1.0.0"
|
||||||
|
pg-connection-string "0.1.3"
|
||||||
|
pg-packet-stream "^1.1.0"
|
||||||
|
pg-pool "^2.0.10"
|
||||||
|
pg-types "^2.1.0"
|
||||||
|
pgpass "1.x"
|
||||||
|
semver "4.3.2"
|
||||||
|
|
||||||
|
pgpass@1.x:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.2.tgz#2a7bb41b6065b67907e91da1b07c1847c877b306"
|
||||||
|
integrity sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=
|
||||||
|
dependencies:
|
||||||
|
split "^1.0.0"
|
||||||
|
|
||||||
picomatch@^2.0.4, picomatch@^2.2.1:
|
picomatch@^2.0.4, picomatch@^2.2.1:
|
||||||
version "2.2.2"
|
version "2.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
|
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
|
||||||
@ -2753,6 +2717,28 @@ posix-character-classes@^0.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
|
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
|
||||||
integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
|
integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
|
||||||
|
|
||||||
|
postgres-array@~2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e"
|
||||||
|
integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==
|
||||||
|
|
||||||
|
postgres-bytea@~1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35"
|
||||||
|
integrity sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=
|
||||||
|
|
||||||
|
postgres-date@~1.0.4:
|
||||||
|
version "1.0.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.6.tgz#4925e8085b30c2ba1a06ac91b9a3473954a2ce2d"
|
||||||
|
integrity sha512-o2a4gxeFcox+CgB3Ig/kNHBP23PiEXHCXx7pcIIsvzoNz4qv+lKTyiSkjOXIMNUl12MO/mOYl2K6wR9X5K6Plg==
|
||||||
|
|
||||||
|
postgres-interval@^1.1.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695"
|
||||||
|
integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==
|
||||||
|
dependencies:
|
||||||
|
xtend "^4.0.0"
|
||||||
|
|
||||||
prelude-ls@~1.1.2:
|
prelude-ls@~1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
|
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
|
||||||
@ -2768,11 +2754,6 @@ prettier@^2.0.4:
|
|||||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4"
|
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4"
|
||||||
integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==
|
integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==
|
||||||
|
|
||||||
printj@~1.1.0:
|
|
||||||
version "1.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222"
|
|
||||||
integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==
|
|
||||||
|
|
||||||
process-nextick-args@~2.0.0:
|
process-nextick-args@~2.0.0:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
|
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
|
||||||
@ -2821,6 +2802,11 @@ pupa@^2.0.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
escape-goat "^2.0.0"
|
escape-goat "^2.0.0"
|
||||||
|
|
||||||
|
qs@1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/qs/-/qs-1.2.0.tgz#ed079be28682147e6fd9a34cc2b0c1e0ec6453ee"
|
||||||
|
integrity sha1-7Qeb4oaCFH5v2aNMwrDB4OxkU+4=
|
||||||
|
|
||||||
qs@6.7.0:
|
qs@6.7.0:
|
||||||
version "6.7.0"
|
version "6.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
|
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
|
||||||
@ -2856,7 +2842,7 @@ rc@^1.2.7, rc@^1.2.8:
|
|||||||
minimist "^1.2.0"
|
minimist "^1.2.0"
|
||||||
strip-json-comments "~2.0.1"
|
strip-json-comments "~2.0.1"
|
||||||
|
|
||||||
readable-stream@2.3.7, readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.0.6:
|
readable-stream@2.3.7, readable-stream@^2.0.6:
|
||||||
version "2.3.7"
|
version "2.3.7"
|
||||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
|
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
|
||||||
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
|
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
|
||||||
@ -2869,22 +2855,6 @@ readable-stream@2.3.7, readable-stream@^2.0.0, readable-stream@^2.0.5, readable-
|
|||||||
string_decoder "~1.1.1"
|
string_decoder "~1.1.1"
|
||||||
util-deprecate "~1.0.1"
|
util-deprecate "~1.0.1"
|
||||||
|
|
||||||
readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
|
|
||||||
version "3.6.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
|
||||||
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
|
|
||||||
dependencies:
|
|
||||||
inherits "^2.0.3"
|
|
||||||
string_decoder "^1.1.1"
|
|
||||||
util-deprecate "^1.0.1"
|
|
||||||
|
|
||||||
readdir-glob@^1.0.0:
|
|
||||||
version "1.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz#f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4"
|
|
||||||
integrity sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==
|
|
||||||
dependencies:
|
|
||||||
minimatch "^3.0.4"
|
|
||||||
|
|
||||||
readdirp@~3.4.0:
|
readdirp@~3.4.0:
|
||||||
version "3.4.0"
|
version "3.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada"
|
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada"
|
||||||
@ -2978,6 +2948,16 @@ responselike@^1.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
lowercase-keys "^1.0.0"
|
lowercase-keys "^1.0.0"
|
||||||
|
|
||||||
|
restler@^3.4.0:
|
||||||
|
version "3.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/restler/-/restler-3.4.0.tgz#741ec0b3d16b949feea2813d0c3c68529e888d9b"
|
||||||
|
integrity sha1-dB7As9FrlJ/uooE9DDxoUp6IjZs=
|
||||||
|
dependencies:
|
||||||
|
iconv-lite "0.2.11"
|
||||||
|
qs "1.2.0"
|
||||||
|
xml2js "0.4.0"
|
||||||
|
yaml "0.2.3"
|
||||||
|
|
||||||
restore-cursor@^3.1.0:
|
restore-cursor@^3.1.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
|
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
|
||||||
@ -3022,7 +3002,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
||||||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
||||||
|
|
||||||
safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0:
|
safe-buffer@^5.0.1, safe-buffer@^5.1.2:
|
||||||
version "5.2.1"
|
version "5.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
||||||
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
||||||
@ -3039,6 +3019,11 @@ safe-regex@^1.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||||
|
|
||||||
|
sax@0.5.x:
|
||||||
|
version "0.5.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1"
|
||||||
|
integrity sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=
|
||||||
|
|
||||||
sax@^1.2.4:
|
sax@^1.2.4:
|
||||||
version "1.2.4"
|
version "1.2.4"
|
||||||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
||||||
@ -3051,6 +3036,11 @@ semver-diff@^3.1.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
semver "^6.3.0"
|
semver "^6.3.0"
|
||||||
|
|
||||||
|
semver@4.3.2:
|
||||||
|
version "4.3.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.2.tgz#c7a07158a80bedd052355b770d82d6640f803be7"
|
||||||
|
integrity sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=
|
||||||
|
|
||||||
semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1:
|
semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1:
|
||||||
version "5.7.1"
|
version "5.7.1"
|
||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
||||||
@ -3203,6 +3193,13 @@ split-string@^3.0.1, split-string@^3.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
extend-shallow "^3.0.0"
|
extend-shallow "^3.0.0"
|
||||||
|
|
||||||
|
split@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9"
|
||||||
|
integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==
|
||||||
|
dependencies:
|
||||||
|
through "2"
|
||||||
|
|
||||||
sprintf-js@~1.0.2:
|
sprintf-js@~1.0.2:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
||||||
@ -3274,13 +3271,6 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0:
|
|||||||
is-fullwidth-code-point "^3.0.0"
|
is-fullwidth-code-point "^3.0.0"
|
||||||
strip-ansi "^6.0.0"
|
strip-ansi "^6.0.0"
|
||||||
|
|
||||||
string_decoder@^1.1.1:
|
|
||||||
version "1.3.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
|
|
||||||
integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
|
|
||||||
dependencies:
|
|
||||||
safe-buffer "~5.2.0"
|
|
||||||
|
|
||||||
string_decoder@~1.1.1:
|
string_decoder@~1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
|
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
|
||||||
@ -3316,6 +3306,11 @@ strip-ansi@^6.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ansi-regex "^5.0.0"
|
ansi-regex "^5.0.0"
|
||||||
|
|
||||||
|
strip-ansi@~0.1.0:
|
||||||
|
version "0.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991"
|
||||||
|
integrity sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=
|
||||||
|
|
||||||
strip-bom@^3.0.0:
|
strip-bom@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
|
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
|
||||||
@ -3355,29 +3350,18 @@ table@^5.2.3:
|
|||||||
slice-ansi "^2.1.0"
|
slice-ansi "^2.1.0"
|
||||||
string-width "^3.0.0"
|
string-width "^3.0.0"
|
||||||
|
|
||||||
tar-stream@^2.2.0:
|
|
||||||
version "2.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
|
|
||||||
integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
|
|
||||||
dependencies:
|
|
||||||
bl "^4.0.3"
|
|
||||||
end-of-stream "^1.4.1"
|
|
||||||
fs-constants "^1.0.0"
|
|
||||||
inherits "^2.0.3"
|
|
||||||
readable-stream "^3.1.1"
|
|
||||||
|
|
||||||
tar@^4, tar@^4.4.2:
|
tar@^4, tar@^4.4.2:
|
||||||
version "4.4.19"
|
version "4.4.13"
|
||||||
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3"
|
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"
|
||||||
integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==
|
integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==
|
||||||
dependencies:
|
dependencies:
|
||||||
chownr "^1.1.4"
|
chownr "^1.1.1"
|
||||||
fs-minipass "^1.2.7"
|
fs-minipass "^1.2.5"
|
||||||
minipass "^2.9.0"
|
minipass "^2.8.6"
|
||||||
minizlib "^1.3.3"
|
minizlib "^1.2.1"
|
||||||
mkdirp "^0.5.5"
|
mkdirp "^0.5.0"
|
||||||
safe-buffer "^5.2.1"
|
safe-buffer "^5.1.2"
|
||||||
yallist "^3.1.1"
|
yallist "^3.0.3"
|
||||||
|
|
||||||
tarn@^2.0.0:
|
tarn@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
@ -3410,7 +3394,7 @@ text-table@^0.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
||||||
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
|
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
|
||||||
|
|
||||||
through@^2.3.6:
|
through@2, through@^2.3.6:
|
||||||
version "2.3.8"
|
version "2.3.8"
|
||||||
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||||
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
|
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
|
||||||
@ -3542,6 +3526,11 @@ unique-string@^2.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
crypto-random-string "^2.0.0"
|
crypto-random-string "^2.0.0"
|
||||||
|
|
||||||
|
unix-timestamp@^0.2.0:
|
||||||
|
version "0.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/unix-timestamp/-/unix-timestamp-0.2.0.tgz#e1cdc2808df6327d27e635d9351e72815288733e"
|
||||||
|
integrity sha1-4c3CgI32Mn0n5jXZNR5ygVKIcz4=
|
||||||
|
|
||||||
unpipe@1.0.0, unpipe@~1.0.0:
|
unpipe@1.0.0, unpipe@~1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
|
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
|
||||||
@ -3598,7 +3587,7 @@ use@^3.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
|
resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
|
||||||
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
|
integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
|
||||||
|
|
||||||
util-deprecate@^1.0.1, util-deprecate@~1.0.1:
|
util-deprecate@~1.0.1:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||||
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
|
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
|
||||||
@ -3709,16 +3698,39 @@ xdg-basedir@^4.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
|
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
|
||||||
integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
|
integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
|
||||||
|
|
||||||
|
xml2js@0.4.0:
|
||||||
|
version "0.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.0.tgz#124fc4114b4129c810800ecb2ac86cf25462cb9a"
|
||||||
|
integrity sha1-Ek/EEUtBKcgQgA7LKshs8lRiy5o=
|
||||||
|
dependencies:
|
||||||
|
sax "0.5.x"
|
||||||
|
xmlbuilder ">=0.4.2"
|
||||||
|
|
||||||
|
xmlbuilder@>=0.4.2:
|
||||||
|
version "15.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"
|
||||||
|
integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==
|
||||||
|
|
||||||
|
xtend@^4.0.0:
|
||||||
|
version "4.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
|
||||||
|
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
|
||||||
|
|
||||||
y18n@^4.0.0:
|
y18n@^4.0.0:
|
||||||
version "4.0.1"
|
version "4.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4"
|
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4"
|
||||||
integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==
|
integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==
|
||||||
|
|
||||||
yallist@^3.0.0, yallist@^3.1.1:
|
yallist@^3.0.0, yallist@^3.0.3:
|
||||||
version "3.1.1"
|
version "3.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
|
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
|
||||||
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
|
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
|
||||||
|
|
||||||
|
yaml@0.2.3:
|
||||||
|
version "0.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/yaml/-/yaml-0.2.3.tgz#b5450e92e76ef36b5dd24e3660091ebaeef3e5c7"
|
||||||
|
integrity sha1-tUUOkudu82td0k42YAkeuu7z5cc=
|
||||||
|
|
||||||
yargs-parser@^18.1.2:
|
yargs-parser@^18.1.2:
|
||||||
version "18.1.3"
|
version "18.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
|
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
|
||||||
@ -3743,12 +3755,3 @@ yargs@^15.4.1:
|
|||||||
which-module "^2.0.0"
|
which-module "^2.0.0"
|
||||||
y18n "^4.0.0"
|
y18n "^4.0.0"
|
||||||
yargs-parser "^18.1.2"
|
yargs-parser "^18.1.2"
|
||||||
|
|
||||||
zip-stream@^4.1.0:
|
|
||||||
version "4.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.0.tgz#51dd326571544e36aa3f756430b313576dc8fc79"
|
|
||||||
integrity sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==
|
|
||||||
dependencies:
|
|
||||||
archiver-utils "^2.1.0"
|
|
||||||
compress-commons "^4.1.0"
|
|
||||||
readable-stream "^3.6.0"
|
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
rules:
|
|
||||||
# If the efficiency is measured below X%, mark as failed.
|
|
||||||
# Expressed as a ratio between 0-1.
|
|
||||||
lowestEfficiency: 0.99
|
|
||||||
|
|
||||||
# If the amount of wasted space is at least X or larger than X, mark as failed.
|
|
||||||
# Expressed in B, KB, MB, and GB.
|
|
||||||
highestWastedBytes: 15MB
|
|
||||||
|
|
||||||
# If the amount of wasted space makes up for X% or more of the image, mark as failed.
|
|
||||||
# Note: the base image layer is NOT included in the total image size.
|
|
||||||
# Expressed as a ratio between 0-1; fails if the threshold is met or crossed.
|
|
||||||
highestUserWastedPercent: 0.02
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
# This file assumes that the frontend has been built using ./scripts/frontend-build
|
# This file assumes that the frontend has been built using ./scripts/frontend-build
|
||||||
|
|
||||||
FROM nginxproxymanager/nginx-full:certbot-node
|
FROM jc21/nginx-full:node
|
||||||
|
|
||||||
ARG TARGETPLATFORM
|
ARG TARGETPLATFORM
|
||||||
ARG BUILD_VERSION
|
ARG BUILD_VERSION
|
||||||
@ -46,13 +46,9 @@ RUN rm -rf /etc/services.d/frontend /etc/nginx/conf.d/dev.conf
|
|||||||
# Change permission of logrotate config file
|
# Change permission of logrotate config file
|
||||||
RUN chmod 644 /etc/logrotate.d/nginx-proxy-manager
|
RUN chmod 644 /etc/logrotate.d/nginx-proxy-manager
|
||||||
|
|
||||||
# fix for pip installs
|
|
||||||
# https://github.com/NginxProxyManager/nginx-proxy-manager/issues/1769
|
|
||||||
RUN pip uninstall --yes setuptools \
|
|
||||||
&& pip install "setuptools==58.0.0"
|
|
||||||
|
|
||||||
VOLUME [ "/data", "/etc/letsencrypt" ]
|
VOLUME [ "/data", "/etc/letsencrypt" ]
|
||||||
ENTRYPOINT [ "/init" ]
|
ENTRYPOINT [ "/init" ]
|
||||||
|
HEALTHCHECK --interval=5s --timeout=3s CMD /bin/check-health
|
||||||
|
|
||||||
LABEL org.label-schema.schema-version="1.0" \
|
LABEL org.label-schema.schema-version="1.0" \
|
||||||
org.label-schema.license="MIT" \
|
org.label-schema.license="MIT" \
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
FROM nginxproxymanager/nginx-full:certbot-node
|
FROM jc21/nginx-full:node
|
||||||
LABEL maintainer="Jamie Curnow <jc@jc21.com>"
|
LABEL maintainer="Jamie Curnow <jc@jc21.com>"
|
||||||
|
|
||||||
ENV S6_LOGGING=0 \
|
ENV S6_LOGGING=0 \
|
||||||
@ -26,4 +26,4 @@ RUN curl -L -o /tmp/s6-overlay-amd64.tar.gz "https://github.com/just-containers/
|
|||||||
|
|
||||||
EXPOSE 80 81 443
|
EXPOSE 80 81 443
|
||||||
ENTRYPOINT [ "/init" ]
|
ENTRYPOINT [ "/init" ]
|
||||||
|
HEALTHCHECK --interval=5s --timeout=3s CMD /bin/check-health
|
||||||
|
@ -20,10 +20,6 @@ services:
|
|||||||
- 443
|
- 443
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
- db
|
||||||
healthcheck:
|
|
||||||
test: ["CMD", "/bin/check-health"]
|
|
||||||
interval: 10s
|
|
||||||
timeout: 3s
|
|
||||||
|
|
||||||
fullstack-sqlite:
|
fullstack-sqlite:
|
||||||
image: ${IMAGE}:ci-${BUILD_NUMBER}
|
image: ${IMAGE}:ci-${BUILD_NUMBER}
|
||||||
@ -37,10 +33,6 @@ services:
|
|||||||
- 81
|
- 81
|
||||||
- 80
|
- 80
|
||||||
- 443
|
- 443
|
||||||
healthcheck:
|
|
||||||
test: ["CMD", "/bin/check-health"]
|
|
||||||
interval: 10s
|
|
||||||
timeout: 3s
|
|
||||||
|
|
||||||
db:
|
db:
|
||||||
image: jc21/mariadb-aria
|
image: jc21/mariadb-aria
|
||||||
|
@ -37,8 +37,6 @@ services:
|
|||||||
db:
|
db:
|
||||||
image: jc21/mariadb-aria
|
image: jc21/mariadb-aria
|
||||||
container_name: npm_db
|
container_name: npm_db
|
||||||
ports:
|
|
||||||
- 33306:3306
|
|
||||||
networks:
|
networks:
|
||||||
- nginx_proxy_manager
|
- nginx_proxy_manager
|
||||||
environment:
|
environment:
|
||||||
@ -49,6 +47,19 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- db_data:/var/lib/mysql
|
- db_data:/var/lib/mysql
|
||||||
|
|
||||||
|
swagger:
|
||||||
|
image: "swaggerapi/swagger-ui:latest"
|
||||||
|
container_name: npm_swagger
|
||||||
|
ports:
|
||||||
|
- 3001:80
|
||||||
|
networks:
|
||||||
|
- nginx_proxy_manager
|
||||||
|
environment:
|
||||||
|
URL: "http://127.0.0.1:3081/api/schema"
|
||||||
|
PORT: "80"
|
||||||
|
depends_on:
|
||||||
|
- npm
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
npm_data:
|
npm_data:
|
||||||
name: npm_core_data
|
name: npm_core_data
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# ref: https://github.com/linuxserver/docker-baseimage-alpine/blob/master/root/etc/cont-init.d/01-envfile
|
# ref: https://github.com/linuxserver/docker-baseimage-alpine/blob/master/root/etc/cont-init.d/01-envfile
|
||||||
|
|
||||||
# in s6, environmental variables are written as text files for s6 to monitor
|
# in s6, environmental variables are written as text files for s6 to monitor
|
||||||
# search through full-path filenames for files ending in "__FILE"
|
# seach through full-path filenames for files ending in "__FILE"
|
||||||
for FILENAME in $(find /var/run/s6/container_environment/ | grep "__FILE$"); do
|
for FILENAME in $(find /var/run/s6/container_environment/ | grep "__FILE$"); do
|
||||||
echo "[secret-init] Evaluating ${FILENAME##*/} ..."
|
echo "[secret-init] Evaluating ${FILENAME##*/} ..."
|
||||||
|
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
text = True
|
text = True
|
||||||
non-interactive = True
|
non-interactive = True
|
||||||
|
authenticator = webroot
|
||||||
webroot-path = /data/letsencrypt-acme-challenge
|
webroot-path = /data/letsencrypt-acme-challenge
|
||||||
key-type = ecdsa
|
|
||||||
elliptic-curve = secp384r1
|
|
||||||
preferred-chain = ISRG Root X1
|
|
||||||
|
@ -9,10 +9,9 @@ server {
|
|||||||
|
|
||||||
server_name localhost-nginx-proxy-manager;
|
server_name localhost-nginx-proxy-manager;
|
||||||
access_log /data/logs/fallback_access.log standard;
|
access_log /data/logs/fallback_access.log standard;
|
||||||
error_log /data/logs/fallback_error.log warn;
|
error_log /dev/null crit;
|
||||||
include conf.d/include/assets.conf;
|
include conf.d/include/assets.conf;
|
||||||
include conf.d/include/block-exploits.conf;
|
include conf.d/include/block-exploits.conf;
|
||||||
include conf.d/include/letsencrypt-acme-challenge.conf;
|
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
index index.html;
|
index index.html;
|
||||||
@ -30,7 +29,7 @@ server {
|
|||||||
set $port "443";
|
set $port "443";
|
||||||
|
|
||||||
server_name localhost;
|
server_name localhost;
|
||||||
access_log /data/logs/fallback_access.log standard;
|
access_log /data/logs/fallback-access.log standard;
|
||||||
error_log /dev/null crit;
|
error_log /dev/null crit;
|
||||||
ssl_certificate /data/nginx/dummycert.pem;
|
ssl_certificate /data/nginx/dummycert.pem;
|
||||||
ssl_certificate_key /data/nginx/dummykey.pem;
|
ssl_certificate_key /data/nginx/dummykey.pem;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
location ~* ^.*\.(css|js|jpe?g|gif|png|webp|woff|eot|ttf|svg|ico|css\.map|js\.map)$ {
|
location ~* ^.*\.(css|js|jpe?g|gif|png|woff|eot|ttf|svg|ico|css\.map|js\.map)$ {
|
||||||
if_modified_since off;
|
if_modified_since off;
|
||||||
|
|
||||||
# use the public cache
|
# use the public cache
|
||||||
|
@ -2,7 +2,7 @@ add_header X-Served-By $host;
|
|||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Forwarded-Scheme $scheme;
|
proxy_set_header X-Forwarded-Scheme $scheme;
|
||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $remote_addr;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
proxy_pass $forward_scheme://$server:$port$request_uri;
|
proxy_pass $forward_scheme://$server:$port;
|
||||||
|
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
if [ "$DEVELOPMENT" == "true" ]; then
|
if [ "$DEVELOPMENT" == "true" ]; then
|
||||||
cd /app/frontend || exit 1
|
cd /app/frontend || exit 1
|
||||||
# If yarn install fails: add --verbose --network-concurrency 1
|
|
||||||
yarn install
|
yarn install
|
||||||
yarn watch
|
yarn watch
|
||||||
else
|
else
|
||||||
|
@ -6,7 +6,6 @@ cd /app || echo
|
|||||||
|
|
||||||
if [ "$DEVELOPMENT" == "true" ]; then
|
if [ "$DEVELOPMENT" == "true" ]; then
|
||||||
cd /app || exit 1
|
cd /app || exit 1
|
||||||
# If yarn install fails: add --verbose --network-concurrency 1
|
|
||||||
yarn install
|
yarn install
|
||||||
node --max_old_space_size=250 --abort_on_uncaught_exception node_modules/nodemon/bin/nodemon.js
|
node --max_old_space_size=250 --abort_on_uncaught_exception node_modules/nodemon/bin/nodemon.js
|
||||||
else
|
else
|
||||||
|
@ -24,12 +24,8 @@ chown root /tmp/nginx
|
|||||||
|
|
||||||
# Dynamically generate resolvers file, if resolver is IPv6, enclose in `[]`
|
# Dynamically generate resolvers file, if resolver is IPv6, enclose in `[]`
|
||||||
# thanks @tfmm
|
# thanks @tfmm
|
||||||
if [ "$DISABLE_IPV6" == "true" ] || [ "$DISABLE_IPV6" == "on" ] || [ "$DISABLE_IPV6" == "1" ] || [ "$DISABLE_IPV6" == "yes" ];
|
echo resolver "$(awk 'BEGIN{ORS=" "} $1=="nameserver" {print ($2 ~ ":")? "["$2"]": $2}' /etc/resolv.conf);" > /etc/nginx/conf.d/include/resolvers.conf
|
||||||
then
|
|
||||||
echo resolver "$(awk 'BEGIN{ORS=" "} $1=="nameserver" { sub(/%.*$/,"",$2); print ($2 ~ ":")? "["$2"]": $2}' /etc/resolv.conf) ipv6=off valid=10s;" > /etc/nginx/conf.d/include/resolvers.conf
|
|
||||||
else
|
|
||||||
echo resolver "$(awk 'BEGIN{ORS=" "} $1=="nameserver" { sub(/%.*$/,"",$2); print ($2 ~ ":")? "["$2"]": $2}' /etc/resolv.conf) valid=10s;" > /etc/nginx/conf.d/include/resolvers.conf
|
|
||||||
fi
|
|
||||||
# Generate dummy self-signed certificate.
|
# Generate dummy self-signed certificate.
|
||||||
if [ ! -f /data/nginx/dummycert.pem ] || [ ! -f /data/nginx/dummykey.pem ]
|
if [ ! -f /data/nginx/dummycert.pem ] || [ ! -f /data/nginx/dummykey.pem ]
|
||||||
then
|
then
|
||||||
@ -40,7 +36,7 @@ then
|
|||||||
-days 3650 \
|
-days 3650 \
|
||||||
-nodes \
|
-nodes \
|
||||||
-x509 \
|
-x509 \
|
||||||
-subj '/O=localhost/OU=localhost/CN=localhost' \
|
-subj '/O=Nginx Proxy Manager/OU=Dummy Certificate/CN=localhost' \
|
||||||
-keyout /data/nginx/dummykey.pem \
|
-keyout /data/nginx/dummykey.pem \
|
||||||
-out /data/nginx/dummycert.pem
|
-out /data/nginx/dummycert.pem
|
||||||
echo "Complete"
|
echo "Complete"
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
# Advanced Configuration
|
# Advanced Configuration
|
||||||
|
|
||||||
## Best Practice: Use a Docker network
|
## Best Practice: Use a docker network
|
||||||
|
|
||||||
For those who have a few of their upstream services running in Docker on the same Docker
|
For those who have a few of their upstream services running in docker on the same docker
|
||||||
host as NPM, here's a trick to secure things a bit better. By creating a custom Docker network,
|
host as NPM, here's a trick to secure things a bit better. By creating a custom docker network,
|
||||||
you don't need to publish ports for your upstream services to all of the Docker host's interfaces.
|
you don't need to publish ports for your upstream services to all of the docker host's interfaces.
|
||||||
|
|
||||||
Create a network, ie "scoobydoo":
|
Create a network, ie "scoobydoo":
|
||||||
|
|
||||||
@ -13,13 +13,13 @@ docker network create scoobydoo
|
|||||||
```
|
```
|
||||||
|
|
||||||
Then add the following to the `docker-compose.yml` file for both NPM and any other
|
Then add the following to the `docker-compose.yml` file for both NPM and any other
|
||||||
services running on this Docker host:
|
services running on this docker host:
|
||||||
|
|
||||||
```yml
|
```yml
|
||||||
networks:
|
networks:
|
||||||
default:
|
default:
|
||||||
external: true
|
external:
|
||||||
name: scoobydoo
|
name: scoobydoo
|
||||||
```
|
```
|
||||||
|
|
||||||
Let's look at a Portainer example:
|
Let's look at a Portainer example:
|
||||||
@ -38,28 +38,16 @@ services:
|
|||||||
|
|
||||||
networks:
|
networks:
|
||||||
default:
|
default:
|
||||||
external: true
|
external:
|
||||||
name: scoobydoo
|
name: scoobydoo
|
||||||
```
|
```
|
||||||
|
|
||||||
Now in the NPM UI you can create a proxy host with `portainer` as the hostname,
|
Now in the NPM UI you can create a proxy host with `portainer` as the hostname,
|
||||||
and port `9000` as the port. Even though this port isn't listed in the docker-compose
|
and port `9000` as the port. Even though this port isn't listed in the docker-compose
|
||||||
file, it's "exposed" by the Portainer Docker image for you and not available on
|
file, it's "exposed" by the portainer docker image for you and not available on
|
||||||
the Docker host outside of this Docker network. The service name is used as the
|
the docker host outside of this docker network. The service name is used as the
|
||||||
hostname, so make sure your service names are unique when using the same network.
|
hostname, so make sure your service names are unique when using the same network.
|
||||||
|
|
||||||
## Docker Healthcheck
|
|
||||||
|
|
||||||
The `Dockerfile` that builds this project does not include a `HEALTHCHECK` but you can opt in to this
|
|
||||||
feature by adding the following to the service in your `docker-compose.yml` file:
|
|
||||||
|
|
||||||
```yml
|
|
||||||
healthcheck:
|
|
||||||
test: ["CMD", "/bin/check-health"]
|
|
||||||
interval: 10s
|
|
||||||
timeout: 3s
|
|
||||||
```
|
|
||||||
|
|
||||||
## Docker Secrets
|
## Docker Secrets
|
||||||
|
|
||||||
This image supports the use of Docker secrets to import from file and keep sensitive usernames or passwords from being passed or preserved in plaintext.
|
This image supports the use of Docker secrets to import from file and keep sensitive usernames or passwords from being passed or preserved in plaintext.
|
||||||
@ -128,7 +116,7 @@ services:
|
|||||||
|
|
||||||
## Disabling IPv6
|
## Disabling IPv6
|
||||||
|
|
||||||
On some Docker hosts IPv6 may not be enabled. In these cases, the following message may be seen in the log:
|
On some docker hosts IPv6 may not be enabled. In these cases, the following message may be seen in the log:
|
||||||
|
|
||||||
> Address family not supported by protocol
|
> Address family not supported by protocol
|
||||||
|
|
||||||
|
@ -21,6 +21,3 @@ Your best bet is to ask the [Reddit community for support](https://www.reddit.co
|
|||||||
|
|
||||||
Gitter is best left for anyone contributing to the project to ask for help about internals, code reviews etc.
|
Gitter is best left for anyone contributing to the project to ask for help about internals, code reviews etc.
|
||||||
|
|
||||||
## When adding username and password access control to a proxy host, I can no longer login into the app.
|
|
||||||
|
|
||||||
Having an Access Control List (ACL) with username and password requires the browser to always send this username and password in the `Authorization` header on each request. If your proxied app also requires authentication (like Nginx Proxy Manager itself), most likely the app will also use the `Authorization` header to transmit this information, as this is the standardized header meant for this kind of information. However having multiples of the same headers is not allowed in the [internet standard](https://www.rfc-editor.org/rfc/rfc7230#section-3.2.2) and almost all apps do not support multiple values in the `Authorization` header. Hence one of the two logins will be broken. This can only be fixed by either removing one of the logins or by changing the app to use other non-standard headers for authorization.
|
|
@ -213,7 +213,7 @@
|
|||||||
"etag": "^1.8.1",
|
"etag": "^1.8.1",
|
||||||
"eventemitter3": "^4.0.4",
|
"eventemitter3": "^4.0.4",
|
||||||
"events": "^3.2.0",
|
"events": "^3.2.0",
|
||||||
"eventsource": "^2.0.2",
|
"eventsource": "^1.0.7",
|
||||||
"evp_bytestokey": "^1.0.3",
|
"evp_bytestokey": "^1.0.3",
|
||||||
"execa": "^4.0.3",
|
"execa": "^4.0.3",
|
||||||
"expand-brackets": "^4.0.0",
|
"expand-brackets": "^4.0.0",
|
||||||
@ -357,7 +357,7 @@
|
|||||||
"jsbn": "^1.1.0",
|
"jsbn": "^1.1.0",
|
||||||
"jsesc": "^3.0.1",
|
"jsesc": "^3.0.1",
|
||||||
"json-parse-better-errors": "^1.0.2",
|
"json-parse-better-errors": "^1.0.2",
|
||||||
"json-schema": "^0.4.0",
|
"json-schema": "^0.2.5",
|
||||||
"json-schema-traverse": "^0.4.1",
|
"json-schema-traverse": "^0.4.1",
|
||||||
"json-stringify-safe": "^5.0.1",
|
"json-stringify-safe": "^5.0.1",
|
||||||
"json3": "^3.3.3",
|
"json3": "^3.3.3",
|
||||||
@ -394,7 +394,7 @@
|
|||||||
"map-age-cleaner": "^0.1.3",
|
"map-age-cleaner": "^0.1.3",
|
||||||
"map-cache": "^0.2.2",
|
"map-cache": "^0.2.2",
|
||||||
"map-visit": "^1.0.0",
|
"map-visit": "^1.0.0",
|
||||||
"markdown-it": "^12.3.2",
|
"markdown-it": "^11.0.0",
|
||||||
"markdown-it-anchor": "^5.3.0",
|
"markdown-it-anchor": "^5.3.0",
|
||||||
"markdown-it-chain": "^1.3.0",
|
"markdown-it-chain": "^1.3.0",
|
||||||
"markdown-it-container": "^3.0.0",
|
"markdown-it-container": "^3.0.0",
|
||||||
@ -434,7 +434,7 @@
|
|||||||
"neo-async": "^2.6.2",
|
"neo-async": "^2.6.2",
|
||||||
"nice-try": "^2.0.1",
|
"nice-try": "^2.0.1",
|
||||||
"no-case": "^3.0.3",
|
"no-case": "^3.0.3",
|
||||||
"node-forge": "^1.0.0",
|
"node-forge": "^0.10.0",
|
||||||
"node-libs-browser": "^2.2.1",
|
"node-libs-browser": "^2.2.1",
|
||||||
"node-releases": "^1.1.60",
|
"node-releases": "^1.1.60",
|
||||||
"nopt": "^4.0.3",
|
"nopt": "^4.0.3",
|
||||||
@ -443,7 +443,7 @@
|
|||||||
"normalize-url": "^5.1.0",
|
"normalize-url": "^5.1.0",
|
||||||
"npm-run-path": "^4.0.1",
|
"npm-run-path": "^4.0.1",
|
||||||
"nprogress": "^0.2.0",
|
"nprogress": "^0.2.0",
|
||||||
"nth-check": "^2.0.1",
|
"nth-check": "^1.0.2",
|
||||||
"num2fraction": "^1.2.2",
|
"num2fraction": "^1.2.2",
|
||||||
"number-is-nan": "^2.0.0",
|
"number-is-nan": "^2.0.0",
|
||||||
"oauth-sign": "^0.9.0",
|
"oauth-sign": "^0.9.0",
|
||||||
@ -612,7 +612,7 @@
|
|||||||
"serve-index": "^1.9.1",
|
"serve-index": "^1.9.1",
|
||||||
"serve-static": "^1.14.1",
|
"serve-static": "^1.14.1",
|
||||||
"set-blocking": "^2.0.0",
|
"set-blocking": "^2.0.0",
|
||||||
"set-value": "^4.0.1",
|
"set-value": "^3.0.2",
|
||||||
"setimmediate": "^1.0.5",
|
"setimmediate": "^1.0.5",
|
||||||
"setprototypeof": "^1.2.0",
|
"setprototypeof": "^1.2.0",
|
||||||
"sha.js": "^2.4.11",
|
"sha.js": "^2.4.11",
|
||||||
|
@ -1,44 +1,6 @@
|
|||||||
# Full Setup Instructions
|
# Full Setup Instructions
|
||||||
|
|
||||||
## Running the App
|
## MySQL Database
|
||||||
|
|
||||||
Create a `docker-compose.yml` file:
|
|
||||||
|
|
||||||
```yml
|
|
||||||
version: "3"
|
|
||||||
services:
|
|
||||||
app:
|
|
||||||
image: 'jc21/nginx-proxy-manager:latest'
|
|
||||||
restart: unless-stopped
|
|
||||||
ports:
|
|
||||||
# These ports are in format <host-port>:<container-port>
|
|
||||||
- '80:80' # Public HTTP Port
|
|
||||||
- '443:443' # Public HTTPS Port
|
|
||||||
- '81:81' # Admin Web Port
|
|
||||||
# Add any other Stream port you want to expose
|
|
||||||
# - '21:21' # FTP
|
|
||||||
|
|
||||||
# Uncomment the next line if you uncomment anything in the section
|
|
||||||
# environment:
|
|
||||||
# Uncomment this if you want to change the location of
|
|
||||||
# the SQLite DB file within the container
|
|
||||||
# DB_SQLITE_FILE: "/data/database.sqlite"
|
|
||||||
|
|
||||||
# Uncomment this if IPv6 is not enabled on your host
|
|
||||||
# DISABLE_IPV6: 'true'
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
- ./data:/data
|
|
||||||
- ./letsencrypt:/etc/letsencrypt
|
|
||||||
```
|
|
||||||
|
|
||||||
Then:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker-compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
## Using MySQL / MariaDB Database
|
|
||||||
|
|
||||||
If you opt for the MySQL configuration you will have to provide the database server yourself. You can also use MariaDB. Here are the minimum supported versions:
|
If you opt for the MySQL configuration you will have to provide the database server yourself. You can also use MariaDB. Here are the minimum supported versions:
|
||||||
|
|
||||||
@ -48,7 +10,15 @@ If you opt for the MySQL configuration you will have to provide the database ser
|
|||||||
It's easy to use another docker container for your database also and link it as part of the docker stack, so that's what the following examples
|
It's easy to use another docker container for your database also and link it as part of the docker stack, so that's what the following examples
|
||||||
are going to use.
|
are going to use.
|
||||||
|
|
||||||
Here is an example of what your `docker-compose.yml` will look like when using a MariaDB container:
|
::: warning
|
||||||
|
|
||||||
|
When using a `mariadb` database, the NPM configuration file should still use the `mysql` engine!
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Running the App
|
||||||
|
|
||||||
|
Via `docker-compose`:
|
||||||
|
|
||||||
```yml
|
```yml
|
||||||
version: "3"
|
version: "3"
|
||||||
@ -57,18 +27,24 @@ services:
|
|||||||
image: 'jc21/nginx-proxy-manager:latest'
|
image: 'jc21/nginx-proxy-manager:latest'
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
# These ports are in format <host-port>:<container-port>
|
# Public HTTP Port:
|
||||||
- '80:80' # Public HTTP Port
|
- '80:80'
|
||||||
- '443:443' # Public HTTPS Port
|
# Public HTTPS Port:
|
||||||
- '81:81' # Admin Web Port
|
- '443:443'
|
||||||
|
# Admin Web Port:
|
||||||
|
- '81:81'
|
||||||
# Add any other Stream port you want to expose
|
# Add any other Stream port you want to expose
|
||||||
# - '21:21' # FTP
|
# - '21:21' # FTP
|
||||||
environment:
|
environment:
|
||||||
|
# These are the settings to access your db
|
||||||
DB_MYSQL_HOST: "db"
|
DB_MYSQL_HOST: "db"
|
||||||
DB_MYSQL_PORT: 3306
|
DB_MYSQL_PORT: 3306
|
||||||
DB_MYSQL_USER: "npm"
|
DB_MYSQL_USER: "npm"
|
||||||
DB_MYSQL_PASSWORD: "npm"
|
DB_MYSQL_PASSWORD: "npm"
|
||||||
DB_MYSQL_NAME: "npm"
|
DB_MYSQL_NAME: "npm"
|
||||||
|
# If you would rather use Sqlite uncomment this
|
||||||
|
# and remove all DB_MYSQL_* lines above
|
||||||
|
# DB_SQLITE_FILE: "/data/database.sqlite"
|
||||||
# Uncomment this if IPv6 is not enabled on your host
|
# Uncomment this if IPv6 is not enabled on your host
|
||||||
# DISABLE_IPV6: 'true'
|
# DISABLE_IPV6: 'true'
|
||||||
volumes:
|
volumes:
|
||||||
@ -76,7 +52,6 @@ services:
|
|||||||
- ./letsencrypt:/etc/letsencrypt
|
- ./letsencrypt:/etc/letsencrypt
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
- db
|
||||||
|
|
||||||
db:
|
db:
|
||||||
image: 'jc21/mariadb-aria:latest'
|
image: 'jc21/mariadb-aria:latest'
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
@ -89,11 +64,13 @@ services:
|
|||||||
- ./data/mysql:/var/lib/mysql
|
- ./data/mysql:/var/lib/mysql
|
||||||
```
|
```
|
||||||
|
|
||||||
::: warning
|
_Please note, that `DB_MYSQL_*` environment variables will take precedent over `DB_SQLITE_*` variables. So if you keep the MySQL variables, you will not be able to use Sqlite._
|
||||||
|
|
||||||
Please note, that `DB_MYSQL_*` environment variables will take precedent over `DB_SQLITE_*` variables. So if you keep the MySQL variables, you will not be able to use SQLite.
|
Then:
|
||||||
|
|
||||||
:::
|
```bash
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
## Running on Raspberry PI / ARM devices
|
## Running on Raspberry PI / ARM devices
|
||||||
|
|
||||||
@ -107,12 +84,62 @@ you don't have to worry about doing anything special and you can follow the comm
|
|||||||
|
|
||||||
Check out the [dockerhub tags](https://hub.docker.com/r/jc21/nginx-proxy-manager/tags)
|
Check out the [dockerhub tags](https://hub.docker.com/r/jc21/nginx-proxy-manager/tags)
|
||||||
for a list of supported architectures and if you want one that doesn't exist,
|
for a list of supported architectures and if you want one that doesn't exist,
|
||||||
[create a feature request](https://github.com/NginxProxyManager/nginx-proxy-manager/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=).
|
[create a feature request](https://github.com/jc21/nginx-proxy-manager/issues/new?assignees=&labels=enhancement&template=feature_request.md&title=).
|
||||||
|
|
||||||
Also, if you don't know how to already, follow [this guide to install docker and docker-compose](https://manre-universe.net/how-to-run-docker-and-docker-compose-on-raspbian/)
|
Also, if you don't know how to already, follow [this guide to install docker and docker-compose](https://manre-universe.net/how-to-run-docker-and-docker-compose-on-raspbian/)
|
||||||
on Raspbian.
|
on Raspbian.
|
||||||
|
|
||||||
Please note that the `jc21/mariadb-aria:latest` image might have some problems on some ARM devices, if you want a separate database container, use the `yobasystems/alpine-mariadb:latest` image.
|
Via `docker-compose`:
|
||||||
|
|
||||||
|
```yml
|
||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
image: 'jc21/nginx-proxy-manager:latest'
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
# Public HTTP Port:
|
||||||
|
- '80:80'
|
||||||
|
# Public HTTPS Port:
|
||||||
|
- '443:443'
|
||||||
|
# Admin Web Port:
|
||||||
|
- '81:81'
|
||||||
|
environment:
|
||||||
|
# These are the settings to access your db
|
||||||
|
DB_MYSQL_HOST: "db"
|
||||||
|
DB_MYSQL_PORT: 3306
|
||||||
|
DB_MYSQL_USER: "changeuser"
|
||||||
|
DB_MYSQL_PASSWORD: "changepass"
|
||||||
|
DB_MYSQL_NAME: "npm"
|
||||||
|
# If you would rather use Sqlite uncomment this
|
||||||
|
# and remove all DB_MYSQL_* lines above
|
||||||
|
# DB_SQLITE_FILE: "/data/database.sqlite"
|
||||||
|
# Uncomment this if IPv6 is not enabled on your host
|
||||||
|
# DISABLE_IPV6: 'true'
|
||||||
|
volumes:
|
||||||
|
- ./data/nginx-proxy-manager:/data
|
||||||
|
- ./letsencrypt:/etc/letsencrypt
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
db:
|
||||||
|
image: yobasystems/alpine-mariadb:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: "changeme"
|
||||||
|
MYSQL_DATABASE: "npm"
|
||||||
|
MYSQL_USER: "changeuser"
|
||||||
|
MYSQL_PASSWORD: "changepass"
|
||||||
|
volumes:
|
||||||
|
- ./data/mariadb:/var/lib/mysql
|
||||||
|
```
|
||||||
|
|
||||||
|
_Please note, that `DB_MYSQL_*` environment variables will take precedent over `DB_SQLITE_*` var>
|
||||||
|
|
||||||
|
Then:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
## Initial Run
|
## Initial Run
|
||||||
|
|
||||||
|
2
docs/third-party/README.md
vendored
2
docs/third-party/README.md
vendored
@ -1,6 +1,6 @@
|
|||||||
# Third Party
|
# Third Party
|
||||||
|
|
||||||
As this software gains popularity it's common to see it integrated with other platforms. Please be aware that unless specifically mentioned in the documentation of those
|
As this software gains popularity it's common to see it integrated with other platforms. Please be aware that unless specifically mentioned in the documenation of those
|
||||||
integrations, they are *not supported* by me.
|
integrations, they are *not supported* by me.
|
||||||
|
|
||||||
Known integrations:
|
Known integrations:
|
||||||
|
202
docs/yarn.lock
202
docs/yarn.lock
@ -967,46 +967,6 @@
|
|||||||
lodash "^4.17.19"
|
lodash "^4.17.19"
|
||||||
to-fast-properties "^2.0.0"
|
to-fast-properties "^2.0.0"
|
||||||
|
|
||||||
"@jridgewell/gen-mapping@^0.3.0":
|
|
||||||
version "0.3.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9"
|
|
||||||
integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==
|
|
||||||
dependencies:
|
|
||||||
"@jridgewell/set-array" "^1.0.1"
|
|
||||||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
|
||||||
"@jridgewell/trace-mapping" "^0.3.9"
|
|
||||||
|
|
||||||
"@jridgewell/resolve-uri@^3.0.3":
|
|
||||||
version "3.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
|
|
||||||
integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
|
|
||||||
|
|
||||||
"@jridgewell/set-array@^1.0.1":
|
|
||||||
version "1.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
|
|
||||||
integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
|
|
||||||
|
|
||||||
"@jridgewell/source-map@^0.3.2":
|
|
||||||
version "0.3.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb"
|
|
||||||
integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==
|
|
||||||
dependencies:
|
|
||||||
"@jridgewell/gen-mapping" "^0.3.0"
|
|
||||||
"@jridgewell/trace-mapping" "^0.3.9"
|
|
||||||
|
|
||||||
"@jridgewell/sourcemap-codec@^1.4.10":
|
|
||||||
version "1.4.14"
|
|
||||||
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
|
|
||||||
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
|
|
||||||
|
|
||||||
"@jridgewell/trace-mapping@^0.3.9":
|
|
||||||
version "0.3.14"
|
|
||||||
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed"
|
|
||||||
integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==
|
|
||||||
dependencies:
|
|
||||||
"@jridgewell/resolve-uri" "^3.0.3"
|
|
||||||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
|
||||||
|
|
||||||
"@mrmlnc/readdir-enhanced@^2.2.1":
|
"@mrmlnc/readdir-enhanced@^2.2.1":
|
||||||
version "2.2.1"
|
version "2.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
|
resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
|
||||||
@ -1536,11 +1496,6 @@ acorn@^7.4.0:
|
|||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c"
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c"
|
||||||
integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==
|
integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==
|
||||||
|
|
||||||
acorn@^8.5.0:
|
|
||||||
version "8.7.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30"
|
|
||||||
integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==
|
|
||||||
|
|
||||||
agentkeepalive@^2.2.0:
|
agentkeepalive@^2.2.0:
|
||||||
version "2.2.0"
|
version "2.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-2.2.0.tgz#c5d1bd4b129008f1163f236f86e5faea2026e2ef"
|
resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-2.2.0.tgz#c5d1bd4b129008f1163f236f86e5faea2026e2ef"
|
||||||
@ -1669,9 +1624,9 @@ ansi-regex@^4.1.0:
|
|||||||
integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
|
integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
|
||||||
|
|
||||||
ansi-regex@^5.0.0:
|
ansi-regex@^5.0.0:
|
||||||
version "5.0.1"
|
version "5.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
|
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
|
||||||
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
|
integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
|
||||||
|
|
||||||
ansi-styles@^2.2.1:
|
ansi-styles@^2.2.1:
|
||||||
version "2.2.1"
|
version "2.2.1"
|
||||||
@ -1731,11 +1686,6 @@ argparse@^1.0.10, argparse@^1.0.7:
|
|||||||
dependencies:
|
dependencies:
|
||||||
sprintf-js "~1.0.2"
|
sprintf-js "~1.0.2"
|
||||||
|
|
||||||
argparse@^2.0.1:
|
|
||||||
version "2.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
|
|
||||||
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
|
|
||||||
|
|
||||||
arr-diff@^4.0.0:
|
arr-diff@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
|
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
|
||||||
@ -2610,7 +2560,7 @@ cli-boxes@^2.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d"
|
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d"
|
||||||
integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==
|
integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==
|
||||||
|
|
||||||
clipboard@^2.0.6:
|
clipboard@^2.0.0, clipboard@^2.0.6:
|
||||||
version "2.0.6"
|
version "2.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376"
|
resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376"
|
||||||
integrity sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==
|
integrity sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==
|
||||||
@ -3794,10 +3744,10 @@ entities@^1.1.1, entities@~1.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
|
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
|
||||||
integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
|
integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
|
||||||
|
|
||||||
entities@^2.0.0, entities@^2.0.3, entities@~2.1.0:
|
entities@^2.0.0, entities@^2.0.3, entities@~2.0.0:
|
||||||
version "2.1.0"
|
version "2.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5"
|
resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f"
|
||||||
integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==
|
integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==
|
||||||
|
|
||||||
envify@^4.0.0, envify@^4.1.0:
|
envify@^4.0.0, envify@^4.1.0:
|
||||||
version "4.1.0"
|
version "4.1.0"
|
||||||
@ -3975,11 +3925,6 @@ eventsource@^1.0.7:
|
|||||||
dependencies:
|
dependencies:
|
||||||
original "^1.0.0"
|
original "^1.0.0"
|
||||||
|
|
||||||
eventsource@^2.0.2:
|
|
||||||
version "2.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-2.0.2.tgz#76dfcc02930fb2ff339520b6d290da573a9e8508"
|
|
||||||
integrity sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==
|
|
||||||
|
|
||||||
evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
|
evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
|
resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
|
||||||
@ -4167,13 +4112,6 @@ fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
|
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
|
||||||
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
|
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
|
||||||
|
|
||||||
fast-xml-parser@^3.19.0:
|
|
||||||
version "3.21.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.21.1.tgz#152a1d51d445380f7046b304672dd55d15c9e736"
|
|
||||||
integrity sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==
|
|
||||||
dependencies:
|
|
||||||
strnum "^1.0.4"
|
|
||||||
|
|
||||||
fastq@^1.6.0:
|
fastq@^1.6.0:
|
||||||
version "1.8.0"
|
version "1.8.0"
|
||||||
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481"
|
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481"
|
||||||
@ -4316,9 +4254,9 @@ flush-write-stream@^2.0.0:
|
|||||||
readable-stream "^3.1.1"
|
readable-stream "^3.1.1"
|
||||||
|
|
||||||
follow-redirects@^1.0.0, follow-redirects@^1.12.1:
|
follow-redirects@^1.0.0, follow-redirects@^1.12.1:
|
||||||
version "1.14.8"
|
version "1.12.1"
|
||||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc"
|
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.12.1.tgz#de54a6205311b93d60398ebc01cf7015682312b6"
|
||||||
integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==
|
integrity sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg==
|
||||||
|
|
||||||
for-in@^1.0.2:
|
for-in@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
@ -5592,11 +5530,11 @@ is-svg@^3.0.0:
|
|||||||
html-comment-regex "^1.1.0"
|
html-comment-regex "^1.1.0"
|
||||||
|
|
||||||
is-svg@^4.2.1:
|
is-svg@^4.2.1:
|
||||||
version "4.3.0"
|
version "4.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-4.3.0.tgz#3e46a45dcdb2780e42a3c8538154d7f7bfc07216"
|
resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-4.2.2.tgz#a4ea0f3f78dada7085db88f1e85b6f845626cfae"
|
||||||
integrity sha512-Np3TOGLVr0J27VDaS/gVE7bT45ZcSmX4pMmMTsPjqO8JY383fuPIcWmZr3QsHVWhqhZWxSdmW+tkkl3PWOB0Nw==
|
integrity sha512-JlA7Mc7mfWjdxxTkJ094oUK9amGD7gQaj5xA/NCY0vlVvZ1stmj4VX+bRuwOMN93IHRZ2ctpPH/0FO6DqvQ5Rw==
|
||||||
dependencies:
|
dependencies:
|
||||||
fast-xml-parser "^3.19.0"
|
html-comment-regex "^1.1.2"
|
||||||
|
|
||||||
is-symbol@^1.0.2, is-symbol@^1.0.3:
|
is-symbol@^1.0.2, is-symbol@^1.0.3:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
@ -5776,10 +5714,10 @@ json-schema@0.2.3:
|
|||||||
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
|
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
|
||||||
integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
|
integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
|
||||||
|
|
||||||
json-schema@^0.4.0:
|
json-schema@^0.2.5:
|
||||||
version "0.4.0"
|
version "0.2.5"
|
||||||
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
|
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.5.tgz#97997f50972dd0500214e208c407efa4b5d7063b"
|
||||||
integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
|
integrity sha512-gWJOWYFrhQ8j7pVm0EM8Slr+EPVq1Phf6lvzvD/WCeqkrx/f2xBI0xOsRRS9xCn3I4vKtP519dvs3TP09r24wQ==
|
||||||
|
|
||||||
json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
|
json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
|
||||||
version "5.0.1"
|
version "5.0.1"
|
||||||
@ -5977,9 +5915,9 @@ loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4
|
|||||||
json5 "^1.0.1"
|
json5 "^1.0.1"
|
||||||
|
|
||||||
loader-utils@^2.0.0:
|
loader-utils@^2.0.0:
|
||||||
version "2.0.3"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.3.tgz#d4b15b8504c63d1fc3f2ade52d41bc8459d6ede1"
|
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0"
|
||||||
integrity sha512-THWqIsn8QRnvLl0shHYVBN9syumU8pYWEHPTmkiVGd+7K5eFNVSY6AJhRvgGF70gg1Dz+l/k8WicvFCxdEs60A==
|
integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
big.js "^5.2.2"
|
big.js "^5.2.2"
|
||||||
emojis-list "^3.0.0"
|
emojis-list "^3.0.0"
|
||||||
@ -6197,13 +6135,13 @@ markdown-it-table-of-contents@^0.4.0, markdown-it-table-of-contents@^0.4.4:
|
|||||||
resolved "https://registry.yarnpkg.com/markdown-it-table-of-contents/-/markdown-it-table-of-contents-0.4.4.tgz#3dc7ce8b8fc17e5981c77cc398d1782319f37fbc"
|
resolved "https://registry.yarnpkg.com/markdown-it-table-of-contents/-/markdown-it-table-of-contents-0.4.4.tgz#3dc7ce8b8fc17e5981c77cc398d1782319f37fbc"
|
||||||
integrity sha512-TAIHTHPwa9+ltKvKPWulm/beozQU41Ab+FIefRaQV1NRnpzwcV9QOe6wXQS5WLivm5Q/nlo0rl6laGkMDZE7Gw==
|
integrity sha512-TAIHTHPwa9+ltKvKPWulm/beozQU41Ab+FIefRaQV1NRnpzwcV9QOe6wXQS5WLivm5Q/nlo0rl6laGkMDZE7Gw==
|
||||||
|
|
||||||
markdown-it@^12.3.2:
|
markdown-it@^11.0.0:
|
||||||
version "12.3.2"
|
version "11.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.3.2.tgz#bf92ac92283fe983fe4de8ff8abfb5ad72cd0c90"
|
resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-11.0.0.tgz#dbfc30363e43d756ebc52c38586b91b90046b876"
|
||||||
integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==
|
integrity sha512-+CvOnmbSubmQFSA9dKz1BRiaSMV7rhexl3sngKqFyXSagoA3fBdJQ8oZWtRy2knXdpDXaBw44euz37DeJQ9asg==
|
||||||
dependencies:
|
dependencies:
|
||||||
argparse "^2.0.1"
|
argparse "^1.0.7"
|
||||||
entities "~2.1.0"
|
entities "~2.0.0"
|
||||||
linkify-it "^3.0.1"
|
linkify-it "^3.0.1"
|
||||||
mdurl "^1.0.1"
|
mdurl "^1.0.1"
|
||||||
uc.micro "^1.0.5"
|
uc.micro "^1.0.5"
|
||||||
@ -6467,10 +6405,10 @@ minipass@^3.0.0, minipass@^3.1.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
yallist "^4.0.0"
|
yallist "^4.0.0"
|
||||||
|
|
||||||
minizlib@^2.1.1:
|
minizlib@^2.1.0:
|
||||||
version "2.1.2"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
|
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.0.tgz#fd52c645301ef09a63a2c209697c294c6ce02cf3"
|
||||||
integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
|
integrity sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==
|
||||||
dependencies:
|
dependencies:
|
||||||
minipass "^3.0.0"
|
minipass "^3.0.0"
|
||||||
yallist "^4.0.0"
|
yallist "^4.0.0"
|
||||||
@ -6657,10 +6595,10 @@ node-forge@0.9.0:
|
|||||||
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579"
|
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579"
|
||||||
integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==
|
integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==
|
||||||
|
|
||||||
node-forge@^1.0.0:
|
node-forge@^0.10.0:
|
||||||
version "1.0.0"
|
version "0.10.0"
|
||||||
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.0.0.tgz#a025e3beeeb90d9cee37dae34d25b968ec3e6f15"
|
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3"
|
||||||
integrity sha512-ShkiiAlzSsgH1IwGlA0jybk9vQTIOLyJ9nBd0JTuP+nzADJFLY0NoDijM2zvD/JaezooGu3G2p2FNxOAK6459g==
|
integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==
|
||||||
|
|
||||||
node-libs-browser@^2.2.1:
|
node-libs-browser@^2.2.1:
|
||||||
version "2.2.1"
|
version "2.2.1"
|
||||||
@ -6788,13 +6726,6 @@ nth-check@^1.0.2, nth-check@~1.0.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
boolbase "~1.0.0"
|
boolbase "~1.0.0"
|
||||||
|
|
||||||
nth-check@^2.0.1:
|
|
||||||
version "2.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2"
|
|
||||||
integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==
|
|
||||||
dependencies:
|
|
||||||
boolbase "^1.0.0"
|
|
||||||
|
|
||||||
num2fraction@^1.2.2:
|
num2fraction@^1.2.2:
|
||||||
version "1.2.2"
|
version "1.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
|
resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
|
||||||
@ -7242,9 +7173,9 @@ path-key@^3.0.0, path-key@^3.1.0, path-key@^3.1.1:
|
|||||||
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
|
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
|
||||||
|
|
||||||
path-parse@^1.0.6:
|
path-parse@^1.0.6:
|
||||||
version "1.0.7"
|
version "1.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
|
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
|
||||||
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
|
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
|
||||||
|
|
||||||
path-to-regexp@0.1.7:
|
path-to-regexp@0.1.7:
|
||||||
version "0.1.7"
|
version "0.1.7"
|
||||||
@ -7768,9 +7699,11 @@ pretty-time@^1.1.0:
|
|||||||
integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==
|
integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==
|
||||||
|
|
||||||
prismjs@^1.13.0, prismjs@^1.20.0:
|
prismjs@^1.13.0, prismjs@^1.20.0:
|
||||||
version "1.27.0"
|
version "1.23.0"
|
||||||
resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.27.0.tgz#bb6ee3138a0b438a3653dd4d6ce0cc6510a45057"
|
resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.23.0.tgz#d3b3967f7d72440690497652a9d40ff046067f33"
|
||||||
integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==
|
integrity sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==
|
||||||
|
optionalDependencies:
|
||||||
|
clipboard "^2.0.0"
|
||||||
|
|
||||||
private@^0.1.8:
|
private@^0.1.8:
|
||||||
version "0.1.8"
|
version "0.1.8"
|
||||||
@ -8505,20 +8438,13 @@ set-value@^2.0.0, set-value@^2.0.1:
|
|||||||
is-plain-object "^2.0.3"
|
is-plain-object "^2.0.3"
|
||||||
split-string "^3.0.1"
|
split-string "^3.0.1"
|
||||||
|
|
||||||
set-value@^3.0.0:
|
set-value@^3.0.0, set-value@^3.0.2:
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/set-value/-/set-value-3.0.2.tgz#74e8ecd023c33d0f77199d415409a40f21e61b90"
|
resolved "https://registry.yarnpkg.com/set-value/-/set-value-3.0.2.tgz#74e8ecd023c33d0f77199d415409a40f21e61b90"
|
||||||
integrity sha512-npjkVoz+ank0zjlV9F47Fdbjfj/PfXyVhZvGALWsyIYU/qrMzpi6avjKW3/7KeSU2Df3I46BrN1xOI1+6vW0hA==
|
integrity sha512-npjkVoz+ank0zjlV9F47Fdbjfj/PfXyVhZvGALWsyIYU/qrMzpi6avjKW3/7KeSU2Df3I46BrN1xOI1+6vW0hA==
|
||||||
dependencies:
|
dependencies:
|
||||||
is-plain-object "^2.0.4"
|
is-plain-object "^2.0.4"
|
||||||
|
|
||||||
set-value@^4.0.1:
|
|
||||||
version "4.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/set-value/-/set-value-4.0.1.tgz#bc23522ade2d52314ec3b5d6fb140f5cd3a88acf"
|
|
||||||
integrity sha512-ayATicCYPVnlNpFmjq2/VmVwhoCQA9+13j8qWp044fmFE3IFphosPtRM+0CJ5xoIx5Uy52fCcwg3XeH2pHbbPQ==
|
|
||||||
dependencies:
|
|
||||||
is-plain-object "^2.0.4"
|
|
||||||
|
|
||||||
setimmediate@^1.0.4, setimmediate@^1.0.5:
|
setimmediate@^1.0.4, setimmediate@^1.0.5:
|
||||||
version "1.0.5"
|
version "1.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
|
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
|
||||||
@ -8816,10 +8742,10 @@ source-map-resolve@^0.6.0:
|
|||||||
atob "^2.1.2"
|
atob "^2.1.2"
|
||||||
decode-uri-component "^0.2.0"
|
decode-uri-component "^0.2.0"
|
||||||
|
|
||||||
source-map-support@^0.5.19, source-map-support@~0.5.12, source-map-support@~0.5.20:
|
source-map-support@^0.5.19, source-map-support@~0.5.12:
|
||||||
version "0.5.21"
|
version "0.5.19"
|
||||||
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
|
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
|
||||||
integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
|
integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
|
||||||
dependencies:
|
dependencies:
|
||||||
buffer-from "^1.0.0"
|
buffer-from "^1.0.0"
|
||||||
source-map "^0.6.0"
|
source-map "^0.6.0"
|
||||||
@ -9142,11 +9068,6 @@ strip-json-comments@~2.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
||||||
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
|
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
|
||||||
|
|
||||||
strnum@^1.0.4:
|
|
||||||
version "1.0.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db"
|
|
||||||
integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==
|
|
||||||
|
|
||||||
stylehacks@^4.0.0, stylehacks@^4.0.3:
|
stylehacks@^4.0.0, stylehacks@^4.0.3:
|
||||||
version "4.0.3"
|
version "4.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
|
resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5"
|
||||||
@ -9235,14 +9156,14 @@ tapable@^1.0.0, tapable@^1.1.3:
|
|||||||
integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
|
integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
|
||||||
|
|
||||||
tar@^6.0.2:
|
tar@^6.0.2:
|
||||||
version "6.1.11"
|
version "6.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621"
|
resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.2.tgz#5df17813468a6264ff14f766886c622b84ae2f39"
|
||||||
integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==
|
integrity sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==
|
||||||
dependencies:
|
dependencies:
|
||||||
chownr "^2.0.0"
|
chownr "^2.0.0"
|
||||||
fs-minipass "^2.0.0"
|
fs-minipass "^2.0.0"
|
||||||
minipass "^3.0.0"
|
minipass "^3.0.0"
|
||||||
minizlib "^2.1.1"
|
minizlib "^2.1.0"
|
||||||
mkdirp "^1.0.3"
|
mkdirp "^1.0.3"
|
||||||
yallist "^4.0.0"
|
yallist "^4.0.0"
|
||||||
|
|
||||||
@ -9291,14 +9212,13 @@ terser@^4.1.2:
|
|||||||
source-map-support "~0.5.12"
|
source-map-support "~0.5.12"
|
||||||
|
|
||||||
terser@^5.0.0:
|
terser@^5.0.0:
|
||||||
version "5.14.2"
|
version "5.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10"
|
resolved "https://registry.yarnpkg.com/terser/-/terser-5.0.0.tgz#269640e4e92f15d628de1e5f01c4c61e1ba3d765"
|
||||||
integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==
|
integrity sha512-olH2DwGINoSuEpSGd+BsPuAQaA3OrHnHnFL/rDB2TVNc3srUbz/rq/j2BlF4zDXI+JqAvGr86bIm1R2cJgZ3FA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@jridgewell/source-map" "^0.3.2"
|
|
||||||
acorn "^8.5.0"
|
|
||||||
commander "^2.20.0"
|
commander "^2.20.0"
|
||||||
source-map-support "~0.5.20"
|
source-map "~0.6.1"
|
||||||
|
source-map-support "~0.5.12"
|
||||||
|
|
||||||
text-table@^0.2.0:
|
text-table@^0.2.0:
|
||||||
version "0.2.0"
|
version "0.2.0"
|
||||||
@ -9732,9 +9652,9 @@ url-parse-lax@^3.0.0:
|
|||||||
prepend-http "^2.0.0"
|
prepend-http "^2.0.0"
|
||||||
|
|
||||||
url-parse@^1.4.3, url-parse@^1.4.7:
|
url-parse@^1.4.3, url-parse@^1.4.7:
|
||||||
version "1.5.9"
|
version "1.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.9.tgz#05ff26484a0b5e4040ac64dcee4177223d74675e"
|
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.0.tgz#90aba6c902aeb2d80eac17b91131c27665d5d828"
|
||||||
integrity sha512-HpOvhKBvre8wYez+QhHcYiVvVmeF6DVnuSOOPhe3cTum3BnqHhvKaZm8FU5yTiOu/Jut2ZpB2rA/SbBA1JIGlQ==
|
integrity sha512-9iT6N4s93SMfzunOyDPe4vo4nLcSu1yq0IQK1gURmjm8tQNlM6loiuCRrKG1hHGXfB2EWd6H4cGi7tGdaygMFw==
|
||||||
dependencies:
|
dependencies:
|
||||||
querystringify "^2.1.1"
|
querystringify "^2.1.1"
|
||||||
requires-port "^1.0.0"
|
requires-port "^1.0.0"
|
||||||
|
@ -152,51 +152,6 @@ function FileUpload(path, fd) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//ref : https://codepen.io/chrisdpratt/pen/RKxJNo
|
|
||||||
function DownloadFile(verb, path, filename) {
|
|
||||||
return new Promise(function (resolve, reject) {
|
|
||||||
let api_url = '/api/';
|
|
||||||
let url = api_url + path;
|
|
||||||
let token = Tokens.getTopToken();
|
|
||||||
|
|
||||||
$.ajax({
|
|
||||||
url: url,
|
|
||||||
type: verb,
|
|
||||||
crossDomain: true,
|
|
||||||
xhrFields: {
|
|
||||||
withCredentials: true,
|
|
||||||
responseType: 'blob'
|
|
||||||
},
|
|
||||||
|
|
||||||
beforeSend: function (xhr) {
|
|
||||||
xhr.setRequestHeader('Authorization', 'Bearer ' + (token ? token.t : null));
|
|
||||||
},
|
|
||||||
|
|
||||||
success: function (data) {
|
|
||||||
var a = document.createElement('a');
|
|
||||||
var url = window.URL.createObjectURL(data);
|
|
||||||
a.href = url;
|
|
||||||
a.download = filename;
|
|
||||||
document.body.append(a);
|
|
||||||
a.click();
|
|
||||||
a.remove();
|
|
||||||
window.URL.revokeObjectURL(url);
|
|
||||||
},
|
|
||||||
|
|
||||||
error: function (xhr, status, error_thrown) {
|
|
||||||
let code = 400;
|
|
||||||
|
|
||||||
if (typeof xhr.responseJSON !== 'undefined' && typeof xhr.responseJSON.error !== 'undefined' && typeof xhr.responseJSON.error.message !== 'undefined') {
|
|
||||||
error_thrown = xhr.responseJSON.error.message;
|
|
||||||
code = xhr.responseJSON.error.code || 500;
|
|
||||||
}
|
|
||||||
|
|
||||||
reject(new ApiError(error_thrown, xhr.responseText, code));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
status: function () {
|
status: function () {
|
||||||
return fetch('get', '');
|
return fetch('get', '');
|
||||||
@ -683,24 +638,6 @@ module.exports = {
|
|||||||
*/
|
*/
|
||||||
renew: function (id, timeout = 180000) {
|
renew: function (id, timeout = 180000) {
|
||||||
return fetch('post', 'nginx/certificates/' + id + '/renew', undefined, {timeout});
|
return fetch('post', 'nginx/certificates/' + id + '/renew', undefined, {timeout});
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {Number} id
|
|
||||||
* @returns {Promise}
|
|
||||||
*/
|
|
||||||
testHttpChallenge: function (domains) {
|
|
||||||
return fetch('get', 'nginx/certificates/test-http?' + new URLSearchParams({
|
|
||||||
domains: JSON.stringify(domains),
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param {Number} id
|
|
||||||
* @returns {Promise}
|
|
||||||
*/
|
|
||||||
download: function (id) {
|
|
||||||
return DownloadFile('get', "nginx/certificates/" + id + "/download", "certificate.zip")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -2,16 +2,6 @@
|
|||||||
<div class="card-status bg-teal"></div>
|
<div class="card-status bg-teal"></div>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h3 class="card-title"><%- i18n('audit-log', 'title') %></h3>
|
<h3 class="card-title"><%- i18n('audit-log', 'title') %></h3>
|
||||||
<div class="card-options">
|
|
||||||
<form class="search-form" role="search">
|
|
||||||
<div class="input-icon">
|
|
||||||
<span class="input-icon-addon">
|
|
||||||
<i class="fe fe-search"></i>
|
|
||||||
</span>
|
|
||||||
<input name="source-query" type="text" value="" class="form-control form-control-sm" placeholder="<%- i18n('audit-log', 'search') %>" aria-label="<%- i18n('audit-log', 'search') %>">
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body no-padding min-100">
|
<div class="card-body no-padding min-100">
|
||||||
<div class="dimmer active">
|
<div class="dimmer active">
|
||||||
|
@ -12,68 +12,39 @@ module.exports = Mn.View.extend({
|
|||||||
|
|
||||||
ui: {
|
ui: {
|
||||||
list_region: '.list-region',
|
list_region: '.list-region',
|
||||||
dimmer: '.dimmer',
|
dimmer: '.dimmer'
|
||||||
search: '.search-form',
|
|
||||||
query: 'input[name="source-query"]'
|
|
||||||
},
|
|
||||||
|
|
||||||
fetch: App.Api.AuditLog.getAll,
|
|
||||||
|
|
||||||
showData: function(response) {
|
|
||||||
this.showChildView('list_region', new ListView({
|
|
||||||
collection: new AuditLogModel.Collection(response)
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
showError: function(err) {
|
|
||||||
this.showChildView('list_region', new ErrorView({
|
|
||||||
code: err.code,
|
|
||||||
message: err.message,
|
|
||||||
retry: function () {
|
|
||||||
App.Controller.showAuditLog();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
console.error(err);
|
|
||||||
},
|
|
||||||
|
|
||||||
showEmpty: function() {
|
|
||||||
this.showChildView('list_region', new EmptyView({
|
|
||||||
title: App.i18n('audit-log', 'empty'),
|
|
||||||
subtitle: App.i18n('audit-log', 'empty-subtitle')
|
|
||||||
}));
|
|
||||||
},
|
},
|
||||||
|
|
||||||
regions: {
|
regions: {
|
||||||
list_region: '@ui.list_region'
|
list_region: '@ui.list_region'
|
||||||
},
|
},
|
||||||
|
|
||||||
events: {
|
|
||||||
'submit @ui.search': function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
let query = this.ui.query.val();
|
|
||||||
|
|
||||||
this.fetch(['user'], query)
|
|
||||||
.then(response => this.showData(response))
|
|
||||||
.catch(err => {
|
|
||||||
this.showError(err);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
onRender: function () {
|
onRender: function () {
|
||||||
let view = this;
|
let view = this;
|
||||||
|
|
||||||
view.fetch(['user'])
|
App.Api.AuditLog.getAll(['user'])
|
||||||
.then(response => {
|
.then(response => {
|
||||||
if (!view.isDestroyed() && response && response.length) {
|
if (!view.isDestroyed() && response && response.length) {
|
||||||
view.showData(response);
|
view.showChildView('list_region', new ListView({
|
||||||
|
collection: new AuditLogModel.Collection(response)
|
||||||
|
}));
|
||||||
} else {
|
} else {
|
||||||
view.showEmpty();
|
view.showChildView('list_region', new EmptyView({
|
||||||
|
title: App.i18n('audit-log', 'empty'),
|
||||||
|
subtitle: App.i18n('audit-log', 'empty-subtitle')
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
view.showError(err);
|
view.showChildView('list_region', new ErrorView({
|
||||||
|
code: err.code,
|
||||||
|
message: err.message,
|
||||||
|
retry: function () {
|
||||||
|
App.Controller.showAuditLog();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
console.error(err);
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
view.ui.dimmer.removeClass('active');
|
view.ui.dimmer.removeClass('active');
|
||||||
|
@ -366,19 +366,6 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
|
||||||
* Certificate Test Reachability
|
|
||||||
*
|
|
||||||
* @param model
|
|
||||||
*/
|
|
||||||
showNginxCertificateTestReachability: function (model) {
|
|
||||||
if (Cache.User.isAdmin() || Cache.User.canManage('certificates')) {
|
|
||||||
require(['./main', './nginx/certificates/test'], function (App, View) {
|
|
||||||
App.UI.showModalDialog(new View({model: model}));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Audit Log
|
* Audit Log
|
||||||
*/
|
*/
|
||||||
|
@ -3,14 +3,6 @@
|
|||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h3 class="card-title"><%- i18n('access-lists', 'title') %></h3>
|
<h3 class="card-title"><%- i18n('access-lists', 'title') %></h3>
|
||||||
<div class="card-options">
|
<div class="card-options">
|
||||||
<form class="search-form" role="search">
|
|
||||||
<div class="input-icon">
|
|
||||||
<span class="input-icon-addon">
|
|
||||||
<i class="fe fe-search"></i>
|
|
||||||
</span>
|
|
||||||
<input name="source-query" type="text" value="" class="form-control form-control-sm" placeholder="<%- i18n('access-lists', 'search') %>" aria-label="<%- i18n('access-lists', 'search') %>">
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<a href="#" class="btn btn-outline-secondary btn-sm ml-2 help"><i class="fe fe-help-circle"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm ml-2 help"><i class="fe fe-help-circle"></i></a>
|
||||||
<% if (showAddButton) { %>
|
<% if (showAddButton) { %>
|
||||||
<a href="#" class="btn btn-outline-teal btn-sm ml-2 add-item"><%- i18n('access-lists', 'add') %></a>
|
<a href="#" class="btn btn-outline-teal btn-sm ml-2 add-item"><%- i18n('access-lists', 'add') %></a>
|
||||||
|
@ -14,44 +14,7 @@ module.exports = Mn.View.extend({
|
|||||||
list_region: '.list-region',
|
list_region: '.list-region',
|
||||||
add: '.add-item',
|
add: '.add-item',
|
||||||
help: '.help',
|
help: '.help',
|
||||||
dimmer: '.dimmer',
|
dimmer: '.dimmer'
|
||||||
search: '.search-form',
|
|
||||||
query: 'input[name="source-query"]'
|
|
||||||
},
|
|
||||||
|
|
||||||
fetch: App.Api.Nginx.AccessLists.getAll,
|
|
||||||
|
|
||||||
showData: function(response) {
|
|
||||||
this.showChildView('list_region', new ListView({
|
|
||||||
collection: new AccessListModel.Collection(response)
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
showError: function(err) {
|
|
||||||
this.showChildView('list_region', new ErrorView({
|
|
||||||
code: err.code,
|
|
||||||
message: err.message,
|
|
||||||
retry: function () {
|
|
||||||
App.Controller.showNginxAccess();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
console.error(err);
|
|
||||||
},
|
|
||||||
|
|
||||||
showEmpty: function() {
|
|
||||||
let manage = App.Cache.User.canManage('access_lists');
|
|
||||||
|
|
||||||
this.showChildView('list_region', new EmptyView({
|
|
||||||
title: App.i18n('access-lists', 'empty'),
|
|
||||||
subtitle: App.i18n('all-hosts', 'empty-subtitle', {manage: manage}),
|
|
||||||
link: manage ? App.i18n('access-lists', 'add') : null,
|
|
||||||
btn_color: 'teal',
|
|
||||||
permission: 'access_lists',
|
|
||||||
action: function () {
|
|
||||||
App.Controller.showNginxAccessListForm();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
},
|
},
|
||||||
|
|
||||||
regions: {
|
regions: {
|
||||||
@ -67,17 +30,6 @@ module.exports = Mn.View.extend({
|
|||||||
'click @ui.help': function (e) {
|
'click @ui.help': function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
App.Controller.showHelp(App.i18n('access-lists', 'help-title'), App.i18n('access-lists', 'help-content'));
|
App.Controller.showHelp(App.i18n('access-lists', 'help-title'), App.i18n('access-lists', 'help-content'));
|
||||||
},
|
|
||||||
|
|
||||||
'submit @ui.search': function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
let query = this.ui.query.val();
|
|
||||||
|
|
||||||
this.fetch(['owner', 'items', 'clients'], query)
|
|
||||||
.then(response => this.showData(response))
|
|
||||||
.catch(err => {
|
|
||||||
this.showError(err);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -88,18 +40,39 @@ module.exports = Mn.View.extend({
|
|||||||
onRender: function () {
|
onRender: function () {
|
||||||
let view = this;
|
let view = this;
|
||||||
|
|
||||||
view.fetch(['owner', 'items', 'clients'])
|
App.Api.Nginx.AccessLists.getAll(['owner', 'items', 'clients'])
|
||||||
.then(response => {
|
.then(response => {
|
||||||
if (!view.isDestroyed()) {
|
if (!view.isDestroyed()) {
|
||||||
if (response && response.length) {
|
if (response && response.length) {
|
||||||
view.showData(response);
|
view.showChildView('list_region', new ListView({
|
||||||
|
collection: new AccessListModel.Collection(response)
|
||||||
|
}));
|
||||||
} else {
|
} else {
|
||||||
view.showEmpty();
|
let manage = App.Cache.User.canManage('access_lists');
|
||||||
|
|
||||||
|
view.showChildView('list_region', new EmptyView({
|
||||||
|
title: App.i18n('access-lists', 'empty'),
|
||||||
|
subtitle: App.i18n('all-hosts', 'empty-subtitle', {manage: manage}),
|
||||||
|
link: manage ? App.i18n('access-lists', 'add') : null,
|
||||||
|
btn_color: 'teal',
|
||||||
|
permission: 'access_lists',
|
||||||
|
action: function () {
|
||||||
|
App.Controller.showNginxAccessListForm();
|
||||||
|
}
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
view.showError(err);
|
view.showChildView('list_region', new ErrorView({
|
||||||
|
code: err.code,
|
||||||
|
message: err.message,
|
||||||
|
retry: function () {
|
||||||
|
App.Controller.showNginxAccess();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
console.error(err);
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
view.ui.dimmer.removeClass('active');
|
view.ui.dimmer.removeClass('active');
|
||||||
|
@ -18,14 +18,6 @@
|
|||||||
<input type="text" name="domain_names" class="form-control" id="input-domains" value="<%- domain_names.join(',') %>" required>
|
<input type="text" name="domain_names" class="form-control" id="input-domains" value="<%- domain_names.join(',') %>" required>
|
||||||
<div class="text-blue"><i class="fe fe-alert-triangle"></i> <%- i18n('ssl', 'hosts-warning') %></div>
|
<div class="text-blue"><i class="fe fe-alert-triangle"></i> <%- i18n('ssl', 'hosts-warning') %></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mb-3 test-domains-container">
|
|
||||||
<button type="button" class="btn btn-secondary test-domains col-sm-12"><%- i18n('certificates', 'test-reachability') %></button>
|
|
||||||
<div class="text-secondary small">
|
|
||||||
<i class="fe fe-info"></i>
|
|
||||||
<%- i18n('certificates', 'reachability-info') %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-12 col-md-12">
|
<div class="col-sm-12 col-md-12">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
@ -29,8 +29,6 @@ module.exports = Mn.View.extend({
|
|||||||
non_loader_content: '.non-loader-content',
|
non_loader_content: '.non-loader-content',
|
||||||
le_error_info: '#le-error-info',
|
le_error_info: '#le-error-info',
|
||||||
domain_names: 'input[name="domain_names"]',
|
domain_names: 'input[name="domain_names"]',
|
||||||
test_domains_container: '.test-domains-container',
|
|
||||||
test_domains_button: '.test-domains',
|
|
||||||
buttons: '.modal-footer button',
|
buttons: '.modal-footer button',
|
||||||
cancel: 'button.cancel',
|
cancel: 'button.cancel',
|
||||||
save: 'button.save',
|
save: 'button.save',
|
||||||
@ -58,12 +56,10 @@ module.exports = Mn.View.extend({
|
|||||||
this.ui.dns_provider_credentials.prop('required', 'required');
|
this.ui.dns_provider_credentials.prop('required', 'required');
|
||||||
}
|
}
|
||||||
this.ui.dns_challenge_content.show();
|
this.ui.dns_challenge_content.show();
|
||||||
this.ui.test_domains_container.hide();
|
|
||||||
} else {
|
} else {
|
||||||
this.ui.dns_provider.prop('required', false);
|
this.ui.dns_provider.prop('required', false);
|
||||||
this.ui.dns_provider_credentials.prop('required', false);
|
this.ui.dns_provider_credentials.prop('required', false);
|
||||||
this.ui.dns_challenge_content.hide();
|
this.ui.dns_challenge_content.hide();
|
||||||
this.ui.test_domains_container.show();
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -209,23 +205,6 @@ module.exports = Mn.View.extend({
|
|||||||
this.ui.non_loader_content.show();
|
this.ui.non_loader_content.show();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
'click @ui.test_domains_button': function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
const domainNames = this.ui.domain_names[0].value.split(',');
|
|
||||||
if (domainNames && domainNames.length > 0) {
|
|
||||||
this.model.set('domain_names', domainNames);
|
|
||||||
this.model.set('back_to_add', true);
|
|
||||||
App.Controller.showNginxCertificateTestReachability(this.model);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'change @ui.domain_names': function(e){
|
|
||||||
const domainNames = e.target.value.split(',');
|
|
||||||
if (domainNames && domainNames.length > 0) {
|
|
||||||
this.ui.test_domains_button.prop('disabled', false);
|
|
||||||
} else {
|
|
||||||
this.ui.test_domains_button.prop('disabled', true);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'change @ui.other_certificate_key': function(e){
|
'change @ui.other_certificate_key': function(e){
|
||||||
this.setFileName("other_certificate_key_label", e)
|
this.setFileName("other_certificate_key_label", e)
|
||||||
},
|
},
|
||||||
@ -278,12 +257,6 @@ module.exports = Mn.View.extend({
|
|||||||
this.ui.credentials_file_content.hide();
|
this.ui.credentials_file_content.hide();
|
||||||
this.ui.loader_content.hide();
|
this.ui.loader_content.hide();
|
||||||
this.ui.le_error_info.hide();
|
this.ui.le_error_info.hide();
|
||||||
if (this.ui.domain_names[0]) {
|
|
||||||
const domainNames = this.ui.domain_names[0].value.split(',');
|
|
||||||
if (!domainNames || domainNames.length === 0 || (domainNames.length === 1 && domainNames[0] === "")) {
|
|
||||||
this.ui.test_domains_button.prop('disabled', true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
initialize: function (options) {
|
initialize: function (options) {
|
||||||
|
@ -41,10 +41,6 @@
|
|||||||
<span class="dropdown-header"><%- i18n('audit-log', 'certificate') %> #<%- id %></span>
|
<span class="dropdown-header"><%- i18n('audit-log', 'certificate') %> #<%- id %></span>
|
||||||
<% if (provider === 'letsencrypt') { %>
|
<% if (provider === 'letsencrypt') { %>
|
||||||
<a href="#" class="renew dropdown-item"><i class="dropdown-icon fe fe-refresh-cw"></i> <%- i18n('certificates', 'force-renew') %></a>
|
<a href="#" class="renew dropdown-item"><i class="dropdown-icon fe fe-refresh-cw"></i> <%- i18n('certificates', 'force-renew') %></a>
|
||||||
<a href="#" class="download dropdown-item"><i class="dropdown-icon fe fe-download"></i> <%- i18n('certificates', 'download') %></a>
|
|
||||||
<% if (meta.dns_challenge === false) { %>
|
|
||||||
<a href="#" class="test dropdown-item"><i class="dropdown-icon fe fe-globe"></i> <%- i18n('certificates', 'test-reachability') %></a>
|
|
||||||
<% } %>
|
|
||||||
<div class="dropdown-divider"></div>
|
<div class="dropdown-divider"></div>
|
||||||
<% } %>
|
<% } %>
|
||||||
<a href="#" class="delete dropdown-item"><i class="dropdown-icon fe fe-trash-2"></i> <%- i18n('str', 'delete') %></a>
|
<a href="#" class="delete dropdown-item"><i class="dropdown-icon fe fe-trash-2"></i> <%- i18n('str', 'delete') %></a>
|
||||||
|
@ -2,7 +2,7 @@ const Mn = require('backbone.marionette');
|
|||||||
const moment = require('moment');
|
const moment = require('moment');
|
||||||
const App = require('../../../main');
|
const App = require('../../../main');
|
||||||
const template = require('./item.ejs');
|
const template = require('./item.ejs');
|
||||||
const dns_providers = require('../../../../../../global/certbot-dns-plugins');
|
const dns_providers = require('../../../../../../global/certbot-dns-plugins')
|
||||||
|
|
||||||
module.exports = Mn.View.extend({
|
module.exports = Mn.View.extend({
|
||||||
template: template,
|
template: template,
|
||||||
@ -11,9 +11,7 @@ module.exports = Mn.View.extend({
|
|||||||
ui: {
|
ui: {
|
||||||
host_link: '.host-link',
|
host_link: '.host-link',
|
||||||
renew: 'a.renew',
|
renew: 'a.renew',
|
||||||
delete: 'a.delete',
|
delete: 'a.delete'
|
||||||
download: 'a.download',
|
|
||||||
test: 'a.test'
|
|
||||||
},
|
},
|
||||||
|
|
||||||
events: {
|
events: {
|
||||||
@ -31,17 +29,7 @@ module.exports = Mn.View.extend({
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
let win = window.open($(e.currentTarget).attr('rel'), '_blank');
|
let win = window.open($(e.currentTarget).attr('rel'), '_blank');
|
||||||
win.focus();
|
win.focus();
|
||||||
},
|
}
|
||||||
|
|
||||||
'click @ui.download': function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
App.Api.Nginx.Certificates.download(this.model.get('id'));
|
|
||||||
},
|
|
||||||
|
|
||||||
'click @ui.test': function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
App.Controller.showNginxCertificateTestReachability(this.model);
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
|
|
||||||
templateContext: {
|
templateContext: {
|
||||||
|
@ -3,14 +3,6 @@
|
|||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h3 class="card-title"><%- i18n('certificates', 'title') %></h3>
|
<h3 class="card-title"><%- i18n('certificates', 'title') %></h3>
|
||||||
<div class="card-options">
|
<div class="card-options">
|
||||||
<form class="search-form" role="search">
|
|
||||||
<div class="input-icon">
|
|
||||||
<span class="input-icon-addon">
|
|
||||||
<i class="fe fe-search"></i>
|
|
||||||
</span>
|
|
||||||
<input name="source-query" type="text" value="" class="form-control form-control-sm" placeholder="<%- i18n('certificates', 'search') %>" aria-label="<%- i18n('certificates', 'search') %>">
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<a href="#" class="btn btn-outline-secondary btn-sm ml-2 help"><i class="fe fe-help-circle"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm ml-2 help"><i class="fe fe-help-circle"></i></a>
|
||||||
<% if (showAddButton) { %>
|
<% if (showAddButton) { %>
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
|
@ -14,44 +14,7 @@ module.exports = Mn.View.extend({
|
|||||||
list_region: '.list-region',
|
list_region: '.list-region',
|
||||||
add: '.add-item',
|
add: '.add-item',
|
||||||
help: '.help',
|
help: '.help',
|
||||||
dimmer: '.dimmer',
|
dimmer: '.dimmer'
|
||||||
search: '.search-form',
|
|
||||||
query: 'input[name="source-query"]'
|
|
||||||
},
|
|
||||||
|
|
||||||
fetch: App.Api.Nginx.Certificates.getAll,
|
|
||||||
|
|
||||||
showData: function(response) {
|
|
||||||
this.showChildView('list_region', new ListView({
|
|
||||||
collection: new CertificateModel.Collection(response)
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
showError: function(err) {
|
|
||||||
this.showChildView('list_region', new ErrorView({
|
|
||||||
code: err.code,
|
|
||||||
message: err.message,
|
|
||||||
retry: function () {
|
|
||||||
App.Controller.showNginxCertificates();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
console.error(err);
|
|
||||||
},
|
|
||||||
|
|
||||||
showEmpty: function() {
|
|
||||||
let manage = App.Cache.User.canManage('certificates');
|
|
||||||
|
|
||||||
this.showChildView('list_region', new EmptyView({
|
|
||||||
title: App.i18n('certificates', 'empty'),
|
|
||||||
subtitle: App.i18n('all-hosts', 'empty-subtitle', {manage: manage}),
|
|
||||||
link: manage ? App.i18n('certificates', 'add') : null,
|
|
||||||
btn_color: 'pink',
|
|
||||||
permission: 'certificates',
|
|
||||||
action: function () {
|
|
||||||
App.Controller.showNginxCertificateForm();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
},
|
},
|
||||||
|
|
||||||
regions: {
|
regions: {
|
||||||
@ -68,17 +31,6 @@ module.exports = Mn.View.extend({
|
|||||||
'click @ui.help': function (e) {
|
'click @ui.help': function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
App.Controller.showHelp(App.i18n('certificates', 'help-title'), App.i18n('certificates', 'help-content'));
|
App.Controller.showHelp(App.i18n('certificates', 'help-title'), App.i18n('certificates', 'help-content'));
|
||||||
},
|
|
||||||
|
|
||||||
'submit @ui.search': function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
let query = this.ui.query.val();
|
|
||||||
|
|
||||||
this.fetch(['owner'], query)
|
|
||||||
.then(response => this.showData(response))
|
|
||||||
.catch(err => {
|
|
||||||
this.showError(err);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -89,18 +41,39 @@ module.exports = Mn.View.extend({
|
|||||||
onRender: function () {
|
onRender: function () {
|
||||||
let view = this;
|
let view = this;
|
||||||
|
|
||||||
view.fetch(['owner'])
|
App.Api.Nginx.Certificates.getAll(['owner'])
|
||||||
.then(response => {
|
.then(response => {
|
||||||
if (!view.isDestroyed()) {
|
if (!view.isDestroyed()) {
|
||||||
if (response && response.length) {
|
if (response && response.length) {
|
||||||
view.showData(response);
|
view.showChildView('list_region', new ListView({
|
||||||
|
collection: new CertificateModel.Collection(response)
|
||||||
|
}));
|
||||||
} else {
|
} else {
|
||||||
view.showEmpty();
|
let manage = App.Cache.User.canManage('certificates');
|
||||||
|
|
||||||
|
view.showChildView('list_region', new EmptyView({
|
||||||
|
title: App.i18n('certificates', 'empty'),
|
||||||
|
subtitle: App.i18n('all-hosts', 'empty-subtitle', {manage: manage}),
|
||||||
|
link: manage ? App.i18n('certificates', 'add') : null,
|
||||||
|
btn_color: 'pink',
|
||||||
|
permission: 'certificates',
|
||||||
|
action: function () {
|
||||||
|
App.Controller.showNginxCertificateForm();
|
||||||
|
}
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
view.showError(err);
|
view.showChildView('list_region', new ErrorView({
|
||||||
|
code: err.code,
|
||||||
|
message: err.message,
|
||||||
|
retry: function () {
|
||||||
|
App.Controller.showNginxCertificates();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
console.error(err);
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
view.ui.dimmer.removeClass('active');
|
view.ui.dimmer.removeClass('active');
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title"><%- i18n('certificates', 'reachability-title') %></h5>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<div class="waiting text-center">
|
|
||||||
<%= i18n('str', 'please-wait') %>
|
|
||||||
</div>
|
|
||||||
<div class="alert alert-danger error" role="alert"></div>
|
|
||||||
<div class="alert alert-success success" role="alert"></div>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-secondary cancel" disabled><%- i18n('str', 'close') %></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@ -1,75 +0,0 @@
|
|||||||
const Mn = require('backbone.marionette');
|
|
||||||
const App = require('../../main');
|
|
||||||
const template = require('./test.ejs');
|
|
||||||
|
|
||||||
module.exports = Mn.View.extend({
|
|
||||||
template: template,
|
|
||||||
className: 'modal-dialog',
|
|
||||||
|
|
||||||
ui: {
|
|
||||||
waiting: '.waiting',
|
|
||||||
error: '.error',
|
|
||||||
success: '.success',
|
|
||||||
close: 'button.cancel'
|
|
||||||
},
|
|
||||||
|
|
||||||
events: {
|
|
||||||
'click @ui.close': function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
if (this.model.get('back_to_add')) {
|
|
||||||
App.Controller.showNginxCertificateForm(this.model);
|
|
||||||
} else {
|
|
||||||
App.UI.closeModal();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
onRender: function () {
|
|
||||||
this.ui.error.hide();
|
|
||||||
this.ui.success.hide();
|
|
||||||
|
|
||||||
App.Api.Nginx.Certificates.testHttpChallenge(this.model.get('domain_names'))
|
|
||||||
.then((result) => {
|
|
||||||
let allOk = true;
|
|
||||||
let text = '';
|
|
||||||
|
|
||||||
for (const domain in result) {
|
|
||||||
const status = result[domain];
|
|
||||||
if (status === 'ok') {
|
|
||||||
text += `<p><strong>${domain}:</strong> ${App.i18n('certificates', 'reachability-ok')}</p>`;
|
|
||||||
} else {
|
|
||||||
allOk = false;
|
|
||||||
if (status === 'no-host') {
|
|
||||||
text += `<p><strong>${domain}:</strong> ${App.i18n('certificates', 'reachability-not-resolved')}</p>`;
|
|
||||||
} else if (status === 'failed') {
|
|
||||||
text += `<p><strong>${domain}:</strong> ${App.i18n('certificates', 'reachability-failed-to-check')}</p>`;
|
|
||||||
} else if (status === '404') {
|
|
||||||
text += `<p><strong>${domain}:</strong> ${App.i18n('certificates', 'reachability-404')}</p>`;
|
|
||||||
} else if (status === 'wrong-data') {
|
|
||||||
text += `<p><strong>${domain}:</strong> ${App.i18n('certificates', 'reachability-wrong-data')}</p>`;
|
|
||||||
} else if (status.startsWith('other:')) {
|
|
||||||
const code = status.substring(6);
|
|
||||||
text += `<p><strong>${domain}:</strong> ${App.i18n('certificates', 'reachability-other', {code})}</p>`;
|
|
||||||
} else {
|
|
||||||
// This should never happen
|
|
||||||
text += `<p><strong>${domain}:</strong> ?</p>`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.ui.waiting.hide();
|
|
||||||
if (allOk) {
|
|
||||||
this.ui.success.html(text).show();
|
|
||||||
} else {
|
|
||||||
this.ui.error.html(text).show();
|
|
||||||
}
|
|
||||||
this.ui.close.prop('disabled', false);
|
|
||||||
})
|
|
||||||
.catch((e) => {
|
|
||||||
console.error(e);
|
|
||||||
this.ui.waiting.hide();
|
|
||||||
this.ui.error.text(App.i18n('certificates', 'reachability-failed-to-reach-api')).show();
|
|
||||||
this.ui.close.prop('disabled', false);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
@ -7,7 +7,7 @@
|
|||||||
<form>
|
<form>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-md-12">
|
<div class="col-sm-12 col-md-12">
|
||||||
<%= i18n('dead-hosts', 'delete-confirm', {domains: domain_names.join(', ').toHtmlEntities()}) %>
|
<%= i18n('dead-hosts', 'delete-confirm', {domains: domain_names.join(', ')}) %>
|
||||||
<% if (certificate_id) { %>
|
<% if (certificate_id) { %>
|
||||||
<br><br>
|
<br><br>
|
||||||
<%- i18n('ssl', 'delete-ssl') %>
|
<%- i18n('ssl', 'delete-ssl') %>
|
||||||
|
@ -3,14 +3,6 @@
|
|||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h3 class="card-title"><%- i18n('dead-hosts', 'title') %></h3>
|
<h3 class="card-title"><%- i18n('dead-hosts', 'title') %></h3>
|
||||||
<div class="card-options">
|
<div class="card-options">
|
||||||
<form class="search-form" role="search">
|
|
||||||
<div class="input-icon">
|
|
||||||
<span class="input-icon-addon">
|
|
||||||
<i class="fe fe-search"></i>
|
|
||||||
</span>
|
|
||||||
<input name="source-query" type="text" value="" class="form-control form-control-sm" placeholder="<%- i18n('dead-hosts', 'search') %>" aria-label="<%- i18n('dead-hosts', 'search') %>">
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<a href="#" class="btn btn-outline-secondary btn-sm ml-2 help"><i class="fe fe-help-circle"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm ml-2 help"><i class="fe fe-help-circle"></i></a>
|
||||||
<% if (showAddButton) { %>
|
<% if (showAddButton) { %>
|
||||||
<a href="#" class="btn btn-outline-danger btn-sm ml-2 add-item"><%- i18n('dead-hosts', 'add') %></a>
|
<a href="#" class="btn btn-outline-danger btn-sm ml-2 add-item"><%- i18n('dead-hosts', 'add') %></a>
|
||||||
|
@ -14,44 +14,7 @@ module.exports = Mn.View.extend({
|
|||||||
list_region: '.list-region',
|
list_region: '.list-region',
|
||||||
add: '.add-item',
|
add: '.add-item',
|
||||||
help: '.help',
|
help: '.help',
|
||||||
dimmer: '.dimmer',
|
dimmer: '.dimmer'
|
||||||
search: '.search-form',
|
|
||||||
query: 'input[name="source-query"]'
|
|
||||||
},
|
|
||||||
|
|
||||||
fetch: App.Api.Nginx.DeadHosts.getAll,
|
|
||||||
|
|
||||||
showData: function(response) {
|
|
||||||
this.showChildView('list_region', new ListView({
|
|
||||||
collection: new DeadHostModel.Collection(response)
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
showError: function(err) {
|
|
||||||
this.showChildView('list_region', new ErrorView({
|
|
||||||
code: err.code,
|
|
||||||
message: err.message,
|
|
||||||
retry: function () {
|
|
||||||
App.Controller.showNginxDead();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
console.error(err);
|
|
||||||
},
|
|
||||||
|
|
||||||
showEmpty: function() {
|
|
||||||
let manage = App.Cache.User.canManage('dead_hosts');
|
|
||||||
|
|
||||||
this.showChildView('list_region', new EmptyView({
|
|
||||||
title: App.i18n('dead-hosts', 'empty'),
|
|
||||||
subtitle: App.i18n('all-hosts', 'empty-subtitle', {manage: manage}),
|
|
||||||
link: manage ? App.i18n('dead-hosts', 'add') : null,
|
|
||||||
btn_color: 'danger',
|
|
||||||
permission: 'dead_hosts',
|
|
||||||
action: function () {
|
|
||||||
App.Controller.showNginxDeadForm();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
},
|
},
|
||||||
|
|
||||||
regions: {
|
regions: {
|
||||||
@ -67,17 +30,6 @@ module.exports = Mn.View.extend({
|
|||||||
'click @ui.help': function (e) {
|
'click @ui.help': function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
App.Controller.showHelp(App.i18n('dead-hosts', 'help-title'), App.i18n('dead-hosts', 'help-content'));
|
App.Controller.showHelp(App.i18n('dead-hosts', 'help-title'), App.i18n('dead-hosts', 'help-content'));
|
||||||
},
|
|
||||||
|
|
||||||
'submit @ui.search': function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
let query = this.ui.query.val();
|
|
||||||
|
|
||||||
this.fetch(['owner', 'certificate'], query)
|
|
||||||
.then(response => this.showData(response))
|
|
||||||
.catch(err => {
|
|
||||||
this.showError(err);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -88,18 +40,39 @@ module.exports = Mn.View.extend({
|
|||||||
onRender: function () {
|
onRender: function () {
|
||||||
let view = this;
|
let view = this;
|
||||||
|
|
||||||
view.fetch(['owner', 'certificate'])
|
App.Api.Nginx.DeadHosts.getAll(['owner', 'certificate'])
|
||||||
.then(response => {
|
.then(response => {
|
||||||
if (!view.isDestroyed()) {
|
if (!view.isDestroyed()) {
|
||||||
if (response && response.length) {
|
if (response && response.length) {
|
||||||
view.showData(response);
|
view.showChildView('list_region', new ListView({
|
||||||
|
collection: new DeadHostModel.Collection(response)
|
||||||
|
}));
|
||||||
} else {
|
} else {
|
||||||
view.showEmpty();
|
let manage = App.Cache.User.canManage('dead_hosts');
|
||||||
|
|
||||||
|
view.showChildView('list_region', new EmptyView({
|
||||||
|
title: App.i18n('dead-hosts', 'empty'),
|
||||||
|
subtitle: App.i18n('all-hosts', 'empty-subtitle', {manage: manage}),
|
||||||
|
link: manage ? App.i18n('dead-hosts', 'add') : null,
|
||||||
|
btn_color: 'danger',
|
||||||
|
permission: 'dead_hosts',
|
||||||
|
action: function () {
|
||||||
|
App.Controller.showNginxDeadForm();
|
||||||
|
}
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
view.showError(err);
|
view.showChildView('list_region', new ErrorView({
|
||||||
|
code: err.code,
|
||||||
|
message: err.message,
|
||||||
|
retry: function () {
|
||||||
|
App.Controller.showNginxDead();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
console.error(err);
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
view.ui.dimmer.removeClass('active');
|
view.ui.dimmer.removeClass('active');
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<form>
|
<form>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-md-12">
|
<div class="col-sm-12 col-md-12">
|
||||||
<%= i18n('proxy-hosts', 'delete-confirm', {domains: domain_names.join(', ').toHtmlEntities()}) %>
|
<%= i18n('proxy-hosts', 'delete-confirm', {domains: domain_names.join(', ')}) %>
|
||||||
<% if (certificate_id) { %>
|
<% if (certificate_id) { %>
|
||||||
<br><br>
|
<br><br>
|
||||||
<%- i18n('ssl', 'delete-ssl') %>
|
<%- i18n('ssl', 'delete-ssl') %>
|
||||||
|
@ -257,17 +257,16 @@
|
|||||||
<div role="tabpanel" class="tab-pane" id="advanced">
|
<div role="tabpanel" class="tab-pane" id="advanced">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<p><%- i18n('all-hosts', 'advanced-config-var-headline') %></p>
|
<p>Nginx variables available to you are:</p>
|
||||||
<ul class="text-monospace">
|
<ul class="text-monospace">
|
||||||
<li><code>$server</code> <%- i18n('proxy-hosts', 'forward-host') %></li>
|
<li>$server # Host/IP</li>
|
||||||
<li><code>$port</code> <%- i18n('proxy-hosts', 'forward-port') %></li>
|
<li>$port # Port Number</li>
|
||||||
<li><code>$forward_scheme</code> <%- i18n('proxy-hosts', 'forward-scheme') %></li>
|
<li>$forward_scheme # http or https</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="form-group mb-0">
|
<div class="form-group mb-0">
|
||||||
<label class="form-label"><%- i18n('all-hosts', 'advanced-config') %></label>
|
<label class="form-label"><%- i18n('all-hosts', 'advanced-config') %></label>
|
||||||
<textarea name="advanced_config" rows="8" class="form-control text-monospace" placeholder="# <%- i18n('all-hosts', 'advanced-warning') %>"><%- advanced_config %></textarea>
|
<textarea name="advanced_config" rows="8" class="form-control text-monospace" placeholder="# <%- i18n('all-hosts', 'advanced-warning') %>"><%- advanced_config %></textarea>
|
||||||
</div>
|
</div>
|
||||||
<p class="small text-gray"><i class="fe fe-alert-triangle"></i> <%- i18n('all-hosts', 'advanced-config-header-info') %></p>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -3,14 +3,6 @@
|
|||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h3 class="card-title"><%- i18n('proxy-hosts', 'title') %></h3>
|
<h3 class="card-title"><%- i18n('proxy-hosts', 'title') %></h3>
|
||||||
<div class="card-options">
|
<div class="card-options">
|
||||||
<form class="search-form" role="search">
|
|
||||||
<div class="input-icon">
|
|
||||||
<span class="input-icon-addon">
|
|
||||||
<i class="fe fe-search"></i>
|
|
||||||
</span>
|
|
||||||
<input name="source-query" type="text" value="" class="form-control form-control-sm" placeholder="<%- i18n('proxy-hosts', 'search') %>" aria-label="<%- i18n('proxy-hosts', 'search') %>">
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<a href="#" class="btn btn-outline-secondary btn-sm ml-2 help"><i class="fe fe-help-circle"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm ml-2 help"><i class="fe fe-help-circle"></i></a>
|
||||||
<% if (showAddButton) { %>
|
<% if (showAddButton) { %>
|
||||||
<a href="#" class="btn btn-outline-success btn-sm ml-2 add-item"><%- i18n('proxy-hosts', 'add') %></a>
|
<a href="#" class="btn btn-outline-success btn-sm ml-2 add-item"><%- i18n('proxy-hosts', 'add') %></a>
|
||||||
|
@ -14,44 +14,7 @@ module.exports = Mn.View.extend({
|
|||||||
list_region: '.list-region',
|
list_region: '.list-region',
|
||||||
add: '.add-item',
|
add: '.add-item',
|
||||||
help: '.help',
|
help: '.help',
|
||||||
dimmer: '.dimmer',
|
dimmer: '.dimmer'
|
||||||
search: '.search-form',
|
|
||||||
query: 'input[name="source-query"]'
|
|
||||||
},
|
|
||||||
|
|
||||||
fetch: App.Api.Nginx.ProxyHosts.getAll,
|
|
||||||
|
|
||||||
showData: function(response) {
|
|
||||||
this.showChildView('list_region', new ListView({
|
|
||||||
collection: new ProxyHostModel.Collection(response)
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
showError: function(err) {
|
|
||||||
this.showChildView('list_region', new ErrorView({
|
|
||||||
code: err.code,
|
|
||||||
message: err.message,
|
|
||||||
retry: function () {
|
|
||||||
App.Controller.showNginxProxy();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
console.error(err);
|
|
||||||
},
|
|
||||||
|
|
||||||
showEmpty: function() {
|
|
||||||
let manage = App.Cache.User.canManage('proxy_hosts');
|
|
||||||
|
|
||||||
this.showChildView('list_region', new EmptyView({
|
|
||||||
title: App.i18n('proxy-hosts', 'empty'),
|
|
||||||
subtitle: App.i18n('all-hosts', 'empty-subtitle', {manage: manage}),
|
|
||||||
link: manage ? App.i18n('proxy-hosts', 'add') : null,
|
|
||||||
btn_color: 'success',
|
|
||||||
permission: 'proxy_hosts',
|
|
||||||
action: function () {
|
|
||||||
App.Controller.showNginxProxyForm();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
},
|
},
|
||||||
|
|
||||||
regions: {
|
regions: {
|
||||||
@ -67,17 +30,6 @@ module.exports = Mn.View.extend({
|
|||||||
'click @ui.help': function (e) {
|
'click @ui.help': function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
App.Controller.showHelp(App.i18n('proxy-hosts', 'help-title'), App.i18n('proxy-hosts', 'help-content'));
|
App.Controller.showHelp(App.i18n('proxy-hosts', 'help-title'), App.i18n('proxy-hosts', 'help-content'));
|
||||||
},
|
|
||||||
|
|
||||||
'submit @ui.search': function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
let query = this.ui.query.val();
|
|
||||||
|
|
||||||
this.fetch(['owner', 'access_list', 'certificate'], query)
|
|
||||||
.then(response => this.showData(response))
|
|
||||||
.catch(err => {
|
|
||||||
this.showError(err);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -88,18 +40,39 @@ module.exports = Mn.View.extend({
|
|||||||
onRender: function () {
|
onRender: function () {
|
||||||
let view = this;
|
let view = this;
|
||||||
|
|
||||||
view.fetch(['owner', 'access_list', 'certificate'])
|
App.Api.Nginx.ProxyHosts.getAll(['owner', 'access_list', 'certificate'])
|
||||||
.then(response => {
|
.then(response => {
|
||||||
if (!view.isDestroyed()) {
|
if (!view.isDestroyed()) {
|
||||||
if (response && response.length) {
|
if (response && response.length) {
|
||||||
view.showData(response);
|
view.showChildView('list_region', new ListView({
|
||||||
|
collection: new ProxyHostModel.Collection(response)
|
||||||
|
}));
|
||||||
} else {
|
} else {
|
||||||
view.showEmpty();
|
let manage = App.Cache.User.canManage('proxy_hosts');
|
||||||
|
|
||||||
|
view.showChildView('list_region', new EmptyView({
|
||||||
|
title: App.i18n('proxy-hosts', 'empty'),
|
||||||
|
subtitle: App.i18n('all-hosts', 'empty-subtitle', {manage: manage}),
|
||||||
|
link: manage ? App.i18n('proxy-hosts', 'add') : null,
|
||||||
|
btn_color: 'success',
|
||||||
|
permission: 'proxy_hosts',
|
||||||
|
action: function () {
|
||||||
|
App.Controller.showNginxProxyForm();
|
||||||
|
}
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
view.showError(err);
|
view.showChildView('list_region', new ErrorView({
|
||||||
|
code: err.code,
|
||||||
|
message: err.message,
|
||||||
|
retry: function () {
|
||||||
|
App.Controller.showNginxProxy();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
console.error(err);
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
view.ui.dimmer.removeClass('active');
|
view.ui.dimmer.removeClass('active');
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<form>
|
<form>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-md-12">
|
<div class="col-sm-12 col-md-12">
|
||||||
<%= i18n('redirection-hosts', 'delete-confirm', {domains: domain_names.join(', ').toHtmlEntities()}) %>
|
<%= i18n('redirection-hosts', 'delete-confirm', {domains: domain_names.join(', ')}) %>
|
||||||
<% if (certificate_id) { %>
|
<% if (certificate_id) { %>
|
||||||
<br><br>
|
<br><br>
|
||||||
<%- i18n('ssl', 'delete-ssl') %>
|
<%- i18n('ssl', 'delete-ssl') %>
|
||||||
|
@ -1,19 +1,11 @@
|
|||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-status bg-yellow"></div>
|
<div class="card-status bg-yellow"></div>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h3 class="card-title"><%- i18n('redirection-hosts', 'title') %></h3>
|
<h3 class="card-title">Redirection Hosts</h3>
|
||||||
<div class="card-options">
|
<div class="card-options">
|
||||||
<form class="search-form" role="search">
|
|
||||||
<div class="input-icon">
|
|
||||||
<span class="input-icon-addon">
|
|
||||||
<i class="fe fe-search"></i>
|
|
||||||
</span>
|
|
||||||
<input name="source-query" type="text" value="" class="form-control form-control-sm" placeholder="<%- i18n('redirection-hosts', 'search') %>" aria-label="<%- i18n('redirection-hosts', 'search') %>">
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<a href="#" class="btn btn-outline-secondary btn-sm ml-2 help"><i class="fe fe-help-circle"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm ml-2 help"><i class="fe fe-help-circle"></i></a>
|
||||||
<% if (showAddButton) { %>
|
<% if (showAddButton) { %>
|
||||||
<a href="#" class="btn btn-outline-yellow btn-sm ml-2 add-item"><%- i18n('redirection-hosts', 'add') %></a>
|
<a href="#" class="btn btn-outline-yellow btn-sm ml-2 add-item">Add Redirection Host</a>
|
||||||
<% } %>
|
<% } %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -14,43 +14,7 @@ module.exports = Mn.View.extend({
|
|||||||
list_region: '.list-region',
|
list_region: '.list-region',
|
||||||
add: '.add-item',
|
add: '.add-item',
|
||||||
help: '.help',
|
help: '.help',
|
||||||
dimmer: '.dimmer',
|
dimmer: '.dimmer'
|
||||||
search: '.search-form',
|
|
||||||
query: 'input[name="source-query"]'
|
|
||||||
},
|
|
||||||
|
|
||||||
fetch: App.Api.Nginx.RedirectionHosts.getAll,
|
|
||||||
|
|
||||||
showData: function(response) {
|
|
||||||
this.showChildView('list_region', new ListView({
|
|
||||||
collection: new RedirectionHostModel.Collection(response)
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
showError: function(err) {
|
|
||||||
this.showChildView('list_region', new ErrorView({
|
|
||||||
code: err.code,
|
|
||||||
message: err.message,
|
|
||||||
retry: function () {
|
|
||||||
App.Controller.showNginxRedirection();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
console.error(err);
|
|
||||||
},
|
|
||||||
|
|
||||||
showEmpty: function() {
|
|
||||||
let manage = App.Cache.User.canManage('redirection_hosts');
|
|
||||||
|
|
||||||
this.showChildView('list_region', new EmptyView({
|
|
||||||
title: App.i18n('redirection-hosts', 'empty'),
|
|
||||||
subtitle: App.i18n('all-hosts', 'empty-subtitle', {manage: manage}),
|
|
||||||
link: manage ? App.i18n('redirection-hosts', 'add') : null,
|
|
||||||
btn_color: 'yellow',
|
|
||||||
permission: 'redirection_hosts',
|
|
||||||
action: function () {
|
|
||||||
App.Controller.showNginxRedirectionForm();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
},
|
},
|
||||||
|
|
||||||
regions: {
|
regions: {
|
||||||
@ -66,17 +30,6 @@ module.exports = Mn.View.extend({
|
|||||||
'click @ui.help': function (e) {
|
'click @ui.help': function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
App.Controller.showHelp(App.i18n('redirection-hosts', 'help-title'), App.i18n('redirection-hosts', 'help-content'));
|
App.Controller.showHelp(App.i18n('redirection-hosts', 'help-title'), App.i18n('redirection-hosts', 'help-content'));
|
||||||
},
|
|
||||||
|
|
||||||
'submit @ui.search': function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
let query = this.ui.query.val();
|
|
||||||
|
|
||||||
this.fetch(['owner', 'certificate'], query)
|
|
||||||
.then(response => this.showData(response))
|
|
||||||
.catch(err => {
|
|
||||||
this.showError(err);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -87,18 +40,39 @@ module.exports = Mn.View.extend({
|
|||||||
onRender: function () {
|
onRender: function () {
|
||||||
let view = this;
|
let view = this;
|
||||||
|
|
||||||
view.fetch(['owner', 'certificate'])
|
App.Api.Nginx.RedirectionHosts.getAll(['owner', 'certificate'])
|
||||||
.then(response => {
|
.then(response => {
|
||||||
if (!view.isDestroyed()) {
|
if (!view.isDestroyed()) {
|
||||||
if (response && response.length) {
|
if (response && response.length) {
|
||||||
view.showData(response);
|
view.showChildView('list_region', new ListView({
|
||||||
|
collection: new RedirectionHostModel.Collection(response)
|
||||||
|
}));
|
||||||
} else {
|
} else {
|
||||||
view.showEmpty();
|
let manage = App.Cache.User.canManage('redirection_hosts');
|
||||||
|
|
||||||
|
view.showChildView('list_region', new EmptyView({
|
||||||
|
title: App.i18n('redirection-hosts', 'empty'),
|
||||||
|
subtitle: App.i18n('all-hosts', 'empty-subtitle', {manage: manage}),
|
||||||
|
link: manage ? App.i18n('redirection-hosts', 'add') : null,
|
||||||
|
btn_color: 'yellow',
|
||||||
|
permission: 'redirection_hosts',
|
||||||
|
action: function () {
|
||||||
|
App.Controller.showNginxRedirectionForm();
|
||||||
|
}
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
view.showError(err);
|
view.showChildView('list_region', new ErrorView({
|
||||||
|
code: err.code,
|
||||||
|
message: err.message,
|
||||||
|
retry: function () {
|
||||||
|
App.Controller.showNginxRedirection();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
console.error(err);
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
view.ui.dimmer.removeClass('active');
|
view.ui.dimmer.removeClass('active');
|
||||||
|
@ -14,8 +14,8 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-sm-8 col-md-8">
|
<div class="col-sm-8 col-md-8">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="form-label"><%- i18n('streams', 'forwarding-host') %><span class="form-required">*</span></label>
|
<label class="form-label"><%- i18n('streams', 'forward-ip') %><span class="form-required">*</span></label>
|
||||||
<input type="text" name="forwarding_host" class="form-control text-monospace" placeholder="example.com or 10.0.0.1 or 2001:db8:3333:4444:5555:6666:7777:8888" value="<%- forwarding_host %>" autocomplete="off" maxlength="255" required>
|
<input type="text" name="forward_ip" class="form-control text-monospace" placeholder="000.000.000.000" value="<%- forward_ip %>" autocomplete="off" maxlength="15" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-4 col-md-4">
|
<div class="col-sm-4 col-md-4">
|
||||||
|
@ -13,7 +13,7 @@ module.exports = Mn.View.extend({
|
|||||||
|
|
||||||
ui: {
|
ui: {
|
||||||
form: 'form',
|
form: 'form',
|
||||||
forwarding_host: 'input[name="forwarding_host"]',
|
forward_ip: 'input[name="forward_ip"]',
|
||||||
type_error: '.forward-type-error',
|
type_error: '.forward-type-error',
|
||||||
buttons: '.modal-footer button',
|
buttons: '.modal-footer button',
|
||||||
switches: '.custom-switch-input',
|
switches: '.custom-switch-input',
|
||||||
@ -76,6 +76,13 @@ module.exports = Mn.View.extend({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
onRender: function () {
|
||||||
|
this.ui.forward_ip.mask('099.099.099.099', {
|
||||||
|
clearIfNotMatch: true,
|
||||||
|
placeholder: '000.000.000.000'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
initialize: function (options) {
|
initialize: function (options) {
|
||||||
if (typeof options.model === 'undefined' || !options.model) {
|
if (typeof options.model === 'undefined' || !options.model) {
|
||||||
this.model = new StreamModel.Model();
|
this.model = new StreamModel.Model();
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div class="text-monospace"><%- forwarding_host %>:<%- forwarding_port %></div>
|
<div class="text-monospace"><%- forward_ip %>:<%- forwarding_port %></div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div>
|
<div>
|
||||||
|
@ -3,14 +3,6 @@
|
|||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h3 class="card-title"><%- i18n('streams', 'title') %></h3>
|
<h3 class="card-title"><%- i18n('streams', 'title') %></h3>
|
||||||
<div class="card-options">
|
<div class="card-options">
|
||||||
<form class="search-form" role="search">
|
|
||||||
<div class="input-icon">
|
|
||||||
<span class="input-icon-addon">
|
|
||||||
<i class="fe fe-search"></i>
|
|
||||||
</span>
|
|
||||||
<input name="source-query" type="text" value="" class="form-control form-control-sm" placeholder="<%- i18n('streams', 'search') %>" aria-label="<%- i18n('streams', 'search') %>">
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<a href="#" class="btn btn-outline-secondary btn-sm ml-2 help"><i class="fe fe-help-circle"></i></a>
|
<a href="#" class="btn btn-outline-secondary btn-sm ml-2 help"><i class="fe fe-help-circle"></i></a>
|
||||||
<% if (showAddButton) { %>
|
<% if (showAddButton) { %>
|
||||||
<a href="#" class="btn btn-outline-blue btn-sm ml-2 add-item"><%- i18n('streams', 'add') %></a>
|
<a href="#" class="btn btn-outline-blue btn-sm ml-2 add-item"><%- i18n('streams', 'add') %></a>
|
||||||
|
@ -14,44 +14,7 @@ module.exports = Mn.View.extend({
|
|||||||
list_region: '.list-region',
|
list_region: '.list-region',
|
||||||
add: '.add-item',
|
add: '.add-item',
|
||||||
help: '.help',
|
help: '.help',
|
||||||
dimmer: '.dimmer',
|
dimmer: '.dimmer'
|
||||||
search: '.search-form',
|
|
||||||
query: 'input[name="source-query"]'
|
|
||||||
},
|
|
||||||
|
|
||||||
fetch: App.Api.Nginx.Streams.getAll,
|
|
||||||
|
|
||||||
showData: function(response) {
|
|
||||||
this.showChildView('list_region', new ListView({
|
|
||||||
collection: new StreamModel.Collection(response)
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
showError: function(err) {
|
|
||||||
this.showChildView('list_region', new ErrorView({
|
|
||||||
code: err.code,
|
|
||||||
message: err.message,
|
|
||||||
retry: function () {
|
|
||||||
App.Controller.showNginxStream();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
console.error(err);
|
|
||||||
},
|
|
||||||
|
|
||||||
showEmpty: function() {
|
|
||||||
let manage = App.Cache.User.canManage('streams');
|
|
||||||
|
|
||||||
this.showChildView('list_region', new EmptyView({
|
|
||||||
title: App.i18n('streams', 'empty'),
|
|
||||||
subtitle: App.i18n('all-hosts', 'empty-subtitle', {manage: manage}),
|
|
||||||
link: manage ? App.i18n('streams', 'add') : null,
|
|
||||||
btn_color: 'blue',
|
|
||||||
permission: 'streams',
|
|
||||||
action: function () {
|
|
||||||
App.Controller.showNginxStreamForm();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
},
|
},
|
||||||
|
|
||||||
regions: {
|
regions: {
|
||||||
@ -67,17 +30,6 @@ module.exports = Mn.View.extend({
|
|||||||
'click @ui.help': function (e) {
|
'click @ui.help': function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
App.Controller.showHelp(App.i18n('streams', 'help-title'), App.i18n('streams', 'help-content'));
|
App.Controller.showHelp(App.i18n('streams', 'help-title'), App.i18n('streams', 'help-content'));
|
||||||
},
|
|
||||||
|
|
||||||
'submit @ui.search': function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
let query = this.ui.query.val();
|
|
||||||
|
|
||||||
this.fetch(['owner'], query)
|
|
||||||
.then(response => this.showData(response))
|
|
||||||
.catch(err => {
|
|
||||||
this.showError(err);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -88,18 +40,39 @@ module.exports = Mn.View.extend({
|
|||||||
onRender: function () {
|
onRender: function () {
|
||||||
let view = this;
|
let view = this;
|
||||||
|
|
||||||
view.fetch(['owner'])
|
App.Api.Nginx.Streams.getAll(['owner'])
|
||||||
.then(response => {
|
.then(response => {
|
||||||
if (!view.isDestroyed()) {
|
if (!view.isDestroyed()) {
|
||||||
if (response && response.length) {
|
if (response && response.length) {
|
||||||
view.showData(response);
|
view.showChildView('list_region', new ListView({
|
||||||
|
collection: new StreamModel.Collection(response)
|
||||||
|
}));
|
||||||
} else {
|
} else {
|
||||||
view.showEmpty();
|
let manage = App.Cache.User.canManage('streams');
|
||||||
|
|
||||||
|
view.showChildView('list_region', new EmptyView({
|
||||||
|
title: App.i18n('streams', 'empty'),
|
||||||
|
subtitle: App.i18n('all-hosts', 'empty-subtitle', {manage: manage}),
|
||||||
|
link: manage ? App.i18n('streams', 'add') : null,
|
||||||
|
btn_color: 'blue',
|
||||||
|
permission: 'streams',
|
||||||
|
action: function () {
|
||||||
|
App.Controller.showNginxStreamForm();
|
||||||
|
}
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
view.showError(err);
|
view.showChildView('list_region', new ErrorView({
|
||||||
|
code: err.code,
|
||||||
|
message: err.message,
|
||||||
|
retry: function () {
|
||||||
|
App.Controller.showNginxStream();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
console.error(err);
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
view.ui.dimmer.removeClass('active');
|
view.ui.dimmer.removeClass('active');
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<div class="row align-items-center">
|
<div class="row align-items-center">
|
||||||
<div class="col-auto">
|
<div class="col-auto">
|
||||||
<ul class="list-inline list-inline-dots mb-0">
|
<ul class="list-inline list-inline-dots mb-0">
|
||||||
<li class="list-inline-item"><a href="https://github.com/jc21/nginx-proxy-manager?utm_source=nginx-proxy-manager" target="_blank"><%- i18n('footer', 'fork-me') %></a></li>
|
<li class="list-inline-item"><a href="https://github.com/jc21/nginx-proxy-manager?utm_source=nginx-proxy-manager"><%- i18n('footer', 'fork-me') %></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="d-flex">
|
<div class="d-flex">
|
||||||
<button class="navbar-toggler d-lg-none mr-2" type="button" data-toggle="collapse" data-target="#menu">
|
|
||||||
<span class="navbar-toggler-icon"></span>
|
|
||||||
</button>
|
|
||||||
<a class="navbar-brand" href="/">
|
<a class="navbar-brand" href="/">
|
||||||
<img src="/images/favicons/favicon-32x32.png" border="0"> <%- i18n('main', 'app') %>
|
<img src="/images/favicons/favicon-32x32.png" border="0"> <%- i18n('main', 'app') %>
|
||||||
</a>
|
</a>
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
<div class="page-main">
|
<div class="page-main">
|
||||||
<div class="navbar-light">
|
<div class="header" id="header">
|
||||||
<div class="header" id="header">
|
<!-- Header View -->
|
||||||
<!-- Header View -->
|
</div>
|
||||||
</div>
|
<div id="menu">
|
||||||
<div id="menu">
|
<!-- Menu View -->
|
||||||
<!-- Menu View -->
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="my-3 my-md-5">
|
<div class="my-3 my-md-5">
|
||||||
<div id="app-content" class="container">
|
<div id="app-content" class="container">
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<form>
|
<form>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-12 col-md-12">
|
<div class="col-sm-12 col-md-12">
|
||||||
<%= i18n('users', 'delete-confirm', {name: name.toHtmlEntities()}) %>
|
<%= i18n('users', 'delete-confirm', {name: name}) %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -3,14 +3,6 @@
|
|||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h3 class="card-title"><%- i18n('users', 'title') %></h3>
|
<h3 class="card-title"><%- i18n('users', 'title') %></h3>
|
||||||
<div class="card-options">
|
<div class="card-options">
|
||||||
<form class="search-form" role="search">
|
|
||||||
<div class="input-icon">
|
|
||||||
<span class="input-icon-addon">
|
|
||||||
<i class="fe fe-search"></i>
|
|
||||||
</span>
|
|
||||||
<input name="source-query" type="text" value="" class="form-control form-control-sm" placeholder="<%- i18n('users', 'search') %>" aria-label="<%- i18n('users', 'search') %>">
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<a href="#" class="btn btn-outline-teal btn-sm ml-2 add-item"><%- i18n('users', 'add') %></a>
|
<a href="#" class="btn btn-outline-teal btn-sm ml-2 add-item"><%- i18n('users', 'add') %></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -12,29 +12,7 @@ module.exports = Mn.View.extend({
|
|||||||
ui: {
|
ui: {
|
||||||
list_region: '.list-region',
|
list_region: '.list-region',
|
||||||
add: '.add-item',
|
add: '.add-item',
|
||||||
dimmer: '.dimmer',
|
dimmer: '.dimmer'
|
||||||
search: '.search-form',
|
|
||||||
query: 'input[name="source-query"]'
|
|
||||||
},
|
|
||||||
|
|
||||||
fetch: App.Api.Users.getAll,
|
|
||||||
|
|
||||||
showData: function(response) {
|
|
||||||
this.showChildView('list_region', new ListView({
|
|
||||||
collection: new UserModel.Collection(response)
|
|
||||||
}));
|
|
||||||
},
|
|
||||||
|
|
||||||
showError: function(err) {
|
|
||||||
this.showChildView('list_region', new ErrorView({
|
|
||||||
code: err.code,
|
|
||||||
message: err.message,
|
|
||||||
retry: function () {
|
|
||||||
App.Controller.showUsers();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
console.error(err);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
regions: {
|
regions: {
|
||||||
@ -45,31 +23,30 @@ module.exports = Mn.View.extend({
|
|||||||
'click @ui.add': function (e) {
|
'click @ui.add': function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
App.Controller.showUserForm(new UserModel.Model());
|
App.Controller.showUserForm(new UserModel.Model());
|
||||||
},
|
|
||||||
|
|
||||||
'submit @ui.search': function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
let query = this.ui.query.val();
|
|
||||||
|
|
||||||
this.fetch(['permissions'], query)
|
|
||||||
.then(response => this.showData(response))
|
|
||||||
.catch(err => {
|
|
||||||
this.showError(err);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
onRender: function () {
|
onRender: function () {
|
||||||
let view = this;
|
let view = this;
|
||||||
|
|
||||||
view.fetch(['permissions'])
|
App.Api.Users.getAll(['permissions'])
|
||||||
.then(response => {
|
.then(response => {
|
||||||
if (!view.isDestroyed() && response && response.length) {
|
if (!view.isDestroyed() && response && response.length) {
|
||||||
view.showData(response);
|
view.showChildView('list_region', new ListView({
|
||||||
|
collection: new UserModel.Collection(response)
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
view.showError(err);
|
view.showChildView('list_region', new ErrorView({
|
||||||
|
code: err.code,
|
||||||
|
message: err.message,
|
||||||
|
retry: function () {
|
||||||
|
App.Controller.showUsers();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
console.error(err);
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
view.ui.dimmer.removeClass('active');
|
view.ui.dimmer.removeClass('active');
|
||||||
|
@ -60,7 +60,7 @@
|
|||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"fork-me": "Fork me on Github",
|
"fork-me": "Fork me on Github",
|
||||||
"copy": "© 2022 <a href=\"{url}\" target=\"_blank\">jc21.com</a>.",
|
"copy": "© 2021 <a href=\"{url}\" target=\"_blank\">jc21.com</a>.",
|
||||||
"theme": "Theme by <a href=\"{url}\" target=\"_blank\">Tabler</a>"
|
"theme": "Theme by <a href=\"{url}\" target=\"_blank\">Tabler</a>"
|
||||||
},
|
},
|
||||||
"dashboard": {
|
"dashboard": {
|
||||||
@ -84,8 +84,6 @@
|
|||||||
"advanced": "Advanced",
|
"advanced": "Advanced",
|
||||||
"advanced-warning": "Enter your custom Nginx configuration here at your own risk!",
|
"advanced-warning": "Enter your custom Nginx configuration here at your own risk!",
|
||||||
"advanced-config": "Custom Nginx Configuration",
|
"advanced-config": "Custom Nginx Configuration",
|
||||||
"advanced-config-var-headline": "These proxy details are available as nginx variables:",
|
|
||||||
"advanced-config-header-info": "Please note, that any add_header or set_header directives added here will not be used by nginx. You will have to add a custom location '/' and add the header in the custom config there.",
|
|
||||||
"hsts-enabled": "HSTS Enabled",
|
"hsts-enabled": "HSTS Enabled",
|
||||||
"hsts-subdomains": "HSTS Subdomains",
|
"hsts-subdomains": "HSTS Subdomains",
|
||||||
"locations": "Custom locations"
|
"locations": "Custom locations"
|
||||||
@ -132,8 +130,7 @@
|
|||||||
"access-list": "Access List",
|
"access-list": "Access List",
|
||||||
"allow-websocket-upgrade": "Websockets Support",
|
"allow-websocket-upgrade": "Websockets Support",
|
||||||
"ignore-invalid-upstream-ssl": "Ignore Invalid SSL",
|
"ignore-invalid-upstream-ssl": "Ignore Invalid SSL",
|
||||||
"custom-forward-host-help": "Add a path for sub-folder forwarding.\nExample: 203.0.113.25/path/",
|
"custom-forward-host-help": "Use 1.1.1.1/path for sub-folder forwarding"
|
||||||
"search": "Search Host…"
|
|
||||||
},
|
},
|
||||||
"redirection-hosts": {
|
"redirection-hosts": {
|
||||||
"title": "Redirection Hosts",
|
"title": "Redirection Hosts",
|
||||||
@ -144,11 +141,10 @@
|
|||||||
"forward-http-status-code": "HTTP Code",
|
"forward-http-status-code": "HTTP Code",
|
||||||
"forward-domain": "Forward Domain",
|
"forward-domain": "Forward Domain",
|
||||||
"preserve-path": "Preserve Path",
|
"preserve-path": "Preserve Path",
|
||||||
"delete": "Delete Redirection Host",
|
"delete": "Delete Proxy Host",
|
||||||
"delete-confirm": "Are you sure you want to delete the Redirection host for: <strong>{domains}</strong>?",
|
"delete-confirm": "Are you sure you want to delete the Redirection host for: <strong>{domains}</strong>?",
|
||||||
"help-title": "What is a Redirection Host?",
|
"help-title": "What is a Redirection Host?",
|
||||||
"help-content": "A Redirection Host will redirect requests from the incoming domain and push the viewer to another domain.\nThe most common reason to use this type of host is when your website changes domains but you still have search engine or referrer links pointing to the old domain.",
|
"help-content": "A Redirection Host will redirect requests from the incoming domain and push the viewer to another domain.\nThe most common reason to use this type of host is when your website changes domains but you still have search engine or referrer links pointing to the old domain."
|
||||||
"search": "Search Host…"
|
|
||||||
},
|
},
|
||||||
"dead-hosts": {
|
"dead-hosts": {
|
||||||
"title": "404 Hosts",
|
"title": "404 Hosts",
|
||||||
@ -158,8 +154,7 @@
|
|||||||
"delete": "Delete 404 Host",
|
"delete": "Delete 404 Host",
|
||||||
"delete-confirm": "Are you sure you want to delete this 404 Host?",
|
"delete-confirm": "Are you sure you want to delete this 404 Host?",
|
||||||
"help-title": "What is a 404 Host?",
|
"help-title": "What is a 404 Host?",
|
||||||
"help-content": "A 404 Host is simply a host setup that shows a 404 page.\nThis can be useful when your domain is listed in search engines and you want to provide a nicer error page or specifically to tell the search indexers that the domain pages no longer exist.\nAnother benefit of having this host is to track the logs for hits to it and view the referrers.",
|
"help-content": "A 404 Host is simply a host setup that shows a 404 page.\nThis can be useful when your domain is listed in search engines and you want to provide a nicer error page or specifically to tell the search indexers that the domain pages no longer exist.\nAnother benefit of having this host is to track the logs for hits to it and view the referrers."
|
||||||
"search": "Search Host…"
|
|
||||||
},
|
},
|
||||||
"streams": {
|
"streams": {
|
||||||
"title": "Streams",
|
"title": "Streams",
|
||||||
@ -167,7 +162,7 @@
|
|||||||
"add": "Add Stream",
|
"add": "Add Stream",
|
||||||
"form-title": "{id, select, undefined{New} other{Edit}} Stream",
|
"form-title": "{id, select, undefined{New} other{Edit}} Stream",
|
||||||
"incoming-port": "Incoming Port",
|
"incoming-port": "Incoming Port",
|
||||||
"forwarding-host": "Forward Host",
|
"forward-ip": "Forward IP",
|
||||||
"forwarding-port": "Forward Port",
|
"forwarding-port": "Forward Port",
|
||||||
"tcp-forwarding": "TCP Forwarding",
|
"tcp-forwarding": "TCP Forwarding",
|
||||||
"udp-forwarding": "UDP Forwarding",
|
"udp-forwarding": "UDP Forwarding",
|
||||||
@ -178,8 +173,7 @@
|
|||||||
"delete": "Delete Stream",
|
"delete": "Delete Stream",
|
||||||
"delete-confirm": "Are you sure you want to delete this Stream?",
|
"delete-confirm": "Are you sure you want to delete this Stream?",
|
||||||
"help-title": "What is a Stream?",
|
"help-title": "What is a Stream?",
|
||||||
"help-content": "A relatively new feature for Nginx, a Stream will serve to forward TCP/UDP traffic directly to another computer on the network.\nIf you're running game servers, FTP or SSH servers this can come in handy.",
|
"help-content": "A relatively new feature for Nginx, a Stream will serve to forward TCP/UDP traffic directly to another computer on the network.\nIf you're running game servers, FTP or SSH servers this can come in handy."
|
||||||
"search": "Search Incoming Port…"
|
|
||||||
},
|
},
|
||||||
"certificates": {
|
"certificates": {
|
||||||
"title": "SSL Certificates",
|
"title": "SSL Certificates",
|
||||||
@ -194,19 +188,7 @@
|
|||||||
"other-certificate-key": "Certificate Key",
|
"other-certificate-key": "Certificate Key",
|
||||||
"other-intermediate-certificate": "Intermediate Certificate",
|
"other-intermediate-certificate": "Intermediate Certificate",
|
||||||
"force-renew": "Renew Now",
|
"force-renew": "Renew Now",
|
||||||
"test-reachability": "Test Server Reachability",
|
"renew-title": "Renew Let'sEncrypt Certificate"
|
||||||
"reachability-title": "Test Server Reachability",
|
|
||||||
"reachability-info": "Test whether the domains are reachable from the public internet using Site24x7. This is not necessary when using the DNS Challenge.",
|
|
||||||
"reachability-failed-to-reach-api": "Communication with the API failed, is NPM running correctly?",
|
|
||||||
"reachability-failed-to-check": "Failed to check the reachability due to a communication error with site24x7.com.",
|
|
||||||
"reachability-ok": "Your server is reachable and creating certificates should be possible.",
|
|
||||||
"reachability-404": "There is a server found at this domain but it does not seem to be Nginx Proxy Manager. Please make sure your domain points to the IP where your NPM instance is running.",
|
|
||||||
"reachability-not-resolved": "There is no server available at this domain. Please make sure your domain exists and points to the IP where your NPM instance is running and if necessary port 80 is forwarded in your router.",
|
|
||||||
"reachability-wrong-data": "There is a server found at this domain but it returned an unexpected data. Is it the NPM server? Please make sure your domain points to the IP where your NPM instance is running.",
|
|
||||||
"reachability-other": "There is a server found at this domain but it returned an unexpected status code {code}. Is it the NPM server? Please make sure your domain points to the IP where your NPM instance is running.",
|
|
||||||
"download": "Download",
|
|
||||||
"renew-title": "Renew Let's Encrypt Certificate",
|
|
||||||
"search": "Search Certificate…"
|
|
||||||
},
|
},
|
||||||
"access-lists": {
|
"access-lists": {
|
||||||
"title": "Access Lists",
|
"title": "Access Lists",
|
||||||
@ -230,8 +212,7 @@
|
|||||||
"satisfy-any": "Satisfy Any",
|
"satisfy-any": "Satisfy Any",
|
||||||
"pass-auth": "Pass Auth to Host",
|
"pass-auth": "Pass Auth to Host",
|
||||||
"access-add": "Add",
|
"access-add": "Add",
|
||||||
"auth-add": "Add",
|
"auth-add": "Add"
|
||||||
"search": "Search Access…"
|
|
||||||
},
|
},
|
||||||
"users": {
|
"users": {
|
||||||
"title": "Users",
|
"title": "Users",
|
||||||
@ -257,8 +238,7 @@
|
|||||||
"perms-visibility-all": "All Items",
|
"perms-visibility-all": "All Items",
|
||||||
"perm-manage": "Manage",
|
"perm-manage": "Manage",
|
||||||
"perm-view": "View Only",
|
"perm-view": "View Only",
|
||||||
"perm-hidden": "Hidden",
|
"perm-hidden": "Hidden"
|
||||||
"search": "Search User…"
|
|
||||||
},
|
},
|
||||||
"audit-log": {
|
"audit-log": {
|
||||||
"title": "Audit Log",
|
"title": "Audit Log",
|
||||||
@ -279,8 +259,7 @@
|
|||||||
"renewed": "Renewed {name}",
|
"renewed": "Renewed {name}",
|
||||||
"meta-title": "Details for Event",
|
"meta-title": "Details for Event",
|
||||||
"view-meta": "View Details",
|
"view-meta": "View Details",
|
||||||
"date": "Date",
|
"date": "Date"
|
||||||
"search": "Search Log…"
|
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "Settings",
|
"title": "Settings",
|
||||||
|
@ -103,13 +103,6 @@ window.tabler = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
String.prototype.toHtmlEntities = function() {
|
|
||||||
return this.replace(/./gm, function(s) {
|
|
||||||
// return "&#" + s.charCodeAt(0) + ";";
|
|
||||||
return (s.match(/[a-z0-9\s]+/i)) ? s : "&#" + s.charCodeAt(0) + ";";
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
require('tabler-core');
|
require('tabler-core');
|
||||||
|
|
||||||
const App = require('./app/main');
|
const App = require('./app/main');
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
<div class="card-title"><%- i18n('login', 'title') %></div>
|
<div class="card-title"><%- i18n('login', 'title') %></div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="form-label"><%- i18n('str', 'email-address') %></label>
|
<label class="form-label"><%- i18n('str', 'email-address') %></label>
|
||||||
<input name="identity" type="email" class="form-control" placeholder="<%- i18n('str', 'email-address') %>" required autofocus>
|
<input name="identity" type="email" class="form-control" placeholder="<%- i18n('str', 'email-address') %>" required>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="form-label"><%- i18n('str', 'password') %></label>
|
<label class="form-label"><%- i18n('str', 'password') %></label>
|
||||||
|
@ -9,7 +9,7 @@ const model = Backbone.Model.extend({
|
|||||||
created_on: null,
|
created_on: null,
|
||||||
modified_on: null,
|
modified_on: null,
|
||||||
incoming_port: null,
|
incoming_port: null,
|
||||||
forwarding_host: null,
|
forward_ip: null,
|
||||||
forwarding_port: null,
|
forwarding_port: null,
|
||||||
tcp_forwarding: true,
|
tcp_forwarding: true,
|
||||||
udp_forwarding: false,
|
udp_forwarding: false,
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
"@babel/core": "^7.9.0",
|
"@babel/core": "^7.9.0",
|
||||||
"babel-core": "^6.26.3",
|
"babel-core": "^6.26.3",
|
||||||
"babel-loader": "^8.1.0",
|
"babel-loader": "^8.1.0",
|
||||||
|
"babel-minify-webpack-plugin": "^0.3.1",
|
||||||
"babel-preset-env": "^1.7.0",
|
"babel-preset-env": "^1.7.0",
|
||||||
"backbone": "^1.4.0",
|
"backbone": "^1.4.0",
|
||||||
"backbone.marionette": "^4.1.2",
|
"backbone.marionette": "^4.1.2",
|
||||||
@ -26,11 +27,11 @@
|
|||||||
"messageformat": "^2.3.0",
|
"messageformat": "^2.3.0",
|
||||||
"messageformat-loader": "^0.8.1",
|
"messageformat-loader": "^0.8.1",
|
||||||
"mini-css-extract-plugin": "^0.9.0",
|
"mini-css-extract-plugin": "^0.9.0",
|
||||||
"moment": "^2.29.4",
|
"moment": "^2.24.0",
|
||||||
"node-sass": "^6.0.1",
|
"node-sass": "^4.13.1",
|
||||||
"nodemon": "^2.0.2",
|
"nodemon": "^2.0.2",
|
||||||
"numeral": "^2.0.6",
|
"numeral": "^2.0.6",
|
||||||
"sass-loader": "10.2.0",
|
"sass-loader": "^8.0.2",
|
||||||
"style-loader": "^1.1.3",
|
"style-loader": "^1.1.3",
|
||||||
"tabler-ui": "git+https://github.com/tabler/tabler.git#00f78ad823311bc3ad974ac3e5b0126198f0a813",
|
"tabler-ui": "git+https://github.com/tabler/tabler.git#00f78ad823311bc3ad974ac3e5b0126198f0a813",
|
||||||
"underscore": "^1.12.1",
|
"underscore": "^1.12.1",
|
||||||
|
@ -13,8 +13,8 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
output: {
|
output: {
|
||||||
path: path.resolve(__dirname, 'dist'),
|
path: path.resolve(__dirname, 'dist'),
|
||||||
filename: `js/[name].bundle.js?v=${PACKAGE.version}`,
|
filename: 'js/[name].bundle.js',
|
||||||
chunkFilename: `js/[name].bundle.[id].js?v=${PACKAGE.version}`,
|
chunkFilename: 'js/[name].bundle.[id].js',
|
||||||
publicPath: '/'
|
publicPath: '/'
|
||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
@ -92,17 +92,17 @@ module.exports = {
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
test: /source-sans-pro.*\.(woff(2)?)(\?v=\d+\.\d+\.\d+)?$/,
|
test: /source-sans-pro.*\.(woff(2)?)(\?v=\d+\.\d+\.\d+)?$/,
|
||||||
use: [
|
use: [
|
||||||
{
|
{
|
||||||
loader: 'file-loader',
|
loader: 'file-loader',
|
||||||
options: {
|
options: {
|
||||||
name: '[name].[ext]',
|
name: '[name].[ext]',
|
||||||
outputPath: 'assets/'
|
outputPath: 'assets/'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -9,10 +9,10 @@
|
|||||||
* cloudflare: {
|
* cloudflare: {
|
||||||
* display_name: "Name displayed to the user",
|
* display_name: "Name displayed to the user",
|
||||||
* package_name: "Package name in PyPi repo",
|
* package_name: "Package name in PyPi repo",
|
||||||
* version_requirement: "Optional package version requirements (e.g. ==1.3 or >=1.2,<2.0, see https://www.python.org/dev/peps/pep-0440/#version-specifiers)",
|
* package_version: "Package version in PyPi repo",
|
||||||
* dependencies: "Additional dependencies, space separated (as you would pass it to pip install)",
|
* dependencies: "Additional dependencies, space separated (as you would pass it to pip install)",
|
||||||
* credentials: `Template of the credentials file`,
|
* credentials: `Template of the credentials file`,
|
||||||
* full_plugin_name: "The full plugin name as used in the commandline with certbot, e.g. 'dns-njalla'",
|
* full_plugin_name: "The full plugin name as used in the commandline with certbot, including prefixes, e.g. 'certbot-dns-njalla:dns-njalla'",
|
||||||
* },
|
* },
|
||||||
* ...
|
* ...
|
||||||
* }
|
* }
|
||||||
@ -22,30 +22,30 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
//####################################################//
|
//####################################################//
|
||||||
acmedns: {
|
acmedns: {
|
||||||
display_name: 'ACME-DNS',
|
display_name: 'ACME-DNS',
|
||||||
package_name: 'certbot-dns-acmedns',
|
package_name: 'certbot-dns-acmedns',
|
||||||
version_requirement: '~=0.1.0',
|
package_version: '0.1.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_acmedns_api_url = http://acmedns-server/
|
credentials: `certbot_dns_acmedns:dns_acmedns_api_url = http://acmedns-server/
|
||||||
dns_acmedns_registration_file = /data/acme-registration.json`,
|
certbot_dns_acmedns:dns_acmedns_registration_file = /data/acme-registration.json`,
|
||||||
full_plugin_name: 'dns-acmedns',
|
full_plugin_name: 'certbot-dns-acmedns:dns-acmedns',
|
||||||
},
|
},
|
||||||
aliyun: {
|
aliyun: {
|
||||||
display_name: 'Aliyun',
|
display_name: 'Aliyun',
|
||||||
package_name: 'certbot-dns-aliyun',
|
package_name: 'certbot-dns-aliyun',
|
||||||
version_requirement: '~=0.38.1',
|
package_version: '0.38.1',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_aliyun_access_key = 12345678
|
credentials: `certbot_dns_aliyun:dns_aliyun_access_key = 12345678
|
||||||
dns_aliyun_access_key_secret = 1234567890abcdef1234567890abcdef`,
|
certbot_dns_aliyun:dns_aliyun_access_key_secret = 1234567890abcdef1234567890abcdef`,
|
||||||
full_plugin_name: 'dns-aliyun',
|
full_plugin_name: 'certbot-dns-aliyun:dns-aliyun',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
azure: {
|
azure: {
|
||||||
display_name: 'Azure',
|
display_name: 'Azure',
|
||||||
package_name: 'certbot-dns-azure',
|
package_name: 'certbot-dns-azure',
|
||||||
version_requirement: '~=1.2.0',
|
package_version: '1.2.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `# This plugin supported API authentication using either Service Principals or utilizing a Managed Identity assigned to the virtual machine.
|
credentials: `# This plugin supported API authentication using either Service Principals or utilizing a Managed Identity assigned to the virtual machine.
|
||||||
# Regardless which authentication method used, the identity will need the “DNS Zone Contributor” role assigned to it.
|
# Regardless which authentication method used, the identity will need the “DNS Zone Contributor” role assigned to it.
|
||||||
# As multiple Azure DNS Zones in multiple resource groups can exist, the config file needs a mapping of zone to resource group ID. Multiple zones -> ID mappings can be listed by using the key dns_azure_zoneX where X is a unique number. At least 1 zone mapping is required.
|
# As multiple Azure DNS Zones in multiple resource groups can exist, the config file needs a mapping of zone to resource group ID. Multiple zones -> ID mappings can be listed by using the key dns_azure_zoneX where X is a unique number. At least 1 zone mapping is required.
|
||||||
|
|
||||||
@ -67,21 +67,21 @@ dns_azure_zone2 = example.org:/subscriptions/99800903-fb14-4992-9aff-12eaf274462
|
|||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
cloudflare: {
|
cloudflare: {
|
||||||
display_name: 'Cloudflare',
|
display_name: 'Cloudflare',
|
||||||
package_name: 'certbot-dns-cloudflare',
|
package_name: 'certbot-dns-cloudflare',
|
||||||
version_requirement: '==$(certbot --version | grep -Eo \'[0-9](\\.[0-9]+)+\')', // official plugin, use certbot version
|
package_version: '1.8.0',
|
||||||
dependencies: 'cloudflare',
|
dependencies: 'cloudflare',
|
||||||
credentials: `# Cloudflare API token
|
credentials: `# Cloudflare API token
|
||||||
dns_cloudflare_api_token = 0123456789abcdef0123456789abcdef01234567`,
|
dns_cloudflare_api_token = 0123456789abcdef0123456789abcdef01234567`,
|
||||||
full_plugin_name: 'dns-cloudflare',
|
full_plugin_name: 'dns-cloudflare',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
cloudns: {
|
cloudns: {
|
||||||
display_name: 'ClouDNS',
|
display_name: 'ClouDNS',
|
||||||
package_name: 'certbot-dns-cloudns',
|
package_name: 'certbot-dns-cloudns',
|
||||||
version_requirement: '~=0.4.0',
|
package_version: '0.4.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `# Target user ID (see https://www.cloudns.net/api-settings/)
|
credentials: `# Target user ID (see https://www.cloudns.net/api-settings/)
|
||||||
dns_cloudns_auth_id=1234
|
dns_cloudns_auth_id=1234
|
||||||
# Alternatively, one of the following two options can be set:
|
# Alternatively, one of the following two options can be set:
|
||||||
# dns_cloudns_sub_auth_id=1234
|
# dns_cloudns_sub_auth_id=1234
|
||||||
@ -93,183 +93,139 @@ dns_cloudflare_api_token = 0123456789abcdef0123456789abcdef01234567`,
|
|||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
cloudxns: {
|
cloudxns: {
|
||||||
display_name: 'CloudXNS',
|
display_name: 'CloudXNS',
|
||||||
package_name: 'certbot-dns-cloudxns',
|
package_name: 'certbot-dns-cloudxns',
|
||||||
version_requirement: '==$(certbot --version | grep -Eo \'[0-9](\\.[0-9]+)+\')', // official plugin, use certbot version
|
package_version: '1.8.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_cloudxns_api_key = 1234567890abcdef1234567890abcdef
|
credentials: `dns_cloudxns_api_key = 1234567890abcdef1234567890abcdef
|
||||||
dns_cloudxns_secret_key = 1122334455667788`,
|
dns_cloudxns_secret_key = 1122334455667788`,
|
||||||
full_plugin_name: 'dns-cloudxns',
|
full_plugin_name: 'dns-cloudxns',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
constellix: {
|
|
||||||
display_name: 'Constellix',
|
|
||||||
package_name: 'certbot-dns-constellix',
|
|
||||||
version_requirement: '~=0.2.1',
|
|
||||||
dependencies: '',
|
|
||||||
credentials: `dns_constellix_apikey = 5fb4e76f-ac91-43e5-f982458bc595
|
|
||||||
dns_constellix_secretkey = 47d99fd0-32e7-4e07-85b46d08e70b
|
|
||||||
dns_constellix_endpoint = https://api.dns.constellix.com/v1`,
|
|
||||||
full_plugin_name: 'dns-constellix',
|
|
||||||
},
|
|
||||||
//####################################################//
|
|
||||||
corenetworks: {
|
corenetworks: {
|
||||||
display_name: 'Core Networks',
|
display_name: 'Core Networks',
|
||||||
package_name: 'certbot-dns-corenetworks',
|
package_name: 'certbot-dns-corenetworks',
|
||||||
version_requirement: '~=0.1.4',
|
package_version: '0.1.4',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_corenetworks_username = asaHB12r
|
credentials: `certbot_dns_corenetworks:dns_corenetworks_username = asaHB12r
|
||||||
dns_corenetworks_password = secure_password`,
|
certbot_dns_corenetworks:dns_corenetworks_password = secure_password`,
|
||||||
full_plugin_name: 'dns-corenetworks',
|
full_plugin_name: 'certbot-dns-corenetworks:dns-corenetworks',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
cpanel: {
|
cpanel: {
|
||||||
display_name: 'cPanel',
|
display_name: 'cPanel',
|
||||||
package_name: 'certbot-dns-cpanel',
|
package_name: 'certbot-dns-cpanel',
|
||||||
version_requirement: '~=0.2.2',
|
package_version: '0.2.2',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `cpanel_url = https://cpanel.example.com:2083
|
credentials: `certbot_dns_cpanel:cpanel_url = https://cpanel.example.com:2083
|
||||||
cpanel_username = user
|
certbot_dns_cpanel:cpanel_username = user
|
||||||
cpanel_password = hunter2`,
|
certbot_dns_cpanel:cpanel_password = hunter2`,
|
||||||
full_plugin_name: 'cpanel',
|
full_plugin_name: 'certbot-dns-cpanel:cpanel',
|
||||||
},
|
|
||||||
//####################################################//
|
|
||||||
desec: {
|
|
||||||
display_name: 'deSEC',
|
|
||||||
package_name: 'certbot-dns-desec',
|
|
||||||
version_requirement: '~=0.3.0',
|
|
||||||
dependencies: '',
|
|
||||||
credentials: `dns_desec_token = YOUR_DESEC_API_TOKEN
|
|
||||||
dns_desec_endpoint = https://desec.io/api/v1/`,
|
|
||||||
full_plugin_name: 'dns-desec',
|
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
duckdns: {
|
duckdns: {
|
||||||
display_name: 'DuckDNS',
|
display_name: 'DuckDNS',
|
||||||
package_name: 'certbot-dns-duckdns',
|
package_name: 'certbot-dns-duckdns',
|
||||||
version_requirement: '~=0.9',
|
package_version: '0.6',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: 'dns_duckdns_token=your-duckdns-token',
|
credentials: 'dns_duckdns_token=your-duckdns-token',
|
||||||
full_plugin_name: 'dns-duckdns',
|
full_plugin_name: 'dns-duckdns',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
digitalocean: {
|
digitalocean: {
|
||||||
display_name: 'DigitalOcean',
|
display_name: 'DigitalOcean',
|
||||||
package_name: 'certbot-dns-digitalocean',
|
package_name: 'certbot-dns-digitalocean',
|
||||||
version_requirement: '==$(certbot --version | grep -Eo \'[0-9](\\.[0-9]+)+\')', // official plugin, use certbot version
|
package_version: '1.8.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: 'dns_digitalocean_token = 0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff',
|
credentials: 'dns_digitalocean_token = 0000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff',
|
||||||
full_plugin_name: 'dns-digitalocean',
|
full_plugin_name: 'dns-digitalocean',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
directadmin: {
|
directadmin: {
|
||||||
display_name: 'DirectAdmin',
|
display_name: 'DirectAdmin',
|
||||||
package_name: 'certbot-dns-directadmin',
|
package_name: 'certbot-dns-directadmin',
|
||||||
version_requirement: '~=0.0.23',
|
package_version: '0.0.20',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `directadmin_url = https://my.directadminserver.com:2222
|
credentials: `directadmin_url = https://my.directadminserver.com:2222
|
||||||
directadmin_username = username
|
directadmin_username = username
|
||||||
directadmin_password = aSuperStrongPassword`,
|
directadmin_password = aSuperStrongPassword`,
|
||||||
full_plugin_name: 'directadmin',
|
full_plugin_name: 'certbot-dns-directadmin:directadmin',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
dnsimple: {
|
dnsimple: {
|
||||||
display_name: 'DNSimple',
|
display_name: 'DNSimple',
|
||||||
package_name: 'certbot-dns-dnsimple',
|
package_name: 'certbot-dns-dnsimple',
|
||||||
version_requirement: '==$(certbot --version | grep -Eo \'[0-9](\\.[0-9]+)+\')', // official plugin, use certbot version
|
package_version: '1.8.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: 'dns_dnsimple_token = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw',
|
credentials: 'dns_dnsimple_token = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw',
|
||||||
full_plugin_name: 'dns-dnsimple',
|
full_plugin_name: 'dns-dnsimple',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
dnsmadeeasy: {
|
dnsmadeeasy: {
|
||||||
display_name: 'DNS Made Easy',
|
display_name: 'DNS Made Easy',
|
||||||
package_name: 'certbot-dns-dnsmadeeasy',
|
package_name: 'certbot-dns-dnsmadeeasy',
|
||||||
version_requirement: '==$(certbot --version | grep -Eo \'[0-9](\\.[0-9]+)+\')', // official plugin, use certbot version
|
package_version: '1.8.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_dnsmadeeasy_api_key = 1c1a3c91-4770-4ce7-96f4-54c0eb0e457a
|
credentials: `dns_dnsmadeeasy_api_key = 1c1a3c91-4770-4ce7-96f4-54c0eb0e457a
|
||||||
dns_dnsmadeeasy_secret_key = c9b5625f-9834-4ff8-baba-4ed5f32cae55`,
|
dns_dnsmadeeasy_secret_key = c9b5625f-9834-4ff8-baba-4ed5f32cae55`,
|
||||||
full_plugin_name: 'dns-dnsmadeeasy',
|
full_plugin_name: 'dns-dnsmadeeasy',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
dnspod: {
|
dnspod: {
|
||||||
display_name: 'DNSPod',
|
display_name: 'DNSPod',
|
||||||
package_name: 'certbot-dns-dnspod',
|
package_name: 'certbot-dns-dnspod',
|
||||||
version_requirement: '~=0.1.0',
|
package_version: '0.1.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_dnspod_email = "email@example.com"
|
credentials: `certbot_dns_dnspod:dns_dnspod_email = "DNSPOD-API-REQUIRES-A-VALID-EMAIL"
|
||||||
dns_dnspod_api_token = "id,key"`,
|
certbot_dns_dnspod:dns_dnspod_api_token = "DNSPOD-API-TOKEN"`,
|
||||||
full_plugin_name: 'dns-dnspod',
|
full_plugin_name: 'certbot-dns-dnspod:dns-dnspod',
|
||||||
},
|
|
||||||
//####################################################//
|
|
||||||
domainoffensive: {
|
|
||||||
display_name: 'DomainOffensive (do.de)',
|
|
||||||
package_name: 'certbot-dns-do',
|
|
||||||
version_requirement: '~=0.31.0',
|
|
||||||
dependencies: '',
|
|
||||||
credentials: 'dns_do_api_token = YOUR_DO_DE_AUTH_TOKEN',
|
|
||||||
full_plugin_name: 'dns-do',
|
|
||||||
},
|
|
||||||
//####################################################//
|
|
||||||
domeneshop: {
|
|
||||||
display_name: 'Domeneshop',
|
|
||||||
package_name: 'certbot-dns-domeneshop',
|
|
||||||
version_requirement: '~=0.2.8',
|
|
||||||
dependencies: '',
|
|
||||||
credentials: `dns_domeneshop_client_token=YOUR_DOMENESHOP_CLIENT_TOKEN
|
|
||||||
dns_domeneshop_client_secret=YOUR_DOMENESHOP_CLIENT_SECRET`,
|
|
||||||
full_plugin_name: 'dns-domeneshop',
|
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
dynu: {
|
dynu: {
|
||||||
display_name: 'Dynu',
|
display_name: 'Dynu',
|
||||||
package_name: 'certbot-dns-dynu',
|
package_name: 'certbot-dns-dynu',
|
||||||
version_requirement: '~=0.0.1',
|
package_version: '0.0.1',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: 'dns_dynu_auth_token = YOUR_DYNU_AUTH_TOKEN',
|
credentials: 'certbot_dns_dynu:dns_dynu_auth_token = YOUR_DYNU_AUTH_TOKEN',
|
||||||
full_plugin_name: 'dns-dynu',
|
full_plugin_name: 'certbot-dns-dynu:dns-dynu',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
eurodns: {
|
eurodns: {
|
||||||
display_name: 'EuroDNS',
|
display_name: 'EuroDNS',
|
||||||
package_name: 'certbot-dns-eurodns',
|
package_name: 'certbot-dns-eurodns',
|
||||||
version_requirement: '~=0.0.4',
|
package_version: '0.0.4',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_eurodns_applicationId = myuser
|
credentials: `dns_eurodns_applicationId = myuser
|
||||||
dns_eurodns_apiKey = mysecretpassword
|
dns_eurodns_apiKey = mysecretpassword
|
||||||
dns_eurodns_endpoint = https://rest-api.eurodns.com/user-api-gateway/proxy`,
|
dns_eurodns_endpoint = https://rest-api.eurodns.com/user-api-gateway/proxy`,
|
||||||
full_plugin_name: 'dns-eurodns',
|
full_plugin_name: 'certbot-dns-eurodns:dns-eurodns',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
gandi: {
|
gandi: {
|
||||||
display_name: 'Gandi Live DNS',
|
display_name: 'Gandi Live DNS',
|
||||||
package_name: 'certbot_plugin_gandi',
|
package_name: 'certbot_plugin_gandi',
|
||||||
version_requirement: '~=1.3.2',
|
package_version: '1.2.5',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `# live dns v5 api key
|
credentials: 'certbot_plugin_gandi:dns_api_key = APIKEY',
|
||||||
dns_gandi_api_key=APIKEY
|
full_plugin_name: 'certbot-plugin-gandi:dns',
|
||||||
|
|
||||||
# optional organization id, remove it if not used
|
|
||||||
dns_gandi_sharing_id=SHARINGID`,
|
|
||||||
full_plugin_name: 'dns-gandi',
|
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
godaddy: {
|
godaddy: {
|
||||||
display_name: 'GoDaddy',
|
display_name: 'GoDaddy',
|
||||||
package_name: 'certbot-dns-godaddy',
|
package_name: 'certbot-dns-godaddy',
|
||||||
version_requirement: '~=0.2.0',
|
package_version: '0.2.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_godaddy_secret = 0123456789abcdef0123456789abcdef01234567
|
credentials: `dns_godaddy_secret = 0123456789abcdef0123456789abcdef01234567
|
||||||
dns_godaddy_key = abcdef0123456789abcdef01234567abcdef0123`,
|
dns_godaddy_key = abcdef0123456789abcdef01234567abcdef0123`,
|
||||||
full_plugin_name: 'dns-godaddy',
|
full_plugin_name: 'dns-godaddy',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
google: {
|
google: {
|
||||||
display_name: 'Google',
|
display_name: 'Google',
|
||||||
package_name: 'certbot-dns-google',
|
package_name: 'certbot-dns-google',
|
||||||
version_requirement: '==$(certbot --version | grep -Eo \'[0-9](\\.[0-9]+)+\')', // official plugin, use certbot version
|
package_version: '1.8.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `{
|
credentials: `{
|
||||||
"type": "service_account",
|
"type": "service_account",
|
||||||
...
|
...
|
||||||
}`,
|
}`,
|
||||||
@ -277,166 +233,132 @@ dns_godaddy_key = abcdef0123456789abcdef01234567abcdef0123`,
|
|||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
hetzner: {
|
hetzner: {
|
||||||
display_name: 'Hetzner',
|
display_name: 'Hetzner',
|
||||||
package_name: 'certbot-dns-hetzner',
|
package_name: 'certbot-dns-hetzner',
|
||||||
version_requirement: '~=1.0.4',
|
package_version: '1.0.4',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: 'dns_hetzner_api_token = 0123456789abcdef0123456789abcdef',
|
credentials: 'certbot_dns_hetzner:dns_hetzner_api_token = 0123456789abcdef0123456789abcdef',
|
||||||
full_plugin_name: 'dns-hetzner',
|
full_plugin_name: 'certbot-dns-hetzner:dns-hetzner',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
infomaniak: {
|
infomaniak: {
|
||||||
display_name: 'Infomaniak',
|
display_name: 'Infomaniak',
|
||||||
package_name: 'certbot-dns-infomaniak',
|
package_name: 'certbot-dns-infomaniak',
|
||||||
version_requirement: '~=0.1.12',
|
package_version: '0.1.12',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: 'dns_infomaniak_token = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
|
credentials: 'certbot_dns_infomaniak:dns_infomaniak_token = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
|
||||||
full_plugin_name: 'dns-infomaniak',
|
full_plugin_name: 'certbot-dns-infomaniak:dns-infomaniak',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
inwx: {
|
inwx: {
|
||||||
display_name: 'INWX',
|
display_name: 'INWX',
|
||||||
package_name: 'certbot-dns-inwx',
|
package_name: 'certbot-dns-inwx',
|
||||||
version_requirement: '~=2.1.2',
|
package_version: '2.1.2',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_inwx_url = https://api.domrobot.com/xmlrpc/
|
credentials: `certbot_dns_inwx:dns_inwx_url = https://api.domrobot.com/xmlrpc/
|
||||||
dns_inwx_username = your_username
|
certbot_dns_inwx:dns_inwx_username = your_username
|
||||||
dns_inwx_password = your_password
|
certbot_dns_inwx:dns_inwx_password = your_password
|
||||||
dns_inwx_shared_secret = your_shared_secret optional`,
|
certbot_dns_inwx:dns_inwx_shared_secret = your_shared_secret optional`,
|
||||||
full_plugin_name: 'dns-inwx',
|
full_plugin_name: 'certbot-dns-inwx:dns-inwx',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
ionos: {
|
ionos: {
|
||||||
display_name: 'IONOS',
|
display_name: 'IONOS',
|
||||||
package_name: 'certbot-dns-ionos',
|
package_name: 'certbot-dns-ionos',
|
||||||
version_requirement: '==2021.9.20.post1',
|
package_version: '0.0.7',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_ionos_prefix = myapikeyprefix
|
credentials: `certbot_dns_ionos:dns_ionos_prefix = myapikeyprefix
|
||||||
dns_ionos_secret = verysecureapikeysecret
|
certbot_dns_ionos:dns_ionos_secret = verysecureapikeysecret
|
||||||
dns_ionos_endpoint = https://api.hosting.ionos.com`,
|
certbot_dns_ionos:dns_ionos_endpoint = https://api.hosting.ionos.com`,
|
||||||
full_plugin_name: 'dns-ionos',
|
full_plugin_name: 'certbot-dns-ionos:dns-ionos',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
ispconfig: {
|
ispconfig: {
|
||||||
display_name: 'ISPConfig',
|
display_name: 'ISPConfig',
|
||||||
package_name: 'certbot-dns-ispconfig',
|
package_name: 'certbot-dns-ispconfig',
|
||||||
version_requirement: '~=0.2.0',
|
package_version: '0.2.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_ispconfig_username = myremoteuser
|
credentials: `certbot_dns_ispconfig:dns_ispconfig_username = myremoteuser
|
||||||
dns_ispconfig_password = verysecureremoteuserpassword
|
certbot_dns_ispconfig:dns_ispconfig_password = verysecureremoteuserpassword
|
||||||
dns_ispconfig_endpoint = https://localhost:8080`,
|
certbot_dns_ispconfig:dns_ispconfig_endpoint = https://localhost:8080`,
|
||||||
full_plugin_name: 'dns-ispconfig',
|
full_plugin_name: 'certbot-dns-ispconfig:dns-ispconfig',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
isset: {
|
isset: {
|
||||||
display_name: 'Isset',
|
display_name: 'Isset',
|
||||||
package_name: 'certbot-dns-isset',
|
package_name: 'certbot-dns-isset',
|
||||||
version_requirement: '~=0.0.3',
|
package_version: '0.0.3',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_isset_endpoint="https://customer.isset.net/api"
|
credentials: `certbot_dns_isset:dns_isset_endpoint="https://customer.isset.net/api"
|
||||||
dns_isset_token="<token>"`,
|
certbot_dns_isset:dns_isset_token="<token>"`,
|
||||||
full_plugin_name: 'dns-isset',
|
full_plugin_name: 'certbot-dns-isset:dns-isset',
|
||||||
},
|
},
|
||||||
joker: {
|
joker: {
|
||||||
display_name: 'Joker',
|
display_name: 'Joker',
|
||||||
package_name: 'certbot-dns-joker',
|
package_name: 'certbot-dns-joker',
|
||||||
version_requirement: '~=1.1.0',
|
package_version: '1.1.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_joker_username = <Dynamic DNS Authentication Username>
|
credentials: `certbot_dns_joker:dns_joker_username = <Dynamic DNS Authentication Username>
|
||||||
dns_joker_password = <Dynamic DNS Authentication Password>
|
certbot_dns_joker:dns_joker_password = <Dynamic DNS Authentication Password>
|
||||||
dns_joker_domain = <Dynamic DNS Domain>`,
|
certbot_dns_joker:dns_joker_domain = <Dynamic DNS Domain>`,
|
||||||
full_plugin_name: 'dns-joker',
|
full_plugin_name: 'certbot-dns-joker:dns-joker',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
linode: {
|
linode: {
|
||||||
display_name: 'Linode',
|
display_name: 'Linode',
|
||||||
package_name: 'certbot-dns-linode',
|
package_name: 'certbot-dns-linode',
|
||||||
version_requirement: '==$(certbot --version | grep -Eo \'[0-9](\\.[0-9]+)+\')', // official plugin, use certbot version
|
package_version: '1.8.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_linode_key = 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ64
|
credentials: `dns_linode_key = 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ64
|
||||||
dns_linode_version = [<blank>|3|4]`,
|
dns_linode_version = [<blank>|3|4]`,
|
||||||
full_plugin_name: 'dns-linode',
|
full_plugin_name: 'dns-linode',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
loopia: {
|
|
||||||
display_name: 'Loopia',
|
|
||||||
package_name: 'certbot-dns-loopia',
|
|
||||||
version_requirement: '~=1.0.0',
|
|
||||||
dependencies: '',
|
|
||||||
credentials: `dns_loopia_user = user@loopiaapi
|
|
||||||
dns_loopia_password = abcdef0123456789abcdef01234567abcdef0123`,
|
|
||||||
full_plugin_name: 'dns-loopia',
|
|
||||||
},
|
|
||||||
//####################################################//
|
|
||||||
luadns: {
|
luadns: {
|
||||||
display_name: 'LuaDNS',
|
display_name: 'LuaDNS',
|
||||||
package_name: 'certbot-dns-luadns',
|
package_name: 'certbot-dns-luadns',
|
||||||
version_requirement: '==$(certbot --version | grep -Eo \'[0-9](\\.[0-9]+)+\')', // official plugin, use certbot version
|
package_version: '1.8.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_luadns_email = user@example.com
|
credentials: `dns_luadns_email = user@example.com
|
||||||
dns_luadns_token = 0123456789abcdef0123456789abcdef`,
|
dns_luadns_token = 0123456789abcdef0123456789abcdef`,
|
||||||
full_plugin_name: 'dns-luadns',
|
full_plugin_name: 'dns-luadns',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
namecheap: {
|
|
||||||
display_name: 'Namecheap',
|
|
||||||
package_name: 'certbot-dns-namecheap',
|
|
||||||
version_requirement: '~=1.0.0',
|
|
||||||
dependencies: '',
|
|
||||||
credentials: `dns_namecheap_username = 123456
|
|
||||||
dns_namecheap_api_key = 0123456789abcdef0123456789abcdef01234567`,
|
|
||||||
full_plugin_name: 'dns-namecheap',
|
|
||||||
},
|
|
||||||
//####################################################//
|
|
||||||
netcup: {
|
netcup: {
|
||||||
display_name: 'netcup',
|
display_name: 'netcup',
|
||||||
package_name: 'certbot-dns-netcup',
|
package_name: 'certbot-dns-netcup',
|
||||||
version_requirement: '~=1.0.0',
|
package_version: '1.0.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_netcup_customer_id = 123456
|
credentials: `certbot_dns_netcup:dns_netcup_customer_id = 123456
|
||||||
dns_netcup_api_key = 0123456789abcdef0123456789abcdef01234567
|
certbot_dns_netcup:dns_netcup_api_key = 0123456789abcdef0123456789abcdef01234567
|
||||||
dns_netcup_api_password = abcdef0123456789abcdef01234567abcdef0123`,
|
certbot_dns_netcup:dns_netcup_api_password = abcdef0123456789abcdef01234567abcdef0123`,
|
||||||
full_plugin_name: 'dns-netcup',
|
full_plugin_name: 'certbot-dns-netcup:dns-netcup',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
njalla: {
|
njalla: {
|
||||||
display_name: 'Njalla',
|
display_name: 'Njalla',
|
||||||
package_name: 'certbot-dns-njalla',
|
package_name: 'certbot-dns-njalla',
|
||||||
version_requirement: '~=1.0.0',
|
package_version: '1.0.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: 'dns_njalla_token = 0123456789abcdef0123456789abcdef01234567',
|
credentials: 'certbot_dns_njalla:dns_njalla_token = 0123456789abcdef0123456789abcdef01234567',
|
||||||
full_plugin_name: 'dns-njalla',
|
full_plugin_name: 'certbot-dns-njalla:dns-njalla',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
nsone: {
|
nsone: {
|
||||||
display_name: 'NS1',
|
display_name: 'NS1',
|
||||||
package_name: 'certbot-dns-nsone',
|
package_name: 'certbot-dns-nsone',
|
||||||
version_requirement: '==$(certbot --version | grep -Eo \'[0-9](\\.[0-9]+)+\')', // official plugin, use certbot version
|
package_version: '1.8.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: 'dns_nsone_api_key = MDAwMDAwMDAwMDAwMDAw',
|
credentials: 'dns_nsone_api_key = MDAwMDAwMDAwMDAwMDAw',
|
||||||
full_plugin_name: 'dns-nsone',
|
full_plugin_name: 'dns-nsone',
|
||||||
},
|
|
||||||
//####################################################//
|
|
||||||
oci: {
|
|
||||||
display_name: 'Oracle Cloud Infrastructure DNS',
|
|
||||||
package_name: 'certbot-dns-oci',
|
|
||||||
package_version: '0.3.6',
|
|
||||||
dependencies: 'oci',
|
|
||||||
credentials: `[DEFAULT]
|
|
||||||
user = ocid1.user.oc1...
|
|
||||||
fingerprint = xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx
|
|
||||||
tenancy = ocid1.tenancy.oc1...
|
|
||||||
region = us-ashburn-1
|
|
||||||
key_file = ~/.oci/oci_api_key.pem`,
|
|
||||||
full_plugin_name: 'dns-oci',
|
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
ovh: {
|
ovh: {
|
||||||
display_name: 'OVH',
|
display_name: 'OVH',
|
||||||
package_name: 'certbot-dns-ovh',
|
package_name: 'certbot-dns-ovh',
|
||||||
version_requirement: '==$(certbot --version | grep -Eo \'[0-9](\\.[0-9]+)+\')', // official plugin, use certbot version
|
package_version: '1.8.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_ovh_endpoint = ovh-eu
|
credentials: `dns_ovh_endpoint = ovh-eu
|
||||||
dns_ovh_application_key = MDAwMDAwMDAwMDAw
|
dns_ovh_application_key = MDAwMDAwMDAwMDAw
|
||||||
dns_ovh_application_secret = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
|
dns_ovh_application_secret = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
|
||||||
dns_ovh_consumer_key = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw`,
|
dns_ovh_consumer_key = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw`,
|
||||||
@ -444,41 +366,41 @@ dns_ovh_consumer_key = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw`,
|
|||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
porkbun: {
|
porkbun: {
|
||||||
display_name: 'Porkbun',
|
display_name: 'Porkbun',
|
||||||
package_name: 'certbot-dns-porkbun',
|
package_name: 'certbot-dns-porkbun',
|
||||||
version_requirement: '~=0.2',
|
package_version: '0.2',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_porkbun_key=your-porkbun-api-key
|
credentials: `dns_porkbun_key=your-porkbun-api-key
|
||||||
dns_porkbun_secret=your-porkbun-api-secret`,
|
dns_porkbun_secret=your-porkbun-api-secret`,
|
||||||
full_plugin_name: 'dns-porkbun',
|
full_plugin_name: 'dns-porkbun',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
powerdns: {
|
powerdns: {
|
||||||
display_name: 'PowerDNS',
|
display_name: 'PowerDNS',
|
||||||
package_name: 'certbot-dns-powerdns',
|
package_name: 'certbot-dns-powerdns',
|
||||||
version_requirement: '~=0.2.0',
|
package_version: '0.2.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_powerdns_api_url = https://api.mypowerdns.example.org
|
credentials: `certbot_dns_powerdns:dns_powerdns_api_url = https://api.mypowerdns.example.org
|
||||||
dns_powerdns_api_key = AbCbASsd!@34`,
|
certbot_dns_powerdns:dns_powerdns_api_key = AbCbASsd!@34`,
|
||||||
full_plugin_name: 'dns-powerdns',
|
full_plugin_name: 'certbot-dns-powerdns:dns-powerdns',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
regru: {
|
regru: {
|
||||||
display_name: 'reg.ru',
|
display_name: 'reg.ru',
|
||||||
package_name: 'certbot-regru',
|
package_name: 'certbot-regru',
|
||||||
version_requirement: '~=1.0.2',
|
package_version: '1.0.2',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `certbot_regru:dns_username=username
|
credentials: `certbot_regru:dns_username=username
|
||||||
certbot_regru:dns_password=password`,
|
certbot_regru:dns_password=password`,
|
||||||
full_plugin_name: 'certbot-regru:dns',
|
full_plugin_name: 'certbot-regru:dns',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
rfc2136: {
|
rfc2136: {
|
||||||
display_name: 'RFC 2136',
|
display_name: 'RFC 2136',
|
||||||
package_name: 'certbot-dns-rfc2136',
|
package_name: 'certbot-dns-rfc2136',
|
||||||
version_requirement: '==$(certbot --version | grep -Eo \'[0-9](\\.[0-9]+)+\')', // official plugin, use certbot version
|
package_version: '1.8.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `# Target DNS server
|
credentials: `# Target DNS server
|
||||||
dns_rfc2136_server = 192.0.2.1
|
dns_rfc2136_server = 192.0.2.1
|
||||||
# Target DNS port
|
# Target DNS port
|
||||||
dns_rfc2136_port = 53
|
dns_rfc2136_port = 53
|
||||||
@ -492,53 +414,32 @@ dns_rfc2136_algorithm = HMAC-SHA512`,
|
|||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
route53: {
|
route53: {
|
||||||
display_name: 'Route 53 (Amazon)',
|
display_name: 'Route 53 (Amazon)',
|
||||||
package_name: 'certbot-dns-route53',
|
package_name: 'certbot-dns-route53',
|
||||||
version_requirement: '==$(certbot --version | grep -Eo \'[0-9](\\.[0-9]+)+\')', // official plugin, use certbot version
|
package_version: '1.8.0',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `[default]
|
credentials: `[default]
|
||||||
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
|
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
|
||||||
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY`,
|
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY`,
|
||||||
full_plugin_name: 'dns-route53',
|
full_plugin_name: 'dns-route53',
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
transip: {
|
transip: {
|
||||||
display_name: 'TransIP',
|
display_name: 'TransIP',
|
||||||
package_name: 'certbot-dns-transip',
|
package_name: 'certbot-dns-transip',
|
||||||
version_requirement: '~=0.4.3',
|
package_version: '0.3.3',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: `dns_transip_username = my_username
|
credentials: `certbot_dns_transip:dns_transip_username = my_username
|
||||||
dns_transip_key_file = /etc/letsencrypt/transip-rsa.key`,
|
certbot_dns_transip:dns_transip_key_file = /etc/letsencrypt/transip-rsa.key`,
|
||||||
full_plugin_name: 'dns-transip',
|
full_plugin_name: 'certbot-dns-transip:dns-transip',
|
||||||
},
|
|
||||||
//####################################################//
|
|
||||||
tencentcloud: {
|
|
||||||
display_name: 'Tencent Cloud',
|
|
||||||
package_name: 'certbot-dns-tencentcloud',
|
|
||||||
version_requirement: '~=2.0.0',
|
|
||||||
dependencies: '',
|
|
||||||
credentials: `dns_tencentcloud_secret_id = TENCENT_CLOUD_SECRET_ID
|
|
||||||
dns_tencentcloud_secret_key = TENCENT_CLOUD_SECRET_KEY`,
|
|
||||||
full_plugin_name: 'dns-tencentcloud',
|
|
||||||
},
|
},
|
||||||
//####################################################//
|
//####################################################//
|
||||||
vultr: {
|
vultr: {
|
||||||
display_name: 'Vultr',
|
display_name: 'Vultr',
|
||||||
package_name: 'certbot-dns-vultr',
|
package_name: 'certbot-dns-vultr',
|
||||||
version_requirement: '~=1.0.3',
|
package_version: '1.0.3',
|
||||||
dependencies: '',
|
dependencies: '',
|
||||||
credentials: 'dns_vultr_key = YOUR_VULTR_API_KEY',
|
credentials: 'certbot_dns_vultr:dns_vultr_key = YOUR_VULTR_API_KEY',
|
||||||
full_plugin_name: 'dns-vultr',
|
full_plugin_name: 'certbot-dns-vultr:dns-vultr',
|
||||||
},
|
|
||||||
//####################################################//
|
|
||||||
websupportsk: {
|
|
||||||
display_name: 'Websupport.sk',
|
|
||||||
package_name: 'certbot-dns-websupportsk',
|
|
||||||
version_requirement: '~=0.1.6',
|
|
||||||
dependencies: '',
|
|
||||||
credentials: `dns_websupportsk_api_key = <api_key>
|
|
||||||
dns_websupportsk_secret = <secret>
|
|
||||||
dns_websupportsk_domain = example.com`,
|
|
||||||
full_plugin_name: 'dns-websupportsk',
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -12,7 +12,7 @@ ALL_FILES=$(find . -follow)
|
|||||||
|
|
||||||
for FILE in $ALL_FILES
|
for FILE in $ALL_FILES
|
||||||
do
|
do
|
||||||
# remove preceding ./
|
# remove preceeding ./
|
||||||
FILE=$(echo "$FILE" | sed -E "s/\.\///g")
|
FILE=$(echo "$FILE" | sed -E "s/\.\///g")
|
||||||
echo '======================================='
|
echo '======================================='
|
||||||
echo "FILE: $FILE"
|
echo "FILE: $FILE"
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
. "$DIR/.common.sh"
|
. "$DIR/.common.sh"
|
||||||
|
|
||||||
DOCKER_IMAGE=nginxproxymanager/nginx-full:certbot-node
|
DOCKER_IMAGE=jc21/nginx-full:node
|
||||||
|
|
||||||
# Ensure docker exists
|
# Ensure docker exists
|
||||||
if hash docker 2>/dev/null; then
|
if hash docker 2>/dev/null; then
|
||||||
|
@ -253,9 +253,9 @@ astral-regex@^1.0.0:
|
|||||||
integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
|
integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
|
||||||
|
|
||||||
async@^3.2.0:
|
async@^3.2.0:
|
||||||
version "3.2.4"
|
version "3.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
|
resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720"
|
||||||
integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
|
integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==
|
||||||
|
|
||||||
asynckit@^0.4.0:
|
asynckit@^0.4.0:
|
||||||
version "0.4.0"
|
version "0.4.0"
|
||||||
@ -1809,9 +1809,9 @@ mocha@^8.1.1:
|
|||||||
yargs-unparser "1.6.1"
|
yargs-unparser "1.6.1"
|
||||||
|
|
||||||
moment@^2.27.0:
|
moment@^2.27.0:
|
||||||
version "2.29.4"
|
version "2.27.0"
|
||||||
resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108"
|
resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d"
|
||||||
integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
|
integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==
|
||||||
|
|
||||||
ms@2.0.0:
|
ms@2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user