Merge branch 'dev' into ui
4
.github/workflows/codeql.yml
vendored
|
|
@ -35,12 +35,12 @@ jobs:
|
|||
python -m pip install --no-cache-dir --require-hashes -r src/common/db/requirements.txt
|
||||
echo "CODEQL_PYTHON=$(which python)" >> $GITHUB_ENV
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@407ffafae6a767df3e0230c3df91b6443ae8df75 # v2.22.8
|
||||
uses: github/codeql-action/init@305f6546310b9203e892c28c1484e82977f4f63d # v2.22.10
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
config-file: ./.github/codeql.yml
|
||||
setup-python-dependencies: false
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@407ffafae6a767df3e0230c3df91b6443ae8df75 # v2.22.8
|
||||
uses: github/codeql-action/analyze@305f6546310b9203e892c28c1484e82977f4f63d # v2.22.10
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
|
|
|
|||
4
.github/workflows/push-github.yml
vendored
|
|
@ -23,7 +23,7 @@ jobs:
|
|||
with:
|
||||
name: BunkerWeb_documentation_v${{ inputs.VERSION }}.pdf
|
||||
# Create tag
|
||||
- uses: rickstaa/action-create-tag@861755f3fcbce1b21a65c17bad10e7d35c27b6d9 # v1.7.1
|
||||
- uses: rickstaa/action-create-tag@a1c7777fcb2fee4f19b0f283ba888afa11678b72 # v1.7.2
|
||||
name: Create tag
|
||||
if: inputs.VERSION != 'testing'
|
||||
with:
|
||||
|
|
@ -31,7 +31,7 @@ jobs:
|
|||
message: "v${{ inputs.VERSION }}"
|
||||
force_push_tag: true
|
||||
# Create tag
|
||||
- uses: rickstaa/action-create-tag@861755f3fcbce1b21a65c17bad10e7d35c27b6d9 # v1.7.1
|
||||
- uses: rickstaa/action-create-tag@a1c7777fcb2fee4f19b0f283ba888afa11678b72 # v1.7.2
|
||||
name: Create tag
|
||||
if: inputs.VERSION == 'testing'
|
||||
with:
|
||||
|
|
|
|||
2
.github/workflows/push-packagecloud.yml
vendored
|
|
@ -42,7 +42,7 @@ jobs:
|
|||
- name: Check out repository code
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
- name: Install ruby
|
||||
uses: ruby/setup-ruby@8575951200e472d5f2d95c625da0c7bec8217c42 # v1.161.0
|
||||
uses: ruby/setup-ruby@af848b40be8bb463a751551a1180d74782ba8a72 # v1.162.0
|
||||
with:
|
||||
ruby-version: "3.0"
|
||||
- name: Install packagecloud
|
||||
|
|
|
|||
2
.github/workflows/scorecards-analysis.yml
vendored
|
|
@ -25,6 +25,6 @@ jobs:
|
|||
results_format: sarif
|
||||
publish_results: true
|
||||
- name: "Upload SARIF results to code scanning"
|
||||
uses: github/codeql-action/upload-sarif@407ffafae6a767df3e0230c3df91b6443ae8df75 # v2.22.8
|
||||
uses: github/codeql-action/upload-sarif@305f6546310b9203e892c28c1484e82977f4f63d # v2.22.10
|
||||
with:
|
||||
sarif_file: results.sarif
|
||||
|
|
|
|||
1
.gitignore
vendored
|
|
@ -6,3 +6,4 @@ env
|
|||
node_modules
|
||||
/src/ui/*.txt
|
||||
.mypy_cache
|
||||
.cache/
|
||||
|
|
|
|||
|
|
@ -2,8 +2,10 @@
|
|||
|
||||
## v1.5.5 - YYYY/MM/DD
|
||||
|
||||
- [BUGFIX] Fix issues with the database when upgrading from version 1.5.3 and 1.5.4 to the most recent version
|
||||
- [FEATURE] Add Anonymous reporting feature
|
||||
- [MISC] Updated ModSecurity to v3.0.11
|
||||
- [FEATURE] Add support for fallback Referrer-Policies
|
||||
- [DEPS] Updated ModSecurity to v3.0.11
|
||||
|
||||
## v1.5.4 - 2023/12/04
|
||||
|
||||
|
|
|
|||
239
README.md
|
|
@ -1,5 +1,5 @@
|
|||
<p align="center">
|
||||
<img alt="BunkerWeb logo" src="https://github.com/bunkerity/bunkerweb/raw/v1.5.3/misc/logo.png" />
|
||||
<img alt="BunkerWeb logo" src="https://github.com/bunkerity/bunkerweb/raw/v1.5.4/misc/logo.png" />
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
|
|
@ -18,39 +18,23 @@
|
|||
</p>
|
||||
|
||||
<p align="center">
|
||||
<<<<<<< Updated upstream
|
||||
🌐 <a href="https://www.bunkerweb.io">Website</a>
|
||||
🌐 <a href="https://www.bunkerweb.io/?utm_campaign=self&utm_source=github">Website</a>
|
||||
|
|
||||
📓 <a href="https://docs.bunkerweb.io">Documentation</a>
|
||||
🤝 <a href="https://panel.bunkerweb.io/?utm_campaign=self&utm_source=github">Panel</a>
|
||||
|
|
||||
👨💻 <a href="https://demo.bunkerweb.io">Demo</a>
|
||||
📓 <a href="https://docs.bunkerweb.io/?utm_campaign=self&utm_source=github">Documentation</a>
|
||||
|
|
||||
🛡️ <a href="https://github.com/bunkerity/bunkerweb/raw/v1.5.3/examples">Examples</a>
|
||||
=======
|
||||
🌐 <a href="https://www.bunkerweb.io?utm_campaign=self&utm_source=github">Website</a>
|
||||
|
|
||||
📓 <a href="https://docs.bunkerweb.io?utm_campaign=self&utm_source=github">Documentation</a>
|
||||
|
|
||||
👨💻 <a href="https://demo.bunkerweb.io?utm_campaign=self&utm_source=github">Demo</a>
|
||||
|
|
||||
🤝 <a href="https://panel.bunkerweb.io?utm_campaign=self&utm_source=github">Panel</a>
|
||||
👨💻 <a href="https://demo.bunkerweb.io/?utm_campaign=self&utm_source=github">Demo</a>
|
||||
|
|
||||
🛡️ <a href="https://github.com/bunkerity/bunkerweb/raw/v1.5.4/examples">Examples</a>
|
||||
>>>>>>> Stashed changes
|
||||
|
|
||||
💬 <a href="https://discord.com/invite/fTf46FmtyD">Chat</a>
|
||||
|
|
||||
📝 <a href="https://github.com/bunkerity/bunkerweb/discussions">Forum</a>
|
||||
<br/>
|
||||
<<<<<<< Updated upstream
|
||||
⚙️ <a href="https://config.bunkerweb.io">Configurator</a>
|
||||
⚙️ <a href="https://config.bunkerweb.io/?utm_campaign=self&utm_source=github">Configurator</a>
|
||||
|
|
||||
🗺️ <a href="https://threatmap.bunkerweb.io">Threatmap</a>
|
||||
=======
|
||||
⚙️ <a href="https://config.bunkerweb.io?utm_campaign=self&utm_source=github">Configurator</a>
|
||||
|
|
||||
🗺️ <a href="https://threatmap.bunkerweb.io?utm_campaign=self&utm_source=github">Threatmap</a>
|
||||
>>>>>>> Stashed changes
|
||||
🗺️ <a href="https://threatmap.bunkerweb.io/?utm_campaign=self&utm_source=github">Threatmap</a>
|
||||
</p>
|
||||
|
||||
> 🛡️ Make security by default great again !
|
||||
|
|
@ -58,28 +42,14 @@
|
|||
# BunkerWeb
|
||||
|
||||
<p align="center">
|
||||
<img alt="Overview banner" src="https://github.com/bunkerity/bunkerweb/raw/v1.5.3/docs/assets/img/intro-overview.svg" />
|
||||
<img alt="Overview banner" src="https://github.com/bunkerity/bunkerweb/raw/v1.5.4/docs/assets/img/intro-overview.svg" />
|
||||
</p>
|
||||
|
||||
BunkerWeb is a next-generation and open-source Web Application Firewall (WAF).
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
Being a full-featured web server (based on [NGINX](https://nginx.org/) under the hood), it will protect your web services to make them "secure by default". BunkerWeb integrates seamlessly into your existing environments ([Linux](https://docs.bunkerweb.io/1.5.3/integrations/#linux), [Docker](https://docs.bunkerweb.io/1.5.3/integrations/#docker), [Swarm](https://docs.bunkerweb.io/1.5.3/integrations/#swarm), [Kubernetes](https://docs.bunkerweb.io/1.5.3/integrations/#kubernetes), …) and is fully configurable (don't panic, there is an [awesome web UI](https://docs.bunkerweb.io/1.5.3/web-ui/) if you don't like the CLI) to meet your own use-cases . In other words, cybersecurity is no more a hassle.
|
||||
Being a full-featured web server (based on [NGINX](https://nginx.org/) under the hood), it will protect your web services to make them "secure by default". BunkerWeb integrates seamlessly into your existing environments ([Linux](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#linux), [Docker](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#docker), [Swarm](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#swarm), [Kubernetes](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#kubernetes), …) and is fully configurable (don't panic, there is an [awesome web UI](https://docs.bunkerweb.io/1.5.4/web-ui/?utm_campaign=self&utm_source=github) if you don't like the CLI) to meet your own use-cases . In other words, cybersecurity is no more a hassle.
|
||||
|
||||
BunkerWeb contains primary [security features](https://docs.bunkerweb.io/1.5.3/security-tuning/) as part of the core but can be easily extended with additional ones thanks to a [plugin system](https://docs.bunkerweb.io/1.5.3/plugins/).
|
||||
|
||||
## Why BunkerWeb ?
|
||||
|
||||
- **Easy integration into existing environments** : support for Linux, Docker, Swarm, Kubernetes, Ansible, Vagrant, ...
|
||||
- **Highly customizable** : enable, disable and configure features easily to meet your use case
|
||||
- **Secure by default** : offers out-of-the-box and hassle-free minimal security for your web services
|
||||
- **Awesome web UI** : keep control of everything more efficiently without the need of the CLI
|
||||
- **Plugin system** : extend BunkerWeb to meet your own use-cases
|
||||
- **Free as in "freedom"** : licensed under the free [AGPLv3 license](https://www.gnu.org/licenses/agpl-3.0.en.html)
|
||||
=======
|
||||
Being a full-featured web server (based on [NGINX](https://nginx.org/) under the hood), it will protect your web services to make them "secure by default". BunkerWeb integrates seamlessly into your existing environments ([Linux](https://docs.bunkerweb.io/1.5.4/integrations/#linux?utm_campaign=self&utm_source=github), [Docker](https://docs.bunkerweb.io/1.5.4/integrations/#docker?utm_campaign=self&utm_source=github), [Swarm](https://docs.bunkerweb.io/1.5.4/integrations/#swarm?utm_campaign=self&utm_source=github), [Kubernetes](https://docs.bunkerweb.io/1.5.4/integrations/#kubernetes?utm_campaign=self&utm_source=github), …) and is fully configurable (don't panic, there is an [awesome web UI](https://docs.bunkerweb.io/1.5.4/web-ui?utm_campaign=self&utm_source=github) if you don't like the CLI) to meet your own use-cases . In other words, cybersecurity is no more a hassle.
|
||||
|
||||
BunkerWeb contains primary [security features](https://docs.bunkerweb.io/1.5.4/security-tuning?utm_campaign=self&utm_source=github) as part of the core but can be easily extended with additional ones thanks to a [plugin system](https://docs.bunkerweb.io/1.5.4/plugins?utm_campaign=self&utm_source=github).
|
||||
BunkerWeb contains primary [security features](https://docs.bunkerweb.io/1.5.4/security-tuning/?utm_campaign=self&utm_source=github) as part of the core but can be easily extended with additional ones thanks to a [plugin system](https://docs.bunkerweb.io/1.5.4/plugins/?utm_campaign=self&utm_source=github).
|
||||
|
||||
## Why BunkerWeb ?
|
||||
|
||||
|
|
@ -89,8 +59,7 @@ BunkerWeb contains primary [security features](https://docs.bunkerweb.io/1.5.4/s
|
|||
- **Awesome web UI** : Take control of BunkerWeb more efficiently with the exceptional web user interface (UI). Navigate settings and configurations effortlessly through a user-friendly graphical interface, eliminating the need for the command-line interface (CLI).
|
||||
- **Plugin system** : Extend the capabilities of BunkerWeb to meet your own use cases. Seamlessly integrate additional security measures and customize the functionality of BunkerWeb according to your specific requirements.
|
||||
- **Free as in "freedom"** : BunkerWeb is licensed under the free [AGPLv3 license](https://www.gnu.org/licenses/agpl-3.0.en.html), embracing the principles of freedom and openness. Enjoy the freedom to use, modify, and distribute the software, backed by a supportive community.
|
||||
- **Professional services** : Get technical support, tailored consulting and custom development directly from the maintainers of BunkerWeb. Visit the [Bunker Panel](https://panel.bunkerweb.io?utm_campaign=self&utm_source=github) for more information.
|
||||
>>>>>>> Stashed changes
|
||||
- **Professional services** : Get technical support, tailored consulting and custom development directly from the maintainers of BunkerWeb. Visit the [Bunker Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=github) for more information.
|
||||
|
||||
## Security features
|
||||
|
||||
|
|
@ -105,11 +74,7 @@ A non-exhaustive list of security features :
|
|||
- **Block known bad IPs** with external blacklists and DNSBL
|
||||
- And much more ...
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
Learn more about the core security features in the [security tuning](https://docs.bunkerweb.io/1.5.3/security-tuning/) section of the documentation.
|
||||
=======
|
||||
Learn more about the core security features in the [security tuning](https://docs.bunkerweb.io/1.5.4/security-tuning?utm_campaign=self&utm_source=github) section of the documentation.
|
||||
>>>>>>> Stashed changes
|
||||
Learn more about the core security features in the [security tuning](https://docs.bunkerweb.io/1.5.4/security-tuning/?utm_campaign=self&utm_source=github) section of the documentation.
|
||||
|
||||
## Demo
|
||||
|
||||
|
|
@ -117,30 +82,41 @@ Learn more about the core security features in the [security tuning](https://doc
|
|||
<a href="https://www.youtube.com/watch?v=ZhYV-QELzA4" target="_blank"><img alt="BunkerWeb demo" src="https://img.youtube.com/vi/ZhYV-QELzA4/0.jpg" /></a>
|
||||
</p>
|
||||
|
||||
A demo website protected with BunkerWeb is available at [demo.bunkerweb.io](https://demo.bunkerweb.io?utm_campaign=self&utm_source=github). Feel free to visit it and perform some security tests.
|
||||
A demo website protected with BunkerWeb is available at [demo.bunkerweb.io](https://demo.bunkerweb.io/?utm_campaign=self&utm_source=github). Feel free to visit it and perform some security tests.
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
=======
|
||||
## Professional services
|
||||
|
||||
Get the most of BunkerWeb by getting professional services directly from the maintainers of the project. From technical support to tailored consulting and development, we are here to assist you in the security of your web services.
|
||||
Maximize your BunkerWeb experience by getting professional services directly from the maintainers of the project. Whether you require technical support, personalized consulting, or development services, we stand ready to assist you in fortifying the security of your web services.
|
||||
|
||||
You will find more information by visiting the [BunkerWeb Panel](https://panel.bunkerweb.io?utm_campaign=self&utm_source=github), our dedicated platform for professional services.
|
||||
You will find more information by visiting the [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=github), our dedicated platform for professional services.
|
||||
|
||||
Don't hesitate to [contact us](https://panel.bunkerweb.io/contact.php?utm_campaign=self&utm_source=github) if you have any question, we will be more than happy to respond to your needs.
|
||||
|
||||
>>>>>>> Stashed changes
|
||||
## Ecosystem, community and resources
|
||||
|
||||
Official websites, tools and resources about BunkerWeb :
|
||||
|
||||
- [**Website**](https://www.bunkerweb.io/?utm_campaign=self&utm_source=github) : get more information, news and articles about BunkerWeb
|
||||
- [**Panel**](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=github) : dedicated platform to order and manage professional services (e.g. technical support) around BunkerWeb
|
||||
- [**Documentation**](https://docs.bunkerweb.io/?utm_campaign=self&utm_source=github) : technical documentation of the BunkerWeb solution
|
||||
- [**Demo**](https://demo.bunkerweb.io/?utm_campaign=self&utm_source=github) : demonstration website of BunkerWeb, don't hesitate to attempt attacks to test the robustness of the solution
|
||||
- [**Configurator**](https://config.bunkerweb.io/?utm_campaign=self&utm_source=github) : user-friendly tool to help you configure BunkerWeb
|
||||
- [**Threatmap**](https://threatmap.bunkerweb.io/?utm_campaign=self&utm_source=github) : live cyber attack blocked by BunkerWeb instances all around the world
|
||||
|
||||
Community and social networks :
|
||||
|
||||
- [**Discord**](https://discord.com/invite/fTf46FmtyD)
|
||||
- [**LinkedIn**](https://www.linkedin.com/company/bunkerity/)
|
||||
- [**Twitter**](https://twitter.com/bunkerity)
|
||||
- [**Reddit**](https://www.reddit.com/r/BunkerWeb/)
|
||||
|
||||
# Concepts
|
||||
|
||||
<p align="center">
|
||||
<img alt="Concepts banner" src="https://github.com/bunkerity/bunkerweb/raw/v1.5.3/docs/assets/img/concepts.svg" />
|
||||
<img alt="Concepts banner" src="https://github.com/bunkerity/bunkerweb/raw/v1.5.4/docs/assets/img/concepts.svg" />
|
||||
</p>
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
You will find more information about the key concepts of BunkerWeb in the [documentation](https://docs.bunkerweb.io/1.5.3/concepts).
|
||||
=======
|
||||
You will find more information about the key concepts of BunkerWeb in the [documentation](https://docs.bunkerweb.io/1.5.4/concepts?utm_campaign=self&utm_source=github).
|
||||
>>>>>>> Stashed changes
|
||||
You will find more information about the key concepts of BunkerWeb in the [documentation](https://docs.bunkerweb.io/1.5.4/concepts/?utm_campaign=self&utm_source=github).
|
||||
|
||||
## Integrations
|
||||
|
||||
|
|
@ -148,23 +124,13 @@ The first concept is the integration of BunkerWeb into the target environment. W
|
|||
|
||||
The following integrations are officially supported :
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
- [Docker](https://docs.bunkerweb.io/1.5.3/integrations/#docker)
|
||||
- [Docker autoconf](https://docs.bunkerweb.io/1.5.3/integrations/#docker-autoconf)
|
||||
- [Swarm](https://docs.bunkerweb.io/1.5.3/integrations/#swarm)
|
||||
- [Kubernetes](https://docs.bunkerweb.io/1.5.3/integrations/#kubernetes)
|
||||
- [Linux](https://docs.bunkerweb.io/1.5.3/integrations/#linux)
|
||||
- [Ansible](https://docs.bunkerweb.io/1.5.3/integrations/#ansible)
|
||||
- [Vagrant](https://docs.bunkerweb.io/1.5.3/integrations/#vagrant)
|
||||
=======
|
||||
- [Docker](https://docs.bunkerweb.io/1.5.4/integrations/#docker?utm_campaign=self&utm_source=github)
|
||||
- [Docker autoconf](https://docs.bunkerweb.io/1.5.4/integrations/#docker-autoconf?utm_campaign=self&utm_source=github)
|
||||
- [Swarm](https://docs.bunkerweb.io/1.5.4/integrations/#swarm?utm_campaign=self&utm_source=github)
|
||||
- [Kubernetes](https://docs.bunkerweb.io/1.5.4/integrations/#kubernetes?utm_campaign=self&utm_source=github)
|
||||
- [Linux](https://docs.bunkerweb.io/1.5.4/integrations/#linux?utm_campaign=self&utm_source=github)
|
||||
- [Ansible](https://docs.bunkerweb.io/1.5.4/integrations/#ansible?utm_campaign=self&utm_source=github)
|
||||
- [Vagrant](https://docs.bunkerweb.io/1.5.4/integrations/#vagrant?utm_campaign=self&utm_source=github)
|
||||
>>>>>>> Stashed changes
|
||||
- [Docker](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#docker)
|
||||
- [Docker autoconf](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#docker-autoconf)
|
||||
- [Swarm](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#swarm)
|
||||
- [Kubernetes](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#kubernetes)
|
||||
- [Linux](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#linux)
|
||||
- [Ansible](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#ansible)
|
||||
- [Vagrant](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#vagrant)
|
||||
|
||||
## Settings
|
||||
|
||||
|
|
@ -184,7 +150,7 @@ USE_GZIP=yes
|
|||
USE_BROTLI=no
|
||||
```
|
||||
|
||||
You will find an easy to use settings generator at [config.bunkerweb.io](https://config.bunkerweb.io?utm_campaign=self&utm_source=github).
|
||||
You will find an easy to use settings generator at [config.bunkerweb.io](https://config.bunkerweb.io/?utm_campaign=self&utm_source=github).
|
||||
|
||||
## Multisite mode
|
||||
|
||||
|
|
@ -196,11 +162,7 @@ When multisite mode is enabled, BunkerWeb will serve and protect multiple web ap
|
|||
|
||||
## Custom configurations
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
Because meeting all the use cases only using the settings is not an option (even with [external plugins](https://docs.bunkerweb.io/1.5.3/plugins)), you can use custom configurations to solve your specific challenges.
|
||||
=======
|
||||
Because meeting all the use cases only using the settings is not an option (even with [external plugins](https://docs.bunkerweb.io/1.5.4/plugins?utm_campaign=self&utm_source=github)), you can use custom configurations to solve your specific challenges.
|
||||
>>>>>>> Stashed changes
|
||||
Because meeting all the use cases only using the settings is not an option (even with [external plugins](https://docs.bunkerweb.io/1.5.4/plugins/?utm_campaign=self&utm_source=github)), you can use custom configurations to solve your specific challenges.
|
||||
|
||||
Under the hood, BunkerWeb uses the notorious NGINX web server, that's why you can leverage its configuration system for your specific needs. Custom NGINX configurations can be included in different [contexts](https://docs.nginx.com/nginx/admin-guide/basic-functionality/managing-configuration-files/#contexts) like HTTP or server (all servers and/or specific server block).
|
||||
|
||||
|
|
@ -234,7 +196,7 @@ In other words, the scheduler is the brain of BunkerWeb.
|
|||
## Docker
|
||||
|
||||
<p align="center">
|
||||
<img alt="Docker banner" src="https://github.com/bunkerity/bunkerweb/raw/v1.5.3/docs/assets/img/integration-docker.svg" />
|
||||
<img alt="Docker banner" src="https://github.com/bunkerity/bunkerweb/raw/v1.5.4/docs/assets/img/integration-docker.svg" />
|
||||
</p>
|
||||
|
||||
We provide ready to use prebuilt images for x64, x86, armv7 and arm64 platforms on [Docker Hub](https://hub.docker.com/u/bunkerity).
|
||||
|
|
@ -245,64 +207,46 @@ Docker integration key concepts are :
|
|||
- **Scheduler** container to store configuration and execute jobs
|
||||
- **Networks** to expose ports for clients and connect to upstream web services
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
You will find more information in the [Docker integration section](https://docs.bunkerweb.io/1.5.3/integrations/#docker) of the documentation.
|
||||
=======
|
||||
You will find more information in the [Docker integration section](https://docs.bunkerweb.io/1.5.4/integrations/#docker?utm_campaign=self&utm_source=github) of the documentation.
|
||||
>>>>>>> Stashed changes
|
||||
You will find more information in the [Docker integration section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#docker) of the documentation.
|
||||
|
||||
## Docker autoconf
|
||||
|
||||
<p align="center">
|
||||
<img alt="Docker autoconf banner" src="https://github.com/bunkerity/bunkerweb/raw/v1.5.3/docs/assets/img/integration-autoconf.svg" />
|
||||
<img alt="Docker autoconf banner" src="https://github.com/bunkerity/bunkerweb/raw/v1.5.4/docs/assets/img/integration-autoconf.svg" />
|
||||
</p>
|
||||
|
||||
The downside of using environment variables is that the container needs to be recreated each time there is an update which is not very convenient. To counter that issue, you can use another image called **autoconf** which will listen for Docker events and automatically reconfigure BunkerWeb in real-time without recreating the container.
|
||||
|
||||
Instead of defining environment variables for the BunkerWeb container, you simply add **labels** to your web applications containers and the **autoconf** will "automagically" take care of the rest.
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
You will find more information in the [Docker autoconf section](https://docs.bunkerweb.io/1.5.3/integrations/#docker-autoconf) of the documentation.
|
||||
=======
|
||||
You will find more information in the [Docker autoconf section](https://docs.bunkerweb.io/1.5.4/integrations/#docker-autoconf?utm_campaign=self&utm_source=github) of the documentation.
|
||||
>>>>>>> Stashed changes
|
||||
You will find more information in the [Docker autoconf section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#docker-autoconf) of the documentation.
|
||||
|
||||
## Swarm
|
||||
|
||||
<p align="center">
|
||||
<img alt="Swarm banner" src="https://github.com/bunkerity/bunkerweb/raw/v1.5.3/docs/assets/img/integration-swarm.svg" />
|
||||
<img alt="Swarm banner" src="https://github.com/bunkerity/bunkerweb/raw/v1.5.4/docs/assets/img/integration-swarm.svg" />
|
||||
</p>
|
||||
|
||||
To automatically configure BunkerWeb instances, a special service, called **autoconf** will listen for Docker Swarm events like service creation or deletion and automatically configure the **BunkerWeb instances** in real-time without downtime.
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
Like the [Docker autoconf integration](https://docs.bunkerweb.io/1.5.3/integrations/#docker-autoconf), configuration for web services is defined using labels starting with the special **bunkerweb.** prefix.
|
||||
Like the [Docker autoconf integration](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#docker-autoconf), configuration for web services is defined using labels starting with the special **bunkerweb.** prefix.
|
||||
|
||||
You will find more information in the [Swarm section](https://docs.bunkerweb.io/1.5.3/integrations/#swarm) of the documentation.
|
||||
=======
|
||||
Like the [Docker autoconf integration](https://docs.bunkerweb.io/1.5.4/integrations/#docker-autoconf?utm_campaign=self&utm_source=github), configuration for web services is defined using labels starting with the special **bunkerweb.** prefix.
|
||||
|
||||
You will find more information in the [Swarm section](https://docs.bunkerweb.io/1.5.4/integrations/#swarm?utm_campaign=self&utm_source=github) of the documentation.
|
||||
>>>>>>> Stashed changes
|
||||
You will find more information in the [Swarm section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#swarm) of the documentation.
|
||||
|
||||
## Kubernetes
|
||||
|
||||
<p align="center">
|
||||
<img alt="Kubernetes banner" src="https://github.com/bunkerity/bunkerweb/raw/v1.5.3/docs/assets/img/integration-kubernetes.svg" />
|
||||
<img alt="Kubernetes banner" src="https://github.com/bunkerity/bunkerweb/raw/v1.5.4/docs/assets/img/integration-kubernetes.svg" />
|
||||
</p>
|
||||
|
||||
The autoconf acts as an [Ingress controller](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) and will configure the BunkerWeb instances according to the [Ingress resources](https://kubernetes.io/docs/concepts/services-networking/ingress/). It also monitors other Kubernetes objects like [ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/) for custom configurations.
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
You will find more information in the [Kubernetes section](https://docs.bunkerweb.io/1.5.3/integrations/#kubernetes) of the documentation.
|
||||
=======
|
||||
You will find more information in the [Kubernetes section](https://docs.bunkerweb.io/1.5.4/integrations/#kubernetes?utm_campaign=self&utm_source=github) of the documentation.
|
||||
>>>>>>> Stashed changes
|
||||
You will find more information in the [Kubernetes section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#kubernetes) of the documentation.
|
||||
|
||||
## Linux
|
||||
|
||||
<p align="center">
|
||||
<img alt="Linux banner" src="https://github.com/bunkerity/bunkerweb/raw/v1.5.3/docs/assets/img/integration-linux.svg" />
|
||||
<img alt="Linux banner" src="https://github.com/bunkerity/bunkerweb/raw/v1.5.4/docs/assets/img/integration-linux.svg" />
|
||||
</p>
|
||||
|
||||
List of supported Linux distros :
|
||||
|
|
@ -314,16 +258,12 @@ List of supported Linux distros :
|
|||
|
||||
Repositories of Linux packages for BunkerWeb are available on [PackageCloud](https://packagecloud.io/bunkerity/bunkerweb), they provide a bash script to automatically add and trust the repository (but you can also follow the [manual installation](https://packagecloud.io/bunkerity/bunkerweb/install) instructions if you prefer).
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
You will find more information in the [Linux section](https://docs.bunkerweb.io/1.5.3/integrations/#linux) of the documentation.
|
||||
=======
|
||||
You will find more information in the [Linux section](https://docs.bunkerweb.io/1.5.4/integrations/#linux?utm_campaign=self&utm_source=github) of the documentation.
|
||||
>>>>>>> Stashed changes
|
||||
You will find more information in the [Linux section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#linux) of the documentation.
|
||||
|
||||
## Ansible
|
||||
|
||||
<p align="center">
|
||||
<img alt="Ansible banner" src="https://github.com/bunkerity/bunkerweb/raw/v1.5.3/docs/assets/img/integration-ansible.svg" />
|
||||
<img alt="Ansible banner" src="https://github.com/bunkerity/bunkerweb/raw/v1.5.4/docs/assets/img/integration-ansible.svg" />
|
||||
</p>
|
||||
|
||||
List of supported Linux distros :
|
||||
|
|
@ -337,11 +277,7 @@ List of supported Linux distros :
|
|||
|
||||
A specific BunkerWeb Ansible role is available on [Ansible Galaxy](https://galaxy.ansible.com/bunkerity/bunkerweb) (source code is available [here](https://github.com/bunkerity/bunkerweb-ansible)).
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
You will find more information in the [Ansible section](https://docs.bunkerweb.io/1.5.3/integrations/#ansible) of the documentation.
|
||||
=======
|
||||
You will find more information in the [Ansible section](https://docs.bunkerweb.io/1.5.4/integrations/#ansible?utm_campaign=self&utm_source=github) of the documentation.
|
||||
>>>>>>> Stashed changes
|
||||
You will find more information in the [Ansible section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#ansible) of the documentation.
|
||||
|
||||
## Vagrant
|
||||
|
||||
|
|
@ -350,19 +286,11 @@ We maintain ready to use Vagrant boxes hosted on Vagrant cloud for the following
|
|||
- virtualbox
|
||||
- libvirt
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
You will find more information in the [Vagrant section](https://docs.bunkerweb.io/1.5.3/integrations/#vagrant) of the documentation.
|
||||
You will find more information in the [Vagrant section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#vagrant) of the documentation.
|
||||
|
||||
# Quickstart guide
|
||||
|
||||
Once you have setup BunkerWeb with the integration of your choice, you can follow the [quickstart guide](https://docs.bunkerweb.io/1.5.3/quickstart-guide/) that will cover the following common use cases :
|
||||
=======
|
||||
You will find more information in the [Vagrant section](https://docs.bunkerweb.io/1.5.4/integrations/#vagrant?utm_campaign=self&utm_source=github) of the documentation.
|
||||
|
||||
# Quickstart guide
|
||||
|
||||
Once you have setup BunkerWeb with the integration of your choice, you can follow the [quickstart guide](https://docs.bunkerweb.io/1.5.4/quickstart-guide?utm_campaign=self&utm_source=github) that will cover the following common use cases :
|
||||
>>>>>>> Stashed changes
|
||||
Once you have setup BunkerWeb with the integration of your choice, you can follow the [quickstart guide](https://docs.bunkerweb.io/1.5.4/quickstart-guide/?utm_campaign=self&utm_source=github) that will cover the following common use cases :
|
||||
|
||||
- Protecting a single HTTP application
|
||||
- Protecting multiple HTTP application
|
||||
|
|
@ -373,35 +301,25 @@ Once you have setup BunkerWeb with the integration of your choice, you can follo
|
|||
|
||||
# Security tuning
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
BunkerWeb offers many security features that you can configure with [settings](https://docs.bunkerweb.io/1.5.3/settings). Even if the default values of settings ensure a minimal "security by default", we strongly recommend you to tune them. By doing so you will be able to ensure a security level of your choice but also manage false positives.
|
||||
BunkerWeb offers many security features that you can configure with [settings](https://docs.bunkerweb.io/1.5.4/settings/?utm_campaign=self&utm_source=github). Even if the default values of settings ensure a minimal "security by default", we strongly recommend you to tune them. By doing so you will be able to ensure a security level of your choice but also manage false positives.
|
||||
|
||||
You will find more information in the [security tuning section](https://docs.bunkerweb.io/1.5.3/security-tuning) of the documentation.
|
||||
=======
|
||||
BunkerWeb offers many security features that you can configure with [settings](https://docs.bunkerweb.io/1.5.4/settings?utm_campaign=self&utm_source=github). Even if the default values of settings ensure a minimal "security by default", we strongly recommend you to tune them. By doing so you will be able to ensure a security level of your choice but also manage false positives.
|
||||
|
||||
You will find more information in the [security tuning section](https://docs.bunkerweb.io/1.5.4/security-tuning?utm_campaign=self&utm_source=github) of the documentation.
|
||||
>>>>>>> Stashed changes
|
||||
You will find more information in the [security tuning section](https://docs.bunkerweb.io/1.5.4/security-tuning/?utm_campaign=self&utm_source=github) of the documentation.
|
||||
|
||||
# Settings
|
||||
|
||||
To help you tuning BunkerWeb we have made an easy to use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io?utm_campaign=self&utm_source=github).
|
||||
To help you tuning BunkerWeb we have made an easy to use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io/?utm_campaign=self&utm_source=github).
|
||||
|
||||
As a general rule when multisite mode is enabled, if you want to apply settings with multisite context to a specific server you will need to add the primary (first) server name as a prefix like `www.example.com_USE_ANTIBOT=captcha` or `myapp.example.com_USE_GZIP=yes` for example.
|
||||
|
||||
When settings are considered as "multiple", it means that you can have multiple groups of settings for the same feature by adding numbers as suffix like `REVERSE_PROXY_URL_1=/subdir`, `REVERSE_PROXY_HOST_1=http://myhost1`, `REVERSE_PROXY_URL_2=/anotherdir`, `REVERSE_PROXY_HOST_2=http://myhost2`, ... for example.
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
Check the [settings section](https://docs.bunkerweb.io/1.5.3/settings) of the documentation to get the full list.
|
||||
=======
|
||||
Check the [settings section](https://docs.bunkerweb.io/1.5.4/settings?utm_campaign=self&utm_source=github) of the documentation to get the full list.
|
||||
>>>>>>> Stashed changes
|
||||
Check the [settings section](https://docs.bunkerweb.io/1.5.4/settings/?utm_campaign=self&utm_source=github) of the documentation to get the full list.
|
||||
|
||||
# Web UI
|
||||
|
||||
<p align="center">
|
||||
<a href="https://www.youtube.com/watch?v=Ao20SfvQyr4">
|
||||
<img src="https://github.com/bunkerity/bunkerweb/raw/v1.5.3/docs/assets/img/user_interface_demo.png" height="300" />
|
||||
<img src="https://github.com/bunkerity/bunkerweb/raw/v1.5.4/docs/assets/img/user_interface_demo.png" height="300" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
|
|
@ -415,17 +333,13 @@ The "Web UI" is a web application that helps you manage your BunkerWeb instance
|
|||
- Monitor jobs execution
|
||||
- View the logs and search pattern
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
You will find more information in the [Web UI section](https://docs.bunkerweb.io/1.5.3/web-ui) of the documentation.
|
||||
=======
|
||||
You will find more information in the [Web UI section](https://docs.bunkerweb.io/1.5.4/web-ui?utm_campaign=self&utm_source=github) of the documentation.
|
||||
>>>>>>> Stashed changes
|
||||
You will find more information in the [Web UI section](https://docs.bunkerweb.io/1.5.4/web-ui/?utm_campaign=self&utm_source=github) of the documentation.
|
||||
|
||||
# Plugins
|
||||
|
||||
BunkerWeb comes with a plugin system to make it possible to easily add new features. Once a plugin is installed, you can manage it using additional settings defined by the plugin.
|
||||
|
||||
Here is the list of "official" plugins that we maintain (see the [bunkerweb-plugins](https://github.com/bunkerity/bunkerweb-plugins?utm_campaign=self&utm_source=github) repository for more information) :
|
||||
Here is the list of "official" plugins that we maintain (see the [bunkerweb-plugins](https://github.com/bunkerity/bunkerweb-plugins/?utm_campaign=self&utm_source=github) repository for more information) :
|
||||
|
||||
| Name | Version | Description | Link |
|
||||
| :------------: | :-----: | :------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------: |
|
||||
|
|
@ -437,24 +351,15 @@ Here is the list of "official" plugins that we maintain (see the [bunkerweb-plug
|
|||
| **VirusTotal** | 1.2 | Automatically scans uploaded files with the VirusTotal API and denies the request when a file is detected as malicious. | [bunkerweb-plugins/virustotal](https://github.com/bunkerity/bunkerweb-plugins/tree/main/virustotal) |
|
||||
| **WebHook** | 1.2 | Send security notifications to a custom HTTP endpoint using a Webhook. | [bunkerweb-plugins/slack](https://github.com/bunkerity/bunkerweb-plugins/tree/main/webhook) |
|
||||
|
||||
<<<<<<< Updated upstream
|
||||
You will find more information in the [plugins section](https://docs.bunkerweb.io/1.5.3/plugins) of the documentation.
|
||||
=======
|
||||
You will find more information in the [plugins section](https://docs.bunkerweb.io/1.5.4/plugins?utm_campaign=self&utm_source=github) of the documentation.
|
||||
>>>>>>> Stashed changes
|
||||
You will find more information in the [plugins section](https://docs.bunkerweb.io/1.5.4/plugins/?utm_campaign=self&utm_source=github) of the documentation.
|
||||
|
||||
# Support
|
||||
|
||||
## Professional
|
||||
|
||||
We offer professional services related to BunkerWeb like :
|
||||
Get technical support directly from the BunkerWeb maintainers. You will find more information by visiting the [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=github), our dedicated platform for professional services.
|
||||
|
||||
- Consulting
|
||||
- Support
|
||||
- Custom development
|
||||
- Partnership
|
||||
|
||||
Please contact us at [contact@bunkerity.com](mailto:contact@bunkerity.com) if you are interested.
|
||||
Don't hesitate to [contact us](https://panel.bunkerweb.io/contact.php?utm_campaign=self&utm_source=github) if you have any question, we will be more than happy to respond to your needs.
|
||||
|
||||
## Community
|
||||
|
||||
|
|
@ -469,15 +374,15 @@ Please don't use [GitHub issues](https://github.com/bunkerity/bunkerweb/issues)
|
|||
|
||||
# License
|
||||
|
||||
This project is licensed under the terms of the [GNU Affero General Public License (AGPL) version 3](https://github.com/bunkerity/bunkerweb/raw/v1.5.3/LICENSE.md).
|
||||
This project is licensed under the terms of the [GNU Affero General Public License (AGPL) version 3](https://github.com/bunkerity/bunkerweb/raw/v1.5.4/LICENSE.md).
|
||||
|
||||
# Contribute
|
||||
|
||||
If you would like to contribute to the plugins you can read the [contributing guidelines](https://github.com/bunkerity/bunkerweb/raw/v1.5.3/CONTRIBUTING.md) to get started.
|
||||
If you would like to contribute to the plugins you can read the [contributing guidelines](https://github.com/bunkerity/bunkerweb/raw/v1.5.4/CONTRIBUTING.md) to get started.
|
||||
|
||||
# Security policy
|
||||
|
||||
We take security bugs as serious issues and encourage responsible disclosure, see our [security policy](https://github.com/bunkerity/bunkerweb/raw/v1.5.3/SECURITY.md) for more information.
|
||||
We take security bugs as serious issues and encourage responsible disclosure, see our [security policy](https://github.com/bunkerity/bunkerweb/raw/v1.5.4/SECURITY.md) for more information.
|
||||
|
||||
# Stargazers over time
|
||||
|
||||
|
|
|
|||
|
|
@ -1,78 +0,0 @@
|
|||
version: "3.5"
|
||||
|
||||
services:
|
||||
bunkerweb:
|
||||
image: bunkerity/bunkerweb:1.5.4
|
||||
ports:
|
||||
- 80:8080
|
||||
- 443:8443
|
||||
labels:
|
||||
- "bunkerweb.INSTANCE=yes"
|
||||
environment:
|
||||
- SERVER_NAME=
|
||||
- MULTISITE=yes
|
||||
- API_WHITELIST_IP=127.0.0.0/8 10.20.30.0/24
|
||||
- UI_HOST=http://bw-ui:7000 # Change it if needed
|
||||
networks:
|
||||
- bw-universe
|
||||
- bw-services
|
||||
|
||||
bw-scheduler:
|
||||
image: bunkerity/bunkerweb-scheduler:1.5.4
|
||||
depends_on:
|
||||
- bunkerweb
|
||||
- bw-docker
|
||||
environment:
|
||||
- DATABASE_URI=mariadb+pymysql://bunkerweb:changeme@bw-db:3306/db # Remember to set a stronger password for the database
|
||||
- DOCKER_HOST=tcp://bw-docker:2375
|
||||
networks:
|
||||
- bw-universe
|
||||
- bw-docker
|
||||
|
||||
bw-docker:
|
||||
image: tecnativa/docker-socket-proxy:nightly
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
environment:
|
||||
- CONTAINERS=1
|
||||
- LOG_LEVEL=warning
|
||||
networks:
|
||||
- bw-docker
|
||||
|
||||
bw-ui:
|
||||
image: bunkerity/bunkerweb-ui:1.5.4
|
||||
depends_on:
|
||||
- bw-docker
|
||||
environment:
|
||||
- DATABASE_URI=mariadb+pymysql://bunkerweb:changeme@bw-db:3306/db # Remember to set a stronger password for the database
|
||||
- DOCKER_HOST=tcp://bw-docker:2375
|
||||
networks:
|
||||
- bw-universe
|
||||
- bw-docker
|
||||
|
||||
bw-db:
|
||||
image: mariadb:10.10
|
||||
environment:
|
||||
- MYSQL_RANDOM_ROOT_PASSWORD=yes
|
||||
- MYSQL_DATABASE=db
|
||||
- MYSQL_USER=bunkerweb
|
||||
- MYSQL_PASSWORD=changeme # Remember to set a stronger password for the database
|
||||
volumes:
|
||||
- bw-data:/var/lib/mysql
|
||||
networks:
|
||||
- bw-docker
|
||||
|
||||
volumes:
|
||||
bw-data:
|
||||
|
||||
networks:
|
||||
bw-universe:
|
||||
name: bw-universe
|
||||
ipam:
|
||||
driver: default
|
||||
config:
|
||||
- subnet: 10.20.30.0/24
|
||||
bw-services:
|
||||
name: bw-services
|
||||
bw-docker:
|
||||
name: bw-docker
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## Who maintains BunkerWeb ?
|
||||
|
||||
BunkerWeb is maintained by [Bunkerity](https://www.bunkerity.com?utm_campaign=self&utm_source=doc), a French 🇫🇷 company specialized in Cybersecurity 🛡️.
|
||||
BunkerWeb is maintained by [Bunkerity](https://www.bunkerity.com/?utm_campaign=self&utm_source=doc), a French 🇫🇷 company specialized in Cybersecurity 🛡️.
|
||||
|
||||
## Do you offer professional services ?
|
||||
|
||||
|
|
@ -13,7 +13,9 @@ Yes, we offer professional services related to BunkerWeb such as :
|
|||
- Custom development
|
||||
- Partnership
|
||||
|
||||
Please contact us at [contact@bunkerity.com](mailto:contact@bunkerity.com) if you are interested.
|
||||
**We have a [dedicated panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=doc) to centralise all professional requests.**
|
||||
|
||||
You can also contact use at [contact@bunkerity.com](mailto:contact@bunkerity.com) if you are interested.
|
||||
|
||||
## Where to get community support ?
|
||||
|
||||
|
|
|
|||
BIN
docs/assets/img/configwebsite.png
Normal file
|
After Width: | Height: | Size: 177 KiB |
BIN
docs/assets/img/demowebsite.png
Normal file
|
After Width: | Height: | Size: 274 KiB |
BIN
docs/assets/img/panelbunkerweb.png
Normal file
|
After Width: | Height: | Size: 120 KiB |
BIN
docs/assets/img/threatmapwebsite.png
Normal file
|
After Width: | Height: | Size: 240 KiB |
|
Before Width: | Height: | Size: 4 KiB After Width: | Height: | Size: 4.5 KiB |
|
|
@ -48,7 +48,7 @@ USE_BROTLI=no
|
|||
|
||||
!!! info "Settings generator tool"
|
||||
|
||||
To help you tune BunkerWeb, we offer an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io?utm_campaign=self&utm_source=doc).
|
||||
To help you tune BunkerWeb, we offer an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io/?utm_campaign=self&utm_source=doc).
|
||||
|
||||
## Multisite mode
|
||||
|
||||
|
|
|
|||
|
|
@ -54,10 +54,10 @@ To delve deeper into the core security features, we invite you to explore the [s
|
|||
## Demo
|
||||
|
||||
<p align="center">
|
||||
<iframe style="display: block;" width="560" height="315" src="https://www.youtube-nocookie.com/embed/ZhYV-QELzA4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
|
||||
<iframe style="display: block;" width="560" height="315" src="https://www.youtube-nocookie.com/embed/ZhYV-QELzA4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
|
||||
</p>
|
||||
|
||||
A demo website protected with BunkerWeb is available at [demo.bunkerweb.io](https://demo.bunkerweb.io?utm_campaign=self&utm_source=doc). Feel free to visit it and perform some security tests.
|
||||
A demo website protected with BunkerWeb is available at [demo.bunkerweb.io](https://demo.bunkerweb.io/?utm_campaign=self&utm_source=doc). Feel free to visit it and perform some security tests.
|
||||
|
||||
## Professional services
|
||||
|
||||
|
|
@ -66,3 +66,21 @@ Get the most of BunkerWeb by getting professional services directly from the mai
|
|||
You will find more information by visiting the [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=doc), our dedicated platform for professional services.
|
||||
|
||||
Don't hesitate to [contact us](https://panel.bunkerweb.io/contact.php?utm_campaign=self&utm_source=doc) if you have any question, we will be more than happy to respond to your needs.
|
||||
|
||||
## Ecosystem, community and resources
|
||||
|
||||
Official websites, tools and resources about BunkerWeb :
|
||||
|
||||
- [**Website**](https://www.bunkerweb.io/?utm_campaign=self&utm_source=doc) : get more information, news and articles about BunkerWeb
|
||||
- [**Panel**](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=doc) : dedicated platform to order and manage professional services (e.g. technical support) around BunkerWeb
|
||||
- [**Documentation**](https://docs.bunkerweb.io) : technical documentation of the BunkerWeb solution
|
||||
- [**Demo**](https://demo.bunkerweb.io/?utm_campaign=self&utm_source=doc) : demonstration website of BunkerWeb, don't hesitate to attempt attacks to test the robustness of the solution
|
||||
- [**Configurator**](https://config.bunkerweb.io/?utm_campaign=self&utm_source=doc) : user-friendly tool to help you configure BunkerWeb
|
||||
- [**Threatmap**](https://threatmap.bunkerweb.io/?utm_campaign=self&utm_source=doc) : live cyber attack blocked by BunkerWeb instances all around the world
|
||||
|
||||
Community and social networks :
|
||||
|
||||
- [**Discord**](https://discord.com/invite/fTf46FmtyD)
|
||||
- [**LinkedIn**](https://www.linkedin.com/company/bunkerity/)
|
||||
- [**Twitter**](https://twitter.com/bunkerity)
|
||||
- [**Reddit**](https://www.reddit.com/r/BunkerWeb/)
|
||||
|
|
@ -654,7 +654,7 @@ metadata:
|
|||
name: cr-bunkerweb
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["services", "pods", "configmaps"]
|
||||
resources: ["services", "pods", "configmaps", "secrets"]
|
||||
verbs: ["get", "watch", "list"]
|
||||
- apiGroups: ["networking.k8s.io"]
|
||||
resources: ["ingresses"]
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ doc = StringIO()
|
|||
|
||||
print("# Settings\n", file=doc)
|
||||
print(
|
||||
'!!! info "Settings generator tool"\n\n To help you tune BunkerWeb, we have made an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io?utm_campaign=self&utm_source=doc).\n',
|
||||
'!!! info "Settings generator tool"\n\n To help you tune BunkerWeb, we have made an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io/?utm_campaign=self&utm_source=doc).\n',
|
||||
file=doc,
|
||||
)
|
||||
print(
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ But dedicating time to a specific technology may not be easy depending on your b
|
|||
|
||||
Getting professional services in addition to the open-source solution is the ideal solution to cover your business needs. You can focus on your top priorities and rely on a trusted partner when it comes to web security.
|
||||
|
||||
Please note that professionnal services are directly offered by [Bunkerity](https://www.bunkerity.com?utm_campaign=self&utm_source=doc), the company maintaining the BunkerWeb project, through our [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=doc) online platform.
|
||||
Please note that professionnal services are directly offered by [Bunkerity](https://www.bunkerity.com/?utm_campaign=self&utm_source=doc), the company maintaining the BunkerWeb project, through our [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=doc) online platform.
|
||||
|
||||
## Which professional services do you offer ?
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
mike==2.0.0
|
||||
mkdocs==1.5.3
|
||||
mkdocs-material==9.4.14
|
||||
mkdocs-material[imaging]==9.5.2
|
||||
mkdocs-print-site-plugin==2.3.6
|
||||
pytablewriter==1.2.0
|
||||
|
|
|
|||
|
|
@ -4,14 +4,76 @@
|
|||
#
|
||||
# pip-compile --allow-unsafe --generate-hashes --strip-extras requirements.in
|
||||
#
|
||||
babel==2.13.1 \
|
||||
--hash=sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900 \
|
||||
--hash=sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed
|
||||
babel==2.14.0 \
|
||||
--hash=sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363 \
|
||||
--hash=sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287
|
||||
# via mkdocs-material
|
||||
cairocffi==1.6.1 \
|
||||
--hash=sha256:78e6bbe47357640c453d0be929fa49cd05cce2e1286f3d2a1ca9cbda7efdb8b7 \
|
||||
--hash=sha256:aa78ee52b9069d7475eeac457389b6275aa92111895d78fbaa2202a52dac112e
|
||||
# via cairosvg
|
||||
cairosvg==2.7.1 \
|
||||
--hash=sha256:432531d72347291b9a9ebfb6777026b607563fd8719c46ee742db0aef7271ba0 \
|
||||
--hash=sha256:8a5222d4e6c3f86f1f7046b63246877a63b49923a1cd202184c3a634ef546b3b
|
||||
# via mkdocs-material
|
||||
certifi==2023.11.17 \
|
||||
--hash=sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1 \
|
||||
--hash=sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474
|
||||
# via requests
|
||||
cffi==1.16.0 \
|
||||
--hash=sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc \
|
||||
--hash=sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a \
|
||||
--hash=sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417 \
|
||||
--hash=sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab \
|
||||
--hash=sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520 \
|
||||
--hash=sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36 \
|
||||
--hash=sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743 \
|
||||
--hash=sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8 \
|
||||
--hash=sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed \
|
||||
--hash=sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684 \
|
||||
--hash=sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56 \
|
||||
--hash=sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324 \
|
||||
--hash=sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d \
|
||||
--hash=sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235 \
|
||||
--hash=sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e \
|
||||
--hash=sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088 \
|
||||
--hash=sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000 \
|
||||
--hash=sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7 \
|
||||
--hash=sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e \
|
||||
--hash=sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673 \
|
||||
--hash=sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c \
|
||||
--hash=sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe \
|
||||
--hash=sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2 \
|
||||
--hash=sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098 \
|
||||
--hash=sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8 \
|
||||
--hash=sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a \
|
||||
--hash=sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0 \
|
||||
--hash=sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b \
|
||||
--hash=sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896 \
|
||||
--hash=sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e \
|
||||
--hash=sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9 \
|
||||
--hash=sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2 \
|
||||
--hash=sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b \
|
||||
--hash=sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6 \
|
||||
--hash=sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404 \
|
||||
--hash=sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f \
|
||||
--hash=sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0 \
|
||||
--hash=sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4 \
|
||||
--hash=sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc \
|
||||
--hash=sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936 \
|
||||
--hash=sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba \
|
||||
--hash=sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872 \
|
||||
--hash=sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb \
|
||||
--hash=sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614 \
|
||||
--hash=sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1 \
|
||||
--hash=sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d \
|
||||
--hash=sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969 \
|
||||
--hash=sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b \
|
||||
--hash=sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4 \
|
||||
--hash=sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627 \
|
||||
--hash=sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956 \
|
||||
--hash=sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357
|
||||
# via cairocffi
|
||||
chardet==5.2.0 \
|
||||
--hash=sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7 \
|
||||
--hash=sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970
|
||||
|
|
@ -116,12 +178,20 @@ colorama==0.4.6 \
|
|||
--hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
|
||||
--hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
|
||||
# via mkdocs-material
|
||||
cssselect2==0.7.0 \
|
||||
--hash=sha256:1ccd984dab89fc68955043aca4e1b03e0cf29cad9880f6e28e3ba7a74b14aa5a \
|
||||
--hash=sha256:fd23a65bfd444595913f02fc71f6b286c29261e354c41d722ca7a261a49b5969
|
||||
# via cairosvg
|
||||
dataproperty==1.0.1 \
|
||||
--hash=sha256:0b8b07d4fb6453fcf975b53d35dea41f3cfd69c9d79b5010c3cf224ff0407a7a \
|
||||
--hash=sha256:723e5729fa6e885e127a771a983ee1e0e34bb141aca4ffe1f0bfa7cde34650a4
|
||||
# via
|
||||
# pytablewriter
|
||||
# tabledata
|
||||
defusedxml==0.7.1 \
|
||||
--hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \
|
||||
--hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61
|
||||
# via cairosvg
|
||||
ghp-import==2.1.0 \
|
||||
--hash=sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619 \
|
||||
--hash=sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343
|
||||
|
|
@ -241,9 +311,9 @@ mkdocs==1.5.3 \
|
|||
# -r requirements.in
|
||||
# mike
|
||||
# mkdocs-material
|
||||
mkdocs-material==9.4.14 \
|
||||
--hash=sha256:a511d3ff48fa8718b033e7e37d17abd9cc1de0fdf0244a625ca2ae2387e2416d \
|
||||
--hash=sha256:dbc78a4fea97b74319a6aa9a2f0be575a6028be6958f813ba367188f7b8428f6
|
||||
mkdocs-material==9.5.2 \
|
||||
--hash=sha256:6ed0fbf4682491766f0ec1acc955db6901c2fd424c7ab343964ef51b819741f5 \
|
||||
--hash=sha256:ca8b9cd2b3be53e858e5a1a45ac9668bd78d95d77a30288bb5ebc1a31db6184c
|
||||
# via
|
||||
# -r requirements.in
|
||||
# mkdocs-print-site-plugin
|
||||
|
|
@ -264,18 +334,92 @@ packaging==23.2 \
|
|||
paginate==0.5.6 \
|
||||
--hash=sha256:5e6007b6a9398177a7e1648d04fdd9f8c9766a1a945bceac82f1929e8c78af2d
|
||||
# via mkdocs-material
|
||||
pathspec==0.11.2 \
|
||||
--hash=sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20 \
|
||||
--hash=sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3
|
||||
pathspec==0.12.1 \
|
||||
--hash=sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 \
|
||||
--hash=sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712
|
||||
# via mkdocs
|
||||
pathvalidate==3.2.0 \
|
||||
--hash=sha256:5e8378cf6712bff67fbe7a8307d99fa8c1a0cb28aa477056f8fc374f0dff24ad \
|
||||
--hash=sha256:cc593caa6299b22b37f228148257997e2fa850eea2daf7e4cc9205cef6908dee
|
||||
# via pytablewriter
|
||||
pillow==9.5.0 \
|
||||
--hash=sha256:07999f5834bdc404c442146942a2ecadd1cb6292f5229f4ed3b31e0a108746b1 \
|
||||
--hash=sha256:0852ddb76d85f127c135b6dd1f0bb88dbb9ee990d2cd9aa9e28526c93e794fba \
|
||||
--hash=sha256:1781a624c229cb35a2ac31cc4a77e28cafc8900733a864870c49bfeedacd106a \
|
||||
--hash=sha256:1e7723bd90ef94eda669a3c2c19d549874dd5badaeefabefd26053304abe5799 \
|
||||
--hash=sha256:229e2c79c00e85989a34b5981a2b67aa079fd08c903f0aaead522a1d68d79e51 \
|
||||
--hash=sha256:22baf0c3cf0c7f26e82d6e1adf118027afb325e703922c8dfc1d5d0156bb2eeb \
|
||||
--hash=sha256:252a03f1bdddce077eff2354c3861bf437c892fb1832f75ce813ee94347aa9b5 \
|
||||
--hash=sha256:2dfaaf10b6172697b9bceb9a3bd7b951819d1ca339a5ef294d1f1ac6d7f63270 \
|
||||
--hash=sha256:322724c0032af6692456cd6ed554bb85f8149214d97398bb80613b04e33769f6 \
|
||||
--hash=sha256:35f6e77122a0c0762268216315bf239cf52b88865bba522999dc38f1c52b9b47 \
|
||||
--hash=sha256:375f6e5ee9620a271acb6820b3d1e94ffa8e741c0601db4c0c4d3cb0a9c224bf \
|
||||
--hash=sha256:3ded42b9ad70e5f1754fb7c2e2d6465a9c842e41d178f262e08b8c85ed8a1d8e \
|
||||
--hash=sha256:432b975c009cf649420615388561c0ce7cc31ce9b2e374db659ee4f7d57a1f8b \
|
||||
--hash=sha256:482877592e927fd263028c105b36272398e3e1be3269efda09f6ba21fd83ec66 \
|
||||
--hash=sha256:489f8389261e5ed43ac8ff7b453162af39c3e8abd730af8363587ba64bb2e865 \
|
||||
--hash=sha256:54f7102ad31a3de5666827526e248c3530b3a33539dbda27c6843d19d72644ec \
|
||||
--hash=sha256:560737e70cb9c6255d6dcba3de6578a9e2ec4b573659943a5e7e4af13f298f5c \
|
||||
--hash=sha256:5671583eab84af046a397d6d0ba25343c00cd50bce03787948e0fff01d4fd9b1 \
|
||||
--hash=sha256:5ba1b81ee69573fe7124881762bb4cd2e4b6ed9dd28c9c60a632902fe8db8b38 \
|
||||
--hash=sha256:5d4ebf8e1db4441a55c509c4baa7a0587a0210f7cd25fcfe74dbbce7a4bd1906 \
|
||||
--hash=sha256:60037a8db8750e474af7ffc9faa9b5859e6c6d0a50e55c45576bf28be7419705 \
|
||||
--hash=sha256:608488bdcbdb4ba7837461442b90ea6f3079397ddc968c31265c1e056964f1ef \
|
||||
--hash=sha256:6608ff3bf781eee0cd14d0901a2b9cc3d3834516532e3bd673a0a204dc8615fc \
|
||||
--hash=sha256:662da1f3f89a302cc22faa9f14a262c2e3951f9dbc9617609a47521c69dd9f8f \
|
||||
--hash=sha256:7002d0797a3e4193c7cdee3198d7c14f92c0836d6b4a3f3046a64bd1ce8df2bf \
|
||||
--hash=sha256:763782b2e03e45e2c77d7779875f4432e25121ef002a41829d8868700d119392 \
|
||||
--hash=sha256:77165c4a5e7d5a284f10a6efaa39a0ae8ba839da344f20b111d62cc932fa4e5d \
|
||||
--hash=sha256:7c9af5a3b406a50e313467e3565fc99929717f780164fe6fbb7704edba0cebbe \
|
||||
--hash=sha256:7ec6f6ce99dab90b52da21cf0dc519e21095e332ff3b399a357c187b1a5eee32 \
|
||||
--hash=sha256:833b86a98e0ede388fa29363159c9b1a294b0905b5128baf01db683672f230f5 \
|
||||
--hash=sha256:84a6f19ce086c1bf894644b43cd129702f781ba5751ca8572f08aa40ef0ab7b7 \
|
||||
--hash=sha256:8507eda3cd0608a1f94f58c64817e83ec12fa93a9436938b191b80d9e4c0fc44 \
|
||||
--hash=sha256:85ec677246533e27770b0de5cf0f9d6e4ec0c212a1f89dfc941b64b21226009d \
|
||||
--hash=sha256:8aca1152d93dcc27dc55395604dcfc55bed5f25ef4c98716a928bacba90d33a3 \
|
||||
--hash=sha256:8d935f924bbab8f0a9a28404422da8af4904e36d5c33fc6f677e4c4485515625 \
|
||||
--hash=sha256:8f36397bf3f7d7c6a3abdea815ecf6fd14e7fcd4418ab24bae01008d8d8ca15e \
|
||||
--hash=sha256:91ec6fe47b5eb5a9968c79ad9ed78c342b1f97a091677ba0e012701add857829 \
|
||||
--hash=sha256:965e4a05ef364e7b973dd17fc765f42233415974d773e82144c9bbaaaea5d089 \
|
||||
--hash=sha256:96e88745a55b88a7c64fa49bceff363a1a27d9a64e04019c2281049444a571e3 \
|
||||
--hash=sha256:99eb6cafb6ba90e436684e08dad8be1637efb71c4f2180ee6b8f940739406e78 \
|
||||
--hash=sha256:9adf58f5d64e474bed00d69bcd86ec4bcaa4123bfa70a65ce72e424bfb88ed96 \
|
||||
--hash=sha256:9b1af95c3a967bf1da94f253e56b6286b50af23392a886720f563c547e48e964 \
|
||||
--hash=sha256:a0aa9417994d91301056f3d0038af1199eb7adc86e646a36b9e050b06f526597 \
|
||||
--hash=sha256:a0f9bb6c80e6efcde93ffc51256d5cfb2155ff8f78292f074f60f9e70b942d99 \
|
||||
--hash=sha256:a127ae76092974abfbfa38ca2d12cbeddcdeac0fb71f9627cc1135bedaf9d51a \
|
||||
--hash=sha256:aaf305d6d40bd9632198c766fb64f0c1a83ca5b667f16c1e79e1661ab5060140 \
|
||||
--hash=sha256:aca1c196f407ec7cf04dcbb15d19a43c507a81f7ffc45b690899d6a76ac9fda7 \
|
||||
--hash=sha256:ace6ca218308447b9077c14ea4ef381ba0b67ee78d64046b3f19cf4e1139ad16 \
|
||||
--hash=sha256:b416f03d37d27290cb93597335a2f85ed446731200705b22bb927405320de903 \
|
||||
--hash=sha256:bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1 \
|
||||
--hash=sha256:c1170d6b195555644f0616fd6ed929dfcf6333b8675fcca044ae5ab110ded296 \
|
||||
--hash=sha256:c380b27d041209b849ed246b111b7c166ba36d7933ec6e41175fd15ab9eb1572 \
|
||||
--hash=sha256:c446d2245ba29820d405315083d55299a796695d747efceb5717a8b450324115 \
|
||||
--hash=sha256:c830a02caeb789633863b466b9de10c015bded434deb3ec87c768e53752ad22a \
|
||||
--hash=sha256:cb841572862f629b99725ebaec3287fc6d275be9b14443ea746c1dd325053cbd \
|
||||
--hash=sha256:cfa4561277f677ecf651e2b22dc43e8f5368b74a25a8f7d1d4a3a243e573f2d4 \
|
||||
--hash=sha256:cfcc2c53c06f2ccb8976fb5c71d448bdd0a07d26d8e07e321c103416444c7ad1 \
|
||||
--hash=sha256:d3c6b54e304c60c4181da1c9dadf83e4a54fd266a99c70ba646a9baa626819eb \
|
||||
--hash=sha256:d3d403753c9d5adc04d4694d35cf0391f0f3d57c8e0030aac09d7678fa8030aa \
|
||||
--hash=sha256:d9c206c29b46cfd343ea7cdfe1232443072bbb270d6a46f59c259460db76779a \
|
||||
--hash=sha256:e49eb4e95ff6fd7c0c402508894b1ef0e01b99a44320ba7d8ecbabefddcc5569 \
|
||||
--hash=sha256:f8286396b351785801a976b1e85ea88e937712ee2c3ac653710a4a57a8da5d9c \
|
||||
--hash=sha256:f8fc330c3370a81bbf3f88557097d1ea26cd8b019d6433aa59f71195f5ddebbf \
|
||||
--hash=sha256:fbd359831c1657d69bb81f0db962905ee05e5e9451913b18b831febfe0519082 \
|
||||
--hash=sha256:fe7e1c262d3392afcf5071df9afa574544f28eac825284596ac6db56e6d11062 \
|
||||
--hash=sha256:fed1e1cf6a42577953abbe8e6cf2fe2f566daebde7c34724ec8803c4c0cda579
|
||||
# via
|
||||
# cairosvg
|
||||
# mkdocs-material
|
||||
platformdirs==4.1.0 \
|
||||
--hash=sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380 \
|
||||
--hash=sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420
|
||||
# via mkdocs
|
||||
pycparser==2.21 \
|
||||
--hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \
|
||||
--hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206
|
||||
# via cffi
|
||||
pygments==2.17.2 \
|
||||
--hash=sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c \
|
||||
--hash=sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367
|
||||
|
|
@ -455,14 +599,6 @@ regex==2023.10.3 \
|
|||
requests==2.31.0 \
|
||||
--hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \
|
||||
--hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1
|
||||
# via
|
||||
# importlib-metadata
|
||||
# importlib-resources
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
setuptools==69.0.2 \
|
||||
--hash=sha256:1e8fdff6797d3865f37397be788a4e3cba233608e9b509382a2777d25ebde7f2 \
|
||||
--hash=sha256:735896e78a4742605974de002ac60562d286fa8051a7e2299445e8e8fbb01aa6
|
||||
# via mkdocs-material
|
||||
six==1.16.0 \
|
||||
--hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \
|
||||
|
|
@ -476,6 +612,12 @@ tcolorpy==0.1.4 \
|
|||
--hash=sha256:d0926480aa5012f34877d69fc3b670f207dc165674e68ad07458fa6ee5b12724 \
|
||||
--hash=sha256:f0dceb1cb95e554cee63024b3cd2fd8d4628c568773de2d1e6b4f0478461901c
|
||||
# via pytablewriter
|
||||
tinycss2==1.2.1 \
|
||||
--hash=sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847 \
|
||||
--hash=sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627
|
||||
# via
|
||||
# cairosvg
|
||||
# cssselect2
|
||||
typepy==1.3.2 \
|
||||
--hash=sha256:b69fd48b9f50cdb3809906eef36b855b3134ff66c8893a4f8580abddb0b39517 \
|
||||
--hash=sha256:d5d1022a424132622993800f1d2cd16cfdb691ac4e3b9c325f0fcb37799db1ae
|
||||
|
|
@ -483,7 +625,6 @@ typepy==1.3.2 \
|
|||
# dataproperty
|
||||
# pytablewriter
|
||||
# tabledata
|
||||
# typepy
|
||||
urllib3==2.1.0 \
|
||||
--hash=sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3 \
|
||||
--hash=sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54
|
||||
|
|
@ -521,7 +662,21 @@ watchdog==3.0.0 \
|
|||
--hash=sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44 \
|
||||
--hash=sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33
|
||||
# via mkdocs
|
||||
webencodings==0.5.1 \
|
||||
--hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \
|
||||
--hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923
|
||||
# via
|
||||
# cssselect2
|
||||
# tinycss2
|
||||
zipp==3.17.0 \
|
||||
--hash=sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 \
|
||||
--hash=sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0
|
||||
# via
|
||||
# importlib-metadata
|
||||
# importlib-resources
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
setuptools==69.0.2 \
|
||||
--hash=sha256:1e8fdff6797d3865f37397be788a4e3cba233608e9b509382a2777d25ebde7f2 \
|
||||
--hash=sha256:735896e78a4742605974de002ac60562d286fa8051a7e2299445e8e8fbb01aa6
|
||||
# via pytablewriter
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
!!! info "Settings generator tool"
|
||||
|
||||
To help you tune BunkerWeb, we have made an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io?utm_campaign=self&utm_source=doc).
|
||||
To help you tune BunkerWeb, we have made an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io/?utm_campaign=self&utm_source=doc).
|
||||
|
||||
This section contains the full list of settings supported by BunkerWeb. If you are not yet familiar with BunkerWeb, you should first read the [concepts](concepts.md) section of the documentation. Please follow the instructions for your own [integration](integrations.md) on how to apply the settings.
|
||||
|
||||
|
|
@ -363,6 +363,7 @@ Miscellaneous settings.
|
|||
|`OPEN_FILE_CACHE_VALID` |`30s` |multisite|no |Open file cache valid time |
|
||||
|`EXTERNAL_PLUGIN_URLS` | |global |no |List of external plugins URLs (direct download to .zip or .tar file) to download and install (URLs are separated with space).|
|
||||
|`DENY_HTTP_STATUS` |`403` |global |no |HTTP status code to send when the request is denied (403 or 444). When using 444, BunkerWeb will close the connection. |
|
||||
|`SEND_ANONYMOUS_REPORT` |`yes` |global |no |Send anonymous report to BunkerWeb maintainers. |
|
||||
|
||||
### ModSecurity
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
# Troubleshooting
|
||||
|
||||
!!! info "BunkerWeb Panel"
|
||||
If you are unable to resolve your problems, you can [contact us directly via our panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=doc). This centralises all requests relating to the BunkerWeb solution.
|
||||
|
||||
## Logs
|
||||
|
||||
When troubleshooting, logs are your best friends. We try our best to provide user-friendly logs to help you understand what's happening.
|
||||
|
|
|
|||
30
examples/kubernetes-tls/app1app2.crt
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIFOTCCAyGgAwIBAgIUDBbkHicmx8nqUQNnkDvx32hqmiswDQYJKoZIhvcNAQEL
|
||||
BQAwLDEqMCgGA1UEAwwhYXBwMS5leGFtcGxlLmNvbSxhcHAyLmV4YW1wbGUuY29t
|
||||
MB4XDTIzMTIxNzExMjg0NFoXDTMzMTIxNDExMjg0NFowLDEqMCgGA1UEAwwhYXBw
|
||||
MS5leGFtcGxlLmNvbSxhcHAyLmV4YW1wbGUuY29tMIICIjANBgkqhkiG9w0BAQEF
|
||||
AAOCAg8AMIICCgKCAgEA0PE86OpiyWSgQlm30SF737CM7+NIsUn0jo7RZUoB/rmM
|
||||
jryWruQ/IZOH7TjKyPBemX+90q56ExIPthuGK6QTZBGpwNdGLRG7ghvKeJSWTkZv
|
||||
8lYWx/ROSQZ5xRbJFMDyZAwjbhJhLlV2vV19vbC5NkgbBowSpMzwd9Ymy7ULazIQ
|
||||
cQ7frZu4BNhLQ3aTuNktxT11tuvI4zOK6Ma0aoBWEMgyI/lYq/U61zLc0MOWVta1
|
||||
9Llo5AO90MN5+5pM0xZPgvVNsrwCyWga+cl/oykkimmzxRMA67t01ew8MheK6fFC
|
||||
5sLqQPqSmelgkB/Ff3eaoxYhGgWYVx6jOg89zuW65wVbOVokq0pmlLWe48Ea6oTe
|
||||
AC/+Xq2TWnzm/3RI10YSFTdzcslqO8H2e4Pa3oyj2kNk7JE8GHewCA9WL+SIP18t
|
||||
GtbTAXonSHaseWu1Stelm43V/N2AViILv7aBNFHJ8iGWsOqSjJCVqymtOsmosZYZ
|
||||
zosLSItNrTGtRTqj5v5gsynQrnEj2hM9nFVOsVSTHltMOj39nfrkcG70Vsn1Z7dB
|
||||
mhm1hIDi0fZSPiLw1o/PsKdNOcfnmPX4ol4vW48HilBDINVaQAJMU016JgSOeBls
|
||||
tGdCZWFceOdEwVy+12ATPolSaY8Ro6NtHW5r6ONcIkZi9Nccxjl5ETz9WalfyIEC
|
||||
AwEAAaNTMFEwHQYDVR0OBBYEFHiUEzaEK6Iv6zQMopthSOfZpK5JMB8GA1UdIwQY
|
||||
MBaAFHiUEzaEK6Iv6zQMopthSOfZpK5JMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
|
||||
hvcNAQELBQADggIBAAtXURD4HT3kMSscVByqUM4inJc3p8dGEAxAQRNBxN3VOkwA
|
||||
melyRQ3SeBUJKnElGTtgMIW7JmEPdZdAcQiUZ2UEI7AKhMWACGg6LBGRNXATp1sA
|
||||
GAzPgVqNVs+x2Iyif5kE9xWss+VE3PH17LMJMhqlpKcjkrrFwtmtRC2a1fGnDLtK
|
||||
UoewUIjC/9qEKySQs3eyCCbjnJWDpvJaUrBpIUvjFHHus/UOYmCu7UBxSa31kku/
|
||||
cVpJVi0fODyA5VH606AS4fR9XQBDF80FYH7dr+jkXcMmh9FAl5AsvPeP7nhcX/nM
|
||||
fwlEHT6/TOX0xw8c5P+sKmJASBt/Lvc+pFWxNRLlF9SWcskXT3wf5hoz8qRS89ip
|
||||
567cPDquOHmG4qg2c0f8I2mNomxVl4TW4fjSqtvsoIQDDTzyXBBG1pMMhQMNcjGI
|
||||
twpusIdIQHTkR6heBfmSjGSkh6c4bXw44QWl1kq0+uouKF2aFajAUmRq3MC+r6iP
|
||||
yg1zBpPkNMICfCyekhY1N3THfU9bhEBtvbIqobuTGp2OyekBShOkpXfeLp1hDIPh
|
||||
10RQU3lzE4/fipja+t/IiBxAJ20MSsHOFvPRpX2Q6/7584eguA5hAsflQw1PIXj5
|
||||
wOi4cm6tx3xVWzhuRHa6oUBtSS/IjRX55lcWFE8xYXqulpHM2rP/KAsCKu3N
|
||||
-----END CERTIFICATE-----
|
||||
52
examples/kubernetes-tls/app1app2.key
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
-----BEGIN PRIVATE KEY-----
|
||||
MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDQ8Tzo6mLJZKBC
|
||||
WbfRIXvfsIzv40ixSfSOjtFlSgH+uYyOvJau5D8hk4ftOMrI8F6Zf73SrnoTEg+2
|
||||
G4YrpBNkEanA10YtEbuCG8p4lJZORm/yVhbH9E5JBnnFFskUwPJkDCNuEmEuVXa9
|
||||
XX29sLk2SBsGjBKkzPB31ibLtQtrMhBxDt+tm7gE2EtDdpO42S3FPXW268jjM4ro
|
||||
xrRqgFYQyDIj+Vir9TrXMtzQw5ZW1rX0uWjkA73Qw3n7mkzTFk+C9U2yvALJaBr5
|
||||
yX+jKSSKabPFEwDru3TV7DwyF4rp8ULmwupA+pKZ6WCQH8V/d5qjFiEaBZhXHqM6
|
||||
Dz3O5brnBVs5WiSrSmaUtZ7jwRrqhN4AL/5erZNafOb/dEjXRhIVN3NyyWo7wfZ7
|
||||
g9rejKPaQ2TskTwYd7AID1Yv5Ig/Xy0a1tMBeidIdqx5a7VK16WbjdX83YBWIgu/
|
||||
toE0UcnyIZaw6pKMkJWrKa06yaixlhnOiwtIi02tMa1FOqPm/mCzKdCucSPaEz2c
|
||||
VU6xVJMeW0w6Pf2d+uRwbvRWyfVnt0GaGbWEgOLR9lI+IvDWj8+wp005x+eY9fii
|
||||
Xi9bjweKUEMg1VpAAkxTTXomBI54GWy0Z0JlYVx450TBXL7XYBM+iVJpjxGjo20d
|
||||
bmvo41wiRmL01xzGOXkRPP1ZqV/IgQIDAQABAoICAQCtnhcnz0Ng532HRLfKThF5
|
||||
sWGbH/hSYQqWvrPef52ixRm3rZtkHgMbalTDWLKgP6PL1uqruxFy8Uoe30Yg00jN
|
||||
mSO+OuN0JczycxdOFOHEjyEMdF6frjCy22+pxqI13ZJMcg2qtBkOgDOXbK1ERynP
|
||||
oiDa0t/XEvgqC8fW80xWuZYR6/MPdlp1pCj+GPTs34H56HT9F3Wo3TZq8FoQOS3K
|
||||
6h9H5zS4RqCrGveDfVJaPDWb8cjn1vgOFbAx0mhN6rcNMbprb3C9XQU1VCr8L/7O
|
||||
CME5W+4i83RFIfRvB0MF29TknUg70DqrK9JyUAQzQ/Y51/SPg+CvW6T0ZJ/OYPRo
|
||||
7HfNGk1+yhou2wvZnC9OqI98tZBniO5fEdcUCguaZZWW7jwMpONk0cI8sm6NoWpy
|
||||
uiIb2W5jNlOpXqBx/0veejfDtfso7MvkPY/hwppw++DY331au2rsLsDbXUx96SOJ
|
||||
d7PyflXNjrrzSTO5X6UyQiYNl1/EaBQjQN/R9YxyC2uS+UsM5UesB5Tg++jER6HL
|
||||
mT6cccE5YLjbdTfT9TDvgNIgB2tS1mnBvI4nObaMX/JuASyMYUEoQQsiNPtuElqC
|
||||
U7DXkgMKHd6qlrsVMxrIyih3UNjtyQZBQcokP4UcW5hIzTLyrNPyBSzh6QUbs4Kn
|
||||
lL9PyYYcDEXlMP30i+M3AQKCAQEA7ccgjMYIYq2qv8X/G15ZmWdw5+Hz16S58KzE
|
||||
n0mVF4Ht16mBDfrQve0h5nn6/h33bffpgxKigmM0b+vEzgPtPSlNhaLCE4Kt7SZn
|
||||
NuRVHJ74nHXsTi+Z0ZSkgeKwBRmji5TN7PBEoVdaExhM/qGnwG7x5CQNLQ0O1w2J
|
||||
5b6ywGnghjlhHRI5uGdmHy2n6N5Rj37OFrLVOLdEexy351ogZY74673BXGVjLNe2
|
||||
UMM6CazE00gDwKv0rOniZv732O8MVaOMR6CYG3z7TgfVGESWS1mEGTrkbLgGbT4X
|
||||
naGhUH90+AKZwD2LmMJPbQR5PhwcmaCx/xgPj1RWRl4zemDjsQKCAQEA4PRl41Wd
|
||||
Yiirgc41oXC3hk/cMtCsz+Cz8WL7pCRJL3hvX/Z+7Pp6eMeiHBnaObjZNUY/eC+s
|
||||
I1i4tCShMnqSddm/YnvgiS1UsDF2N4Xm0oR0PfK0jcQDq/IYyxCJmp56ZJ8y1c5W
|
||||
v9wvJ+7U/AELjuqkGiZ0w0wDGtdNdFVbUSjyf385Dmq0D19rrl3Y9OmoDaECYVdS
|
||||
L7/8hjIgmT09+Yrf05+IlEo/f6aPjM1xi6WYC3+aQOp3yjW6oSPEZZuc2WfVyhss
|
||||
AiDSwbqu1nxS5WswOTGKmirl3btACafOK8x/czeoqM8Wjju8HAG1btlUT4BzLNVk
|
||||
GZR14iJcFxZ10QKCAQBri6czRNbCGx6hwqIR9Oi9s8Wje9VYcc8QBnSgPx3KFiBH
|
||||
bQlME2ean8i3f/CAQ3mIKZtah3EtXEV5YcAQFkKVaTsA+I6jWHXmT3pbn4bHfTeh
|
||||
PMz2yBzgaETH4ooOpHwOQ+2n/zxrZSD+hf09JkzDguqxb4TuHXva1OrMGSasVLcS
|
||||
vp0oEvg8abgM3g+WCggFySrZpWU/U9ULgf/ECkWg6bu4lIkCi3EB9Ucm3EZB3fzg
|
||||
OzBHUv9FvjuCrkvXuLdxfJmURBTISg04S96cLVl1FzXiW3q5mbp+apkv2M0npZ54
|
||||
FmUISE39d9WIz38vEnP1IHOhl3ZiM5kaFr1d2rjhAoIBAGOtB0R/GBh5at0+cNcS
|
||||
6c7yreA6RIhryW/I6zWk+mS1WaxMvZrltcS0uGj5L4/qDxyi/taTURPsaRMxM9f5
|
||||
JdJgZIQP3cMKuf7EO9yIUWmwVQ1p8ITseLAEuuWnc0F2vUa+n7jLD/c9aguosOjk
|
||||
0alG4OXRamVq1elbwy8r7yV8Hk9OIQr5TsWNA1qkrNCAg/1d/X8CQSF1UUBpD7a2
|
||||
wzJCTcEobE1AxPgb5nl+QrSc8E0QAlqHSgLoYcSq44geNpbCgqFl/s8GmjxLKtNR
|
||||
DS4om5qMEB0Vqvrf0JU2rI0NtN9ppyr9b8IgR86lFy6Bz/DWOrJ/7zXCaaWEkgeM
|
||||
5TECggEAKSvloR9pVm0nzvN3e4Xtjj01rVUZOU667lUT3TAeDycTTLK4tXsYR47V
|
||||
olDmKwIN7YL/U6WAm1ClE+DGMnt27hKeIBctKJXiiIqK7hlAAOmk6nCWUXU7yCgb
|
||||
RkV9DTXHQ4gEtzgU0kx0r9pTydc19rMAanl7fgiNUNc+RcHeNSH9hoWPTGpOb5Om
|
||||
R4LuAJSewMdtnYFa7Xu3P7QjT7b0d7ARGnF1OrjKA9Nqm65D3bh8hlikANrGkM+k
|
||||
pPM2BJiTnh6vLYMh5TBMSFNLJPUKItyTaIz2CVFdWE5ipV3UPjj8beYsFDt24XmC
|
||||
FI88g7aCJHlP2wvuyZiPnOtCdGVVKw==
|
||||
-----END PRIVATE KEY-----
|
||||
30
examples/kubernetes-tls/app3.crt
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIFFzCCAv+gAwIBAgIUETXxobflxWhnHIL/u7KBRE/y4eswDQYJKoZIhvcNAQEL
|
||||
BQAwGzEZMBcGA1UEAwwQYXBwMy5leGFtcGxlLmNvbTAeFw0yMzEyMTcxMTMwMTda
|
||||
Fw0zMzEyMTQxMTMwMTdaMBsxGTAXBgNVBAMMEGFwcDMuZXhhbXBsZS5jb20wggIi
|
||||
MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDEq6OCSCs3Uyswq4sH8FWfd4oR
|
||||
ssX/qIzu5FwTjpvFKOa/d+b6rnWC2SR6RKKmR47bwGBx2jvQIOZ118ta0rKtws0F
|
||||
AHYXgwxTpuljz3vESrybXxUA7Pmjiog2zvGkKIKHAOZdjwRbDQBvceocurChKn3V
|
||||
t8CjKSGecq6qN4dh0xPwEIWAsIpIsnrMSI3JbjCDlUe7SKEcWYKcFZfgm71KBYnD
|
||||
gwTTFaRnzrVWLyvqJ/wfQldCzmbGJ5cR6CsF9Keu/KQelJxQA9SEqqxLzU04dHOB
|
||||
wYJVyBWL6m2udh6qWRRP3FwAdX6QB9cT0ql/JwxirS/+kBmHAKS8K+iTxl7JzaDw
|
||||
hxwfjJkTNiw3mMnvah6L7SHAKVd53UXt1lc6vsz02/4cIiNxCA/k9TKWwYb6ogl0
|
||||
MenPPjfmSDp2zEHX9FP/xbJgnO9wPdzO1nQrVKFRynrC5tlnmzU9DKpn+dflKvmQ
|
||||
/hqFwu//ZUnCfyApdrtF7ICj+mngJkD8M6aJ4ALDhXpOjPzIMxLe/b+vArPhOVIj
|
||||
CEUSUg6u3eDuksKKS+0fBZgrrYhHpBNNiLXzD7rAXoAKOWorAgshdSlsLbWcEfm7
|
||||
RhiwXIfqK/Ykk0YOQRLlowRJuHU17w+8nfnGz80GL9ZN06AE3o7uCLem4FS0WK22
|
||||
3I8WKJWY3opjD6FdyQIDAQABo1MwUTAdBgNVHQ4EFgQUnyUyfZmtc1z0AtSo8AS2
|
||||
SHklcV4wHwYDVR0jBBgwFoAUnyUyfZmtc1z0AtSo8AS2SHklcV4wDwYDVR0TAQH/
|
||||
BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAn4OP9GNeUl42T1mPewQa8x1jbFj/
|
||||
klALcY1onrUFbpLHceFljyOLkDL+XufXGZ842h1/g4PVFQZlCku6qUaSNc9pz6JX
|
||||
48olhJODV4+HZXh3KUpCDBXNxywnnKw+dF60imDPp7TdL2wdCSZAyH7pkbFlXsPU
|
||||
B9SWLemyr/aX+/z3qD7OC6q1sHH9h7asRXbXycowROZozDCSVQKITC8P4avzbLJ9
|
||||
yrUgjHyj2ymxMUOGs65fnKr1/xrMLjYyjN8v9OMVEh02+qO4pOhz4WCEEur1zIC1
|
||||
X24YUhnX4QNJ4Qi1qwidAbBIZrXt4PW2i4Mw2eQO1RU1w81pz8vY725l2GygFG3N
|
||||
DhEkAdILJ99KUN0YlU7BAPsCU5pe+uA40uBe5Oti9PAlEnvH4i49p34JKjZ4q30e
|
||||
FIy5VjuCkmVlSzUfRQhZ8QRz2hdK/hJY6Pwo63UP7Mb1tup8hmEcfZATotMjUK4U
|
||||
d+BYe6OFw50s2s6uMiVuu2Wb2sWsP5gOk9SkaCKbvQa4Miu/kWKbvT9Pb81u544t
|
||||
XoqVO2d83uOm5FTM+gFgMDtJDK/poqIXho6MDnUES1SoUZgY2XRHLOBvCAms9SIW
|
||||
HCzbrzSqs8P6UxaiV59Ht3toL/xQmR/skfrn/QUYdsSh9dtOStkHUOzzepkTroj0
|
||||
MZUb2FnSikWBzcI=
|
||||
-----END CERTIFICATE-----
|
||||
52
examples/kubernetes-tls/app3.key
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
-----BEGIN PRIVATE KEY-----
|
||||
MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDEq6OCSCs3Uysw
|
||||
q4sH8FWfd4oRssX/qIzu5FwTjpvFKOa/d+b6rnWC2SR6RKKmR47bwGBx2jvQIOZ1
|
||||
18ta0rKtws0FAHYXgwxTpuljz3vESrybXxUA7Pmjiog2zvGkKIKHAOZdjwRbDQBv
|
||||
ceocurChKn3Vt8CjKSGecq6qN4dh0xPwEIWAsIpIsnrMSI3JbjCDlUe7SKEcWYKc
|
||||
FZfgm71KBYnDgwTTFaRnzrVWLyvqJ/wfQldCzmbGJ5cR6CsF9Keu/KQelJxQA9SE
|
||||
qqxLzU04dHOBwYJVyBWL6m2udh6qWRRP3FwAdX6QB9cT0ql/JwxirS/+kBmHAKS8
|
||||
K+iTxl7JzaDwhxwfjJkTNiw3mMnvah6L7SHAKVd53UXt1lc6vsz02/4cIiNxCA/k
|
||||
9TKWwYb6ogl0MenPPjfmSDp2zEHX9FP/xbJgnO9wPdzO1nQrVKFRynrC5tlnmzU9
|
||||
DKpn+dflKvmQ/hqFwu//ZUnCfyApdrtF7ICj+mngJkD8M6aJ4ALDhXpOjPzIMxLe
|
||||
/b+vArPhOVIjCEUSUg6u3eDuksKKS+0fBZgrrYhHpBNNiLXzD7rAXoAKOWorAgsh
|
||||
dSlsLbWcEfm7RhiwXIfqK/Ykk0YOQRLlowRJuHU17w+8nfnGz80GL9ZN06AE3o7u
|
||||
CLem4FS0WK223I8WKJWY3opjD6FdyQIDAQABAoICABxlA4htzv9/3H58ZehRhKsv
|
||||
YRnJC9krhp1/DuQr9MV0cEw4jXqn8YNgwml8u1bygeesUMBfV79m4J8m9s84GGAJ
|
||||
/fu441PlscPqF0w3ypC+kZiFE808aZZ5C82N90lSJ/ZB5QChA2n56JQuiDR5p8K9
|
||||
Fcnja8aiy53KxPkCZ2NyTDCe0geQdYalbiFMYFwysoJs7RxXEhu7uKW8YF8nXR7w
|
||||
ycEWi33GZCQwrfGxgc+e0kHZHCwjDKeTU7ZcJMoJVqRnCXL41dCfnPFCivmuvHVo
|
||||
Kr0TKTQlXScEQ62qlCbYEZyuHgJa9FjrKNxNz/bxtlIQ2xsPxv+80gvw8vVS8KBF
|
||||
KKZQ5R7SuCT1tGveHk3MEO8yUXj+LNB4H4xNK5LHcBc5ZFH5mcop5kkk4rnR+1pK
|
||||
LFH1jpy1vdNEAeHNKbJAxrec1Z4NKs4Lwv6n5/b4EsoFwNlFM9IJ6dNqijMJXlsC
|
||||
It9byyjKpcY/8w89EgN00aae4xPSBJTQU/gFgnUJmP+YD6i7B3/WCsZfnFeuj7qM
|
||||
2T8Qxhf5R4/aNOqf0mCyV14HmglFygAzTin/e5fiEA1Pk8bc3+CHWmmfNIURq2kr
|
||||
gQOg5k6R46P/93zLs6kZyLD4UL/7kn2rOIIlQqrbityaIppUNka7kxcD7h0R+yJW
|
||||
lKLTMoEHPinkaM2X125ZAoIBAQD1ZZ7eeTsIdW5AcG+U1J690SGu03MHQAyZ+a0L
|
||||
WOhVJn21lEuCTCu0dKcNSXET5ZLkzUmXt0UKJ20IZL1Az7cDekNvtNoTFDYrl1e7
|
||||
uH52TuoUxxiANkDlTm5dSqA44flzNtG1rPcjNBbW6IRWAUQGSzOWPzJHAO2H4Wa4
|
||||
m1m0YzwFz8PC5A1/NX8/BHsTYiIFsmf3o1I6M3HnrqHkftZmIVKataRZadDLpbTp
|
||||
426kpY8WnnV9udXMPHmvBZ+P3kKjKc99oY/u4mtnPReBj0LIz+3Smc6cUpkdq/EI
|
||||
VK2xCvFm/uJN93iLPyx2HJUf+bu/f+GvH8Fz8KCe/0PpKCv7AoIBAQDNKwu0jlaI
|
||||
Y0mtrJZvXUPWtK3ZNUQ24BuVcCvi99R391f++oZ+g8ib1SqqLGNmY3DJ4WsbLtpi
|
||||
9toPDLT4mgZAUEhjRLY+S0IeXTVxdN/JOZ6eMamyM3x75efWPILhxLk4AeibGIha
|
||||
L5Ln2CWlDjc7mGZNjUn0HbXvdwEtDnlhoAnFDpKCOxEFt+r2cke3D0StpnFdcDfp
|
||||
jL8NHmsSPBz2TFtMhtczkFB/1pc5Grf+3LemHQmKpOCfFQcS+VCI1UU5gfhkr6IS
|
||||
ycCvvdioSwmolqhaBzug9yCx1pUL9s2FaiWIMzvvsy63lZkEC9009Zy5rGo0RWN8
|
||||
Hr5HllKXs04LAoIBAQDPHyV3W1VzL0KOSxgywz70sZY/bCNThEDemTjwMetvK1zB
|
||||
LNiKsmXVGvyAn3M8uvFAAvFRh5NTHbHOetCt6mPrIH/YwgmqPs31/vhC7lZ23uZ+
|
||||
AQlx9djScl9+iGUxfbHBCAz6zXGOmgGJBJnlyY2zzjdNYiu6eFMD9EByIlUVhwh7
|
||||
U0BEt52Yt/udodeLpbFXo5xTDNtzWkaSqPfl1xR5ATkqcZO1EDX2HPfUzWxutXpP
|
||||
OhGqu3Zzurtt+U4S7SLLepexzvKgSyUh7xNu/A7/VVjC/6S+loy72YtIX8h2fOkB
|
||||
6LHz4qMwzHJngnpvkaZg3LwMxr3OcNPxPzz/hzOPAoIBAQCQ6s3KzBtdHNyG+vgL
|
||||
U1I+jsKZQOGc7TEundux5qHB1wjlxmlHZahGQgxvxQi04pphToLL4Y1KB9jAdpZB
|
||||
XvH5bXuj+n3LhHcAYZAFQqtrQ/LBBI07nNhZ32uhTH6aH81APUDihDKTmTTn5Cm6
|
||||
606iHqRsNNc+wdmnemRvQeEEzvj3orJjoHsGkgE58ECtkfBNw9ohSMmFgu/TwV+Z
|
||||
srI2WnrGlBvfhRkHIzkPkcrTD238vFfoAUvTshOcGFQFQrcxxpb/73rIUI900uD9
|
||||
BnudBEWHycIZkVUbqFkA6WQDz5URHjdAuUzPSbCaRhMKfE4mbB1cLIL3wfNfN1PB
|
||||
aVo/AoIBAFISVR5sVewY2uBu9a4eb64p/30g+BaOmvhVt2gLfm65sCCLzYH4GjcW
|
||||
ZI1IPvf7NtTfKa/RvNEGcGs2GYyWhUu4GlC5t3oKDyZo66oHSeM005nDbsMszaeQ
|
||||
m1c0eGj8NsSf+3GHxTwVAtxwOlEkznxLE+dZADD49DJSG9B/FnG/0g6LGfOxSWRk
|
||||
J3iQAUTriVRKcIxBmYe/BUxtyfkwEv3Wjc7W5LMRzT87pljd2i4jy1fxSqXCH9Wy
|
||||
tButCdI31UcQdZ9jrPydCy5eJng087pHSMvsVHv/CDP3aka5HQU/tCMERsaFJKiS
|
||||
l2qeGi6z5g40o9wd3s0sBaPePtZ7dUY=
|
||||
-----END PRIVATE KEY-----
|
||||
164
examples/kubernetes-tls/kubernetes.yml
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: ingress
|
||||
spec:
|
||||
tls:
|
||||
- hosts:
|
||||
- app1.example.com
|
||||
- app2.example.com
|
||||
secretName: secret-tls-app1app2
|
||||
- hosts:
|
||||
- app3.example.com
|
||||
secretName: secret-tls-app3
|
||||
rules:
|
||||
- host: app1.example.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: svc-app1
|
||||
port:
|
||||
number: 80
|
||||
- host: app2.example.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: svc-app2
|
||||
port:
|
||||
number: 80
|
||||
- host: app3.example.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: svc-app3
|
||||
port:
|
||||
number: 80
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: secret-tls-app1app2
|
||||
data:
|
||||
tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZPVENDQXlHZ0F3SUJBZ0lVREJia0hpY214OG5xVVFObmtEdngzMmhxbWlzd0RRWUpLb1pJaHZjTkFRRUwKQlFBd0xERXFNQ2dHQTFVRUF3d2hZWEJ3TVM1bGVHRnRjR3hsTG1OdmJTeGhjSEF5TG1WNFlXMXdiR1V1WTI5dApNQjRYRFRJek1USXhOekV4TWpnME5Gb1hEVE16TVRJeE5ERXhNamcwTkZvd0xERXFNQ2dHQTFVRUF3d2hZWEJ3Ck1TNWxlR0Z0Y0d4bExtTnZiU3hoY0hBeUxtVjRZVzF3YkdVdVkyOXRNSUlDSWpBTkJna3Foa2lHOXcwQkFRRUYKQUFPQ0FnOEFNSUlDQ2dLQ0FnRUEwUEU4Nk9waXlXU2dRbG0zMFNGNzM3Q003K05Jc1VuMGpvN1JaVW9CL3JtTQpqcnlXcnVRL0laT0g3VGpLeVBCZW1YKzkwcTU2RXhJUHRodUdLNlFUWkJHcHdOZEdMUkc3Z2h2S2VKU1dUa1p2CjhsWVd4L1JPU1FaNXhSYkpGTUR5WkF3amJoSmhMbFYydlYxOXZiQzVOa2diQm93U3BNendkOVlteTdVTGF6SVEKY1E3ZnJadTRCTmhMUTNhVHVOa3R4VDExdHV2STR6T0s2TWEwYW9CV0VNZ3lJL2xZcS9VNjF6TGMwTU9XVnRhMQo5TGxvNUFPOTBNTjUrNXBNMHhaUGd2Vk5zcndDeVdnYStjbC9veWtraW1tenhSTUE2N3QwMWV3OE1oZUs2ZkZDCjVzTHFRUHFTbWVsZ2tCL0ZmM2Vhb3hZaEdnV1lWeDZqT2c4OXp1VzY1d1ZiT1Zva3EwcG1sTFdlNDhFYTZvVGUKQUMvK1hxMlRXbnptLzNSSTEwWVNGVGR6Y3NscU84SDJlNFBhM295ajJrTms3SkU4R0hld0NBOVdMK1NJUDE4dApHdGJUQVhvblNIYXNlV3UxU3RlbG00M1YvTjJBVmlJTHY3YUJORkhKOGlHV3NPcVNqSkNWcXltdE9zbW9zWllaCnpvc0xTSXROclRHdFJUcWo1djVnc3luUXJuRWoyaE05bkZWT3NWU1RIbHRNT2ozOW5mcmtjRzcwVnNuMVo3ZEIKbWhtMWhJRGkwZlpTUGlMdzFvL1BzS2ROT2Nmbm1QWDRvbDR2VzQ4SGlsQkRJTlZhUUFKTVUwMTZKZ1NPZUJscwp0R2RDWldGY2VPZEV3VnkrMTJBVFBvbFNhWThSbzZOdEhXNXI2T05jSWtaaTlOY2N4amw1RVR6OVdhbGZ5SUVDCkF3RUFBYU5UTUZFd0hRWURWUjBPQkJZRUZIaVVFemFFSzZJdjZ6UU1vcHRoU09mWnBLNUpNQjhHQTFVZEl3UVkKTUJhQUZIaVVFemFFSzZJdjZ6UU1vcHRoU09mWnBLNUpNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdEUVlKS29aSQpodmNOQVFFTEJRQURnZ0lCQUF0WFVSRDRIVDNrTVNzY1ZCeXFVTTRpbkpjM3A4ZEdFQXhBUVJOQnhOM1ZPa3dBCm1lbHlSUTNTZUJVSktuRWxHVHRnTUlXN0ptRVBkWmRBY1FpVVoyVUVJN0FLaE1XQUNHZzZMQkdSTlhBVHAxc0EKR0F6UGdWcU5Wcyt4Mkl5aWY1a0U5eFdzcytWRTNQSDE3TE1KTWhxbHBLY2prcnJGd3RtdFJDMmExZkduREx0SwpVb2V3VUlqQy85cUVLeVNRczNleUNDYmpuSldEcHZKYVVyQnBJVXZqRkhIdXMvVU9ZbUN1N1VCeFNhMzFra3UvCmNWcEpWaTBmT0R5QTVWSDYwNkFTNGZSOVhRQkRGODBGWUg3ZHIramtYY01taDlGQWw1QXN2UGVQN25oY1gvbk0KZndsRUhUNi9UT1gweHc4YzVQK3NLbUpBU0J0L0x2YytwRld4TlJMbEY5U1djc2tYVDN3ZjVob3o4cVJTODlpcAo1NjdjUERxdU9IbUc0cWcyYzBmOEkybU5vbXhWbDRUVzRmalNxdHZzb0lRRERUenlYQkJHMXBNTWhRTU5jakdJCnR3cHVzSWRJUUhUa1I2aGVCZm1TakdTa2g2YzRiWHc0NFFXbDFrcTArdW91S0YyYUZhakFVbVJxM01DK3I2aVAKeWcxekJwUGtOTUlDZkN5ZWtoWTFOM1RIZlU5YmhFQnR2Yklxb2J1VEdwMk95ZWtCU2hPa3BYZmVMcDFoRElQaAoxMFJRVTNsekU0L2ZpcGphK3QvSWlCeEFKMjBNU3NIT0Z2UFJwWDJRNi83NTg0ZWd1QTVoQXNmbFF3MVBJWGo1CndPaTRjbTZ0eDN4Vld6aHVSSGE2b1VCdFNTL0lqUlg1NWxjV0ZFOHhZWHF1bHBITTJyUC9LQXNDS3UzTgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
|
||||
tls.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpRZ0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQ1N3d2dna29BZ0VBQW9JQ0FRRFE4VHpvNm1MSlpLQkMKV2JmUklYdmZzSXp2NDBpeFNmU09qdEZsU2dIK3VZeU92SmF1NUQ4aGs0ZnRPTXJJOEY2WmY3M1Nybm9URWcrMgpHNFlycEJOa0VhbkExMFl0RWJ1Q0c4cDRsSlpPUm0veVZoYkg5RTVKQm5uRkZza1V3UEprRENOdUVtRXVWWGE5ClhYMjlzTGsyU0JzR2pCS2t6UEIzMWliTHRRdHJNaEJ4RHQrdG03Z0UyRXREZHBPNDJTM0ZQWFcyNjhqak00cm8KeHJScWdGWVF5RElqK1ZpcjlUclhNdHpRdzVaVzFyWDB1V2prQTczUXczbjdta3pURmsrQzlVMnl2QUxKYUJyNQp5WCtqS1NTS2FiUEZFd0RydTNUVjdEd3lGNHJwOFVMbXd1cEErcEtaNldDUUg4Vi9kNXFqRmlFYUJaaFhIcU02CkR6M081YnJuQlZzNVdpU3JTbWFVdFo3andScnFoTjRBTC81ZXJaTmFmT2IvZEVqWFJoSVZOM055eVdvN3dmWjcKZzlyZWpLUGFRMlRza1R3WWQ3QUlEMVl2NUlnL1h5MGExdE1CZWlkSWRxeDVhN1ZLMTZXYmpkWDgzWUJXSWd1Lwp0b0UwVWNueUlaYXc2cEtNa0pXckthMDZ5YWl4bGhuT2l3dElpMDJ0TWExRk9xUG0vbUN6S2RDdWNTUGFFejJjClZVNnhWSk1lVzB3NlBmMmQrdVJ3YnZSV3lmVm50MEdhR2JXRWdPTFI5bEkrSXZEV2o4K3dwMDA1eCtlWTlmaWkKWGk5Ymp3ZUtVRU1nMVZwQUFreFRUWG9tQkk1NEdXeTBaMEpsWVZ4NDUwVEJYTDdYWUJNK2lWSnBqeEdqbzIwZApibXZvNDF3aVJtTDAxeHpHT1hrUlBQMVpxVi9JZ1FJREFRQUJBb0lDQVFDdG5oY256ME5nNTMySFJMZktUaEY1CnNXR2JIL2hTWVFxV3ZyUGVmNTJpeFJtM3JadGtIZ01iYWxURFdMS2dQNlBMMXVxcnV4Rnk4VW9lMzBZZzAwak4KbVNPK091TjBKY3p5Y3hkT0ZPSEVqeUVNZEY2ZnJqQ3kyMitweHFJMTNaSk1jZzJxdEJrT2dET1hiSzFFUnluUApvaURhMHQvWEV2Z3FDOGZXODB4V3VaWVI2L01QZGxwMXBDaitHUFRzMzRINTZIVDlGM1dvM1RacThGb1FPUzNLCjZoOUg1elM0UnFDckd2ZURmVkphUERXYjhjam4xdmdPRmJBeDBtaE42cmNOTWJwcmIzQzlYUVUxVkNyOEwvN08KQ01FNVcrNGk4M1JGSWZSdkIwTUYyOVRrblVnNzBEcXJLOUp5VUFRelEvWTUxL1NQZytDdlc2VDBaSi9PWVBSbwo3SGZOR2sxK3lob3Uyd3ZabkM5T3FJOTh0WkJuaU81ZkVkY1VDZ3VhWlpXVzdqd01wT05rMGNJOHNtNk5vV3B5CnVpSWIyVzVqTmxPcFhxQngvMHZlZWpmRHRmc283TXZrUFkvaHdwcHcrK0RZMzMxYXUycnNMc0RiWFV4OTZTT0oKZDdQeWZsWE5qcnJ6U1RPNVg2VXlRaVlObDEvRWFCUWpRTi9SOVl4eUMydVMrVXNNNVVlc0I1VGcrK2pFUjZITAptVDZjY2NFNVlMamJkVGZUOVREdmdOSWdCMnRTMW1uQnZJNG5PYmFNWC9KdUFTeU1ZVUVvUVFzaU5QdHVFbHFDClU3RFhrZ01LSGQ2cWxyc1ZNeHJJeWloM1VOanR5UVpCUWNva1A0VWNXNWhJelRMeXJOUHlCU3poNlFVYnM0S24KbEw5UHlZWWNERVhsTVAzMGkrTTNBUUtDQVFFQTdjY2dqTVlJWXEycXY4WC9HMTVabVdkdzUrSHoxNlM1OEt6RQpuMG1WRjRIdDE2bUJEZnJRdmUwaDVubjYvaDMzYmZmcGd4S2lnbU0wYit2RXpnUHRQU2xOaGFMQ0U0S3Q3U1puCk51UlZISjc0bkhYc1RpK1owWlNrZ2VLd0JSbWppNVRON1BCRW9WZGFFeGhNL3FHbndHN3g1Q1FOTFEwTzF3MkoKNWI2eXdHbmdoamxoSFJJNXVHZG1IeTJuNk41UmozN09GckxWT0xkRWV4eTM1MW9nWlk3NDY3M0JYR1ZqTE5lMgpVTU02Q2F6RTAwZ0R3S3Ywck9uaVp2NzMyTzhNVmFPTVI2Q1lHM3o3VGdmVkdFU1dTMW1FR1Rya2JMZ0diVDRYCm5hR2hVSDkwK0FLWndEMkxtTUpQYlFSNVBod2NtYUN4L3hnUGoxUldSbDR6ZW1EanNRS0NBUUVBNFBSbDQxV2QKWWlpcmdjNDFvWEMzaGsvY010Q3N6K0N6OFdMN3BDUkpMM2h2WC9aKzdQcDZlTWVpSEJuYU9ialpOVVkvZUMrcwpJMWk0dENTaE1ucVNkZG0vWW52Z2lTMVVzREYyTjRYbTBvUjBQZkswamNRRHEvSVl5eENKbXA1NlpKOHkxYzVXCnY5d3ZKKzdVL0FFTGp1cWtHaVowdzB3REd0ZE5kRlZiVVNqeWYzODVEbXEwRDE5cnJsM1k5T21vRGFFQ1lWZFMKTDcvOGhqSWdtVDA5K1lyZjA1K0lsRW8vZjZhUGpNMXhpNldZQzMrYVFPcDN5alc2b1NQRVpadWMyV2ZWeWhzcwpBaURTd2JxdTFueFM1V3N3T1RHS21pcmwzYnRBQ2FmT0s4eC9jemVvcU04V2pqdThIQUcxYnRsVVQ0QnpMTlZrCkdaUjE0aUpjRnhaMTBRS0NBUUJyaTZjelJOYkNHeDZod3FJUjlPaTlzOFdqZTlWWWNjOFFCblNnUHgzS0ZpQkgKYlFsTUUyZWFuOGkzZi9DQVEzbUlLWnRhaDNFdFhFVjVZY0FRRmtLVmFUc0ErSTZqV0hYbVQzcGJuNGJIZlRlaApQTXoyeUJ6Z2FFVEg0b29PcEh3T1ErMm4venhyWlNEK2hmMDlKa3pEZ3VxeGI0VHVIWHZhMU9yTUdTYXNWTGNTCnZwMG9Fdmc4YWJnTTNnK1dDZ2dGeVNyWnBXVS9VOVVMZ2YvRUNrV2c2YnU0bElrQ2kzRUI5VWNtM0VaQjNmemcKT3pCSFV2OUZ2anVDcmt2WHVMZHhmSm1VUkJUSVNnMDRTOTZjTFZsMUZ6WGlXM3E1bWJwK2Fwa3YyTTBucFo1NApGbVVJU0UzOWQ5V0l6Mzh2RW5QMUlIT2hsM1ppTTVrYUZyMWQycmpoQW9JQkFHT3RCMFIvR0JoNWF0MCtjTmNTCjZjN3lyZUE2UklocnlXL0k2eldrK21TMVdheE12WnJsdGNTMHVHajVMNC9xRHh5aS90YVRVUlBzYVJNeE05ZjUKSmRKZ1pJUVAzY01LdWY3RU85eUlVV213VlExcDhJVHNlTEFFdXVXbmMwRjJ2VWErbjdqTEQvYzlhZ3Vvc09qawowYWxHNE9YUmFtVnExZWxid3k4cjd5VjhIazlPSVFyNVRzV05BMXFrck5DQWcvMWQvWDhDUVNGMVVVQnBEN2EyCnd6SkNUY0VvYkUxQXhQZ2I1bmwrUXJTYzhFMFFBbHFIU2dMb1ljU3E0NGdlTnBiQ2dxRmwvczhHbWp4TEt0TlIKRFM0b201cU1FQjBWcXZyZjBKVTJySTBOdE45cHB5cjliOElnUjg2bEZ5NkJ6L0RXT3JKLzd6WENhYVdFa2dlTQo1VEVDZ2dFQUtTdmxvUjlwVm0wbnp2TjNlNFh0amowMXJWVVpPVTY2N2xVVDNUQWVEeWNUVExLNHRYc1lSNDdWCm9sRG1Ld0lON1lML1U2V0FtMUNsRStER01udDI3aEtlSUJjdEtKWGlpSXFLN2hsQUFPbWs2bkNXVVhVN3lDZ2IKUmtWOURUWEhRNGdFdHpnVTBreDByOXBUeWRjMTlyTUFhbmw3ZmdpTlVOYytSY0hlTlNIOWhvV1BUR3BPYjVPbQpSNEx1QUpTZXdNZHRuWUZhN1h1M1A3UWpUN2IwZDdBUkduRjFPcmpLQTlOcW02NUQzYmg4aGxpa0FOckdrTStrCnBQTTJCSmlUbmg2dkxZTWg1VEJNU0ZOTEpQVUtJdHlUYUl6MkNWRmRXRTVpcFYzVVBqajhiZVlzRkR0MjRYbUMKRkk4OGc3YUNKSGxQMnd2dXlaaVBuT3RDZEdWVkt3PT0KLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo=
|
||||
type: kubernetes.io/tls
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: secret-tls-app3
|
||||
data:
|
||||
tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZGekNDQXYrZ0F3SUJBZ0lVRVRYeG9iZmx4V2huSElML3U3S0JSRS95NGVzd0RRWUpLb1pJaHZjTkFRRUwKQlFBd0d6RVpNQmNHQTFVRUF3d1FZWEJ3TXk1bGVHRnRjR3hsTG1OdmJUQWVGdzB5TXpFeU1UY3hNVE13TVRkYQpGdzB6TXpFeU1UUXhNVE13TVRkYU1Cc3hHVEFYQmdOVkJBTU1FR0Z3Y0RNdVpYaGhiWEJzWlM1amIyMHdnZ0lpCk1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQ0R3QXdnZ0lLQW9JQ0FRREVxNk9DU0NzM1V5c3dxNHNIOEZXZmQ0b1IKc3NYL3FJenU1RndUanB2RktPYS9kK2I2cm5XQzJTUjZSS0ttUjQ3YndHQngyanZRSU9aMTE4dGEwckt0d3MwRgpBSFlYZ3d4VHB1bGp6M3ZFU3J5Ylh4VUE3UG1qaW9nMnp2R2tLSUtIQU9aZGp3UmJEUUJ2Y2VvY3VyQ2hLbjNWCnQ4Q2pLU0dlY3E2cU40ZGgweFB3RUlXQXNJcElzbnJNU0kzSmJqQ0RsVWU3U0tFY1dZS2NGWmZnbTcxS0JZbkQKZ3dUVEZhUm56clZXTHl2cUovd2ZRbGRDem1iR0o1Y1I2Q3NGOUtldS9LUWVsSnhRQTlTRXFxeEx6VTA0ZEhPQgp3WUpWeUJXTDZtMnVkaDZxV1JSUDNGd0FkWDZRQjljVDBxbC9Kd3hpclMvK2tCbUhBS1M4SytpVHhsN0p6YUR3Cmh4d2ZqSmtUTml3M21NbnZhaDZMN1NIQUtWZDUzVVh0MWxjNnZzejAyLzRjSWlOeENBL2s5VEtXd1liNm9nbDAKTWVuUFBqZm1TRHAyekVIWDlGUC94Ykpnbk85d1Bkek8xblFyVktGUnluckM1dGxubXpVOURLcG4rZGZsS3ZtUQovaHFGd3UvL1pVbkNmeUFwZHJ0RjdJQ2orbW5nSmtEOE02YUo0QUxEaFhwT2pQeklNeExlL2IrdkFyUGhPVklqCkNFVVNVZzZ1M2VEdWtzS0tTKzBmQlpncnJZaEhwQk5OaUxYekQ3ckFYb0FLT1dvckFnc2hkU2xzTGJXY0VmbTcKUmhpd1hJZnFLL1lrazBZT1FSTGxvd1JKdUhVMTd3KzhuZm5HejgwR0w5Wk4wNkFFM283dUNMZW00RlMwV0syMgozSThXS0pXWTNvcGpENkZkeVFJREFRQUJvMU13VVRBZEJnTlZIUTRFRmdRVW55VXlmWm10YzF6MEF0U284QVMyClNIa2xjVjR3SHdZRFZSMGpCQmd3Rm9BVW55VXlmWm10YzF6MEF0U284QVMyU0hrbGNWNHdEd1lEVlIwVEFRSC8KQkFVd0F3RUIvekFOQmdrcWhraUc5dzBCQVFzRkFBT0NBZ0VBbjRPUDlHTmVVbDQyVDFtUGV3UWE4eDFqYkZqLwprbEFMY1kxb25yVUZicExIY2VGbGp5T0xrREwrWHVmWEdaODQyaDEvZzRQVkZRWmxDa3U2cVVhU05jOXB6NkpYCjQ4b2xoSk9EVjQrSFpYaDNLVXBDREJYTnh5d25uS3crZEY2MGltRFBwN1RkTDJ3ZENTWkF5SDdwa2JGbFhzUFUKQjlTV0xlbXlyL2FYKy96M3FEN09DNnExc0hIOWg3YXNSWGJYeWNvd1JPWm96RENTVlFLSVRDOFA0YXZ6YkxKOQp5clVnakh5ajJ5bXhNVU9HczY1Zm5LcjEveHJNTGpZeWpOOHY5T01WRWgwMitxTzRwT2h6NFdDRUV1cjF6SUMxClgyNFlVaG5YNFFOSjRRaTFxd2lkQWJCSVpyWHQ0UFcyaTRNdzJlUU8xUlUxdzgxcHo4dlk3MjVsMkd5Z0ZHM04KRGhFa0FkSUxKOTlLVU4wWWxVN0JBUHNDVTVwZSt1QTQwdUJlNU90aTlQQWxFbnZINGk0OXAzNEpLalo0cTMwZQpGSXk1Vmp1Q2ttVmxTelVmUlFoWjhRUnoyaGRLL2hKWTZQd282M1VQN01iMXR1cDhobUVjZlpBVG90TWpVSzRVCmQrQlllNk9GdzUwczJzNnVNaVZ1dTJXYjJzV3NQNWdPazlTa2FDS2J2UWE0TWl1L2tXS2J2VDlQYjgxdTU0NHQKWG9xVk8yZDgzdU9tNUZUTStnRmdNRHRKREsvcG9xSVhobzZNRG5VRVMxU29VWmdZMlhSSExPQnZDQW1zOVNJVwpIQ3picnpTcXM4UDZVeGFpVjU5SHQzdG9ML3hRbVIvc2tmcm4vUVVZZHNTaDlkdE9TdGtIVU96emVwa1Ryb2owCk1aVWIyRm5TaWtXQnpjST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
|
||||
tls.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUpRd0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQ1Mwd2dna3BBZ0VBQW9JQ0FRREVxNk9DU0NzM1V5c3cKcTRzSDhGV2ZkNG9Sc3NYL3FJenU1RndUanB2RktPYS9kK2I2cm5XQzJTUjZSS0ttUjQ3YndHQngyanZRSU9aMQoxOHRhMHJLdHdzMEZBSFlYZ3d4VHB1bGp6M3ZFU3J5Ylh4VUE3UG1qaW9nMnp2R2tLSUtIQU9aZGp3UmJEUUJ2CmNlb2N1ckNoS24zVnQ4Q2pLU0dlY3E2cU40ZGgweFB3RUlXQXNJcElzbnJNU0kzSmJqQ0RsVWU3U0tFY1dZS2MKRlpmZ203MUtCWW5EZ3dUVEZhUm56clZXTHl2cUovd2ZRbGRDem1iR0o1Y1I2Q3NGOUtldS9LUWVsSnhRQTlTRQpxcXhMelUwNGRIT0J3WUpWeUJXTDZtMnVkaDZxV1JSUDNGd0FkWDZRQjljVDBxbC9Kd3hpclMvK2tCbUhBS1M4CksraVR4bDdKemFEd2h4d2ZqSmtUTml3M21NbnZhaDZMN1NIQUtWZDUzVVh0MWxjNnZzejAyLzRjSWlOeENBL2sKOVRLV3dZYjZvZ2wwTWVuUFBqZm1TRHAyekVIWDlGUC94Ykpnbk85d1Bkek8xblFyVktGUnluckM1dGxubXpVOQpES3BuK2RmbEt2bVEvaHFGd3UvL1pVbkNmeUFwZHJ0RjdJQ2orbW5nSmtEOE02YUo0QUxEaFhwT2pQeklNeExlCi9iK3ZBclBoT1ZJakNFVVNVZzZ1M2VEdWtzS0tTKzBmQlpncnJZaEhwQk5OaUxYekQ3ckFYb0FLT1dvckFnc2gKZFNsc0xiV2NFZm03Umhpd1hJZnFLL1lrazBZT1FSTGxvd1JKdUhVMTd3KzhuZm5HejgwR0w5Wk4wNkFFM283dQpDTGVtNEZTMFdLMjIzSThXS0pXWTNvcGpENkZkeVFJREFRQUJBb0lDQUJ4bEE0aHR6djkvM0g1OFplaFJoS3N2CllSbkpDOWtyaHAxL0R1UXI5TVYwY0V3NGpYcW44WU5nd21sOHUxYnlnZWVzVU1CZlY3OW00SjhtOXM4NEdHQUoKL2Z1NDQxUGxzY1BxRjB3M3lwQytrWmlGRTgwOGFaWjVDODJOOTBsU0ovWkI1UUNoQTJuNTZKUXVpRFI1cDhLOQpGY25qYThhaXk1M0t4UGtDWjJOeVREQ2UwZ2VRZFlhbGJpRk1ZRnd5c29KczdSeFhFaHU3dUtXOFlGOG5YUjd3CnljRVdpMzNHWkNRd3JmR3hnYytlMGtIWkhDd2pES2VUVTdaY0pNb0pWcVJuQ1hMNDFkQ2ZuUEZDaXZtdXZIVm8KS3IwVEtUUWxYU2NFUTYycWxDYllFWnl1SGdKYTlGanJLTnhOei9ieHRsSVEyeHNQeHYrODBndnc4dlZTOEtCRgpLS1pRNVI3U3VDVDF0R3ZlSGszTUVPOHlVWGorTE5CNEg0eE5LNUxIY0JjNVpGSDVtY29wNWtrazRyblIrMXBLCkxGSDFqcHkxdmRORUFlSE5LYkpBeHJlYzFaNE5LczRMd3Y2bjUvYjRFc29Gd05sRk05SUo2ZE5xaWpNSlhsc0MKSXQ5Ynl5aktwY1kvOHc4OUVnTjAwYWFlNHhQU0JKVFFVL2dGZ25VSm1QK1lENmk3QjMvV0NzWmZuRmV1ajdxTQoyVDhReGhmNVI0L2FOT3FmMG1DeVYxNEhtZ2xGeWdBelRpbi9lNWZpRUExUGs4YmMzK0NIV21tZk5JVVJxMmtyCmdRT2c1azZSNDZQLzkzekxzNmtaeUxENFVMLzdrbjJyT0lJbFFxcmJpdHlhSXBwVU5rYTdreGNEN2gwUit5SlcKbEtMVE1vRUhQaW5rYU0yWDEyNVpBb0lCQVFEMVpaN2VlVHNJZFc1QWNHK1UxSjY5MFNHdTAzTUhRQXlaK2EwTApXT2hWSm4yMWxFdUNUQ3UwZEtjTlNYRVQ1WkxrelVtWHQwVUtKMjBJWkwxQXo3Y0Rla052dE5vVEZEWXJsMWU3CnVINTJUdW9VeHhpQU5rRGxUbTVkU3FBNDRmbHpOdEcxclBjak5CYlc2SVJXQVVRR1N6T1dQekpIQU8ySDRXYTQKbTFtMFl6d0Z6OFBDNUExL05YOC9CSHNUWWlJRnNtZjNvMUk2TTNIbnJxSGtmdFptSVZLYXRhUlphZERMcGJUcAo0MjZrcFk4V25uVjl1ZFhNUEhtdkJaK1Aza0tqS2M5OW9ZL3U0bXRuUFJlQmowTEl6KzNTbWM2Y1Vwa2RxL0VJClZLMnhDdkZtL3VKTjkzaUxQeXgySEpVZitidS9mK0d2SDhGejhLQ2UvMFBwS0N2N0FvSUJBUUROS3d1MGpsYUkKWTBtdHJKWnZYVVBXdEszWk5VUTI0QnVWY0N2aTk5UjM5MWYrK29aK2c4aWIxU3FxTEdObVkzREo0V3NiTHRwaQo5dG9QRExUNG1nWkFVRWhqUkxZK1MwSWVYVFZ4ZE4vSk9aNmVNYW15TTN4NzVlZldQSUxoeExrNEFlaWJHSWhhCkw1TG4yQ1dsRGpjN21HWk5qVW4wSGJYdmR3RXREbmxob0FuRkRwS0NPeEVGdCtyMmNrZTNEMFN0cG5GZGNEZnAKakw4Tkhtc1NQQnoyVEZ0TWh0Y3prRkIvMXBjNUdyZiszTGVtSFFtS3BPQ2ZGUWNTK1ZDSTFVVTVnZmhrcjZJUwp5Y0N2dmRpb1N3bW9scWhhQnp1Zzl5Q3gxcFVMOXMyRmFpV0lNenZ2c3k2M2xaa0VDOTAwOVp5NXJHbzBSV044CkhyNUhsbEtYczA0TEFvSUJBUURQSHlWM1cxVnpMMEtPU3hneXd6NzBzWlkvYkNOVGhFRGVtVGp3TWV0dksxekIKTE5pS3NtWFZHdnlBbjNNOHV2RkFBdkZSaDVOVEhiSE9ldEN0Nm1QcklIL1l3Z21xUHMzMS92aEM3bFoyM3VaKwpBUWx4OWRqU2NsOStpR1V4ZmJIQkNBejZ6WEdPbWdHSkJKbmx5WTJ6empkTllpdTZlRk1EOUVCeUlsVVZod2g3ClUwQkV0NTJZdC91ZG9kZUxwYkZYbzV4VEROdHpXa2FTcVBmbDF4UjVBVGtxY1pPMUVEWDJIUGZVeld4dXRYcFAKT2hHcXUzWnp1cnR0K1U0UzdTTExlcGV4enZLZ1N5VWg3eE51L0E3L1ZWakMvNlMrbG95NzJZdElYOGgyZk9rQgo2TEh6NHFNd3pISm5nbnB2a2FaZzNMd014cjNPY05QeFB6ei9oek9QQW9JQkFRQ1E2czNLekJ0ZEhOeUcrdmdMClUxSStqc0taUU9HYzdURXVuZHV4NXFIQjF3amx4bWxIWmFoR1FneHZ4UWkwNHBwaFRvTEw0WTFLQjlqQWRwWkIKWHZINWJYdWorbjNMaEhjQVlaQUZRcXRyUS9MQkJJMDduTmhaMzJ1aFRINmFIODFBUFVEaWhES1RtVFRuNUNtNgo2MDZpSHFSc05OYyt3ZG1uZW1SdlFlRUV6dmozb3JKam9Ic0drZ0U1OEVDdGtmQk53OW9oU01tRmd1L1R3VitaCnNySTJXbnJHbEJ2ZmhSa0hJemtQa2NyVEQyMzh2RmZvQVV2VHNoT2NHRlFGUXJjeHhwYi83M3JJVUk5MDB1RDkKQm51ZEJFV0h5Y0laa1ZVYnFGa0E2V1FEejVVUkhqZEF1VXpQU2JDYVJoTUtmRTRtYkIxY0xJTDN3Zk5mTjFQQgphVm8vQW9JQkFGSVNWUjVzVmV3WTJ1QnU5YTRlYjY0cC8zMGcrQmFPbXZoVnQyZ0xmbTY1c0NDTHpZSDRHamNXClpJMUlQdmY3TnRUZkthL1J2TkVHY0dzMkdZeVdoVXU0R2xDNXQzb0tEeVpvNjZvSFNlTTAwNW5EYnNNc3phZVEKbTFjMGVHajhOc1NmKzNHSHhUd1ZBdHh3T2xFa3pueExFK2RaQURENDlESlNHOUIvRm5HLzBnNkxHZk94U1dSawpKM2lRQVVUcmlWUktjSXhCbVllL0JVeHR5Zmt3RXYzV2pjN1c1TE1SelQ4N3BsamQyaTRqeTFmeFNxWENIOVd5CnRCdXRDZEkzMVVjUWRaOWpyUHlkQ3k1ZUpuZzA4N3BIU012c1ZIdi9DRFAzYWthNUhRVS90Q01FUnNhRkpLaVMKbDJxZUdpNno1ZzQwbzl3ZDNzMHNCYVBlUHRaN2RVWT0KLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQo=
|
||||
type: kubernetes.io/tls
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: app1
|
||||
labels:
|
||||
app: app1
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: app1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: app1
|
||||
spec:
|
||||
containers:
|
||||
- name: app1
|
||||
image: tutum/hello-world
|
||||
ports:
|
||||
- containerPort: 80
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: app2
|
||||
labels:
|
||||
app: app2
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: app2
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: app2
|
||||
spec:
|
||||
containers:
|
||||
- name: app2
|
||||
image: tutum/hello-world
|
||||
ports:
|
||||
- containerPort: 80
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: app3
|
||||
labels:
|
||||
app: app3
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: app3
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: app3
|
||||
spec:
|
||||
containers:
|
||||
- name: app3
|
||||
image: tutum/hello-world
|
||||
ports:
|
||||
- containerPort: 80
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: svc-app1
|
||||
spec:
|
||||
selector:
|
||||
app: app1
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 80
|
||||
targetPort: 80
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: svc-app2
|
||||
spec:
|
||||
selector:
|
||||
app: app2
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 80
|
||||
targetPort: 80
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: svc-app3
|
||||
spec:
|
||||
selector:
|
||||
app: app3
|
||||
ports:
|
||||
- protocol: TCP
|
||||
port: 80
|
||||
targetPort: 80
|
||||
26
examples/kubernetes-tls/tests.json
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"name": "kubernetes-ingress",
|
||||
"kinds": ["kubernetes"],
|
||||
"timeout": 60,
|
||||
"delay": 60,
|
||||
"tests": [
|
||||
{
|
||||
"type": "string",
|
||||
"url": "https://app1.example.com",
|
||||
"string": "hello",
|
||||
"tls": "app1.example.com,app2.example.com"
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"url": "https://app2.example.com",
|
||||
"string": "hello",
|
||||
"tls": "app1.example.com,app2.example.com"
|
||||
},
|
||||
{
|
||||
"type": "string",
|
||||
"url": "https://app3.example.com",
|
||||
"string": "hello",
|
||||
"tls": "app3.example.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -4,7 +4,7 @@ metadata:
|
|||
name: cr-bunkerweb
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["services", "pods", "configmaps"]
|
||||
resources: ["services", "pods", "configmaps", "secrets"]
|
||||
verbs: ["get", "watch", "list"]
|
||||
- apiGroups: ["networking.k8s.io"]
|
||||
resources: ["ingresses"]
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ metadata:
|
|||
name: cr-bunkerweb
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["services", "pods", "configmaps"]
|
||||
resources: ["services", "pods", "configmaps", "secrets"]
|
||||
verbs: ["get", "watch", "list"]
|
||||
- apiGroups: ["networking.k8s.io"]
|
||||
resources: ["ingresses"]
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ metadata:
|
|||
name: cr-bunkerweb
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["services", "pods", "configmaps"]
|
||||
resources: ["services", "pods", "configmaps", "secrets"]
|
||||
verbs: ["get", "watch", "list"]
|
||||
- apiGroups: ["networking.k8s.io"]
|
||||
resources: ["ingresses"]
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ metadata:
|
|||
name: cr-bunkerweb
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["services", "pods", "configmaps"]
|
||||
resources: ["services", "pods", "configmaps", "secrets"]
|
||||
verbs: ["get", "watch", "list"]
|
||||
- apiGroups: ["networking.k8s.io"]
|
||||
resources: ["ingresses"]
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ metadata:
|
|||
name: cr-bunkerweb
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["services", "pods", "configmaps"]
|
||||
resources: ["services", "pods", "configmaps", "secrets"]
|
||||
verbs: ["get", "watch", "list"]
|
||||
- apiGroups: ["networking.k8s.io"]
|
||||
resources: ["ingresses"]
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ metadata:
|
|||
name: cr-bunkerweb
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["services", "pods", "configmaps"]
|
||||
resources: ["services", "pods", "configmaps", "secrets"]
|
||||
verbs: ["get", "watch", "list"]
|
||||
- apiGroups: ["networking.k8s.io"]
|
||||
resources: ["ingresses"]
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;2;3m▄[48;2;0;0;0m[38;2;2;8;11m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;5;24;33m▄[48;2;0;0;0m[38;2;11;52;72m▄[48;2;0;0;1m[38;2;14;67;94m▄[48;2;0;2;2m[38;2;15;72;101m▄[48;2;0;1;2m[38;2;16;73;101m▄[48;2;0;0;0m[38;2;6;30;42m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;1;4;7m▄[48;2;3;15;21m[38;2;15;74;104m▄[48;2;9;41;56m[38;2;19;90;126m▄[48;2;8;41;57m[38;2;19;89;124m▄[48;2;8;41;57m[38;2;19;89;124m▄[48;2;8;39;54m[38;2;19;91;127m▄[48;2;1;4;5m[38;2;7;35;48m▄[48;2;5;23;32m[38;2;9;46;64m▄[48;2;14;66;92m[38;2;19;92;128m▄[48;2;14;67;93m[38;2;18;88;122m▄[48;2;14;66;93m[38;2;18;88;122m▄[48;2;14;68;94m[38;2;18;88;123m▄[48;2;12;57;80m[38;2;19;90;126m▄[48;2;1;4;6m[38;2;10;47;66m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;2;3m[38;2;2;11;16m▄[48;2;12;59;83m[38;2;17;84;118m▄[48;2;18;88;122m[38;2;18;87;121m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;121m[38;2;18;86;120m▄[48;2;18;85;118m[38;2;19;90;126m▄[48;2;5;21;29m[38;2;8;37;52m▄[48;2;10;49;68m[38;2;11;53;75m▄[48;2;19;89;124m[38;2;19;89;124m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;15;71;99m[38;2;18;90;125m▄[48;2;12;56;79m[38;2;15;75;104m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;1;7;10m[38;2;7;34;48m▄[48;2;13;64;89m[38;2;19;90;125m▄[48;2;14;67;93m[38;2;18;88;123m▄[48;2;14;67;93m[38;2;18;88;122m▄[48;2;14;65;90m[38;2;18;88;123m▄[48;2;9;43;59m[38;2;18;83;116m▄[48;2;3;14;19m[38;2;7;34;47m▄[48;2;8;37;52m[38;2;18;88;122m▄[48;2;9;42;58m[38;2;19;89;124m▄[48;2;5;26;36m[38;2;18;86;120m▄[48;2;3;17;23m[38;2;18;84;118m▄[48;2;3;17;23m[38;2;18;84;118m▄[48;2;3;17;23m[38;2;18;84;118m▄[48;2;1;5;6m[38;2;16;74;103m▄[48;2;0;1;2m[38;2;15;71;100m▄[48;2;0;2;2m[38;2;15;72;101m▄[48;2;0;0;0m[38;2;12;59;83m▄[48;2;0;0;0m[38;2;10;46;64m▄[48;2;0;0;0m[38;2;2;8;12m▄[48;2;0;0;0m[38;2;5;24;34m▄[48;2;0;0;0m[38;2;6;27;38m▄[48;2;0;0;0m[38;2;5;24;34m▄[48;2;0;0;0m[38;2;2;9;12m▄[48;2;0;0;0m[38;2;2;8;11m▄[48;2;0;0;0m[38;2;0;1;1m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[0m
|
||||
[48;2;0;1;1m[38;2;14;64;89m▄[48;2;3;14;20m[38;2;17;85;118m▄[48;2;4;17;24m[38;2;18;86;121m▄[48;2;7;35;48m[38;2;19;89;124m▄[48;2;9;40;56m[38;2;19;90;125m▄[48;2;12;57;80m[38;2;19;89;124m▄[48;2;14;64;89m[38;2;19;89;124m▄[48;2;15;71;98m[38;2;18;88;123m▄[48;2;17;81;112m[38;2;18;87;121m▄[48;2;14;67;93m[38;2;19;89;123m▄[48;2;11;52;72m[38;2;19;90;125m▄[48;2;3;15;20m[38;2;17;82;115m▄[48;2;0;0;0m[38;2;3;15;21m▄[48;2;15;72;100m[38;2;11;50;71m▄[48;2;19;92;128m[38;2;19;90;125m▄[48;2;18;88;123m[38;2;18;86;120m▄[48;2;18;88;123m[38;2;18;86;120m▄[48;2;19;91;127m[38;2;19;89;124m▄[48;2;12;61;85m[38;2;12;58;81m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;1;5;8m[38;2;1;3;5m▄[48;2;16;79;111m[38;2;15;72;100m▄[48;2;18;87;122m[38;2;18;88;123m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;19;90;125m[38;2;19;90;125m▄[48;2;9;46;65m[38;2;9;45;63m▄[48;2;9;44;62m[38;2;9;44;62m▄[48;2;19;90;125m[38;2;19;90;125m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;121m[38;2;18;86;120m▄[48;2;19;89;123m[38;2;18;87;122m▄[48;2;6;29;41m[38;2;17;82;115m▄[48;2;1;6;8m[38;2;4;16;23m▄[48;2;16;80;111m[38;2;14;67;93m▄[48;2;18;87;121m[38;2;18;88;123m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;19;90;125m[38;2;19;90;125m▄[48;2;8;36;51m[38;2;8;36;51m▄[48;2;11;53;74m[38;2;11;53;74m▄[48;2;19;89;124m[38;2;19;89;124m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;88;123m[38;2;18;88;123m▄[48;2;15;73;102m[38;2;14;67;94m▄[48;2;0;2;2m[38;2;4;17;24m▄[48;2;14;66;92m[38;2;18;84;118m▄[48;2;19;88;123m[38;2;18;86;121m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;19;90;125m[38;2;19;87;122m▄[48;2;11;54;76m[38;2;4;20;28m▄[48;2;4;18;25m[38;2;5;21;29m▄[48;2;18;88;122m[38;2;18;88;122m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;121m[38;2;18;86;120m▄[48;2;18;86;121m[38;2;18;86;120m▄[48;2;18;86;121m[38;2;18;87;121m▄[48;2;18;88;122m[38;2;18;87;121m▄[48;2;18;88;123m[38;2;18;87;121m▄[48;2;18;88;123m[38;2;18;86;121m▄[48;2;19;89;125m[38;2;18;88;123m▄[48;2;18;86;119m[38;2;14;71;99m▄[48;2;8;38;53m[38;2;5;26;37m▄[48;2;18;88;123m[38;2;18;88;122m▄[48;2;19;89;124m[38;2;18;86;120m▄[48;2;18;88;123m[38;2;18;86;120m▄[48;2;17;81;113m[38;2;18;87;121m▄[48;2;17;81;113m[38;2;18;87;121m▄[48;2;14;68;95m[38;2;18;88;123m▄[48;2;14;64;89m[38;2;19;89;124m▄[48;2;10;49;68m[38;2;19;90;125m▄[48;2;6;28;39m[38;2;19;88;123m▄[48;2;0;2;3m[38;2;15;70;98m▄[48;2;0;0;0m[38;2;5;24;33m▄[48;2;0;0;0m[38;2;0;0;0m▄[0m
|
||||
[48;2;16;78;109m[38;2;14;66;91m▄[48;2;18;88;122m[38;2;18;88;123m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;88;122m▄[48;2;18;86;120m[38;2;18;87;121m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;19;91;126m[38;2;19;90;125m▄[48;2;9;43;61m[38;2;9;45;63m▄[48;2;9;45;64m[38;2;7;36;51m▄[48;2;19;90;125m[38;2;19;89;124m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;19;88;123m[38;2;18;87;122m▄[48;2;14;68;95m[38;2;16;79;110m▄[48;2;0;2;4m[38;2;1;5;8m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;12;58;81m[38;2;12;59;82m▄[48;2;19;89;124m[38;2;19;89;124m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;19;90;125m[38;2;19;90;125m▄[48;2;9;45;63m[38;2;9;44;62m▄[48;2;9;44;62m[38;2;9;44;62m▄[48;2;19;90;125m[38;2;19;90;125m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;87;122m[38;2;18;86;120m▄[48;2;17;80;111m[38;2;18;87;121m▄[48;2;18;84;117m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;19;90;125m[38;2;19;90;125m▄[48;2;8;36;51m[38;2;8;36;51m▄[48;2;11;53;74m[38;2;11;53;74m▄[48;2;19;89;124m[38;2;19;89;124m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;88;123m[38;2;18;86;120m▄[48;2;13;62;88m[38;2;18;87;121m▄[48;2;11;53;74m[38;2;18;87;121m▄[48;2;19;89;124m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;19;88;123m[38;2;19;90;125m▄[48;2;15;70;98m[38;2;8;37;52m▄[48;2;0;0;1m[38;2;0;0;0m▄[48;2;9;43;60m[38;2;9;45;63m▄[48;2;19;90;125m[38;2;19;90;125m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;87;121m▄[48;2;18;86;119m[38;2;18;84;117m▄[48;2;17;81;113m[38;2;8;38;53m▄[48;2;17;81;113m[38;2;4;21;30m▄[48;2;17;81;113m[38;2;4;22;30m▄[48;2;18;85;118m[38;2;6;28;40m▄[48;2;19;92;128m[38;2;7;32;44m▄[48;2;14;69;96m[38;2;4;19;27m▄[48;2;9;42;59m[38;2;10;47;66m▄[48;2;19;89;124m[38;2;19;90;125m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;88;123m▄[48;2;18;86;120m[38;2;18;88;123m▄[48;2;18;86;120m[38;2;18;88;123m▄[48;2;18;86;120m[38;2;18;87;122m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;19;89;124m[38;2;18;86;120m▄[48;2;17;83;116m[38;2;18;89;124m▄[48;2;5;24;33m[38;2;14;67;92m▄[0m
|
||||
[48;2;11;52;72m[38;2;8;38;52m▄[48;2;19;89;124m[38;2;19;89;124m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;88;123m▄[48;2;18;88;122m[38;2;10;47;65m▄[48;2;15;73;102m[38;2;1;4;5m▄[48;2;17;83;115m[38;2;5;22;30m▄[48;2;18;87;121m[38;2;17;83;116m▄[48;2;18;86;120m[38;2;18;87;121m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;19;90;125m[38;2;18;87;122m▄[48;2;9;46;65m[38;2;5;24;34m▄[48;2;4;20;28m[38;2;5;22;31m▄[48;2;18;88;123m[38;2;18;88;124m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;87;122m[38;2;18;87;122m▄[48;2;16;78;109m[38;2;16;79;111m▄[48;2;1;5;8m[38;2;2;8;12m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;12;60;83m[38;2;9;42;59m▄[48;2;19;89;124m[38;2;19;90;125m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;19;90;125m[38;2;18;88;123m▄[48;2;11;51;72m[38;2;14;69;97m▄[48;2;5;26;36m[38;2;5;23;33m▄[48;2;18;88;123m[38;2;18;88;122m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;19;90;125m[38;2;19;90;125m▄[48;2;8;36;51m[38;2;8;36;51m▄[48;2;11;53;74m[38;2;11;53;74m▄[48;2;19;89;124m[38;2;19;89;124m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;87;122m[38;2;18;87;122m▄[48;2;16;77;108m[38;2;16;76;106m▄[48;2;1;7;10m[38;2;1;5;6m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;9;45;63m[38;2;9;44;62m▄[48;2;19;90;125m[38;2;19;90;125m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;121m[38;2;18;86;120m▄[48;2;18;85;119m[38;2;18;86;120m▄[48;2;17;81;113m[38;2;18;87;121m▄[48;2;17;82;114m[38;2;18;87;122m▄[48;2;17;79;110m[38;2;19;87;121m▄[48;2;4;18;26m[38;2;5;21;29m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;11;54;75m[38;2;15;71;100m▄[48;2;19;90;125m[38;2;18;88;123m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;87;121m[38;2;18;88;122m▄[48;2;14;69;96m[38;2;6;29;41m▄[48;2;14;69;96m[38;2;3;13;18m▄[48;2;15;70;97m[38;2;0;0;0m▄[48;2;16;75;105m[38;2;3;13;18m▄[48;2;18;87;121m[38;2;17;83;116m▄[48;2;18;86;120m[38;2;18;87;121m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;87;121m▄[0m
|
||||
[48;2;4;20;27m[38;2;2;12;16m▄[48;2;17;85;118m[38;2;16;81;113m▄[48;2;18;87;121m[38;2;18;87;121m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;89;124m[38;2;18;88;123m▄[48;2;6;26;35m[38;2;15;70;97m▄[48;2;0;0;0m[38;2;1;4;6m▄[48;2;2;8;11m[38;2;6;29;41m▄[48;2;16;78;109m[38;2;19;89;124m▄[48;2;18;87;122m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;121m▄[48;2;6;30;42m[38;2;19;86;120m▄[48;2;3;13;18m[38;2;5;26;37m▄[48;2;17;83;116m[38;2;16;76;106m▄[48;2;18;87;121m[38;2;18;87;122m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;88;123m[38;2;18;88;123m▄[48;2;5;23;32m[38;2;5;23;31m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;7;33;46m[38;2;7;32;44m▄[48;2;19;90;125m[38;2;19;90;125m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;88;123m[38;2;18;88;123m▄[48;2;14;69;96m[38;2;14;69;96m▄[48;2;5;24;34m[38;2;5;24;34m▄[48;2;18;88;122m[38;2;18;88;122m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;121m▄[48;2;18;86;121m[38;2;17;82;114m▄[48;2;18;88;123m[38;2;14;65;91m▄[48;2;18;86;120m[38;2;19;88;122m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;19;90;125m[38;2;19;90;125m▄[48;2;8;36;51m[38;2;8;36;51m▄[48;2;11;53;74m[38;2;11;53;74m▄[48;2;19;89;124m[38;2;19;89;124m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;87;122m▄[48;2;18;88;122m[38;2;15;71;99m▄[48;2;18;87;122m[38;2;16;75;104m▄[48;2;18;86;120m[38;2;18;87;122m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;121m[38;2;18;86;120m▄[48;2;18;87;121m[38;2;19;90;125m▄[48;2;4;20;27m[38;2;10;47;65m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;10;51;72m[38;2;14;70;97m▄[48;2;19;89;124m[38;2;18;88;123m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;87;121m▄[48;2;18;87;121m[38;2;16;76;107m▄[48;2;18;88;123m[38;2;15;69;97m▄[48;2;18;88;123m[38;2;14;69;97m▄[48;2;18;89;124m[38;2;15;71;99m▄[48;2;18;86;120m[38;2;14;66;91m▄[48;2;3;12;17m[38;2;1;6;8m▄[48;2;0;0;0m[38;2;2;9;13m▄[48;2;15;71;98m[38;2;17;81;113m▄[48;2;18;88;123m[38;2;18;87;122m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;84;118m[38;2;18;86;121m▄[48;2;18;83;115m[38;2;18;87;121m▄[48;2;11;52;72m[38;2;19;89;125m▄[48;2;13;61;85m[38;2;19;88;123m▄[48;2;18;87;121m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;87;122m[38;2;19;89;125m▄[48;2;16;76;106m[38;2;11;54;75m▄[0m
|
||||
[48;2;0;0;0m[38;2;0;0;0m▄[48;2;14;70;97m[38;2;13;65;90m▄[48;2;18;88;123m[38;2;18;88;123m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;121m[38;2;18;86;121m▄[48;2;18;87;120m[38;2;18;84;117m▄[48;2;3;10;14m[38;2;8;40;55m▄[48;2;1;7;10m[38;2;8;39;54m▄[48;2;18;82;116m[38;2;16;78;108m▄[48;2;18;87;121m[38;2;18;87;122m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;19;89;124m[38;2;19;89;124m▄[48;2;12;58;80m[38;2;12;61;85m▄[48;2;16;75;105m[38;2;12;55;77m▄[48;2;18;87;122m[38;2;19;89;125m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;88;123m[38;2;18;86;120m▄[48;2;13;61;85m[38;2;18;88;123m▄[48;2;5;26;37m[38;2;19;89;124m▄[48;2;13;61;85m[38;2;18;88;123m▄[48;2;18;88;123m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;88;123m[38;2;19;91;127m▄[48;2;14;68;94m[38;2;10;45;63m▄[48;2;5;24;34m[38;2;3;16;23m▄[48;2;18;88;122m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;87;122m[38;2;18;87;122m▄[48;2;16;78;108m[38;2;17;79;110m▄[48;2;2;9;13m[38;2;1;3;4m▄[48;2;15;71;98m[38;2;4;20;27m▄[48;2;18;88;124m[38;2;18;85;119m▄[48;2;18;86;120m[38;2;18;87;121m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;19;90;125m[38;2;19;90;125m▄[48;2;8;36;51m[38;2;8;36;51m▄[48;2;11;53;74m[38;2;11;53;74m▄[48;2;19;89;124m[38;2;19;89;124m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;19;90;125m[38;2;19;90;125m▄[48;2;10;46;64m[38;2;10;49;68m▄[48;2;8;35;50m[38;2;2;10;13m▄[48;2;19;90;125m[38;2;17;84;117m▄[48;2;18;86;120m[38;2;18;86;121m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;19;88;123m[38;2;18;87;120m▄[48;2;14;67;94m[38;2;18;84;117m▄[48;2;0;1;2m[38;2;3;15;21m▄[48;2;14;69;96m[38;2;14;67;93m▄[48;2;18;88;123m[38;2;18;88;123m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;19;89;123m[38;2;18;86;120m▄[48;2;12;59;83m[38;2;18;87;122m▄[48;2;5;26;36m[38;2;18;88;123m▄[48;2;6;27;37m[38;2;19;88;123m▄[48;2;4;20;28m[38;2;18;85;118m▄[48;2;2;7;10m[38;2;17;80;113m▄[48;2;1;3;5m[38;2;14;67;93m▄[48;2;3;14;20m[38;2;4;18;25m▄[48;2;18;85;120m[38;2;18;84;118m▄[48;2;18;86;121m[38;2;18;86;121m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;87;121m▄[48;2;18;86;120m[38;2;19;89;124m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;86;120m▄[48;2;18;86;120m[38;2;18;87;121m▄[48;2;18;88;123m[38;2;17;80;112m▄[48;2;17;80;112m[38;2;6;28;39m▄[48;2;3;14;19m[38;2;0;0;0m▄[0m
|
||||
[48;2;0;0;0m[38;2;0;0;0m▄[48;2;10;47;66m[38;2;8;34;47m▄[48;2;19;91;126m[38;2;18;87;121m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;86;121m[38;2;18;84;117m▄[48;2;19;89;124m[38;2;18;84;117m▄[48;2;19;90;126m[38;2;18;84;117m▄[48;2;18;87;122m[38;2;18;84;117m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;19;90;125m[38;2;18;85;119m▄[48;2;12;58;81m[38;2;6;28;39m▄[48;2;4;18;25m[38;2;0;0;0m▄[48;2;18;87;121m[38;2;8;37;52m▄[48;2;18;88;122m[38;2;17;84;117m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;87;121m[38;2;18;85;118m▄[48;2;19;89;125m[38;2;14;69;95m▄[48;2;15;75;105m[38;2;3;13;18m▄[48;2;2;11;15m[38;2;0;0;0m▄[48;2;1;4;5m[38;2;1;4;6m▄[48;2;16;79;111m[38;2;13;66;94m▄[48;2;18;88;123m[38;2;16;79;116m▄[48;2;18;87;121m[38;2;15;76;111m▄[48;2;18;89;125m[38;2;13;65;95m▄[48;2;18;81;113m[38;2;11;52;77m▄[48;2;1;6;9m[38;2;0;0;1m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;9;44;61m[38;2;0;0;5m▄[48;2;19;91;127m[38;2;11;56;84m▄[48;2;18;88;123m[38;2;13;64;94m▄[48;2;18;88;123m[38;2;13;63;92m▄[48;2;18;88;123m[38;2;13;63;93m▄[48;2;20;93;129m[38;2;12;60;89m▄[48;2;8;37;53m[38;2;1;7;15m▄[48;2;11;54;76m[38;2;7;38;58m▄[48;2;19;91;127m[38;2;13;65;95m▄[48;2;18;88;123m[38;2;13;63;92m▄[48;2;18;88;123m[38;2;13;63;92m▄[48;2;19;92;128m[38;2;11;64;94m▄[48;2;11;52;73m[38;2;0;25;38m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;14;65;92m[38;2;6;26;42m▄[48;2;19;89;124m[38;2;16;79;116m▄[48;2;18;87;121m[38;2;16;78;113m▄[48;2;18;87;121m[38;2;16;77;113m▄[48;2;19;89;125m[38;2;16;80;116m▄[48;2;7;35;49m[38;2;10;51;76m▄[48;2;14;66;92m[38;2;13;65;96m▄[48;2;18;89;124m[38;2;17;83;117m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;89;124m[38;2;18;85;119m▄[48;2;16;78;108m[38;2;15;70;98m▄[48;2;8;40;56m[38;2;9;41;57m▄[48;2;19;89;124m[38;2;19;87;121m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;18;88;122m[38;2;18;86;120m▄[48;2;17;79;111m[38;2;13;66;92m▄[48;2;10;48;67m[38;2;0;4;5m▄[48;2;18;85;118m[38;2;17;78;108m▄[48;2;18;87;121m[38;2;18;85;118m▄[48;2;18;87;121m[38;2;18;84;117m▄[48;2;19;89;124m[38;2;18;85;119m▄[48;2;13;63;89m[38;2;16;76;106m▄[48;2;0;0;0m[38;2;1;4;6m▄[48;2;0;0;0m[38;2;0;0;0m▄[0m
|
||||
[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;2;3m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;0;1;1m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;2;11;15m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;13;17m[38;2;0;0;0m▄[48;2;0;2;3m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;7;27;20m[38;2;18;68;40m▄[48;2;19;73;54m[38;2;50;184;109m▄[48;2;18;68;50m[38;2;48;177;106m▄[48;2;16;58;35m[38;2;49;178;107m▄[48;2;16;57;33m[38;2;49;178;108m▄[48;2;16;57;34m[38;2;46;177;106m▄[48;2;16;57;35m[38;2;42;176;103m▄[48;2;16;57;34m[38;2;47;178;107m▄[48;2;16;57;34m[38;2;49;178;108m▄[48;2;16;57;35m[38;2;47;177;106m▄[48;2;16;57;35m[38;2;42;175;103m▄[48;2;16;57;35m[38;2;46;177;105m▄[48;2;16;57;34m[38;2;49;178;107m▄[48;2;15;56;33m[38;2;44;176;104m▄[48;2;16;58;35m[38;2;44;176;104m▄[48;2;16;57;35m[38;2;44;176;104m▄[48;2;16;57;35m[38;2;44;176;104m▄[48;2;13;57;33m[38;2;47;177;106m▄[48;2;83;109;95m[38;2;60;183;115m▄[48;2;150;153;151m[38;2;158;223;187m▄[48;2;39;75;56m[38;2;76;189;127m▄[48;2;15;58;35m[38;2;40;174;101m▄[48;2;18;69;51m[38;2;42;174;101m▄[48;2;18;70;52m[38;2;45;175;103m▄[48;2;18;70;52m[38;2;49;177;105m▄[48;2;18;70;52m[38;2;48;176;105m▄[48;2;17;65;45m[38;2;48;177;106m▄[48;2;18;69;50m[38;2;50;183;110m▄[48;2;8;32;29m[38;2;16;60;35m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;13;18m[38;2;0;0;0m▄[48;2;2;8;11m[38;2;0;0;0m▄[48;2;1;5;7m[38;2;0;0;0m▄[48;2;3;13;18m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;2;10;13m[38;2;0;0;0m▄[48;2;0;1;1m[38;2;0;0;0m▄[48;2;2;11;16m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;3;12;17m[38;2;0;0;0m▄[48;2;2;11;15m[38;2;0;0;0m▄[48;2;0;1;1m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[0m
|
||||
[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;18;66;40m[38;2;18;66;40m▄[48;2;49;179;108m[38;2;49;179;108m▄[48;2;47;172;104m[38;2;47;172;104m▄[48;2;47;172;104m[38;2;47;172;104m▄[48;2;43;170;101m[38;2;45;171;102m▄[48;2;97;192;140m[38;2;73;182;123m▄[48;2;146;212;176m[38;2;163;218;189m▄[48;2;74;183;124m[38;2;57;176;111m▄[48;2;36;167;96m[38;2;100;193;142m▄[48;2;77;184;125m[38;2;57;176;111m▄[48;2;143;210;174m[38;2;167;220;191m▄[48;2;89;189;134m[38;2;65;179;117m▄[48;2;40;169;99m[38;2;98;192;141m▄[48;2;99;193;141m[38;2;148;212;177m▄[48;2;145;211;175m[38;2;62;178;115m▄[48;2;145;211;175m[38;2;64;179;117m▄[48;2;93;191;137m[38;2;153;214;181m▄[48;2;43;170;101m[38;2;91;190;135m▄[48;2;40;169;99m[38;2;36;168;96m▄[48;2;134;207;167m[38;2;162;218;188m▄[48;2;115;199;153m[38;2;176;224;198m▄[48;2;136;208;169m[38;2;75;183;125m▄[48;2;137;208;169m[38;2;88;188;134m▄[48;2;72;182;123m[38;2;167;220;191m▄[48;2;43;170;101m[38;2;66;180;118m▄[48;2;47;172;104m[38;2;45;171;102m▄[48;2;47;172;104m[38;2;47;172;104m▄[48;2;49;178;108m[38;2;49;178;108m▄[48;2;16;60;36m[38;2;16;60;36m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[0m
|
||||
[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;18;66;40m[38;2;18;66;40m▄[48;2;49;179;108m[38;2;49;179;108m▄[48;2;47;172;104m[38;2;47;172;104m▄[48;2;47;172;104m[38;2;47;172;104m▄[48;2;47;172;104m[38;2;47;172;104m▄[48;2;46;172;104m[38;2;41;169;99m▄[48;2;142;210;174m[38;2;130;205;165m▄[48;2;96;192;140m[38;2;173;222;195m▄[48;2;210;237;222m[38;2;118;201;156m▄[48;2;91;190;136m[38;2;173;222;195m▄[48;2;142;210;173m[38;2;119;201;157m▄[48;2;37;168;97m[38;2;34;167;95m▄[48;2;157;216;184m[38;2;137;208;170m▄[48;2;158;216;185m[38;2;117;200;155m▄[48;2;130;205;164m[38;2;59;177;112m▄[48;2;129;205;164m[38;2;63;179;116m▄[48;2;151;214;180m[38;2;64;179;116m▄[48;2;136;207;169m[38;2;61;177;114m▄[48;2;35;167;95m[38;2;37;168;97m▄[48;2;149;213;178m[38;2;152;214;180m▄[48;2;78;184;127m[38;2;92;190;137m▄[48;2;40;169;99m[38;2;37;168;97m▄[48;2;36;168;96m[38;2;35;167;95m▄[48;2;107;196;148m[38;2;119;201;156m▄[48;2;115;199;154m[38;2;107;196;148m▄[48;2;41;169;99m[38;2;41;170;100m▄[48;2;47;172;104m[38;2;47;172;104m▄[48;2;49;178;108m[38;2;49;178;108m▄[48;2;16;60;36m[38;2;16;60;36m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[0m
|
||||
[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;18;67;41m[38;2;14;51;31m▄[48;2;50;183;110m[38;2;38;138;83m▄[48;2;48;176;106m[38;2;36;133;80m▄[48;2;48;175;106m[38;2;38;141;85m▄[48;2;47;172;104m[38;2;47;172;104m▄[48;2;41;170;100m[38;2;47;172;104m▄[48;2;103;194;145m[38;2;51;174;107m▄[48;2;177;224;199m[38;2;58;176;112m▄[48;2;46;172;103m[38;2;44;171;102m▄[48;2;191;230;209m[38;2;64;179;116m▄[48;2;90;189;135m[38;2;51;174;107m▄[48;2;40;169;99m[38;2;47;172;104m▄[48;2;63;178;116m[38;2;44;171;102m▄[48;2;156;215;183m[38;2;55;175;110m▄[48;2;118;201;156m[38;2;104;195;145m▄[48;2;104;195;146m[38;2;112;198;151m▄[48;2;142;210;173m[38;2;82;186;129m▄[48;2;98;192;141m[38;2;46;172;103m▄[48;2;68;181;120m[38;2;66;180;118m▄[48;2;185;227;204m[38;2;84;187;131m▄[48;2;175;223;197m[38;2;67;180;118m▄[48;2;103;194;144m[38;2;117;200;154m▄[48;2;118;200;156m[38;2;113;198;152m▄[48;2;154;214;181m[38;2;54;175;109m▄[48;2;54;175;109m[38;2;44;171;102m▄[48;2;46;172;103m[38;2;47;172;104m▄[48;2;47;172;104m[38;2;47;172;104m▄[48;2;49;178;108m[38;2;49;178;108m▄[48;2;16;60;36m[38;2;16;60;36m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[0m
|
||||
[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;1;1m▄[48;2;0;0;0m[38;2;1;4;6m▄[48;2;0;0;0m[38;2;1;5;7m▄[48;2;0;0;0m[38;2;0;1;1m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;4;32;45m▄[48;2;0;0;0m[38;2;8;65;91m▄[48;2;0;2;2m[38;2;9;69;97m▄[48;2;1;6;8m[38;2;10;75;106m▄[48;2;1;5;8m[38;2;10;75;106m▄[48;2;0;0;0m[38;2;2;18;25m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;1;4;5m▄[48;2;3;20;29m[38;2;10;73;103m▄[48;2;5;41;57m[38;2;11;89;125m▄[48;2;6;48;67m[38;2;11;87;122m▄[48;2;7;54;75m[38;2;11;87;123m▄[48;2;6;44;63m[38;2;11;87;122m▄[48;2;0;2;3m[38;2;2;16;22m▄[48;2;4;28;39m[38;2;7;51;71m▄[48;2;9;72;100m[38;2;11;89;126m▄[48;2;10;75;105m[38;2;11;86;120m▄[48;2;10;77;107m[38;2;11;86;120m▄[48;2;10;81;113m[38;2;11;86;120m▄[48;2;7;55;78m[38;2;11;88;123m▄[48;2;0;1;2m[38;2;5;39;55m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;1;2m[38;2;0;2;3m▄[48;2;8;63;89m[38;2;9;73;102m▄[48;2;11;87;122m[38;2;11;87;121m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;86;120m[38;2;11;85;119m▄[48;2;10;82;115m[38;2;11;87;123m▄[48;2;2;13;18m[38;2;3;21;30m▄[48;2;4;33;45m[38;2;5;38;53m▄[48;2;11;88;123m[38;2;11;89;124m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;83;117m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;88;123m▄[48;2;7;53;74m[38;2;7;58;81m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;3;5m[38;2;3;25;35m▄[48;2;8;62;86m[38;2;11;87;123m▄[48;2;9;72;101m[38;2;11;86;121m▄[48;2;9;67;94m[38;2;11;87;121m▄[48;2;8;64;90m[38;2;11;89;124m▄[48;2;7;56;78m[38;2;9;73;102m▄[48;2;1;9;12m[38;2;2;14;19m▄[48;2;5;38;53m[38;2;10;82;114m▄[48;2;6;43;60m[38;2;11;88;123m▄[48;2;5;35;50m[38;2;11;87;122m▄[48;2;4;29;41m[38;2;11;86;121m▄[48;2;3;23;32m[38;2;11;85;119m▄[48;2;2;17;24m[38;2;11;83;116m▄[48;2;1;12;16m[38;2;10;80;112m▄[48;2;1;7;9m[38;2;10;76;107m▄[48;2;0;3;4m[38;2;9;72;100m▄[48;2;0;0;0m[38;2;9;67;94m▄[48;2;0;0;0m[38;2;7;54;76m▄[48;2;0;0;0m[38;2;1;5;7m▄[48;2;0;0;0m[38;2;4;29;40m▄[48;2;0;0;0m[38;2;4;35;49m▄[48;2;0;0;0m[38;2;3;24;34m▄[48;2;0;0;0m[38;2;2;16;23m▄[48;2;0;0;0m[38;2;1;9;13m▄[48;2;0;0;0m[38;2;0;3;5m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[0m
|
||||
[48;2;1;4;6m[38;2;9;72;100m▄[48;2;2;15;21m[38;2;11;84;118m▄[48;2;3;26;36m[38;2;11;87;122m▄[48;2;5;37;52m[38;2;11;88;124m▄[48;2;6;49;69m[38;2;11;88;124m▄[48;2;8;60;84m[38;2;11;88;123m▄[48;2;9;69;97m[38;2;11;87;122m▄[48;2;10;75;105m[38;2;11;86;121m▄[48;2;10;76;107m[38;2;11;86;121m▄[48;2;9;70;98m[38;2;11;87;122m▄[48;2;6;48;67m[38;2;11;90;126m▄[48;2;1;7;10m[38;2;8;64;90m▄[48;2;0;0;0m[38;2;0;2;3m▄[48;2;9;68;95m[38;2;7;58;82m▄[48;2;11;90;126m[38;2;11;88;123m▄[48;2;11;87;122m[38;2;11;85;119m▄[48;2;11;86;121m[38;2;11;85;119m▄[48;2;11;90;126m[38;2;11;89;124m▄[48;2;4;36;51m[38;2;6;43;60m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;4;5m[38;2;0;0;0m▄[48;2;10;75;104m[38;2;9;68;95m▄[48;2;11;86;121m[38;2;11;87;122m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;87;122m[38;2;11;88;123m▄[48;2;2;20;28m[38;2;3;25;36m▄[48;2;6;46;65m[38;2;5;41;58m▄[48;2;11;88;124m[38;2;11;89;124m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;86;120m[38;2;11;85;119m▄[48;2;11;84;118m[38;2;11;87;122m▄[48;2;3;21;30m[38;2;9;73;103m▄[48;2;0;0;0m[38;2;1;12;17m▄[48;2;9;72;101m[38;2;9;71;100m▄[48;2;11;87;121m[38;2;11;87;121m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;87;122m[38;2;11;87;122m▄[48;2;3;21;29m[38;2;2;21;29m▄[48;2;5;39;55m[38;2;5;39;55m▄[48;2;11;89;124m[38;2;11;89;124m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;88;124m[38;2;11;88;124m▄[48;2;7;55;77m[38;2;7;51;71m▄[48;2;0;0;0m[38;2;1;6;8m▄[48;2;7;56;79m[38;2;10;80;112m▄[48;2;11;88;123m[38;2;11;86;120m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;86;120m▄[48;2;11;88;124m[38;2;10;80;112m▄[48;2;5;38;53m[38;2;1;8;11m▄[48;2;1;10;14m[38;2;2;16;22m▄[48;2;11;83;116m[38;2;11;85;119m▄[48;2;11;86;120m[38;2;11;85;120m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;120m[38;2;11;88;123m▄[48;2;11;86;120m[38;2;11;88;123m▄[48;2;11;86;121m[38;2;11;87;122m▄[48;2;11;87;121m[38;2;11;86;121m▄[48;2;11;88;124m[38;2;11;87;123m▄[48;2;10;80;113m[38;2;9;72;101m▄[48;2;2;14;20m[38;2;2;15;21m▄[48;2;10;79;110m[38;2;11;82;115m▄[48;2;11;89;125m[38;2;11;86;120m▄[48;2;11;87;122m[38;2;11;85;119m▄[48;2;11;84;118m[38;2;11;85;120m▄[48;2;10;80;112m[38;2;11;86;120m▄[48;2;10;74;103m[38;2;11;87;121m▄[48;2;8;66;92m[38;2;11;87;122m▄[48;2;7;53;74m[38;2;11;88;124m▄[48;2;4;30;42m[38;2;11;88;123m▄[48;2;1;5;7m[38;2;9;74;104m▄[48;2;0;0;0m[38;2;3;27;37m▄[48;2;0;0;0m[38;2;0;0;0m▄[0m
|
||||
[48;2;11;83;116m[38;2;9;70;98m▄[48;2;11;86;120m[38;2;11;86;121m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;86;121m▄[48;2;11;85;119m[38;2;11;88;123m▄[48;2;11;85;119m[38;2;11;86;121m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;87;122m[38;2;11;88;123m▄[48;2;2;18;25m[38;2;4;28;40m▄[48;2;6;47;66m[38;2;5;38;53m▄[48;2;11;88;124m[38;2;11;89;124m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;88;124m[38;2;11;88;123m▄[48;2;6;50;69m[38;2;7;57;80m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;8;64;90m[38;2;7;58;81m▄[48;2;11;87;122m[38;2;11;88;123m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;88;124m[38;2;11;88;124m▄[48;2;4;29;41m[38;2;4;34;47m▄[48;2;5;36;50m[38;2;4;33;46m▄[48;2;11;89;124m[38;2;11;88;124m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;87;121m[38;2;11;85;119m▄[48;2;10;76;106m[38;2;11;86;121m▄[48;2;11;82;115m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;87;122m[38;2;11;86;120m▄[48;2;2;22;29m[38;2;2;18;25m▄[48;2;5;39;55m[38;2;5;39;55m▄[48;2;11;89;124m[38;2;11;89;124m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;88;123m[38;2;11;85;119m▄[48;2;7;56;78m[38;2;11;84;118m▄[48;2;5;39;55m[38;2;11;85;119m▄[48;2;11;88;123m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;88;124m[38;2;11;86;120m▄[48;2;7;54;75m[38;2;3;21;29m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;3;22;30m[38;2;4;27;38m▄[48;2;11;87;121m[38;2;11;88;122m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;120m[38;2;11;86;121m▄[48;2;11;82;114m[38;2;10;76;107m▄[48;2;7;58;81m[38;2;2;20;28m▄[48;2;8;61;86m[38;2;2;12;17m▄[48;2;9;68;95m[38;2;1;10;13m▄[48;2;10;74;104m[38;2;1;8;11m▄[48;2;10;82;115m[38;2;1;9;12m▄[48;2;8;58;82m[38;2;1;5;8m▄[48;2;2;19;27m[38;2;4;27;39m▄[48;2;11;85;119m[38;2;11;88;123m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;87;122m▄[48;2;11;85;119m[38;2;11;88;124m▄[48;2;11;85;119m[38;2;11;88;124m▄[48;2;11;85;119m[38;2;11;88;123m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;87;122m[38;2;11;85;119m▄[48;2;11;84;117m[38;2;11;87;122m▄[48;2;3;25;36m[38;2;9;70;99m▄[0m
|
||||
[48;2;7;56;78m[38;2;5;41;57m▄[48;2;11;87;122m[38;2;11;87;122m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;86;120m▄[48;2;11;86;121m[38;2;10;79;110m▄[48;2;10;76;106m[38;2;2;12;18m▄[48;2;8;59;83m[38;2;0;0;0m▄[48;2;10;78;109m[38;2;3;19;26m▄[48;2;11;86;120m[38;2;11;83;116m▄[48;2;11;85;119m[38;2;11;86;120m▄[48;2;11;85;119m[38;2;11;86;121m▄[48;2;11;88;123m[38;2;10;74;104m▄[48;2;3;23;33m[38;2;0;3;5m▄[48;2;4;29;41m[38;2;3;23;32m▄[48;2;11;88;124m[38;2;11;87;122m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;87;122m[38;2;11;87;122m▄[48;2;8;64;89m[38;2;9;69;96m▄[48;2;0;0;0m[38;2;0;1;1m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;7;52;73m[38;2;6;45;63m▄[48;2;11;88;124m[38;2;11;89;124m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;89;124m[38;2;11;88;124m▄[48;2;5;40;55m[38;2;6;43;60m▄[48;2;4;29;41m[38;2;3;24;34m▄[48;2;11;88;123m[38;2;11;88;123m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;86;120m[38;2;11;86;120m▄[48;2;2;17;24m[38;2;2;17;24m▄[48;2;5;39;55m[38;2;6;43;60m▄[48;2;11;89;124m[38;2;11;89;124m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;87;122m[38;2;11;87;122m▄[48;2;9;67;94m[38;2;9;67;94m▄[48;2;0;1;2m[38;2;0;1;1m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;4;32;45m[38;2;5;36;51m▄[48;2;11;88;123m[38;2;11;88;124m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;86;120m[38;2;11;85;119m▄[48;2;11;86;120m[38;2;11;85;119m▄[48;2;11;83;116m[38;2;11;86;120m▄[48;2;10;79;111m[38;2;11;86;121m▄[48;2;9;74;103m[38;2;11;87;121m▄[48;2;2;14;20m[38;2;2;18;26m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;5;37;52m[38;2;6;46;65m▄[48;2;11;88;124m[38;2;11;89;124m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;87;121m[38;2;11;86;121m▄[48;2;7;51;71m[38;2;3;26;37m▄[48;2;6;48;67m[38;2;0;3;4m▄[48;2;6;48;67m[38;2;0;0;0m▄[48;2;6;49;69m[38;2;0;0;0m▄[48;2;11;84;117m[38;2;9;69;97m▄[48;2;11;85;119m[38;2;11;87;122m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;84;118m▄[0m
|
||||
[48;2;4;27;37m[38;2;2;15;21m▄[48;2;11;86;121m[38;2;11;82;115m▄[48;2;11;85;119m[38;2;11;85;120m▄[48;2;11;87;121m[38;2;11;85;119m▄[48;2;10;74;103m[38;2;11;87;122m▄[48;2;0;2;3m[38;2;5;42;59m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;1;10;14m[38;2;4;29;41m▄[48;2;10;80;112m[38;2;11;88;123m▄[48;2;11;86;120m[38;2;11;85;119m▄[48;2;11;86;121m[38;2;11;85;119m▄[48;2;10;75;105m[38;2;11;88;123m▄[48;2;1;11;15m[38;2;9;70;98m▄[48;2;2;14;20m[38;2;2;14;20m▄[48;2;11;84;118m[38;2;10;80;112m▄[48;2;11;86;119m[38;2;11;86;120m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;86;121m[38;2;11;86;121m▄[48;2;10;75;105m[38;2;10;79;111m▄[48;2;1;4;5m[38;2;1;6;8m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;5;40;56m[38;2;4;31;43m▄[48;2;11;89;124m[38;2;11;88;124m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;88;124m[38;2;11;88;123m▄[48;2;6;48;68m[38;2;7;54;77m▄[48;2;3;20;28m[38;2;2;16;23m▄[48;2;11;87;121m[38;2;11;86;120m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;86;121m▄[48;2;11;86;120m[38;2;9;72;101m▄[48;2;11;87;123m[38;2;6;48;68m▄[48;2;11;85;119m[38;2;11;87;122m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;86;120m[38;2;11;86;120m▄[48;2;2;17;24m[38;2;2;17;24m▄[48;2;6;44;62m[38;2;6;44;62m▄[48;2;11;89;124m[38;2;11;89;124m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;87;122m▄[48;2;11;87;121m[38;2;7;53;74m▄[48;2;11;87;121m[38;2;8;59;83m▄[48;2;11;85;119m[38;2;11;87;122m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;86;120m[38;2;11;85;119m▄[48;2;11;83;116m[38;2;11;88;124m▄[48;2;2;14;19m[38;2;5;36;51m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;5;42;59m[38;2;6;47;66m▄[48;2;11;89;124m[38;2;11;89;124m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;86;121m▄[48;2;11;87;121m[38;2;9;67;94m▄[48;2;11;88;124m[38;2;6;49;69m▄[48;2;11;88;123m[38;2;7;56;79m▄[48;2;11;88;123m[38;2;8;65;91m▄[48;2;11;83;117m[38;2;8;59;82m▄[48;2;1;11;15m[38;2;0;3;4m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;7;55;78m[38;2;8;64;90m▄[48;2;11;88;123m[38;2;11;88;123m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;10;81;113m[38;2;11;86;120m▄[48;2;10;78;109m[38;2;11;86;121m▄[48;2;6;49;69m[38;2;11;88;123m▄[48;2;6;44;61m[38;2;11;88;123m▄[48;2;11;83;116m[38;2;11;85;119m▄[48;2;11;85;120m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;86;120m[38;2;11;88;123m▄[48;2;10;74;103m[38;2;6;48;67m▄[0m
|
||||
[48;2;1;6;8m[38;2;0;0;0m▄[48;2;10;75;105m[38;2;9;66;92m▄[48;2;11;86;121m[38;2;11;87;122m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;88;123m[38;2;11;88;122m▄[48;2;8;60;83m[38;2;8;66;92m▄[48;2;0;0;0m[38;2;2;17;24m▄[48;2;2;12;18m[38;2;4;30;42m▄[48;2;11;83;117m[38;2;10;79;111m▄[48;2;11;85;120m[38;2;11;86;120m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;87;122m[38;2;11;88;124m▄[48;2;4;28;39m[38;2;4;33;47m▄[48;2;9;72;101m[38;2;7;55;78m▄[48;2;11;87;121m[38;2;11;89;124m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;4;36;50m[38;2;11;86;121m▄[48;2;2;19;27m[38;2;11;86;120m▄[48;2;7;56;79m[38;2;11;87;122m▄[48;2;11;87;122m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;88;124m[38;2;11;88;124m▄[48;2;6;49;69m[38;2;3;27;38m▄[48;2;2;13;18m[38;2;1;11;15m▄[48;2;11;84;118m[38;2;11;83;117m▄[48;2;11;85;120m[38;2;11;86;120m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;87;122m[38;2;11;87;122m▄[48;2;9;67;95m[38;2;9;71;100m▄[48;2;0;1;1m[38;2;0;1;1m▄[48;2;8;62;87m[38;2;2;13;18m▄[48;2;11;88;123m[38;2;10;80;112m▄[48;2;11;85;119m[38;2;11;86;121m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;86;120m[38;2;11;86;120m▄[48;2;2;17;24m[38;2;2;17;24m▄[48;2;6;44;62m[38;2;6;44;62m▄[48;2;11;89;124m[38;2;11;89;124m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;88;124m[38;2;11;88;124m▄[48;2;4;31;43m[38;2;4;33;46m▄[48;2;3;21;29m[38;2;0;3;4m▄[48;2;11;87;122m[38;2;10;76;107m▄[48;2;11;85;119m[38;2;11;86;121m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;88;123m[38;2;11;86;120m▄[48;2;8;60;85m[38;2;10;79;110m▄[48;2;0;0;0m[38;2;1;5;7m▄[48;2;7;52;73m[38;2;7;56;79m▄[48;2;11;88;123m[38;2;11;88;123m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;87;123m[38;2;11;85;119m▄[48;2;7;54;76m[38;2;11;86;121m▄[48;2;2;17;23m[38;2;11;86;120m▄[48;2;1;12;16m[38;2;11;83;116m▄[48;2;1;8;12m[38;2;10;80;112m▄[48;2;1;4;6m[38;2;10;76;106m▄[48;2;0;0;0m[38;2;8;60;84m▄[48;2;0;1;2m[38;2;1;10;14m▄[48;2;9;71;100m[38;2;10;77;108m▄[48;2;11;87;122m[38;2;11;86;120m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;86;120m▄[48;2;11;85;119m[38;2;11;87;122m▄[48;2;11;85;119m[38;2;11;86;120m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;85;119m▄[48;2;11;85;119m[38;2;11;86;120m▄[48;2;11;87;122m[38;2;10;80;112m▄[48;2;10;77;109m[38;2;3;22;31m▄[48;2;2;11;16m[38;2;0;0;0m▄[0m
|
||||
[48;2;0;0;0m[38;2;0;0;0m▄[48;2;7;54;75m[38;2;5;37;52m▄[48;2;11;89;125m[38;2;10;80;113m▄[48;2;11;86;121m[38;2;10;77;108m▄[48;2;11;86;121m[38;2;10;77;108m▄[48;2;11;86;120m[38;2;10;78;109m▄[48;2;11;86;120m[38;2;10;78;109m▄[48;2;11;88;124m[38;2;10;78;109m▄[48;2;11;86;121m[38;2;10;77;108m▄[48;2;11;86;121m[38;2;10;77;108m▄[48;2;11;86;121m[38;2;10;77;108m▄[48;2;11;86;121m[38;2;10;78;110m▄[48;2;11;89;125m[38;2;9;71;99m▄[48;2;4;28;39m[38;2;1;8;11m▄[48;2;2;18;26m[38;2;0;0;0m▄[48;2;11;86;120m[38;2;4;35;49m▄[48;2;11;87;122m[38;2;10;77;108m▄[48;2;11;86;121m[38;2;10;78;109m▄[48;2;11;86;121m[38;2;10;77;108m▄[48;2;11;86;121m[38;2;10;77;108m▄[48;2;11;86;121m[38;2;10;77;108m▄[48;2;11;86;121m[38;2;10;77;108m▄[48;2;11;86;121m[38;2;10;77;109m▄[48;2;11;86;121m[38;2;10;78;110m▄[48;2;11;90;125m[38;2;7;54;76m▄[48;2;8;62;87m[38;2;1;6;9m▄[48;2;0;2;3m[38;2;0;0;0m▄[48;2;1;9;13m[38;2;0;1;4m▄[48;2;10;83;116m[38;2;7;61;89m▄[48;2;11;87;122m[38;2;9;76;109m▄[48;2;11;86;121m[38;2;9;73;104m▄[48;2;11;89;123m[38;2;8;71;102m▄[48;2;10;75;106m[38;2;6;48;69m▄[48;2;0;3;4m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;5;37;51m[38;2;0;0;0m▄[48;2;11;89;125m[38;2;6;47;68m▄[48;2;11;88;123m[38;2;7;63;91m▄[48;2;11;88;123m[38;2;7;58;84m▄[48;2;11;88;123m[38;2;7;59;84m▄[48;2;11;89;124m[38;2;6;51;74m▄[48;2;2;17;24m[38;2;0;2;5m▄[48;2;6;46;64m[38;2;3;27;40m▄[48;2;11;92;128m[38;2;7;64;92m▄[48;2;11;87;122m[38;2;1;56;83m▄[48;2;11;87;122m[38;2;3;58;85m▄[48;2;11;90;126m[38;2;8;66;95m▄[48;2;4;32;44m[38;2;2;17;26m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;7;54;75m[38;2;2;21;31m▄[48;2;11;90;126m[38;2;9;74;106m▄[48;2;11;86;121m[38;2;9;75;107m▄[48;2;11;86;121m[38;2;9;74;107m▄[48;2;11;88;124m[38;2;9;78;111m▄[48;2;3;26;36m[38;2;5;40;57m▄[48;2;8;60;85m[38;2;7;56;79m▄[48;2;11;89;125m[38;2;10;80;111m▄[48;2;11;86;121m[38;2;10;78;108m▄[48;2;11;86;121m[38;2;10;78;108m▄[48;2;11;86;121m[38;2;10;78;108m▄[48;2;11;86;121m[38;2;10;78;108m▄[48;2;11;86;121m[38;2;10;78;108m▄[48;2;11;87;121m[38;2;10;78;108m▄[48;2;11;87;122m[38;2;10;78;108m▄[48;2;11;89;125m[38;2;10;79;111m▄[48;2;10;77;107m[38;2;8;61;85m▄[48;2;2;17;24m[38;2;2;18;26m▄[48;2;11;82;115m[38;2;10;78;109m▄[48;2;11;87;122m[38;2;10;77;109m▄[48;2;11;86;121m[38;2;10;77;108m▄[48;2;11;87;122m[38;2;10;80;112m▄[48;2;10;78;109m[38;2;7;58;81m▄[48;2;4;33;46m[38;2;0;0;0m▄[48;2;10;79;110m[38;2;8;60;84m▄[48;2;11;87;122m[38;2;10;79;111m▄[48;2;11;86;121m[38;2;10;77;108m▄[48;2;11;89;124m[38;2;10;79;110m▄[48;2;9;67;93m[38;2;9;68;95m▄[48;2;0;0;0m[38;2;0;3;5m▄[48;2;0;0;0m[38;2;0;0;0m▄[0m
|
||||
[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;2;3m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;4;6m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;1;5;7m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;8m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;4;16;10m[38;2;33;123;75m▄[48;2;6;22;13m[38;2;45;169;102m▄[48;2;6;24;17m[38;2;44;164;99m▄[48;2;6;28;22m[38;2;44;163;98m▄[48;2;6;26;20m[38;2;43;163;98m▄[48;2;6;24;16m[38;2;38;162;94m▄[48;2;6;21;12m[38;2;39;162;96m▄[48;2;6;21;13m[38;2;44;164;100m▄[48;2;6;21;13m[38;2;44;164;99m▄[48;2;6;21;12m[38;2;39;162;96m▄[48;2;5;19;10m[38;2;38;162;95m▄[48;2;6;20;12m[38;2;44;164;99m▄[48;2;5;20;10m[38;2;43;164;99m▄[48;2;5;19;10m[38;2;39;162;95m▄[48;2;5;19;10m[38;2;38;162;95m▄[48;2;6;21;12m[38;2;39;162;95m▄[48;2;5;20;11m[38;2;43;164;99m▄[48;2;6;21;12m[38;2;43;164;98m▄[48;2;78;84;80m[38;2;94;195;141m▄[48;2;53;60;55m[38;2;134;206;167m▄[48;2;5;21;12m[38;2;34;160;91m▄[48;2;6;21;12m[38;2;38;162;95m▄[48;2;6;21;13m[38;2;39;162;96m▄[48;2;6;21;12m[38;2;44;164;99m▄[48;2;6;25;19m[38;2;44;164;98m▄[48;2;7;28;22m[38;2;44;163;98m▄[48;2;7;28;22m[38;2;45;168;101m▄[48;2;5;22;19m[38;2;32;122;73m▄[48;2;0;3;5m[38;2;0;0;0m▄[48;2;0;4;6m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;0;4;6m[38;2;0;0;0m▄[48;2;0;2;2m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;4;6m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;1;4;6m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;9m[38;2;0;0;0m▄[48;2;1;6;8m[38;2;0;0;0m▄[48;2;0;1;1m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[0m
|
||||
[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;34;130;79m[38;2;34;129;78m▄[48;2;47;179;108m[38;2;47;177;107m▄[48;2;46;174;105m[38;2;46;172;104m▄[48;2;46;173;104m[38;2;45;172;104m▄[48;2;51;175;108m[38;2;45;172;103m▄[48;2;101;195;144m[38;2;150;213;179m▄[48;2;89;191;136m[38;2;102;194;145m▄[48;2;44;172;103m[38;2;55;176;110m▄[48;2;45;173;104m[38;2;53;175;109m▄[48;2;94;193;140m[38;2;111;198;151m▄[48;2;100;195;144m[38;2;140;209;172m▄[48;2;48;174;106m[38;2;41;170;100m▄[48;2;47;174;105m[38;2;127;204;162m▄[48;2;102;196;145m[38;2;105;195;147m▄[48;2;122;203;159m[38;2;62;178;116m▄[48;2;103;196;146m[38;2;103;195;145m▄[48;2;48;174;106m[38;2;127;204;162m▄[48;2;43;172;102m[38;2;42;170;101m▄[48;2;63;179;117m[38;2;61;178;115m▄[48;2;128;205;163m[38;2;189;229;208m▄[48;2;96;193;140m[38;2;110;197;150m▄[48;2;125;205;161m[38;2;65;180;118m▄[48;2;100;195;144m[38;2;121;202;158m▄[48;2;45;173;104m[38;2;119;201;157m▄[48;2;46;173;105m[38;2;41;170;101m▄[48;2;46;174;105m[38;2;46;172;104m▄[48;2;47;179;108m[38;2;47;177;107m▄[48;2;34;130;79m[38;2;34;129;78m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[0m
|
||||
[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;34;129;78m[38;2;34;129;78m▄[48;2;47;177;107m[38;2;47;177;107m▄[48;2;46;172;104m[38;2;46;172;104m▄[48;2;46;172;104m[38;2;46;172;104m▄[48;2;40;170;100m[38;2;43;171;102m▄[48;2;95;192;139m[38;2;69;181;120m▄[48;2;89;189;135m[38;2;136;208;169m▄[48;2;139;209;172m[38;2;131;206;165m▄[48;2;131;206;165m[38;2;133;206;167m▄[48;2;95;192;139m[38;2;135;207;168m▄[48;2;85;188;132m[38;2;62;178;115m▄[48;2;61;178;115m[38;2;62;178;115m▄[48;2;170;221;194m[38;2;158;217;185m▄[48;2;105;195;147m[38;2;76;184;126m▄[48;2;110;197;150m[38;2;79;185;128m▄[48;2;106;196;148m[38;2;78;185;127m▄[48;2;166;219;190m[38;2;71;182;122m▄[48;2;62;179;116m[38;2;47;172;105m▄[48;2;63;179;116m[38;2;60;178;114m▄[48;2;148;213;178m[38;2;150;213;180m▄[48;2;38;169;98m[38;2;38;169;98m▄[48;2;43;171;102m[38;2;42;171;101m▄[48;2;41;170;100m[38;2;42;170;101m▄[48;2;141;210;173m[38;2;140;209;172m▄[48;2;55;176;111m[38;2;54;175;110m▄[48;2;45;172;103m[38;2;45;172;103m▄[48;2;47;177;107m[38;2;47;177;107m▄[48;2;34;129;78m[38;2;34;129;78m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[0m
|
||||
[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;34;129;78m[38;2;34;129;78m▄[48;2;47;177;107m[38;2;47;177;107m▄[48;2;46;172;104m[38;2;46;172;104m▄[48;2;46;172;104m[38;2;46;172;104m▄[48;2;46;172;104m[38;2;46;172;104m▄[48;2;45;172;104m[38;2;43;171;102m▄[48;2;180;225;201m[38;2;88;189;134m▄[48;2;98;193;141m[38;2;55;176;111m▄[48;2;104;195;146m[38;2;56;176;112m▄[48;2;175;223;197m[38;2;85;188;132m▄[48;2;43;171;102m[38;2;43;171;102m▄[48;2;42;170;101m[38;2;45;172;104m▄[48;2;119;201;157m[38;2;44;171;103m▄[48;2;115;199;154m[38;2;99;193;143m▄[48;2;66;180;118m[38;2;128;205;164m▄[48;2;80;185;129m[38;2;121;202;159m▄[48;2;117;200;155m[38;2;77;184;126m▄[48;2;53;175;109m[38;2;45;172;103m▄[48;2;92;190;137m[38;2;96;192;140m▄[48;2;195;231;212m[38;2;79;185;128m▄[48;2;114;199;153m[38;2;96;192;140m▄[48;2;71;182;122m[38;2;126;204;161m▄[48;2;124;203;160m[38;2;96;192;140m▄[48;2;111;198;151m[38;2;43;171;102m▄[48;2;41;170;101m[38;2;46;172;104m▄[48;2;46;172;104m[38;2;46;172;104m▄[48;2;47;177;107m[38;2;47;177;107m▄[48;2;34;129;78m[38;2;34;129;78m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[48;2;0;0;0m[38;2;0;0;0m▄[0m
|
||||
|
||||
|
|
|
|||
BIN
misc/logo.png
|
Before Width: | Height: | Size: 4 KiB After Width: | Height: | Size: 53 KiB |
|
|
@ -8,9 +8,9 @@ ansible==8.6.1 \
|
|||
--hash=sha256:18b397580c1f05ce5de1fe238508dd81218d278667956d2f7709320176c3ed4a \
|
||||
--hash=sha256:222735c32d2d2749f207e55ef740638bb97c7aaaa8b63bb7c7592d447da47584
|
||||
# via -r requirements-ansible.in
|
||||
ansible-core==2.15.7 \
|
||||
--hash=sha256:8a7988b8fbd1f4bb5799becae120b828de6248ba9056d83f427235533d655e2b \
|
||||
--hash=sha256:bc51d011bdb67538d1ee043e0f8072b3a849b78897caf15b6f294160c5c7c6ba
|
||||
ansible-core==2.15.8 \
|
||||
--hash=sha256:55e6f4350fb98ac5441620ba981b1d9f7b90aa5f320885965af996e149bd3caa \
|
||||
--hash=sha256:8aa49cb1ddbf33d88c2bb4bf09ecd4b0dd8b788e174adca8b88dda6e6bdbf59b
|
||||
# via ansible
|
||||
cffi==1.16.0 \
|
||||
--hash=sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc \
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
site_name: BunkerWeb
|
||||
site_name: BunkerWeb documentation
|
||||
site_url: https://docs.bunkerweb.io/
|
||||
repo_url: https://github.com/bunkerity/bunkerweb
|
||||
site_description: Make your web services secure by default.
|
||||
site_description: Documentation of BunkerWeb, the open source and next generation WAF.
|
||||
copyright: Copyright © <script>document.write(new Date().getFullYear())</script> Bunkerity
|
||||
#remote_branch: ?
|
||||
#remote_name: ?
|
||||
|
|
@ -69,5 +69,9 @@ extra:
|
|||
plugins:
|
||||
- search
|
||||
- print-site
|
||||
- social:
|
||||
cards_layout_options:
|
||||
background_color: "#0b5577"
|
||||
color: "white"
|
||||
- mike:
|
||||
canonical_version: latest
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
FROM python:3.12.0-alpine3.18@sha256:f1d0d03700fb2d4480e89fb807e7346c14b88952f7bd58d56de54a24817cc2e8 AS builder
|
||||
FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8 AS builder
|
||||
|
||||
# Copy python requirements
|
||||
COPY src/deps/requirements.txt /tmp/requirements-deps.txt
|
||||
|
|
@ -34,7 +34,7 @@ COPY src/common/helpers helpers
|
|||
COPY src/common/settings.json settings.json
|
||||
COPY src/common/utils utils
|
||||
|
||||
FROM python:3.12.0-alpine3.18@sha256:f1d0d03700fb2d4480e89fb807e7346c14b88952f7bd58d56de54a24817cc2e8
|
||||
FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8
|
||||
|
||||
# Set default umask to prevent huge recursive chmod increasing the final image size
|
||||
RUN umask 027
|
||||
|
|
|
|||
|
|
@ -121,10 +121,6 @@ class IngressController(Controller):
|
|||
location += 1
|
||||
services.append(service)
|
||||
|
||||
# parse tls
|
||||
if controller_service.spec.tls: # TODO: support tls
|
||||
self._logger.warning("Ignoring unsupported tls.")
|
||||
|
||||
# parse annotations
|
||||
if controller_service.metadata.annotations:
|
||||
for service in services:
|
||||
|
|
@ -142,6 +138,36 @@ class IngressController(Controller):
|
|||
variable = variable.replace(f"{server_name}_", "", 1)
|
||||
if self._is_setting_context(variable, "multisite"):
|
||||
service[variable] = value
|
||||
|
||||
# parse tls
|
||||
if controller_service.spec.tls:
|
||||
for tls in controller_service.spec.tls:
|
||||
if tls.hosts and tls.secret_name:
|
||||
for host in tls.hosts:
|
||||
for service in services:
|
||||
if host in service["SERVER_NAME"].split(" "):
|
||||
secret_tls = self.__corev1.list_secret_for_all_namespaces(
|
||||
watch=False,
|
||||
field_selector=f"metadata.name={tls.secret_name},metadata.namespace={namespace}",
|
||||
).items
|
||||
if not secret_tls:
|
||||
self._logger.warning(
|
||||
f"Ignoring tls setting for {host} : secret {tls.secret_name} not found.",
|
||||
)
|
||||
break
|
||||
if not secret_tls.data:
|
||||
self._logger.warning(
|
||||
f"Ignoring tls setting for {host} : secret {tls.secret_name} contains no data.",
|
||||
)
|
||||
break
|
||||
if "tls.crt" not in secret_tls.data or "tls.key" not in secret_tls.data:
|
||||
self._logger.warning(
|
||||
f"Ignoring tls setting for {host} : secret {tls.secret_name} is missing tls data.",
|
||||
)
|
||||
break
|
||||
service["USE_CUSTOM_SSL"] = "yes"
|
||||
service["CUSTOM_SSL_CERT_DATA"] = secret_tls.data["tls.crt"]
|
||||
service["CUSTOM_SSL_KEY_DATA"] = secret_tls.data["tls.key"]
|
||||
return services
|
||||
|
||||
def _get_static_services(self) -> List[dict]:
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ function plugin:initialize(id, ctx)
|
|||
local current_phase = ngx.get_phase()
|
||||
for _, check_phase in ipairs {
|
||||
"set",
|
||||
"ssl_certificate",
|
||||
"access",
|
||||
"content",
|
||||
"header_filter",
|
||||
|
|
|
|||
|
|
@ -680,6 +680,7 @@ utils.get_phases = function()
|
|||
"init_worker",
|
||||
"set",
|
||||
"access",
|
||||
"ssl_certificate",
|
||||
"header",
|
||||
"log",
|
||||
"preread",
|
||||
|
|
@ -692,6 +693,7 @@ utils.is_cosocket_available = function()
|
|||
local phases = {
|
||||
"timer",
|
||||
"access",
|
||||
"ssl_certificate",
|
||||
"preread",
|
||||
}
|
||||
local current_phase = ngx.get_phase()
|
||||
|
|
|
|||
|
|
@ -23,7 +23,9 @@ server {
|
|||
|
||||
# include LUA files
|
||||
include {{ NGINX_PREFIX }}set-lua.conf;
|
||||
include {{ NGINX_PREFIX }}ssl-certificate-lua.conf;
|
||||
include {{ NGINX_PREFIX }}access-lua.conf;
|
||||
include {{ NGINX_PREFIX }}header-lua.conf;
|
||||
include {{ NGINX_PREFIX }}log-lua.conf;
|
||||
|
||||
# include config files
|
||||
|
|
|
|||
94
src/common/confs/server-http/ssl-certificate-lua.conf
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
ssl_certificate_by_lua_block {
|
||||
local class = require "middleclass"
|
||||
local clogger = require "bunkerweb.logger"
|
||||
local helpers = require "bunkerweb.helpers"
|
||||
local utils = require "bunkerweb.utils"
|
||||
local cdatastore = require "bunkerweb.datastore"
|
||||
local cclusterstore = require "bunkerweb.clusterstore"
|
||||
local cjson = require "cjson"
|
||||
local ssl = require "ngx.ssl"
|
||||
|
||||
-- Don't process internal requests
|
||||
local logger = clogger:new("SSL-CERTIFICATE")
|
||||
if ngx.req.is_internal() then
|
||||
logger:log(ngx.INFO, "skipped ssl_certificate phase because request is internal")
|
||||
return true
|
||||
end
|
||||
|
||||
-- Start access phase
|
||||
local datastore = cdatastore:new()
|
||||
logger:log(ngx.INFO, "ssl_certificate phase started")
|
||||
|
||||
-- Fill ctx
|
||||
logger:log(ngx.INFO, "filling ngx.ctx ...")
|
||||
local ok, ret, errors, ctx = helpers.fill_ctx()
|
||||
if not ok then
|
||||
logger:log(ngx.ERR, "fill_ctx() failed : " .. ret)
|
||||
elseif errors then
|
||||
for i, error in ipairs(errors) do
|
||||
logger:log(ngx.ERR, "fill_ctx() error " .. tostring(i) .. " : " .. error)
|
||||
end
|
||||
end
|
||||
logger:log(ngx.INFO, "ngx.ctx filled (ret = " .. ret .. ")")
|
||||
|
||||
-- Get plugins order
|
||||
local order, err = datastore:get("plugins_order", true)
|
||||
if not order then
|
||||
logger:log(ngx.ERR, "can't get plugins order from datastore : " .. err)
|
||||
return
|
||||
end
|
||||
|
||||
-- Call ssl_certificate() methods
|
||||
logger:log(ngx.INFO, "calling ssl_certificate() methods of plugins ...")
|
||||
for i, plugin_id in ipairs(order.ssl_certificate) do
|
||||
-- Require call
|
||||
local plugin_lua, err = helpers.require_plugin(plugin_id)
|
||||
if plugin_lua == false then
|
||||
logger:log(ngx.ERR, err)
|
||||
elseif plugin_lua == nil then
|
||||
logger:log(ngx.INFO, err)
|
||||
else
|
||||
-- Check if plugin has access method
|
||||
if plugin_lua.ssl_certificate ~= nil then
|
||||
-- New call
|
||||
local ok, plugin_obj = helpers.new_plugin(plugin_lua, ctx)
|
||||
if not ok then
|
||||
logger:log(ngx.ERR, plugin_obj)
|
||||
else
|
||||
local ok, ret = helpers.call_plugin(plugin_obj, "ssl_certificate")
|
||||
if not ok then
|
||||
logger:log(ngx.ERR, ret)
|
||||
elseif not ret.ret then
|
||||
logger:log(ngx.ERR, plugin_id .. ":ssl_certificate() call failed : " .. ret.msg)
|
||||
else
|
||||
logger:log(ngx.INFO, plugin_id .. ":ssl_certificate() call successful : " .. ret.msg)
|
||||
if ret.status then
|
||||
logger:log(ngx.INFO, plugin_id .. " is setting certificate/key : " .. ret.msg)
|
||||
local ok, err = ssl.set_cert(ret.status[1])
|
||||
if not ok then
|
||||
logger:log(ngx.ERR, "error while setting certificate : " .. err)
|
||||
else
|
||||
local ok, err = ssl.set_priv_key(ret.status[2])
|
||||
if not ok then
|
||||
logger:log(ngx.ERR, "error while setting private key : " .. err)
|
||||
else
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
logger:log(ngx.INFO, "skipped execution of " .. plugin_id .. " because method ssl_certificate() is not defined")
|
||||
end
|
||||
end
|
||||
end
|
||||
logger:log(ngx.INFO, "called ssl_certificate() methods of plugins")
|
||||
|
||||
-- Save ctx
|
||||
ngx.ctx = ctx
|
||||
|
||||
logger:log(ngx.INFO, "ssl_certificate phase ended")
|
||||
|
||||
return true
|
||||
}
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
{% set os_path = import("os.path") %}
|
||||
|
||||
{% if USE_CUSTOM_SSL == "yes" %}
|
||||
{% if os_path.isfile("/var/cache/bunkerweb/customcert/cert.pem") and os_path.isfile("/var/cache/bunkerweb/customcert/key.pem") or os_path.isfile("/var/cache/bunkerweb/customcert/" + SERVER_NAME.split(" ")[0] + "/cert.pem") and os_path.isfile("/var/cache/bunkerweb/customcert/" + SERVER_NAME.split(" ")[0] + "/key.pem") +%}
|
||||
|
||||
# listen on HTTPS PORT
|
||||
listen 0.0.0.0:{{ HTTPS_PORT }} ssl {% if HTTP2 == "yes" %}http2{% endif %} {% if USE_PROXY_PROTOCOL == "yes" %}proxy_protocol{% endif %};
|
||||
|
|
@ -10,16 +9,18 @@ listen [::]:{{ HTTPS_PORT }} ssl {% if HTTP2 == "yes" %}http2{% endif %} {% if U
|
|||
{% endif %}
|
||||
|
||||
# TLS config
|
||||
{% if os_path.isfile("/var/cache/bunkerweb/customcert/" + SERVER_NAME.split(" ")[0] + "/cert.pem") %}
|
||||
ssl_certificate /var/cache/bunkerweb/customcert/{{ SERVER_NAME.split(" ")[0] }}/cert.pem;
|
||||
{% else %}
|
||||
ssl_certificate /var/cache/bunkerweb/customcert/cert.pem;
|
||||
{% endif %}
|
||||
{% if os_path.isfile("/var/cache/bunkerweb/customcert/" + SERVER_NAME.split(" ")[0] + "/key.pem") %}
|
||||
ssl_certificate_key /var/cache/bunkerweb/customcert/{{ SERVER_NAME.split(" ")[0] }}/key.pem;
|
||||
{% else %}
|
||||
ssl_certificate_key /var/cache/bunkerweb/customcert/key.pem;
|
||||
{% endif %}
|
||||
ssl_certificate /var/cache/bunkerweb/default-server-cert/cert.pem;
|
||||
ssl_certificate_key /var/cache/bunkerweb/default-server-cert/cert.key;
|
||||
# {% if os_path.isfile("/var/cache/bunkerweb/customcert/" + SERVER_NAME.split(" ")[0] + "/cert.pem") %}
|
||||
# ssl_certificate /var/cache/bunkerweb/customcert/{{ SERVER_NAME.split(" ")[0] }}/cert.pem;
|
||||
# {% else %}
|
||||
# ssl_certificate /var/cache/bunkerweb/customcert/cert.pem;
|
||||
# {% endif %}
|
||||
# {% if os_path.isfile("/var/cache/bunkerweb/customcert/" + SERVER_NAME.split(" ")[0] + "/key.pem") %}
|
||||
# ssl_certificate_key /var/cache/bunkerweb/customcert/{{ SERVER_NAME.split(" ")[0] }}/key.pem;
|
||||
# {% else %}
|
||||
# ssl_certificate_key /var/cache/bunkerweb/customcert/key.pem;
|
||||
# {% endif %}
|
||||
ssl_protocols {{ SSL_PROTOCOLS }};
|
||||
ssl_prefer_server_ciphers on;
|
||||
ssl_session_tickets off;
|
||||
|
|
@ -30,5 +31,4 @@ ssl_dhparam /etc/nginx/dhparam;
|
|||
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
132
src/common/core/customcert/customcert.lua
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
local class = require "middleclass"
|
||||
local plugin = require "bunkerweb.plugin"
|
||||
local utils = require "bunkerweb.utils"
|
||||
local ssl = require "ngx.ssl"
|
||||
|
||||
local customcert = class("customcert", plugin)
|
||||
|
||||
function customcert:initialize(ctx)
|
||||
-- Call parent initialize
|
||||
plugin.initialize(self, "customcert", ctx)
|
||||
end
|
||||
|
||||
function customcert:init()
|
||||
local ok, err = true, "success"
|
||||
if utils.has_variable("USE_CUSTOM_SSL", "yes") then
|
||||
local multisite, err = utils.get_variable("MULTISITE")
|
||||
if not multisite then
|
||||
return self:ret(false, "can't get MULTISITE variable : " .. err)
|
||||
end
|
||||
if multisite == "yes" then
|
||||
local vars, err = utils.get_multiple_variables({"USE_CUSTOM_SSL"})
|
||||
if not vars then
|
||||
return self:ret(false, "can't get USE_CUSTOM_SSL variables : " .. err)
|
||||
end
|
||||
if vars["global"]["USE_CUSTOM_SSL"] == "yes" then
|
||||
local check, data = self:read_files()
|
||||
if not check then
|
||||
self.logger:log(ngx.ERR, "error while reading files : " .. err)
|
||||
ok = false
|
||||
err = "error reading files"
|
||||
else
|
||||
local check, err = self:load_data(data)
|
||||
if not check then
|
||||
self.logger:log(ngx.ERR, "error while loading data : " .. err)
|
||||
ok = false
|
||||
err = "error loading data"
|
||||
end
|
||||
end
|
||||
end
|
||||
for server_name, multisite_vars in pairs(vars) do
|
||||
if multisite_vars["USE_CUSTOM_SSL"] == "yes" then
|
||||
local check, data = self:read_files(server_name)
|
||||
if not check then
|
||||
self.logger:log(ngx.ERR, "error while reading files : " .. err)
|
||||
ok = false
|
||||
err = "error reading files"
|
||||
else
|
||||
local check, err = self:load_data(data, server_name)
|
||||
if not check then
|
||||
self.logger:log(ngx.ERR, "error while loading data : " .. err)
|
||||
ok = false
|
||||
err = "error loading data"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
local check, data = self:read_files()
|
||||
if not check then
|
||||
self.logger:log(ngx.ERR, "error while reading files : " .. err)
|
||||
ok = false
|
||||
err = "error reading files"
|
||||
else
|
||||
local check, err = self:load_data(data)
|
||||
if not check then
|
||||
self.logger:log(ngx.ERR, "error while loading data : " .. err)
|
||||
ok = false
|
||||
err = "error loading data"
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
err = "custom ssl is not used"
|
||||
end
|
||||
return self:ret(ok, err)
|
||||
end
|
||||
|
||||
function customcert:ssl_certificate()
|
||||
if self.variables["USE_CUSTOM_SSL"] == "yes" then
|
||||
local global_data, err = self.datastore:get("plugin_customcert_global", true)
|
||||
if not global_data and err ~= "not found" then
|
||||
return self:ret(false, "error while getting plugin_customcert_global from datastore : " .. err)
|
||||
end
|
||||
local site_data, err = self.datastore:get("plugin_customcert_" .. self.ctx.bw.server_name, true)
|
||||
if not site_data and err ~= "not found" then
|
||||
return self:ret(false, "error while getting plugin_customcert_" .. self.ctx.bw.server_name .. " from datastore : " .. err)
|
||||
end
|
||||
if not global_data and not site_data then
|
||||
return self:ret(false, "both global and site cert are not present in datastore")
|
||||
end
|
||||
return self:ret(true, "certificate/key data found", site_data or global_data)
|
||||
end
|
||||
return self:ret(true, "custom certificate is not used")
|
||||
end
|
||||
|
||||
function customcert:read_files(server_name)
|
||||
local files = {
|
||||
"/var/cache/bunkerweb/customcert/" .. (server_name or "") .. "/cert.pem",
|
||||
"/var/cache/bunkerweb/customcert/" .. (server_name or "") .. "/key.pem"
|
||||
}
|
||||
local data = {}
|
||||
for i, file in ipairs(files) do
|
||||
local f, err = io.open(file, "r")
|
||||
if not f then
|
||||
return false, file .. " = " .. err
|
||||
end
|
||||
table.insert(data, f:read("*a"))
|
||||
f:close()
|
||||
end
|
||||
return true, data
|
||||
end
|
||||
|
||||
function customcert:load_data(data, server_name)
|
||||
-- Load certificate
|
||||
local cert_chain, err = ssl.parse_pem_cert(data[1])
|
||||
if not cert_chain then
|
||||
return false, "error while parsing pem cert : " .. err
|
||||
end
|
||||
-- Load key
|
||||
local priv_key, err = ssl.parse_priv_key(data[2])
|
||||
if not priv_key then
|
||||
return false, "error while parsing pem priv key : " .. err
|
||||
end
|
||||
local cache_key = "plugin_customcert_" .. (server_name or "global")
|
||||
local ok, err = self.datastore:set(cache_key, {cert_chain, priv_key}, nil, true)
|
||||
if not ok then
|
||||
return false, "error while setting data into datastore : " .. err
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
return customcert
|
||||
|
|
@ -6,6 +6,7 @@ from pathlib import Path
|
|||
from sys import exit as sys_exit, path as sys_path
|
||||
from traceback import format_exc
|
||||
from typing import Optional
|
||||
from base64 import b64decode
|
||||
|
||||
for deps_path in [
|
||||
join(sep, "usr", "share", "bunkerweb", *paths)
|
||||
|
|
@ -99,6 +100,28 @@ try:
|
|||
cert_path = getenv("CUSTOM_SSL_CERT", "")
|
||||
key_path = getenv("CUSTOM_SSL_KEY", "")
|
||||
|
||||
cert_data = b64decode(getenv("CUSTOM_SSL_CERT_DATA", ""))
|
||||
key_data = b64decode(getenv("CUSTOM_SSL_KEY_DATA", ""))
|
||||
for file, data in [("cert.pem", cert_data), ("key.pem", key_data)]:
|
||||
if data != b"":
|
||||
file_path = Path(
|
||||
sep,
|
||||
"var",
|
||||
"tmp",
|
||||
"bunkerweb",
|
||||
"customcert",
|
||||
file
|
||||
)
|
||||
file_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
file_path.write_bytes(data)
|
||||
if file == "cert.pem":
|
||||
cert_path = str(file_path)
|
||||
else:
|
||||
key_path = str(file_path)
|
||||
|
||||
if cert_data != b"":
|
||||
with open()
|
||||
|
||||
if cert_path and key_path:
|
||||
logger.info(f"Checking certificate {cert_path} ...")
|
||||
need_reload = check_cert(cert_path, key_path)
|
||||
|
|
@ -124,6 +147,26 @@ try:
|
|||
cert_path = getenv(f"{first_server}_CUSTOM_SSL_CERT", "")
|
||||
key_path = getenv(f"{first_server}_CUSTOM_SSL_KEY", "")
|
||||
|
||||
cert_data = b64decode(getenv(f"{first_server}_CUSTOM_SSL_CERT_DATA", ""))
|
||||
key_data = b64decode(getenv(f"{first_server}_CUSTOM_SSL_KEY_DATA", ""))
|
||||
for file, data in [("cert.pem", cert_data), ("key.pem", key_data)]:
|
||||
if data != b"":
|
||||
file_path = Path(
|
||||
sep,
|
||||
"var",
|
||||
"tmp",
|
||||
"bunkerweb",
|
||||
"customcert",
|
||||
server_name,
|
||||
file
|
||||
)
|
||||
file_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
file_path.write_bytes(data)
|
||||
if file == "cert.pem":
|
||||
cert_path = str(file_path)
|
||||
else:
|
||||
key_path = str(file_path)
|
||||
|
||||
if cert_path and key_path:
|
||||
logger.info(
|
||||
f"Checking certificate {cert_path} ...",
|
||||
|
|
|
|||
|
|
@ -31,6 +31,24 @@
|
|||
"label": "Key path",
|
||||
"regex": "^(/[\\w. \\-]+)*/?$",
|
||||
"type": "text"
|
||||
},
|
||||
"CUSTOM_SSL_CERT_DATA": {
|
||||
"context": "multisite",
|
||||
"default": "",
|
||||
"help": "Certificate data encoded in base64.",
|
||||
"id": "custom-https-cert-data",
|
||||
"label": "Certificate data (base64)",
|
||||
"regex": "^.*$",
|
||||
"type": "text"
|
||||
},
|
||||
"CUSTOM_SSL_KEY_DATA": {
|
||||
"context": "multisite",
|
||||
"default": "",
|
||||
"help": "Key data encoded in base64.",
|
||||
"id": "custom-https-key-data",
|
||||
"label": "Key data (base64)",
|
||||
"regex": "^.*$",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
"jobs": [
|
||||
|
|
|
|||
|
|
@ -85,19 +85,8 @@
|
|||
"help": "Value for the Referrer-Policy header.",
|
||||
"id": "referrer-policy",
|
||||
"label": "Referrer-Policy",
|
||||
"regex": "^(no-referrer|no-referrer-when-downgrade|origin|origin-when-cross-origin|same-origin|strict-origin|strict-origin-when-cross-origin|unsafe-url)?$",
|
||||
"type": "select",
|
||||
"select": [
|
||||
"",
|
||||
"no-referrer",
|
||||
"no-referrer-when-downgrade",
|
||||
"origin",
|
||||
"origin-when-cross-origin",
|
||||
"same-origin",
|
||||
"strict-origin",
|
||||
"strict-origin-when-cross-origin",
|
||||
"unsafe-url"
|
||||
]
|
||||
"regex": "^(?!^(,| ))((, )?(no-referrer-when-downgrade|no-referrer|origin-when-cross-origin|same-origin|strict-origin-when-cross-origin|strict-origin|origin|unsafe-url)(?!\\b.*, \\4\\b))*$",
|
||||
"type": "text"
|
||||
},
|
||||
"PERMISSIONS_POLICY": {
|
||||
"context": "multisite",
|
||||
|
|
|
|||
|
|
@ -13,8 +13,10 @@ listen [::]:{{ HTTPS_PORT }} ssl {% if HTTP2 == "yes" %}http2{% endif %} {% if U
|
|||
{% endif %}
|
||||
|
||||
# TLS config
|
||||
ssl_certificate /var/cache/bunkerweb/letsencrypt/etc/live/{{ SERVER_NAME.split(" ")[0] }}/fullchain.pem;
|
||||
ssl_certificate_key /var/cache/bunkerweb/letsencrypt/etc/live/{{ SERVER_NAME.split(" ")[0] }}/privkey.pem;
|
||||
ssl_certificate /var/cache/bunkerweb/default-server-cert/cert.pem;
|
||||
ssl_certificate_key /var/cache/bunkerweb/default-server-cert/cert.key;
|
||||
#ssl_certificate /var/cache/bunkerweb/letsencrypt/etc/live/{{ SERVER_NAME.split(" ")[0] }}/fullchain.pem;
|
||||
#ssl_certificate_key /var/cache/bunkerweb/letsencrypt/etc/live/{{ SERVER_NAME.split(" ")[0] }}/privkey.pem;
|
||||
ssl_protocols {{ SSL_PROTOCOLS }};
|
||||
ssl_prefer_server_ciphers on;
|
||||
ssl_session_tickets off;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
local cjson = require "cjson"
|
||||
local class = require "middleclass"
|
||||
local plugin = require "bunkerweb.plugin"
|
||||
local utils = require "bunkerweb.utils"
|
||||
local ssl = require "ngx.ssl"
|
||||
|
||||
local letsencrypt = class("letsencrypt", plugin)
|
||||
|
||||
|
|
@ -9,6 +11,107 @@ function letsencrypt:initialize(ctx)
|
|||
plugin.initialize(self, "letsencrypt", ctx)
|
||||
end
|
||||
|
||||
function letsencrypt:init()
|
||||
local ok, err = true, "success"
|
||||
if utils.has_variable("AUTO_LETS_ENCRYPT", "yes") then
|
||||
local multisite, err = utils.get_variable("MULTISITE")
|
||||
if not multisite then
|
||||
return self:ret(false, "can't get MULTISITE variable : " .. err)
|
||||
end
|
||||
if multisite == "yes" then
|
||||
local vars, err = utils.get_multiple_variables({"AUTO_LETS_ENCRYPT"})
|
||||
if not vars then
|
||||
return self:ret(false, "can't get AUTO_LETS_ENCRYPT variables : " .. err)
|
||||
end
|
||||
for server_name, multisite_vars in pairs(vars) do
|
||||
if multisite_vars["AUTO_LETS_ENCRYPT"] == "yes" then
|
||||
local check, data = self:read_files(server_name)
|
||||
if not check then
|
||||
self.logger:log(ngx.ERR, "error while reading files : " .. err)
|
||||
ok = false
|
||||
err = "error reading files"
|
||||
else
|
||||
local check, err = self:load_data(data, server_name)
|
||||
if not check then
|
||||
self.logger:log(ngx.ERR, "error while loading data : " .. err)
|
||||
ok = false
|
||||
err = "error loading data"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
local server_name, err = utils.get_variable("SERVER_NAME")
|
||||
if not server_name then
|
||||
return self:ret(false, "can't get SERVER_NAME variable : " .. err)
|
||||
end
|
||||
local check, data = self:read_files(server_name:gmatch("%S+")[1])
|
||||
if not check then
|
||||
self.logger:log(ngx.ERR, "error while reading files : " .. err)
|
||||
ok = false
|
||||
err = "error reading files"
|
||||
else
|
||||
local check, err = self:load_data(data)
|
||||
if not check then
|
||||
self.logger:log(ngx.ERR, "error while loading data : " .. err)
|
||||
ok = false
|
||||
err = "error loading data"
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
err = "let's encrypt is not used"
|
||||
end
|
||||
return self:ret(ok, err)
|
||||
end
|
||||
|
||||
function letsencrypt:ssl_certificate()
|
||||
if self.variables["AUTO_LETS_ENCRYPT"] == "yes" then
|
||||
local data, err = self.datastore:get("plugin_letsencrypt_" .. self.ctx.bw.server_name, true)
|
||||
if not data then
|
||||
return self:ret(false, "error while getting plugin_letsencrypt_" .. self.ctx.bw.server_name .. " from datastore : " .. err)
|
||||
end
|
||||
return self:ret(true, "certificate/key data found", data)
|
||||
end
|
||||
return self:ret(true, "let's encrypt is not used")
|
||||
end
|
||||
|
||||
function letsencrypt:read_files(server_name)
|
||||
local files = {
|
||||
"/var/cache/bunkerweb/letsencrypt/etc/live/" .. server_name .. "/fullchain.pem",
|
||||
"/var/cache/bunkerweb/letsencrypt/etc/live/" .. server_name .. "/privkey.pem"
|
||||
}
|
||||
local data = {}
|
||||
for i, file in ipairs(files) do
|
||||
local f, err = io.open(file, "r")
|
||||
if not f then
|
||||
return false, file .. " = " .. err
|
||||
end
|
||||
table.insert(data, f:read("*a"))
|
||||
f:close()
|
||||
end
|
||||
return true, data
|
||||
end
|
||||
|
||||
function letsencrypt:load_data(data, server_name)
|
||||
-- Load certificate
|
||||
local cert_chain, err = ssl.parse_pem_cert(data[1])
|
||||
if not cert_chain then
|
||||
return false, "error while parsing pem cert : " .. err
|
||||
end
|
||||
-- Load key
|
||||
local priv_key, err = ssl.parse_priv_key(data[2])
|
||||
if not priv_key then
|
||||
return false, "error while parsing pem priv key : " .. err
|
||||
end
|
||||
local cache_key = "plugin_letsencrypt_" .. (server_name or "global")
|
||||
local ok, err = self.datastore:set(cache_key, {cert_chain, priv_key}, nil, true)
|
||||
if not ok then
|
||||
return false, "error while setting data into datastore : " .. err
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
function letsencrypt:access()
|
||||
if string.sub(self.ctx.bw.uri, 1, string.len("/.well-known/acme-challenge/")) == "/.well-known/acme-challenge/" then
|
||||
self.logger:log(ngx.NOTICE, "got a visit from Let's Encrypt, let's whitelist it")
|
||||
|
|
|
|||
|
|
@ -7,8 +7,16 @@
|
|||
"bunkernet",
|
||||
"limit"
|
||||
],
|
||||
"init_worker": ["redis", "bunkernet", "dnsbl"],
|
||||
"init_worker": [
|
||||
"redis",
|
||||
"bunkernet",
|
||||
"dnsbl",
|
||||
"customcert",
|
||||
"letsencrypt",
|
||||
"selfsigned"
|
||||
],
|
||||
"set": ["sessions", "whitelist"],
|
||||
"ssl_certificate": ["customcert", "letsencrypt", "selfsigned"],
|
||||
"access": [
|
||||
"whitelist",
|
||||
"letsencrypt",
|
||||
|
|
|
|||
|
|
@ -7,8 +7,10 @@ listen [::]:{{ HTTPS_PORT }} ssl {% if HTTP2 == "yes" %}http2{% endif %} {% if U
|
|||
{% endif %}
|
||||
|
||||
# TLS config
|
||||
ssl_certificate /var/cache/bunkerweb/selfsigned/{{ SERVER_NAME.split(" ")[0] }}.pem;
|
||||
ssl_certificate_key /var/cache/bunkerweb/selfsigned/{{ SERVER_NAME.split(" ")[0] }}.key;
|
||||
ssl_certificate /var/cache/bunkerweb/default-server-cert/cert.pem;
|
||||
ssl_certificate_key /var/cache/bunkerweb/default-server-cert/cert.key;
|
||||
# ssl_certificate /var/cache/bunkerweb/selfsigned/{{ SERVER_NAME.split(" ")[0] }}.pem;
|
||||
# ssl_certificate_key /var/cache/bunkerweb/selfsigned/{{ SERVER_NAME.split(" ")[0] }}.key;
|
||||
ssl_protocols {{ SSL_PROTOCOLS }};
|
||||
ssl_prefer_server_ciphers on;
|
||||
ssl_session_tickets off;
|
||||
|
|
|
|||
114
src/common/core/selfsigned/selfsigned.lua
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
local class = require "middleclass"
|
||||
local plugin = require "bunkerweb.plugin"
|
||||
local utils = require "bunkerweb.utils"
|
||||
local ssl = require "ngx.ssl"
|
||||
|
||||
local selfsigned = class("selfsigned", plugin)
|
||||
|
||||
function selfsigned:initialize(ctx)
|
||||
-- Call parent initialize
|
||||
plugin.initialize(self, "selfsigned", ctx)
|
||||
end
|
||||
|
||||
function selfsigned:init()
|
||||
local ok, err = true, "success"
|
||||
if utils.has_variable("GENERATE_SELF_SIGNED_SSL", "yes") then
|
||||
local multisite, err = utils.get_variable("MULTISITE")
|
||||
if not multisite then
|
||||
return self:ret(false, "can't get MULTISITE variable : " .. err)
|
||||
end
|
||||
if multisite == "yes" then
|
||||
local vars, err = utils.get_multiple_variables({"GENERATE_SELF_SIGNED_SSL"})
|
||||
if not vars then
|
||||
return self:ret(false, "can't get GENERATE_SELF_SIGNED_SSL variables : " .. err)
|
||||
end
|
||||
for server_name, multisite_vars in pairs(vars) do
|
||||
if multisite_vars["GENERATE_SELF_SIGNED_SSL"] == "yes" then
|
||||
local check, data = self:read_files(server_name)
|
||||
if not check then
|
||||
self.logger:log(ngx.ERR, "error while reading files : " .. err)
|
||||
ok = false
|
||||
err = "error reading files"
|
||||
else
|
||||
local check, err = self:load_data(data, server_name)
|
||||
if not check then
|
||||
self.logger:log(ngx.ERR, "error while loading data : " .. err)
|
||||
ok = false
|
||||
err = "error loading data"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
local server_name, err = utils.get_variable("SERVER_NAME")
|
||||
if not server_name then
|
||||
return self:ret(false, "can't get SERVER_NAME variable : " .. err)
|
||||
end
|
||||
local check, data = self:read_files(server_name:gmatch("%S+")[1])
|
||||
if not check then
|
||||
self.logger:log(ngx.ERR, "error while reading files : " .. err)
|
||||
ok = false
|
||||
err = "error reading files"
|
||||
else
|
||||
local check, err = self:load_data(data)
|
||||
if not check then
|
||||
self.logger:log(ngx.ERR, "error while loading data : " .. err)
|
||||
ok = false
|
||||
err = "error loading data"
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
err = "self signed is not used"
|
||||
end
|
||||
return self:ret(ok, err)
|
||||
end
|
||||
|
||||
function selfsigned:ssl_certificate()
|
||||
if self.variables["GENERATE_SELF_SIGNED_SSL"] == "yes" then
|
||||
local data, err = self.datastore:get("plugin_selfsigned_" .. self.ctx.bw.server_name, true)
|
||||
if not data then
|
||||
return self:ret(false, "error while getting plugin_selfsigned_" .. self.ctx.bw.server_name .. " from datastore : " .. err)
|
||||
end
|
||||
return self:ret(true, "certificate/key data found", data)
|
||||
end
|
||||
return self:ret(true, "selfsigned is not used")
|
||||
end
|
||||
|
||||
function selfsigned:read_files(server_name)
|
||||
local files = {
|
||||
"/var/cache/bunkerweb/selfsigned/" .. server_name .. "/cert.pem",
|
||||
"/var/cache/bunkerweb/selfsigned/" .. server_name .. "/key.pem"
|
||||
}
|
||||
local data = {}
|
||||
for i, file in ipairs(files) do
|
||||
local f, err = io.open(file, "r")
|
||||
if not f then
|
||||
return false, file .. " = " .. err
|
||||
end
|
||||
table.insert(data, f:read("*a"))
|
||||
f:close()
|
||||
end
|
||||
return true, data
|
||||
end
|
||||
|
||||
function selfsigned:load_data(data, server_name)
|
||||
-- Load certificate
|
||||
local cert_chain, err = ssl.parse_pem_cert(data[1])
|
||||
if not cert_chain then
|
||||
return false, "error while parsing pem cert : " .. err
|
||||
end
|
||||
-- Load key
|
||||
local priv_key, err = ssl.parse_priv_key(data[2])
|
||||
if not priv_key then
|
||||
return false, "error while parsing pem priv key : " .. err
|
||||
end
|
||||
local cache_key = "plugin_selfsigned_" .. (server_name or "global")
|
||||
local ok, err = self.datastore:set(cache_key, {cert_chain, priv_key}, nil, true)
|
||||
if not ok then
|
||||
return false, "error while setting data into datastore : " .. err
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
return selfsigned
|
||||
|
|
@ -346,7 +346,10 @@ class Database:
|
|||
if has_all_tables:
|
||||
return False, ""
|
||||
|
||||
Base.metadata.create_all(self.__sql_engine, checkfirst=True)
|
||||
try:
|
||||
Base.metadata.create_all(self.__sql_engine, checkfirst=True)
|
||||
except BaseException:
|
||||
return False, format_exc()
|
||||
|
||||
to_put = []
|
||||
with self.__db_session() as session:
|
||||
|
|
@ -373,19 +376,51 @@ class Database:
|
|||
jobs = plugin.pop("jobs", [])
|
||||
page = plugin.pop("page", False)
|
||||
|
||||
to_put.append(
|
||||
Plugins(
|
||||
id=plugin["id"],
|
||||
name=plugin["name"],
|
||||
description=plugin["description"],
|
||||
version=plugin["version"],
|
||||
stream=plugin["stream"],
|
||||
external=plugin.get("external", False),
|
||||
method=plugin.get("method"),
|
||||
data=plugin.get("data"),
|
||||
checksum=plugin.get("checksum"),
|
||||
db_plugin = session.query(Plugins).filter_by(id=plugin["id"]).first()
|
||||
if db_plugin:
|
||||
updates = {}
|
||||
|
||||
if plugin["name"] != db_plugin.name:
|
||||
updates[Plugins.name] = plugin["name"]
|
||||
|
||||
if plugin["description"] != db_plugin.description:
|
||||
updates[Plugins.description] = plugin["description"]
|
||||
|
||||
if plugin["version"] != db_plugin.version:
|
||||
updates[Plugins.version] = plugin["version"]
|
||||
|
||||
if plugin["stream"] != db_plugin.stream:
|
||||
updates[Plugins.stream] = plugin["stream"]
|
||||
|
||||
if plugin.get("external", False) != db_plugin.external:
|
||||
updates[Plugins.external] = plugin.get("external", False)
|
||||
|
||||
if plugin.get("method", "manual") != db_plugin.method:
|
||||
updates[Plugins.method] = plugin.get("method", "manual")
|
||||
|
||||
if plugin.get("data") != db_plugin.data:
|
||||
updates[Plugins.data] = plugin.get("data")
|
||||
|
||||
if plugin.get("checksum") != db_plugin.checksum:
|
||||
updates[Plugins.checksum] = plugin.get("checksum")
|
||||
|
||||
if updates:
|
||||
self.__logger.warning(f'Plugin "{plugin["id"]}" already exists, updating it with the new values')
|
||||
session.query(Plugins).filter(Plugins.id == plugin["id"]).update(updates)
|
||||
else:
|
||||
to_put.append(
|
||||
Plugins(
|
||||
id=plugin["id"],
|
||||
name=plugin["name"],
|
||||
description=plugin["description"],
|
||||
version=plugin["version"],
|
||||
stream=plugin["stream"],
|
||||
external=plugin.get("external", False),
|
||||
method=plugin.get("method"),
|
||||
data=plugin.get("data"),
|
||||
checksum=plugin.get("checksum"),
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
for setting, value in settings.items():
|
||||
value.update(
|
||||
|
|
@ -395,15 +430,98 @@ class Database:
|
|||
"id": setting,
|
||||
}
|
||||
)
|
||||
db_setting = session.query(Settings).filter_by(id=setting).first()
|
||||
select_values = value.pop("select", [])
|
||||
|
||||
for select in value.pop("select", []):
|
||||
to_put.append(Selects(setting_id=value["id"], value=select))
|
||||
if db_setting:
|
||||
updates = {}
|
||||
|
||||
to_put.append(Settings(**value))
|
||||
if value["name"] != db_setting.name:
|
||||
updates[Settings.name] = value["name"]
|
||||
|
||||
if value["context"] != db_setting.context:
|
||||
updates[Settings.context] = value["context"]
|
||||
|
||||
if value["default"] != db_setting.default:
|
||||
updates[Settings.default] = value["default"]
|
||||
|
||||
if value["help"] != db_setting.help:
|
||||
updates[Settings.help] = value["help"]
|
||||
|
||||
if value["label"] != db_setting.label:
|
||||
updates[Settings.label] = value["label"]
|
||||
|
||||
if value["regex"] != db_setting.regex:
|
||||
updates[Settings.regex] = value["regex"]
|
||||
|
||||
if value["type"] != db_setting.type:
|
||||
updates[Settings.type] = value["type"]
|
||||
|
||||
if value.get("multiple") != db_setting.multiple:
|
||||
updates[Settings.multiple] = value.get("multiple")
|
||||
|
||||
if updates:
|
||||
self.__logger.warning(f'Setting "{setting}" already exists, updating it with the new values')
|
||||
session.query(Settings).filter(Settings.id == setting).update(updates)
|
||||
else:
|
||||
if db_plugin:
|
||||
self.__logger.warning(f'Setting "{setting}" does not exist, creating it')
|
||||
to_put.append(Settings(**value))
|
||||
|
||||
db_selects = session.query(Selects).with_entities(Selects.value).filter_by(setting_id=value["id"]).all()
|
||||
db_values = [select.value for select in db_selects]
|
||||
missing_values = [select for select in db_values if select not in select_values]
|
||||
|
||||
if select_values:
|
||||
if missing_values:
|
||||
# Remove selects that are no longer in the list
|
||||
self.__logger.warning(f'Removing {len(missing_values)} selects from setting "{setting}" as they are no longer in the list')
|
||||
session.query(Selects).filter(Selects.value.in_(missing_values)).delete()
|
||||
|
||||
for select in select_values:
|
||||
if select not in db_values:
|
||||
to_put.append(Selects(setting_id=value["id"], value=select))
|
||||
else:
|
||||
if missing_values:
|
||||
self.__logger.warning(f'Removing all selects from setting "{setting}" as there are no longer any in the list')
|
||||
session.query(Selects).filter_by(setting_id=value["id"]).delete()
|
||||
|
||||
db_jobs = session.query(Jobs).with_entities(Jobs.name).filter_by(plugin_id=plugin["id"]).all()
|
||||
db_names = [job.name for job in db_jobs]
|
||||
job_names = [job["name"] for job in jobs]
|
||||
missing_names = [job for job in db_names if job not in job_names]
|
||||
|
||||
if missing_names:
|
||||
# Remove jobs that are no longer in the list
|
||||
self.__logger.warning(f'Removing {len(missing_names)} jobs from plugin "{plugin["id"]}" as they are no longer in the list')
|
||||
session.query(Jobs).filter(Jobs.name.in_(missing_names)).delete()
|
||||
|
||||
for job in jobs:
|
||||
job["file_name"] = job.pop("file")
|
||||
to_put.append(Jobs(plugin_id=plugin["id"], **job))
|
||||
db_job = session.query(Jobs).with_entities(Jobs.file_name, Jobs.every, Jobs.reload).filter_by(name=job["name"], plugin_id=plugin["id"]).first()
|
||||
|
||||
if job["name"] not in db_names or not db_job:
|
||||
job["file_name"] = job.pop("file")
|
||||
job["reload"] = job.get("reload", False)
|
||||
if db_plugin:
|
||||
self.__logger.warning(f'Job "{job["name"]}" does not exist, creating it')
|
||||
to_put.append(Jobs(plugin_id=plugin["id"], **job))
|
||||
else:
|
||||
updates = {}
|
||||
|
||||
if job["file"] != db_job.file_name:
|
||||
updates[Jobs.file_name] = job["file"]
|
||||
|
||||
if job["every"] != db_job.every:
|
||||
updates[Jobs.every] = job["every"]
|
||||
|
||||
if job.get("reload", None) != db_job.reload:
|
||||
updates[Jobs.reload] = job.get("reload", False)
|
||||
|
||||
if updates:
|
||||
self.__logger.warning(f'Job "{job["name"]}" already exists, updating it with the new values')
|
||||
updates[Jobs.last_run] = None
|
||||
session.query(Jobs_cache).filter(Jobs_cache.job_name == job["name"]).delete()
|
||||
session.query(Jobs).filter(Jobs.name == job["name"]).update(updates)
|
||||
|
||||
if page:
|
||||
core_ui_path = Path(sep, "usr", "share", "bunkerweb", "core", plugin["id"], "ui")
|
||||
|
|
@ -411,16 +529,53 @@ class Database:
|
|||
|
||||
if path_ui.exists():
|
||||
if {"template.html", "actions.py"}.issubset(listdir(str(path_ui))):
|
||||
db_plugin_page = (
|
||||
session.query(Plugin_pages)
|
||||
.with_entities(
|
||||
Plugin_pages.template_checksum,
|
||||
Plugin_pages.actions_checksum,
|
||||
)
|
||||
.filter_by(plugin_id=plugin["id"])
|
||||
.first()
|
||||
)
|
||||
template = path_ui.joinpath("template.html").read_bytes()
|
||||
actions = path_ui.joinpath("actions.py").read_bytes()
|
||||
template_checksum = sha256(template).hexdigest()
|
||||
actions_checksum = sha256(actions).hexdigest()
|
||||
|
||||
if db_plugin_page:
|
||||
updates = {}
|
||||
if template_checksum != db_plugin_page.template_checksum:
|
||||
updates.update(
|
||||
{
|
||||
Plugin_pages.template_file: template,
|
||||
Plugin_pages.template_checksum: template_checksum,
|
||||
}
|
||||
)
|
||||
|
||||
if actions_checksum != db_plugin_page.actions_checksum:
|
||||
updates.update(
|
||||
{
|
||||
Plugin_pages.actions_file: actions,
|
||||
Plugin_pages.actions_checksum: actions_checksum,
|
||||
}
|
||||
)
|
||||
|
||||
if updates:
|
||||
self.__logger.warning(f'Page for plugin "{plugin["id"]}" already exists, updating it with the new values')
|
||||
session.query(Plugin_pages).filter(Plugin_pages.plugin_id == plugin["id"]).update(updates)
|
||||
continue
|
||||
|
||||
if db_plugin:
|
||||
self.__logger.warning(f'Page for plugin "{plugin["id"]}" does not exist, creating it')
|
||||
|
||||
to_put.append(
|
||||
Plugin_pages(
|
||||
plugin_id=plugin["id"],
|
||||
template_file=template,
|
||||
template_checksum=sha256(template).hexdigest(),
|
||||
template_checksum=template_checksum,
|
||||
actions_file=actions,
|
||||
actions_checksum=sha256(actions).hexdigest(),
|
||||
actions_checksum=actions_checksum,
|
||||
)
|
||||
)
|
||||
|
||||
|
|
@ -568,8 +723,8 @@ class Database:
|
|||
}
|
||||
)
|
||||
else:
|
||||
if config.get("SERVER_NAME", "") != "" and not (session.query(Services).with_entities(Services.id).filter_by(id=config["SERVER_NAME"].split(" ")[0]).first()):
|
||||
to_put.append(Services(id=config["SERVER_NAME"].split(" ")[0], method=method))
|
||||
if not (session.query(Services).with_entities(Services.id).filter_by(id=config.get("SERVER_NAME", "www.example.com").split(" ")[0]).first()):
|
||||
to_put.append(Services(id=config.get("SERVER_NAME", "www.example.com").split(" ")[0], method=method))
|
||||
|
||||
for key, value in config.items():
|
||||
suffix = 0
|
||||
|
|
@ -783,9 +938,8 @@ class Database:
|
|||
}
|
||||
)
|
||||
|
||||
if is_multisite:
|
||||
servers = " ".join(service.id for service in session.query(Services).all())
|
||||
config["SERVER_NAME"] = servers if not methods else {"value": servers, "global": True, "method": "default"}
|
||||
servers = " ".join(service.id for service in session.query(Services).all())
|
||||
config["SERVER_NAME"] = servers if not methods else {"value": servers, "global": True, "method": "default"}
|
||||
|
||||
return config
|
||||
|
||||
|
|
|
|||
|
|
@ -83,64 +83,65 @@ cryptography==41.0.7 \
|
|||
--hash=sha256:e3114da6d7f95d2dee7d3f4eec16dacff819740bbab931aff8648cb13c5ff5e7 \
|
||||
--hash=sha256:f983596065a18a2183e7f79ab3fd4c475205b839e02cbc0efbbf9666c4b3083d
|
||||
# via -r requirements.in
|
||||
greenlet==3.0.1 \
|
||||
--hash=sha256:0a02d259510b3630f330c86557331a3b0e0c79dac3d166e449a39363beaae174 \
|
||||
--hash=sha256:0b6f9f8ca7093fd4433472fd99b5650f8a26dcd8ba410e14094c1e44cd3ceddd \
|
||||
--hash=sha256:100f78a29707ca1525ea47388cec8a049405147719f47ebf3895e7509c6446aa \
|
||||
--hash=sha256:1757936efea16e3f03db20efd0cd50a1c86b06734f9f7338a90c4ba85ec2ad5a \
|
||||
--hash=sha256:19075157a10055759066854a973b3d1325d964d498a805bb68a1f9af4aaef8ec \
|
||||
--hash=sha256:19bbdf1cce0346ef7341705d71e2ecf6f41a35c311137f29b8a2dc2341374565 \
|
||||
--hash=sha256:20107edf7c2c3644c67c12205dc60b1bb11d26b2610b276f97d666110d1b511d \
|
||||
--hash=sha256:22f79120a24aeeae2b4471c711dcf4f8c736a2bb2fabad2a67ac9a55ea72523c \
|
||||
--hash=sha256:2847e5d7beedb8d614186962c3d774d40d3374d580d2cbdab7f184580a39d234 \
|
||||
--hash=sha256:28e89e232c7593d33cac35425b58950789962011cc274aa43ef8865f2e11f46d \
|
||||
--hash=sha256:329c5a2e5a0ee942f2992c5e3ff40be03e75f745f48847f118a3cfece7a28546 \
|
||||
--hash=sha256:337322096d92808f76ad26061a8f5fccb22b0809bea39212cd6c406f6a7060d2 \
|
||||
--hash=sha256:3fcc780ae8edbb1d050d920ab44790201f027d59fdbd21362340a85c79066a74 \
|
||||
--hash=sha256:41bdeeb552d814bcd7fb52172b304898a35818107cc8778b5101423c9017b3de \
|
||||
--hash=sha256:4eddd98afc726f8aee1948858aed9e6feeb1758889dfd869072d4465973f6bfd \
|
||||
--hash=sha256:52e93b28db27ae7d208748f45d2db8a7b6a380e0d703f099c949d0f0d80b70e9 \
|
||||
--hash=sha256:55d62807f1c5a1682075c62436702aaba941daa316e9161e4b6ccebbbf38bda3 \
|
||||
--hash=sha256:5805e71e5b570d490938d55552f5a9e10f477c19400c38bf1d5190d760691846 \
|
||||
--hash=sha256:599daf06ea59bfedbec564b1692b0166a0045f32b6f0933b0dd4df59a854caf2 \
|
||||
--hash=sha256:60d5772e8195f4e9ebf74046a9121bbb90090f6550f81d8956a05387ba139353 \
|
||||
--hash=sha256:696d8e7d82398e810f2b3622b24e87906763b6ebfd90e361e88eb85b0e554dc8 \
|
||||
--hash=sha256:6e6061bf1e9565c29002e3c601cf68569c450be7fc3f7336671af7ddb4657166 \
|
||||
--hash=sha256:80ac992f25d10aaebe1ee15df45ca0d7571d0f70b645c08ec68733fb7a020206 \
|
||||
--hash=sha256:816bd9488a94cba78d93e1abb58000e8266fa9cc2aa9ccdd6eb0696acb24005b \
|
||||
--hash=sha256:85d2b77e7c9382f004b41d9c72c85537fac834fb141b0296942d52bf03fe4a3d \
|
||||
--hash=sha256:87c8ceb0cf8a5a51b8008b643844b7f4a8264a2c13fcbcd8a8316161725383fe \
|
||||
--hash=sha256:89ee2e967bd7ff85d84a2de09df10e021c9b38c7d91dead95b406ed6350c6997 \
|
||||
--hash=sha256:8bef097455dea90ffe855286926ae02d8faa335ed8e4067326257cb571fc1445 \
|
||||
--hash=sha256:8d11ebbd679e927593978aa44c10fc2092bc454b7d13fdc958d3e9d508aba7d0 \
|
||||
--hash=sha256:91e6c7db42638dc45cf2e13c73be16bf83179f7859b07cfc139518941320be96 \
|
||||
--hash=sha256:97e7ac860d64e2dcba5c5944cfc8fa9ea185cd84061c623536154d5a89237884 \
|
||||
--hash=sha256:990066bff27c4fcf3b69382b86f4c99b3652bab2a7e685d968cd4d0cfc6f67c6 \
|
||||
--hash=sha256:9fbc5b8f3dfe24784cee8ce0be3da2d8a79e46a276593db6868382d9c50d97b1 \
|
||||
--hash=sha256:ac4a39d1abae48184d420aa8e5e63efd1b75c8444dd95daa3e03f6c6310e9619 \
|
||||
--hash=sha256:b2c02d2ad98116e914d4f3155ffc905fd0c025d901ead3f6ed07385e19122c94 \
|
||||
--hash=sha256:b2d3337dcfaa99698aa2377c81c9ca72fcd89c07e7eb62ece3f23a3fe89b2ce4 \
|
||||
--hash=sha256:b489c36d1327868d207002391f662a1d163bdc8daf10ab2e5f6e41b9b96de3b1 \
|
||||
--hash=sha256:b641161c302efbb860ae6b081f406839a8b7d5573f20a455539823802c655f63 \
|
||||
--hash=sha256:b8ba29306c5de7717b5761b9ea74f9c72b9e2b834e24aa984da99cbfc70157fd \
|
||||
--hash=sha256:b9934adbd0f6e476f0ecff3c94626529f344f57b38c9a541f87098710b18af0a \
|
||||
--hash=sha256:ce85c43ae54845272f6f9cd8320d034d7a946e9773c693b27d620edec825e376 \
|
||||
--hash=sha256:cf868e08690cb89360eebc73ba4be7fb461cfbc6168dd88e2fbbe6f31812cd57 \
|
||||
--hash=sha256:d2905ce1df400360463c772b55d8e2518d0e488a87cdea13dd2c71dcb2a1fa16 \
|
||||
--hash=sha256:d57e20ba591727da0c230ab2c3f200ac9d6d333860d85348816e1dca4cc4792e \
|
||||
--hash=sha256:d6a8c9d4f8692917a3dc7eb25a6fb337bff86909febe2f793ec1928cd97bedfc \
|
||||
--hash=sha256:d923ff276f1c1f9680d32832f8d6c040fe9306cbfb5d161b0911e9634be9ef0a \
|
||||
--hash=sha256:daa7197b43c707462f06d2c693ffdbb5991cbb8b80b5b984007de431493a319c \
|
||||
--hash=sha256:dbd4c177afb8a8d9ba348d925b0b67246147af806f0b104af4d24f144d461cd5 \
|
||||
--hash=sha256:dc4d815b794fd8868c4d67602692c21bf5293a75e4b607bb92a11e821e2b859a \
|
||||
--hash=sha256:e9d21aaa84557d64209af04ff48e0ad5e28c5cca67ce43444e939579d085da72 \
|
||||
--hash=sha256:ea6b8aa9e08eea388c5f7a276fabb1d4b6b9d6e4ceb12cc477c3d352001768a9 \
|
||||
--hash=sha256:eabe7090db68c981fca689299c2d116400b553f4b713266b130cfc9e2aa9c5a9 \
|
||||
--hash=sha256:f2f6d303f3dee132b322a14cd8765287b8f86cdc10d2cb6a6fae234ea488888e \
|
||||
--hash=sha256:f33f3258aae89da191c6ebaa3bc517c6c4cbc9b9f689e5d8452f7aedbb913fa8 \
|
||||
--hash=sha256:f7bfb769f7efa0eefcd039dd19d843a4fbfbac52f1878b1da2ed5793ec9b1a65 \
|
||||
--hash=sha256:f89e21afe925fcfa655965ca8ea10f24773a1791400989ff32f467badfe4a064 \
|
||||
--hash=sha256:fa24255ae3c0ab67e613556375a4341af04a084bd58764731972bcbc8baeba36
|
||||
greenlet==3.0.2 \
|
||||
--hash=sha256:006c1028ac0cfcc4e772980cfe73f5476041c8c91d15d64f52482fc571149d46 \
|
||||
--hash=sha256:0acadbc3f72cb0ee85070e8d36bd2a4673d2abd10731ee73c10222cf2dd4713c \
|
||||
--hash=sha256:0c0fdb8142742ee68e97c106eb81e7d3e883cc739d9c5f2b28bc38a7bafeb6d1 \
|
||||
--hash=sha256:0df7eed98ea23b20e9db64d46eb05671ba33147df9405330695bcd81a73bb0c9 \
|
||||
--hash=sha256:10d247260db20887ae8857c0cbc750b9170f0b067dd7d38fb68a3f2334393bd3 \
|
||||
--hash=sha256:14b5d999aefe9ffd2049ad19079f733c3aaa426190ffecadb1d5feacef8fe397 \
|
||||
--hash=sha256:18fe39d70d482b22f0014e84947c5aaa7211fb8e13dc4cc1c43ed2aa1db06d9a \
|
||||
--hash=sha256:1c1129bc47266d83444c85a8e990ae22688cf05fb20d7951fd2866007c2ba9bc \
|
||||
--hash=sha256:1dac09e3c0b78265d2e6d3cbac2d7c48bd1aa4b04a8ffeda3adde9f1688df2c3 \
|
||||
--hash=sha256:2c93cd03acb1499ee4de675e1a4ed8eaaa7227f7949dc55b37182047b006a7aa \
|
||||
--hash=sha256:2e9c5423046eec21f6651268cb674dfba97280701e04ef23d312776377313206 \
|
||||
--hash=sha256:2ee59c4627c8c4bb3e15949fbcd499abd6b7f4ad9e0bfcb62c65c5e2cabe0ec4 \
|
||||
--hash=sha256:339c0272a62fac7e602e4e6ec32a64ff9abadc638b72f17f6713556ed011d493 \
|
||||
--hash=sha256:38878744926cec29b5cc3654ef47f3003f14bfbba7230e3c8492393fe29cc28b \
|
||||
--hash=sha256:3e4bfa752b3688d74ab1186e2159779ff4867644d2b1ebf16db14281f0445377 \
|
||||
--hash=sha256:520fcb53a39ef90f5021c77606952dbbc1da75d77114d69b8d7bded4a8e1a813 \
|
||||
--hash=sha256:5f9ea7c2c9795549653b6f7569f6bc75d2c7d1f6b2854eb8ce0bc6ec3cb2dd88 \
|
||||
--hash=sha256:654b84c9527182036747938b81938f1d03fb8321377510bc1854a9370418ab66 \
|
||||
--hash=sha256:6d65bec56a7bc352bcf11b275b838df618651109074d455a772d3afe25390b7d \
|
||||
--hash=sha256:7363756cc439a503505b67983237d1cc19139b66488263eb19f5719a32597836 \
|
||||
--hash=sha256:80d068e4b6e2499847d916ef64176811ead6bf210a610859220d537d935ec6fd \
|
||||
--hash=sha256:8756a94ed8f293450b0e91119eca2a36332deba69feb2f9ca410d35e74eae1e4 \
|
||||
--hash=sha256:89a6f6ddcbef4000cda7e205c4c20d319488ff03db961d72d4e73519d2465309 \
|
||||
--hash=sha256:8f34a765c5170c0673eb747213a0275ecc749ab3652bdbec324621ed5b2edaef \
|
||||
--hash=sha256:8f8d14a0a4e8c670fbce633d8b9a1ee175673a695475acd838e372966845f764 \
|
||||
--hash=sha256:950e21562818f9c771989b5b65f990e76f4ac27af66e1bb34634ae67886ede2a \
|
||||
--hash=sha256:9560c580c896030ff9c311c603aaf2282234643c90d1dec738a1d93e3e53cd51 \
|
||||
--hash=sha256:9acd8fd67c248b8537953cb3af8787c18a87c33d4dcf6830e410ee1f95a63fd4 \
|
||||
--hash=sha256:a37ae53cca36823597fd5f65341b6f7bac2dd69ecd6ca01334bb795460ab150b \
|
||||
--hash=sha256:aecea0442975741e7d69daff9b13c83caff8c13eeb17485afa65f6360a045765 \
|
||||
--hash=sha256:b1405614692ac986490d10d3e1a05e9734f473750d4bee3cf7d1286ef7af7da6 \
|
||||
--hash=sha256:b1fd25dfc5879a82103b3d9e43fa952e3026c221996ff4d32a9c72052544835d \
|
||||
--hash=sha256:b2cedf279ca38ef3f4ed0d013a6a84a7fc3d9495a716b84a5fc5ff448965f251 \
|
||||
--hash=sha256:b3f0497db77cfd034f829678b28267eeeeaf2fc21b3f5041600f7617139e6773 \
|
||||
--hash=sha256:bfcecc984d60b20ffe30173b03bfe9ba6cb671b0be1e95c3e2056d4fe7006590 \
|
||||
--hash=sha256:c1f647fe5b94b51488b314c82fdda10a8756d650cee8d3cd29f657c6031bdf73 \
|
||||
--hash=sha256:c235131bf59d2546bb3ebaa8d436126267392f2e51b85ff45ac60f3a26549af0 \
|
||||
--hash=sha256:c27b142a9080bdd5869a2fa7ebf407b3c0b24bd812db925de90e9afe3c417fd6 \
|
||||
--hash=sha256:c42bb589e6e9f9d8bdd79f02f044dff020d30c1afa6e84c0b56d1ce8a324553c \
|
||||
--hash=sha256:cd5bc4fde0842ff2b9cf33382ad0b4db91c2582db836793d58d174c569637144 \
|
||||
--hash=sha256:cecfdc950dd25f25d6582952e58521bca749cf3eeb7a9bad69237024308c8196 \
|
||||
--hash=sha256:d1fceb5351ab1601903e714c3028b37f6ea722be6873f46e349a960156c05650 \
|
||||
--hash=sha256:d4d0df07a38e41a10dfb62c6fc75ede196572b580f48ee49b9282c65639f3965 \
|
||||
--hash=sha256:d5547b462b8099b84746461e882a3eb8a6e3f80be46cb6afb8524eeb191d1a30 \
|
||||
--hash=sha256:d64643317e76b4b41fdba659e7eca29634e5739b8bc394eda3a9127f697ed4b0 \
|
||||
--hash=sha256:db4233358d3438369051a2f290f1311a360d25c49f255a6c5d10b5bcb3aa2b49 \
|
||||
--hash=sha256:e0e28f5233d64c693382f66d47c362b72089ebf8ac77df7e12ac705c9fa1163d \
|
||||
--hash=sha256:e79fb5a9fb2d0bd3b6573784f5e5adabc0b0566ad3180a028af99523ce8f6138 \
|
||||
--hash=sha256:e84bef3cfb6b6bfe258c98c519811c240dbc5b33a523a14933a252e486797c90 \
|
||||
--hash=sha256:ed1a8a08de7f68506a38f9a2ddb26bbd1480689e66d788fcd4b5f77e2d9ecfcc \
|
||||
--hash=sha256:ed9bf77b41798e8417657245b9f3649314218a4a17aefb02bb3992862df32495 \
|
||||
--hash=sha256:edf7a1daba1f7c54326291a8cde58da86ab115b78c91d502be8744f0aa8e3ffa \
|
||||
--hash=sha256:f260e6c2337871a52161824058923df2bbddb38bc11a5cbe71f3474d877c5bd9 \
|
||||
--hash=sha256:f27aa32466993c92d326df982c4acccd9530fe354e938d9e9deada563e71ce76 \
|
||||
--hash=sha256:f4cf532bf3c58a862196b06947b1b5cc55503884f9b63bf18582a75228d9950e \
|
||||
--hash=sha256:fb5d60805057d8948065338be6320d35e26b0a72f45db392eb32b70dd6dc9227 \
|
||||
--hash=sha256:fc14dd9554f88c9c1fe04771589ae24db76cd56c8f1104e4381b383d6b71aff8 \
|
||||
--hash=sha256:fefd5eb2c0b1adffdf2802ff7df45bfe65988b15f6b972706a0e55d451bffaea
|
||||
# via sqlalchemy
|
||||
psycopg2-binary==2.9.9 \
|
||||
--hash=sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9 \
|
||||
|
|
@ -275,7 +276,7 @@ sqlalchemy==2.0.23 \
|
|||
--hash=sha256:f508ba8f89e0a5ecdfd3761f82dda2a3d7b678a626967608f4273e0dba8f07ac \
|
||||
--hash=sha256:fd54601ef9cc455a0c61e5245f690c8a3ad67ddb03d3b91c361d076def0b4c60
|
||||
# via -r requirements.in
|
||||
typing-extensions==4.8.0 \
|
||||
--hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \
|
||||
--hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef
|
||||
typing-extensions==4.9.0 \
|
||||
--hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \
|
||||
--hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd
|
||||
# via sqlalchemy
|
||||
|
|
|
|||
|
|
@ -101,6 +101,8 @@ class Templator:
|
|||
for root_conf in (
|
||||
"server.conf",
|
||||
"access-lua.conf",
|
||||
"ssl-certificate-lua.conf",
|
||||
"header-lua.conf",
|
||||
"init-lua.conf",
|
||||
"log-lua.conf",
|
||||
"set-lua.conf",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
docker==6.1.3
|
||||
docker==7.0.0
|
||||
jinja2==3.1.2
|
||||
kubernetes==28.1.0
|
||||
python-dotenv==1.0.0
|
||||
|
|
|
|||
|
|
@ -110,13 +110,13 @@ charset-normalizer==3.3.2 \
|
|||
--hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \
|
||||
--hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561
|
||||
# via requests
|
||||
docker==6.1.3 \
|
||||
--hash=sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20 \
|
||||
--hash=sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9
|
||||
docker==7.0.0 \
|
||||
--hash=sha256:12ba681f2777a0ad28ffbcc846a69c31b4dfd9752b47eb425a274ee269c5e14b \
|
||||
--hash=sha256:323736fb92cd9418fc5e7133bc953e11a9da04f4483f828b527db553f1e7e5a3
|
||||
# via -r requirements.in
|
||||
google-auth==2.25.1 \
|
||||
--hash=sha256:d5d66b8f4f6e3273740d7bb73ddefa6c2d1ff691704bd407d51c6b5800e7c97b \
|
||||
--hash=sha256:dfd7b44935d498e106c08883b2dac0ad36d8aa10402a6412e9a1c9d74b4773f1
|
||||
google-auth==2.25.2 \
|
||||
--hash=sha256:42f707937feb4f5e5a39e6c4f343a17300a459aaf03141457ba505812841cc40 \
|
||||
--hash=sha256:473a8dfd0135f75bb79d878436e568f2695dce456764bf3a02b6f8c540b1d256
|
||||
# via kubernetes
|
||||
idna==3.6 \
|
||||
--hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \
|
||||
|
|
@ -308,6 +308,4 @@ urllib3==1.26.18 \
|
|||
websocket-client==1.7.0 \
|
||||
--hash=sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6 \
|
||||
--hash=sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588
|
||||
# via
|
||||
# docker
|
||||
# kubernetes
|
||||
# via kubernetes
|
||||
|
|
|
|||
|
|
@ -309,10 +309,24 @@ if __name__ == "__main__":
|
|||
else:
|
||||
logger.info("Database initialized")
|
||||
else:
|
||||
logger.info(
|
||||
"Database is already initialized, skipping ...",
|
||||
logger.info("Database is already initialized, checking for changes ...")
|
||||
|
||||
ret, err = db.init_tables(
|
||||
[
|
||||
config.get_settings(),
|
||||
config.get_plugins("core"),
|
||||
config.get_plugins("external"),
|
||||
]
|
||||
)
|
||||
|
||||
if not ret and err:
|
||||
logger.error(f"Exception while checking database tables : {err}")
|
||||
sys_exit(1)
|
||||
elif not ret:
|
||||
logger.info("Database tables didn't change, skipping update ...")
|
||||
else:
|
||||
logger.info("Database tables successfully updated")
|
||||
|
||||
if args.init:
|
||||
sys_exit(0)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
FROM python:3.12.0-alpine3.18@sha256:f1d0d03700fb2d4480e89fb807e7346c14b88952f7bd58d56de54a24817cc2e8 AS builder
|
||||
FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8 AS builder
|
||||
|
||||
# Install python dependencies
|
||||
RUN apk add --no-cache --virtual .build-deps g++ gcc musl-dev jpeg-dev zlib-dev libffi-dev cairo-dev pango-dev gdk-pixbuf-dev openssl-dev cargo postgresql-dev
|
||||
|
|
@ -38,7 +38,7 @@ COPY src/common/utils utils
|
|||
COPY src/scheduler scheduler
|
||||
COPY src/VERSION VERSION
|
||||
|
||||
FROM python:3.12.0-alpine3.18@sha256:f1d0d03700fb2d4480e89fb807e7346c14b88952f7bd58d56de54a24817cc2e8
|
||||
FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8
|
||||
|
||||
# Set default umask to prevent huge recursive chmod increasing the final image size
|
||||
RUN umask 027
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
FROM python:3.12.0-alpine3.18@sha256:f1d0d03700fb2d4480e89fb807e7346c14b88952f7bd58d56de54a24817cc2e8 AS builder
|
||||
FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8 AS builder
|
||||
|
||||
# Install python dependencies
|
||||
RUN apk add --no-cache --virtual .build-deps g++ gcc musl-dev jpeg-dev zlib-dev libffi-dev cairo-dev pango-dev gdk-pixbuf-dev openssl-dev cargo postgresql-dev file make
|
||||
|
|
@ -36,7 +36,7 @@ COPY src/common/helpers helpers
|
|||
COPY src/ui ui
|
||||
COPY src/VERSION VERSION
|
||||
|
||||
FROM python:3.12.0-alpine3.18@sha256:f1d0d03700fb2d4480e89fb807e7346c14b88952f7bd58d56de54a24817cc2e8
|
||||
FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8
|
||||
|
||||
# Set default umask to prevent huge recursive chmod increasing the final image size
|
||||
RUN umask 027
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
from contextlib import suppress
|
||||
from os import _exit, getenv, listdir, sep, urandom
|
||||
from os.path import basename, dirname, join
|
||||
from secrets import choice
|
||||
|
|
@ -180,7 +181,11 @@ while not db.is_initialized():
|
|||
)
|
||||
sleep(5)
|
||||
|
||||
USER = db.get_ui_user()
|
||||
USER = "Error"
|
||||
while USER == "Error":
|
||||
with suppress(Exception):
|
||||
USER = db.get_ui_user()
|
||||
|
||||
USER_PASSWORD_RX = re_compile(r"^(?=.*?\p{Lowercase_Letter})(?=.*?\p{Uppercase_Letter})(?=.*?\d)(?=.*?[ !\"#$%&'()*+,./:;<=>?@[\\\]^_`{|}~-]).{8,}$")
|
||||
|
||||
if USER:
|
||||
|
|
|
|||
0
src/ui/static/images/favicon-white.ico
Executable file → Normal file
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
0
src/ui/static/images/favicon.ico
Executable file → Normal file
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
|
|
@ -10,7 +10,9 @@ from subprocess import run
|
|||
from logger import log
|
||||
from string import ascii_lowercase, digits
|
||||
from random import choice
|
||||
|
||||
from ssl import SSLContext, create_connection
|
||||
import OpenSSL.crypto as crypto
|
||||
from urllib.parse import urlparse
|
||||
|
||||
class Test(ABC):
|
||||
def __init__(self, name, kind, timeout, tests, no_copy_container=False, delay=0):
|
||||
|
|
@ -126,6 +128,7 @@ class Test(ABC):
|
|||
# run a single test
|
||||
def __run_test(self, test):
|
||||
try:
|
||||
ok = False
|
||||
ex_url = test["url"]
|
||||
for ex_domain, test_domain in self._domains.items():
|
||||
if search(ex_domain, ex_url):
|
||||
|
|
@ -133,10 +136,20 @@ class Test(ABC):
|
|||
break
|
||||
if test["type"] == "string":
|
||||
r = get(ex_url, timeout=10, verify=False)
|
||||
return test["string"].casefold() in r.text.casefold()
|
||||
ok = test["string"].casefold() in r.text.casefold()
|
||||
elif test["type"] == "status":
|
||||
r = get(ex_url, timeout=10, verify=False)
|
||||
return test["status"] == r.status_code
|
||||
ok = test["status"] == r.status_code
|
||||
if ok and "tls" in test:
|
||||
connection = create_connection((urlparse(ex_url).netloc, 443))
|
||||
context = SSLContext()
|
||||
sock = context.wrap_socket(connection, server_hostname=urlparse(ex_url).netloc)
|
||||
cert = sock.getpeercert(True)
|
||||
sock.close()
|
||||
x509 = crypto.load_certificate(crypto.FILETYPE_ASN1, cert)
|
||||
if x509.get_subject().CN != test["tls"]:
|
||||
ok = False
|
||||
log("TEST", "⚠️", f"wrong cert CN : {x509.get_subject().CN}")
|
||||
except:
|
||||
return False
|
||||
raise (Exception(f"unknown test type {test['type']}"))
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
docker==6.1.3
|
||||
docker==7.0.0
|
||||
requests==2.31.0
|
||||
|
|
|
|||
|
|
@ -100,9 +100,9 @@ charset-normalizer==3.3.2 \
|
|||
--hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \
|
||||
--hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561
|
||||
# via requests
|
||||
docker==6.1.3 \
|
||||
--hash=sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20 \
|
||||
--hash=sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9
|
||||
docker==7.0.0 \
|
||||
--hash=sha256:12ba681f2777a0ad28ffbcc846a69c31b4dfd9752b47eb425a274ee269c5e14b \
|
||||
--hash=sha256:323736fb92cd9418fc5e7133bc953e11a9da04f4483f828b527db553f1e7e5a3
|
||||
# via -r requirements.in
|
||||
idna==3.6 \
|
||||
--hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \
|
||||
|
|
@ -124,7 +124,3 @@ urllib3==2.1.0 \
|
|||
# via
|
||||
# docker
|
||||
# requests
|
||||
websocket-client==1.7.0 \
|
||||
--hash=sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6 \
|
||||
--hash=sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588
|
||||
# via docker
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
fastapi==0.104.1
|
||||
fastapi==0.105.0
|
||||
uvicorn[standard]==0.24.0
|
||||
|
|
|
|||
|
|
@ -23,9 +23,9 @@ exceptiongroup==1.2.0 \
|
|||
--hash=sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14 \
|
||||
--hash=sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68
|
||||
# via anyio
|
||||
fastapi==0.104.1 \
|
||||
--hash=sha256:752dc31160cdbd0436bb93bad51560b57e525cbb1d4bbf6f4904ceee75548241 \
|
||||
--hash=sha256:e5e4540a7c5e1dcfbbcf5b903c234feddcdcd881f191977a1c5dfd917487e7ae
|
||||
fastapi==0.105.0 \
|
||||
--hash=sha256:4d12838819aa52af244580675825e750ad67c9df4614f557a769606af902cf22 \
|
||||
--hash=sha256:f19ebf6fdc82a3281d10f2cb4774bdfa90238e3b40af3525a0c09fd08ad1c480
|
||||
# via -r requirements.in
|
||||
h11==0.14.0 \
|
||||
--hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \
|
||||
|
|
@ -248,9 +248,9 @@ starlette==0.27.0 \
|
|||
--hash=sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75 \
|
||||
--hash=sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91
|
||||
# via fastapi
|
||||
typing-extensions==4.8.0 \
|
||||
--hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \
|
||||
--hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef
|
||||
typing-extensions==4.9.0 \
|
||||
--hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \
|
||||
--hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd
|
||||
# via
|
||||
# fastapi
|
||||
# pydantic
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
fastapi==0.104.1
|
||||
fastapi==0.105.0
|
||||
uvicorn[standard]==0.24.0
|
||||
|
|
|
|||
|
|
@ -23,9 +23,9 @@ exceptiongroup==1.2.0 \
|
|||
--hash=sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14 \
|
||||
--hash=sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68
|
||||
# via anyio
|
||||
fastapi==0.104.1 \
|
||||
--hash=sha256:752dc31160cdbd0436bb93bad51560b57e525cbb1d4bbf6f4904ceee75548241 \
|
||||
--hash=sha256:e5e4540a7c5e1dcfbbcf5b903c234feddcdcd881f191977a1c5dfd917487e7ae
|
||||
fastapi==0.105.0 \
|
||||
--hash=sha256:4d12838819aa52af244580675825e750ad67c9df4614f557a769606af902cf22 \
|
||||
--hash=sha256:f19ebf6fdc82a3281d10f2cb4774bdfa90238e3b40af3525a0c09fd08ad1c480
|
||||
# via -r requirements.in
|
||||
h11==0.14.0 \
|
||||
--hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \
|
||||
|
|
@ -248,9 +248,9 @@ starlette==0.27.0 \
|
|||
--hash=sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75 \
|
||||
--hash=sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91
|
||||
# via fastapi
|
||||
typing-extensions==4.8.0 \
|
||||
--hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \
|
||||
--hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef
|
||||
typing-extensions==4.9.0 \
|
||||
--hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \
|
||||
--hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd
|
||||
# via
|
||||
# fastapi
|
||||
# pydantic
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
docker==6.1.3
|
||||
docker==7.0.0
|
||||
|
|
|
|||
|
|
@ -100,9 +100,9 @@ charset-normalizer==3.3.2 \
|
|||
--hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \
|
||||
--hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561
|
||||
# via requests
|
||||
docker==6.1.3 \
|
||||
--hash=sha256:aa6d17830045ba5ef0168d5eaa34d37beeb113948c413affe1d5991fc11f9a20 \
|
||||
--hash=sha256:aecd2277b8bf8e506e484f6ab7aec39abe0038e29fa4a6d3ba86c3fe01844ed9
|
||||
docker==7.0.0 \
|
||||
--hash=sha256:12ba681f2777a0ad28ffbcc846a69c31b4dfd9752b47eb425a274ee269c5e14b \
|
||||
--hash=sha256:323736fb92cd9418fc5e7133bc953e11a9da04f4483f828b527db553f1e7e5a3
|
||||
# via -r requirements.in
|
||||
idna==3.6 \
|
||||
--hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \
|
||||
|
|
@ -122,7 +122,3 @@ urllib3==2.1.0 \
|
|||
# via
|
||||
# docker
|
||||
# requests
|
||||
websocket-client==1.7.0 \
|
||||
--hash=sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6 \
|
||||
--hash=sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588
|
||||
# via docker
|
||||
|
|
|
|||
|
|
@ -83,64 +83,65 @@ cryptography==41.0.7 \
|
|||
--hash=sha256:e3114da6d7f95d2dee7d3f4eec16dacff819740bbab931aff8648cb13c5ff5e7 \
|
||||
--hash=sha256:f983596065a18a2183e7f79ab3fd4c475205b839e02cbc0efbbf9666c4b3083d
|
||||
# via -r requirements.in
|
||||
greenlet==3.0.1 \
|
||||
--hash=sha256:0a02d259510b3630f330c86557331a3b0e0c79dac3d166e449a39363beaae174 \
|
||||
--hash=sha256:0b6f9f8ca7093fd4433472fd99b5650f8a26dcd8ba410e14094c1e44cd3ceddd \
|
||||
--hash=sha256:100f78a29707ca1525ea47388cec8a049405147719f47ebf3895e7509c6446aa \
|
||||
--hash=sha256:1757936efea16e3f03db20efd0cd50a1c86b06734f9f7338a90c4ba85ec2ad5a \
|
||||
--hash=sha256:19075157a10055759066854a973b3d1325d964d498a805bb68a1f9af4aaef8ec \
|
||||
--hash=sha256:19bbdf1cce0346ef7341705d71e2ecf6f41a35c311137f29b8a2dc2341374565 \
|
||||
--hash=sha256:20107edf7c2c3644c67c12205dc60b1bb11d26b2610b276f97d666110d1b511d \
|
||||
--hash=sha256:22f79120a24aeeae2b4471c711dcf4f8c736a2bb2fabad2a67ac9a55ea72523c \
|
||||
--hash=sha256:2847e5d7beedb8d614186962c3d774d40d3374d580d2cbdab7f184580a39d234 \
|
||||
--hash=sha256:28e89e232c7593d33cac35425b58950789962011cc274aa43ef8865f2e11f46d \
|
||||
--hash=sha256:329c5a2e5a0ee942f2992c5e3ff40be03e75f745f48847f118a3cfece7a28546 \
|
||||
--hash=sha256:337322096d92808f76ad26061a8f5fccb22b0809bea39212cd6c406f6a7060d2 \
|
||||
--hash=sha256:3fcc780ae8edbb1d050d920ab44790201f027d59fdbd21362340a85c79066a74 \
|
||||
--hash=sha256:41bdeeb552d814bcd7fb52172b304898a35818107cc8778b5101423c9017b3de \
|
||||
--hash=sha256:4eddd98afc726f8aee1948858aed9e6feeb1758889dfd869072d4465973f6bfd \
|
||||
--hash=sha256:52e93b28db27ae7d208748f45d2db8a7b6a380e0d703f099c949d0f0d80b70e9 \
|
||||
--hash=sha256:55d62807f1c5a1682075c62436702aaba941daa316e9161e4b6ccebbbf38bda3 \
|
||||
--hash=sha256:5805e71e5b570d490938d55552f5a9e10f477c19400c38bf1d5190d760691846 \
|
||||
--hash=sha256:599daf06ea59bfedbec564b1692b0166a0045f32b6f0933b0dd4df59a854caf2 \
|
||||
--hash=sha256:60d5772e8195f4e9ebf74046a9121bbb90090f6550f81d8956a05387ba139353 \
|
||||
--hash=sha256:696d8e7d82398e810f2b3622b24e87906763b6ebfd90e361e88eb85b0e554dc8 \
|
||||
--hash=sha256:6e6061bf1e9565c29002e3c601cf68569c450be7fc3f7336671af7ddb4657166 \
|
||||
--hash=sha256:80ac992f25d10aaebe1ee15df45ca0d7571d0f70b645c08ec68733fb7a020206 \
|
||||
--hash=sha256:816bd9488a94cba78d93e1abb58000e8266fa9cc2aa9ccdd6eb0696acb24005b \
|
||||
--hash=sha256:85d2b77e7c9382f004b41d9c72c85537fac834fb141b0296942d52bf03fe4a3d \
|
||||
--hash=sha256:87c8ceb0cf8a5a51b8008b643844b7f4a8264a2c13fcbcd8a8316161725383fe \
|
||||
--hash=sha256:89ee2e967bd7ff85d84a2de09df10e021c9b38c7d91dead95b406ed6350c6997 \
|
||||
--hash=sha256:8bef097455dea90ffe855286926ae02d8faa335ed8e4067326257cb571fc1445 \
|
||||
--hash=sha256:8d11ebbd679e927593978aa44c10fc2092bc454b7d13fdc958d3e9d508aba7d0 \
|
||||
--hash=sha256:91e6c7db42638dc45cf2e13c73be16bf83179f7859b07cfc139518941320be96 \
|
||||
--hash=sha256:97e7ac860d64e2dcba5c5944cfc8fa9ea185cd84061c623536154d5a89237884 \
|
||||
--hash=sha256:990066bff27c4fcf3b69382b86f4c99b3652bab2a7e685d968cd4d0cfc6f67c6 \
|
||||
--hash=sha256:9fbc5b8f3dfe24784cee8ce0be3da2d8a79e46a276593db6868382d9c50d97b1 \
|
||||
--hash=sha256:ac4a39d1abae48184d420aa8e5e63efd1b75c8444dd95daa3e03f6c6310e9619 \
|
||||
--hash=sha256:b2c02d2ad98116e914d4f3155ffc905fd0c025d901ead3f6ed07385e19122c94 \
|
||||
--hash=sha256:b2d3337dcfaa99698aa2377c81c9ca72fcd89c07e7eb62ece3f23a3fe89b2ce4 \
|
||||
--hash=sha256:b489c36d1327868d207002391f662a1d163bdc8daf10ab2e5f6e41b9b96de3b1 \
|
||||
--hash=sha256:b641161c302efbb860ae6b081f406839a8b7d5573f20a455539823802c655f63 \
|
||||
--hash=sha256:b8ba29306c5de7717b5761b9ea74f9c72b9e2b834e24aa984da99cbfc70157fd \
|
||||
--hash=sha256:b9934adbd0f6e476f0ecff3c94626529f344f57b38c9a541f87098710b18af0a \
|
||||
--hash=sha256:ce85c43ae54845272f6f9cd8320d034d7a946e9773c693b27d620edec825e376 \
|
||||
--hash=sha256:cf868e08690cb89360eebc73ba4be7fb461cfbc6168dd88e2fbbe6f31812cd57 \
|
||||
--hash=sha256:d2905ce1df400360463c772b55d8e2518d0e488a87cdea13dd2c71dcb2a1fa16 \
|
||||
--hash=sha256:d57e20ba591727da0c230ab2c3f200ac9d6d333860d85348816e1dca4cc4792e \
|
||||
--hash=sha256:d6a8c9d4f8692917a3dc7eb25a6fb337bff86909febe2f793ec1928cd97bedfc \
|
||||
--hash=sha256:d923ff276f1c1f9680d32832f8d6c040fe9306cbfb5d161b0911e9634be9ef0a \
|
||||
--hash=sha256:daa7197b43c707462f06d2c693ffdbb5991cbb8b80b5b984007de431493a319c \
|
||||
--hash=sha256:dbd4c177afb8a8d9ba348d925b0b67246147af806f0b104af4d24f144d461cd5 \
|
||||
--hash=sha256:dc4d815b794fd8868c4d67602692c21bf5293a75e4b607bb92a11e821e2b859a \
|
||||
--hash=sha256:e9d21aaa84557d64209af04ff48e0ad5e28c5cca67ce43444e939579d085da72 \
|
||||
--hash=sha256:ea6b8aa9e08eea388c5f7a276fabb1d4b6b9d6e4ceb12cc477c3d352001768a9 \
|
||||
--hash=sha256:eabe7090db68c981fca689299c2d116400b553f4b713266b130cfc9e2aa9c5a9 \
|
||||
--hash=sha256:f2f6d303f3dee132b322a14cd8765287b8f86cdc10d2cb6a6fae234ea488888e \
|
||||
--hash=sha256:f33f3258aae89da191c6ebaa3bc517c6c4cbc9b9f689e5d8452f7aedbb913fa8 \
|
||||
--hash=sha256:f7bfb769f7efa0eefcd039dd19d843a4fbfbac52f1878b1da2ed5793ec9b1a65 \
|
||||
--hash=sha256:f89e21afe925fcfa655965ca8ea10f24773a1791400989ff32f467badfe4a064 \
|
||||
--hash=sha256:fa24255ae3c0ab67e613556375a4341af04a084bd58764731972bcbc8baeba36
|
||||
greenlet==3.0.2 \
|
||||
--hash=sha256:006c1028ac0cfcc4e772980cfe73f5476041c8c91d15d64f52482fc571149d46 \
|
||||
--hash=sha256:0acadbc3f72cb0ee85070e8d36bd2a4673d2abd10731ee73c10222cf2dd4713c \
|
||||
--hash=sha256:0c0fdb8142742ee68e97c106eb81e7d3e883cc739d9c5f2b28bc38a7bafeb6d1 \
|
||||
--hash=sha256:0df7eed98ea23b20e9db64d46eb05671ba33147df9405330695bcd81a73bb0c9 \
|
||||
--hash=sha256:10d247260db20887ae8857c0cbc750b9170f0b067dd7d38fb68a3f2334393bd3 \
|
||||
--hash=sha256:14b5d999aefe9ffd2049ad19079f733c3aaa426190ffecadb1d5feacef8fe397 \
|
||||
--hash=sha256:18fe39d70d482b22f0014e84947c5aaa7211fb8e13dc4cc1c43ed2aa1db06d9a \
|
||||
--hash=sha256:1c1129bc47266d83444c85a8e990ae22688cf05fb20d7951fd2866007c2ba9bc \
|
||||
--hash=sha256:1dac09e3c0b78265d2e6d3cbac2d7c48bd1aa4b04a8ffeda3adde9f1688df2c3 \
|
||||
--hash=sha256:2c93cd03acb1499ee4de675e1a4ed8eaaa7227f7949dc55b37182047b006a7aa \
|
||||
--hash=sha256:2e9c5423046eec21f6651268cb674dfba97280701e04ef23d312776377313206 \
|
||||
--hash=sha256:2ee59c4627c8c4bb3e15949fbcd499abd6b7f4ad9e0bfcb62c65c5e2cabe0ec4 \
|
||||
--hash=sha256:339c0272a62fac7e602e4e6ec32a64ff9abadc638b72f17f6713556ed011d493 \
|
||||
--hash=sha256:38878744926cec29b5cc3654ef47f3003f14bfbba7230e3c8492393fe29cc28b \
|
||||
--hash=sha256:3e4bfa752b3688d74ab1186e2159779ff4867644d2b1ebf16db14281f0445377 \
|
||||
--hash=sha256:520fcb53a39ef90f5021c77606952dbbc1da75d77114d69b8d7bded4a8e1a813 \
|
||||
--hash=sha256:5f9ea7c2c9795549653b6f7569f6bc75d2c7d1f6b2854eb8ce0bc6ec3cb2dd88 \
|
||||
--hash=sha256:654b84c9527182036747938b81938f1d03fb8321377510bc1854a9370418ab66 \
|
||||
--hash=sha256:6d65bec56a7bc352bcf11b275b838df618651109074d455a772d3afe25390b7d \
|
||||
--hash=sha256:7363756cc439a503505b67983237d1cc19139b66488263eb19f5719a32597836 \
|
||||
--hash=sha256:80d068e4b6e2499847d916ef64176811ead6bf210a610859220d537d935ec6fd \
|
||||
--hash=sha256:8756a94ed8f293450b0e91119eca2a36332deba69feb2f9ca410d35e74eae1e4 \
|
||||
--hash=sha256:89a6f6ddcbef4000cda7e205c4c20d319488ff03db961d72d4e73519d2465309 \
|
||||
--hash=sha256:8f34a765c5170c0673eb747213a0275ecc749ab3652bdbec324621ed5b2edaef \
|
||||
--hash=sha256:8f8d14a0a4e8c670fbce633d8b9a1ee175673a695475acd838e372966845f764 \
|
||||
--hash=sha256:950e21562818f9c771989b5b65f990e76f4ac27af66e1bb34634ae67886ede2a \
|
||||
--hash=sha256:9560c580c896030ff9c311c603aaf2282234643c90d1dec738a1d93e3e53cd51 \
|
||||
--hash=sha256:9acd8fd67c248b8537953cb3af8787c18a87c33d4dcf6830e410ee1f95a63fd4 \
|
||||
--hash=sha256:a37ae53cca36823597fd5f65341b6f7bac2dd69ecd6ca01334bb795460ab150b \
|
||||
--hash=sha256:aecea0442975741e7d69daff9b13c83caff8c13eeb17485afa65f6360a045765 \
|
||||
--hash=sha256:b1405614692ac986490d10d3e1a05e9734f473750d4bee3cf7d1286ef7af7da6 \
|
||||
--hash=sha256:b1fd25dfc5879a82103b3d9e43fa952e3026c221996ff4d32a9c72052544835d \
|
||||
--hash=sha256:b2cedf279ca38ef3f4ed0d013a6a84a7fc3d9495a716b84a5fc5ff448965f251 \
|
||||
--hash=sha256:b3f0497db77cfd034f829678b28267eeeeaf2fc21b3f5041600f7617139e6773 \
|
||||
--hash=sha256:bfcecc984d60b20ffe30173b03bfe9ba6cb671b0be1e95c3e2056d4fe7006590 \
|
||||
--hash=sha256:c1f647fe5b94b51488b314c82fdda10a8756d650cee8d3cd29f657c6031bdf73 \
|
||||
--hash=sha256:c235131bf59d2546bb3ebaa8d436126267392f2e51b85ff45ac60f3a26549af0 \
|
||||
--hash=sha256:c27b142a9080bdd5869a2fa7ebf407b3c0b24bd812db925de90e9afe3c417fd6 \
|
||||
--hash=sha256:c42bb589e6e9f9d8bdd79f02f044dff020d30c1afa6e84c0b56d1ce8a324553c \
|
||||
--hash=sha256:cd5bc4fde0842ff2b9cf33382ad0b4db91c2582db836793d58d174c569637144 \
|
||||
--hash=sha256:cecfdc950dd25f25d6582952e58521bca749cf3eeb7a9bad69237024308c8196 \
|
||||
--hash=sha256:d1fceb5351ab1601903e714c3028b37f6ea722be6873f46e349a960156c05650 \
|
||||
--hash=sha256:d4d0df07a38e41a10dfb62c6fc75ede196572b580f48ee49b9282c65639f3965 \
|
||||
--hash=sha256:d5547b462b8099b84746461e882a3eb8a6e3f80be46cb6afb8524eeb191d1a30 \
|
||||
--hash=sha256:d64643317e76b4b41fdba659e7eca29634e5739b8bc394eda3a9127f697ed4b0 \
|
||||
--hash=sha256:db4233358d3438369051a2f290f1311a360d25c49f255a6c5d10b5bcb3aa2b49 \
|
||||
--hash=sha256:e0e28f5233d64c693382f66d47c362b72089ebf8ac77df7e12ac705c9fa1163d \
|
||||
--hash=sha256:e79fb5a9fb2d0bd3b6573784f5e5adabc0b0566ad3180a028af99523ce8f6138 \
|
||||
--hash=sha256:e84bef3cfb6b6bfe258c98c519811c240dbc5b33a523a14933a252e486797c90 \
|
||||
--hash=sha256:ed1a8a08de7f68506a38f9a2ddb26bbd1480689e66d788fcd4b5f77e2d9ecfcc \
|
||||
--hash=sha256:ed9bf77b41798e8417657245b9f3649314218a4a17aefb02bb3992862df32495 \
|
||||
--hash=sha256:edf7a1daba1f7c54326291a8cde58da86ab115b78c91d502be8744f0aa8e3ffa \
|
||||
--hash=sha256:f260e6c2337871a52161824058923df2bbddb38bc11a5cbe71f3474d877c5bd9 \
|
||||
--hash=sha256:f27aa32466993c92d326df982c4acccd9530fe354e938d9e9deada563e71ce76 \
|
||||
--hash=sha256:f4cf532bf3c58a862196b06947b1b5cc55503884f9b63bf18582a75228d9950e \
|
||||
--hash=sha256:fb5d60805057d8948065338be6320d35e26b0a72f45db392eb32b70dd6dc9227 \
|
||||
--hash=sha256:fc14dd9554f88c9c1fe04771589ae24db76cd56c8f1104e4381b383d6b71aff8 \
|
||||
--hash=sha256:fefd5eb2c0b1adffdf2802ff7df45bfe65988b15f6b972706a0e55d451bffaea
|
||||
# via sqlalchemy
|
||||
psycopg2-binary==2.9.9 \
|
||||
--hash=sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9 \
|
||||
|
|
@ -275,7 +276,7 @@ sqlalchemy==2.0.23 \
|
|||
--hash=sha256:f508ba8f89e0a5ecdfd3761f82dda2a3d7b678a626967608f4273e0dba8f07ac \
|
||||
--hash=sha256:fd54601ef9cc455a0c61e5245f690c8a3ad67ddb03d3b91c361d076def0b4c60
|
||||
# via -r requirements.in
|
||||
typing-extensions==4.8.0 \
|
||||
--hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \
|
||||
--hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef
|
||||
typing-extensions==4.9.0 \
|
||||
--hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \
|
||||
--hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd
|
||||
# via sqlalchemy
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
fastapi==0.104.1
|
||||
fastapi==0.105.0
|
||||
uvicorn[standard]==0.24.0
|
||||
|
|
|
|||
|
|
@ -23,9 +23,9 @@ exceptiongroup==1.2.0 \
|
|||
--hash=sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14 \
|
||||
--hash=sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68
|
||||
# via anyio
|
||||
fastapi==0.104.1 \
|
||||
--hash=sha256:752dc31160cdbd0436bb93bad51560b57e525cbb1d4bbf6f4904ceee75548241 \
|
||||
--hash=sha256:e5e4540a7c5e1dcfbbcf5b903c234feddcdcd881f191977a1c5dfd917487e7ae
|
||||
fastapi==0.105.0 \
|
||||
--hash=sha256:4d12838819aa52af244580675825e750ad67c9df4614f557a769606af902cf22 \
|
||||
--hash=sha256:f19ebf6fdc82a3281d10f2cb4774bdfa90238e3b40af3525a0c09fd08ad1c480
|
||||
# via -r requirements.in
|
||||
h11==0.14.0 \
|
||||
--hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \
|
||||
|
|
@ -248,9 +248,9 @@ starlette==0.27.0 \
|
|||
--hash=sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75 \
|
||||
--hash=sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91
|
||||
# via fastapi
|
||||
typing-extensions==4.8.0 \
|
||||
--hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \
|
||||
--hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef
|
||||
typing-extensions==4.9.0 \
|
||||
--hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \
|
||||
--hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd
|
||||
# via
|
||||
# fastapi
|
||||
# pydantic
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
fastapi==0.104.1
|
||||
fastapi==0.105.0
|
||||
redis==5.0.1
|
||||
requests==2.31.0
|
||||
selenium==4.16.0
|
||||
|
|
|
|||
|
|
@ -134,9 +134,9 @@ exceptiongroup==1.2.0 \
|
|||
# anyio
|
||||
# trio
|
||||
# trio-websocket
|
||||
fastapi==0.104.1 \
|
||||
--hash=sha256:752dc31160cdbd0436bb93bad51560b57e525cbb1d4bbf6f4904ceee75548241 \
|
||||
--hash=sha256:e5e4540a7c5e1dcfbbcf5b903c234feddcdcd881f191977a1c5dfd917487e7ae
|
||||
fastapi==0.105.0 \
|
||||
--hash=sha256:4d12838819aa52af244580675825e750ad67c9df4614f557a769606af902cf22 \
|
||||
--hash=sha256:f19ebf6fdc82a3281d10f2cb4774bdfa90238e3b40af3525a0c09fd08ad1c480
|
||||
# via -r requirements.in
|
||||
h11==0.14.0 \
|
||||
--hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \
|
||||
|
|
@ -401,9 +401,9 @@ trio-websocket==0.11.1 \
|
|||
--hash=sha256:18c11793647703c158b1f6e62de638acada927344d534e3c7628eedcb746839f \
|
||||
--hash=sha256:520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638
|
||||
# via selenium
|
||||
typing-extensions==4.8.0 \
|
||||
--hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \
|
||||
--hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef
|
||||
typing-extensions==4.9.0 \
|
||||
--hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \
|
||||
--hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd
|
||||
# via
|
||||
# fastapi
|
||||
# pydantic
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
fastapi==0.104.1
|
||||
fastapi==0.105.0
|
||||
requests==2.31.0
|
||||
uvicorn[standard]==0.24.0
|
||||
|
|
|
|||
|
|
@ -119,9 +119,9 @@ exceptiongroup==1.2.0 \
|
|||
--hash=sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14 \
|
||||
--hash=sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68
|
||||
# via anyio
|
||||
fastapi==0.104.1 \
|
||||
--hash=sha256:752dc31160cdbd0436bb93bad51560b57e525cbb1d4bbf6f4904ceee75548241 \
|
||||
--hash=sha256:e5e4540a7c5e1dcfbbcf5b903c234feddcdcd881f191977a1c5dfd917487e7ae
|
||||
fastapi==0.105.0 \
|
||||
--hash=sha256:4d12838819aa52af244580675825e750ad67c9df4614f557a769606af902cf22 \
|
||||
--hash=sha256:f19ebf6fdc82a3281d10f2cb4774bdfa90238e3b40af3525a0c09fd08ad1c480
|
||||
# via -r requirements.in
|
||||
h11==0.14.0 \
|
||||
--hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \
|
||||
|
|
@ -350,9 +350,9 @@ starlette==0.27.0 \
|
|||
--hash=sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75 \
|
||||
--hash=sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91
|
||||
# via fastapi
|
||||
typing-extensions==4.8.0 \
|
||||
--hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \
|
||||
--hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef
|
||||
typing-extensions==4.9.0 \
|
||||
--hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \
|
||||
--hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd
|
||||
# via
|
||||
# fastapi
|
||||
# pydantic
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
fastapi==0.104.1
|
||||
fastapi==0.105.0
|
||||
uvicorn[standard]==0.24.0
|
||||
|
|
|
|||
|
|
@ -23,9 +23,9 @@ exceptiongroup==1.2.0 \
|
|||
--hash=sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14 \
|
||||
--hash=sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68
|
||||
# via anyio
|
||||
fastapi==0.104.1 \
|
||||
--hash=sha256:752dc31160cdbd0436bb93bad51560b57e525cbb1d4bbf6f4904ceee75548241 \
|
||||
--hash=sha256:e5e4540a7c5e1dcfbbcf5b903c234feddcdcd881f191977a1c5dfd917487e7ae
|
||||
fastapi==0.105.0 \
|
||||
--hash=sha256:4d12838819aa52af244580675825e750ad67c9df4614f557a769606af902cf22 \
|
||||
--hash=sha256:f19ebf6fdc82a3281d10f2cb4774bdfa90238e3b40af3525a0c09fd08ad1c480
|
||||
# via -r requirements.in
|
||||
h11==0.14.0 \
|
||||
--hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \
|
||||
|
|
@ -248,9 +248,9 @@ starlette==0.27.0 \
|
|||
--hash=sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75 \
|
||||
--hash=sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91
|
||||
# via fastapi
|
||||
typing-extensions==4.8.0 \
|
||||
--hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \
|
||||
--hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef
|
||||
typing-extensions==4.9.0 \
|
||||
--hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \
|
||||
--hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd
|
||||
# via
|
||||
# fastapi
|
||||
# pydantic
|
||||
|
|
|
|||
|
|
@ -1,2 +1,3 @@
|
|||
pyyaml==6.0.1
|
||||
requests==2.31.0
|
||||
pyOpenSSL==23.3.0
|
||||
|
|
|
|||
|
|
@ -1,13 +1,79 @@
|
|||
#
|
||||
# This file is autogenerated by pip-compile with Python 3.9
|
||||
# This file is autogenerated by pip-compile with Python 3.7
|
||||
# by the following command:
|
||||
#
|
||||
# pip-compile --allow-unsafe --generate-hashes --strip-extras requirements.in
|
||||
# pip-compile --allow-unsafe --generate-hashes --resolver=backtracking --strip-extras requirements.in
|
||||
#
|
||||
certifi==2023.11.17 \
|
||||
--hash=sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1 \
|
||||
--hash=sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474
|
||||
# via requests
|
||||
cffi==1.15.1 \
|
||||
--hash=sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5 \
|
||||
--hash=sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef \
|
||||
--hash=sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104 \
|
||||
--hash=sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426 \
|
||||
--hash=sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405 \
|
||||
--hash=sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375 \
|
||||
--hash=sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a \
|
||||
--hash=sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e \
|
||||
--hash=sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc \
|
||||
--hash=sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf \
|
||||
--hash=sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185 \
|
||||
--hash=sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497 \
|
||||
--hash=sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3 \
|
||||
--hash=sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35 \
|
||||
--hash=sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c \
|
||||
--hash=sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83 \
|
||||
--hash=sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21 \
|
||||
--hash=sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca \
|
||||
--hash=sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984 \
|
||||
--hash=sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac \
|
||||
--hash=sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd \
|
||||
--hash=sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee \
|
||||
--hash=sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a \
|
||||
--hash=sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2 \
|
||||
--hash=sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192 \
|
||||
--hash=sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7 \
|
||||
--hash=sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585 \
|
||||
--hash=sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f \
|
||||
--hash=sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e \
|
||||
--hash=sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27 \
|
||||
--hash=sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b \
|
||||
--hash=sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e \
|
||||
--hash=sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e \
|
||||
--hash=sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d \
|
||||
--hash=sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c \
|
||||
--hash=sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415 \
|
||||
--hash=sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82 \
|
||||
--hash=sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02 \
|
||||
--hash=sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314 \
|
||||
--hash=sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325 \
|
||||
--hash=sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c \
|
||||
--hash=sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3 \
|
||||
--hash=sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914 \
|
||||
--hash=sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045 \
|
||||
--hash=sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d \
|
||||
--hash=sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9 \
|
||||
--hash=sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5 \
|
||||
--hash=sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2 \
|
||||
--hash=sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c \
|
||||
--hash=sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3 \
|
||||
--hash=sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2 \
|
||||
--hash=sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8 \
|
||||
--hash=sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d \
|
||||
--hash=sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d \
|
||||
--hash=sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9 \
|
||||
--hash=sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162 \
|
||||
--hash=sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76 \
|
||||
--hash=sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4 \
|
||||
--hash=sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e \
|
||||
--hash=sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9 \
|
||||
--hash=sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6 \
|
||||
--hash=sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b \
|
||||
--hash=sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01 \
|
||||
--hash=sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0
|
||||
# via cryptography
|
||||
charset-normalizer==3.3.2 \
|
||||
--hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \
|
||||
--hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \
|
||||
|
|
@ -100,10 +166,43 @@ charset-normalizer==3.3.2 \
|
|||
--hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \
|
||||
--hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561
|
||||
# via requests
|
||||
cryptography==41.0.7 \
|
||||
--hash=sha256:079b85658ea2f59c4f43b70f8119a52414cdb7be34da5d019a77bf96d473b960 \
|
||||
--hash=sha256:09616eeaef406f99046553b8a40fbf8b1e70795a91885ba4c96a70793de5504a \
|
||||
--hash=sha256:13f93ce9bea8016c253b34afc6bd6a75993e5c40672ed5405a9c832f0d4a00bc \
|
||||
--hash=sha256:37a138589b12069efb424220bf78eac59ca68b95696fc622b6ccc1c0a197204a \
|
||||
--hash=sha256:3c78451b78313fa81607fa1b3f1ae0a5ddd8014c38a02d9db0616133987b9cdf \
|
||||
--hash=sha256:43f2552a2378b44869fe8827aa19e69512e3245a219104438692385b0ee119d1 \
|
||||
--hash=sha256:48a0476626da912a44cc078f9893f292f0b3e4c739caf289268168d8f4702a39 \
|
||||
--hash=sha256:49f0805fc0b2ac8d4882dd52f4a3b935b210935d500b6b805f321addc8177406 \
|
||||
--hash=sha256:5429ec739a29df2e29e15d082f1d9ad683701f0ec7709ca479b3ff2708dae65a \
|
||||
--hash=sha256:5a1b41bc97f1ad230a41657d9155113c7521953869ae57ac39ac7f1bb471469a \
|
||||
--hash=sha256:68a2dec79deebc5d26d617bfdf6e8aab065a4f34934b22d3b5010df3ba36612c \
|
||||
--hash=sha256:7a698cb1dac82c35fcf8fe3417a3aaba97de16a01ac914b89a0889d364d2f6be \
|
||||
--hash=sha256:841df4caa01008bad253bce2a6f7b47f86dc9f08df4b433c404def869f590a15 \
|
||||
--hash=sha256:90452ba79b8788fa380dfb587cca692976ef4e757b194b093d845e8d99f612f2 \
|
||||
--hash=sha256:928258ba5d6f8ae644e764d0f996d61a8777559f72dfeb2eea7e2fe0ad6e782d \
|
||||
--hash=sha256:af03b32695b24d85a75d40e1ba39ffe7db7ffcb099fe507b39fd41a565f1b157 \
|
||||
--hash=sha256:b640981bf64a3e978a56167594a0e97db71c89a479da8e175d8bb5be5178c003 \
|
||||
--hash=sha256:c5ca78485a255e03c32b513f8c2bc39fedb7f5c5f8535545bdc223a03b24f248 \
|
||||
--hash=sha256:c7f3201ec47d5207841402594f1d7950879ef890c0c495052fa62f58283fde1a \
|
||||
--hash=sha256:d5ec85080cce7b0513cfd233914eb8b7bbd0633f1d1703aa28d1dd5a72f678ec \
|
||||
--hash=sha256:d6c391c021ab1f7a82da5d8d0b3cee2f4b2c455ec86c8aebbc84837a631ff309 \
|
||||
--hash=sha256:e3114da6d7f95d2dee7d3f4eec16dacff819740bbab931aff8648cb13c5ff5e7 \
|
||||
--hash=sha256:f983596065a18a2183e7f79ab3fd4c475205b839e02cbc0efbbf9666c4b3083d
|
||||
# via pyopenssl
|
||||
idna==3.6 \
|
||||
--hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \
|
||||
--hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f
|
||||
# via requests
|
||||
pycparser==2.21 \
|
||||
--hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \
|
||||
--hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206
|
||||
# via cffi
|
||||
pyopenssl==23.3.0 \
|
||||
--hash=sha256:6756834481d9ed5470f4a9393455154bc92fe7a64b7bc6ee2c804e78c52099b2 \
|
||||
--hash=sha256:6b2cba5cc46e822750ec3e5a81ee12819850b11303630d575e98108a079c2b12
|
||||
# via -r requirements.in
|
||||
pyyaml==6.0.1 \
|
||||
--hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \
|
||||
--hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \
|
||||
|
|
@ -160,7 +259,7 @@ requests==2.31.0 \
|
|||
--hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \
|
||||
--hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1
|
||||
# via -r requirements.in
|
||||
urllib3==2.1.0 \
|
||||
--hash=sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3 \
|
||||
--hash=sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54
|
||||
urllib3==2.0.7 \
|
||||
--hash=sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84 \
|
||||
--hash=sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e
|
||||
# via requests
|
||||
|
|
|
|||