diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index e638fcdcb..e2e87f1c2 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -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}}" diff --git a/.github/workflows/push-github.yml b/.github/workflows/push-github.yml index 43a92ba11..e463a7799 100644 --- a/.github/workflows/push-github.yml +++ b/.github/workflows/push-github.yml @@ -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: diff --git a/.github/workflows/push-packagecloud.yml b/.github/workflows/push-packagecloud.yml index fe7912ea4..1a8f3eaed 100644 --- a/.github/workflows/push-packagecloud.yml +++ b/.github/workflows/push-packagecloud.yml @@ -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 diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index 979021677..42053fc06 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -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 diff --git a/.gitignore b/.gitignore index f8c5853af..a4deff667 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ env node_modules /src/ui/*.txt .mypy_cache +.cache/ diff --git a/CHANGELOG.md b/CHANGELOG.md index c5a9fd378..408284b51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/README.md b/README.md index f85a29af1..b4a8893b8 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- BunkerWeb logo + BunkerWeb logo

@@ -18,39 +18,23 @@

-<<<<<<< Updated upstream - 🌐 Website + 🌐 Website | - πŸ““ Documentation + 🀝 Panel | - πŸ‘¨β€πŸ’» Demo + πŸ““ Documentation | - πŸ›‘οΈ Examples -======= - 🌐 Website - | - πŸ““ Documentation - | - πŸ‘¨β€πŸ’» Demo - | - 🀝 Panel + πŸ‘¨β€πŸ’» Demo | πŸ›‘οΈ Examples ->>>>>>> Stashed changes | πŸ’¬ Chat | πŸ“ Forum
-<<<<<<< Updated upstream - βš™οΈ Configurator + βš™οΈ Configurator | - πŸ—ΊοΈ Threatmap -======= - βš™οΈ Configurator - | - πŸ—ΊοΈ Threatmap ->>>>>>> Stashed changes + πŸ—ΊοΈ Threatmap

> πŸ›‘οΈ Make security by default great again ! @@ -58,28 +42,14 @@ # BunkerWeb

- Overview banner + Overview banner

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 BunkerWeb demo

-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

- Concepts banner + Concepts banner

-<<<<<<< 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

- Docker banner + Docker banner

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

- Docker autoconf banner + Docker autoconf banner

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

- Swarm banner + Swarm banner

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

- Kubernetes banner + Kubernetes banner

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

- Linux banner + Linux banner

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

- Ansible banner + Ansible banner

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

- +

@@ -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 diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml deleted file mode 100644 index 6888663d4..000000000 --- a/docker-compose.dev.yml +++ /dev/null @@ -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 \ No newline at end of file diff --git a/docs/about.md b/docs/about.md index f972313a2..e0c9560ba 100644 --- a/docs/about.md +++ b/docs/about.md @@ -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 ? diff --git a/docs/assets/img/configwebsite.png b/docs/assets/img/configwebsite.png new file mode 100644 index 000000000..3a4527f39 Binary files /dev/null and b/docs/assets/img/configwebsite.png differ diff --git a/docs/assets/img/demowebsite.png b/docs/assets/img/demowebsite.png new file mode 100644 index 000000000..0c62b32dd Binary files /dev/null and b/docs/assets/img/demowebsite.png differ diff --git a/docs/assets/img/panelbunkerweb.png b/docs/assets/img/panelbunkerweb.png new file mode 100644 index 000000000..319732215 Binary files /dev/null and b/docs/assets/img/panelbunkerweb.png differ diff --git a/docs/assets/img/threatmapwebsite.png b/docs/assets/img/threatmapwebsite.png new file mode 100644 index 000000000..4b4aacfee Binary files /dev/null and b/docs/assets/img/threatmapwebsite.png differ diff --git a/docs/assets/logo.png b/docs/assets/logo.png index 2b7bcf430..b209e8c0a 100644 Binary files a/docs/assets/logo.png and b/docs/assets/logo.png differ diff --git a/docs/concepts.md b/docs/concepts.md index 52252820e..ce25ca3d2 100644 --- a/docs/concepts.md +++ b/docs/concepts.md @@ -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 diff --git a/docs/index.md b/docs/index.md index a09e870fb..bb0854c93 100644 --- a/docs/index.md +++ b/docs/index.md @@ -54,10 +54,10 @@ To delve deeper into the core security features, we invite you to explore the [s ## Demo

- +

-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/) \ No newline at end of file diff --git a/docs/integrations.md b/docs/integrations.md index 577fe47a7..c97dde18f 100644 --- a/docs/integrations.md +++ b/docs/integrations.md @@ -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"] diff --git a/docs/json2md.py b/docs/json2md.py index daf052292..7ea963260 100755 --- a/docs/json2md.py +++ b/docs/json2md.py @@ -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( diff --git a/docs/professional-services.md b/docs/professional-services.md index a5fde998c..4f190c418 100644 --- a/docs/professional-services.md +++ b/docs/professional-services.md @@ -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 ? diff --git a/docs/requirements.in b/docs/requirements.in index 9ecdddd44..b725557b6 100644 --- a/docs/requirements.in +++ b/docs/requirements.in @@ -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 diff --git a/docs/requirements.txt b/docs/requirements.txt index 1e1b163b8..84e541c44 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -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 diff --git a/docs/settings.md b/docs/settings.md index 3078235ca..9d8ac806a 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -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 diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index d6a2fbb2d..281c76a18 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -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. diff --git a/examples/kubernetes-tls/app1app2.crt b/examples/kubernetes-tls/app1app2.crt new file mode 100644 index 000000000..e7cce33ee --- /dev/null +++ b/examples/kubernetes-tls/app1app2.crt @@ -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----- diff --git a/examples/kubernetes-tls/app1app2.key b/examples/kubernetes-tls/app1app2.key new file mode 100644 index 000000000..80df378b0 --- /dev/null +++ b/examples/kubernetes-tls/app1app2.key @@ -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----- diff --git a/examples/kubernetes-tls/app3.crt b/examples/kubernetes-tls/app3.crt new file mode 100644 index 000000000..144da26d0 --- /dev/null +++ b/examples/kubernetes-tls/app3.crt @@ -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----- diff --git a/examples/kubernetes-tls/app3.key b/examples/kubernetes-tls/app3.key new file mode 100644 index 000000000..fc38a7359 --- /dev/null +++ b/examples/kubernetes-tls/app3.key @@ -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----- diff --git a/examples/kubernetes-tls/kubernetes.yml b/examples/kubernetes-tls/kubernetes.yml new file mode 100644 index 000000000..9fbe5d805 --- /dev/null +++ b/examples/kubernetes-tls/kubernetes.yml @@ -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 diff --git a/examples/kubernetes-tls/tests.json b/examples/kubernetes-tls/tests.json new file mode 100644 index 000000000..031368a2a --- /dev/null +++ b/examples/kubernetes-tls/tests.json @@ -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" + } + ] +} diff --git a/misc/integrations/k8s.mariadb.ui.yml b/misc/integrations/k8s.mariadb.ui.yml index 54622931a..89a40345c 100644 --- a/misc/integrations/k8s.mariadb.ui.yml +++ b/misc/integrations/k8s.mariadb.ui.yml @@ -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"] diff --git a/misc/integrations/k8s.mariadb.yml b/misc/integrations/k8s.mariadb.yml index 7d5f4c1c2..cd739eb29 100644 --- a/misc/integrations/k8s.mariadb.yml +++ b/misc/integrations/k8s.mariadb.yml @@ -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"] diff --git a/misc/integrations/k8s.mysql.ui.yml b/misc/integrations/k8s.mysql.ui.yml index 8b2ec3222..169c58625 100644 --- a/misc/integrations/k8s.mysql.ui.yml +++ b/misc/integrations/k8s.mysql.ui.yml @@ -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"] diff --git a/misc/integrations/k8s.mysql.yml b/misc/integrations/k8s.mysql.yml index 7c01dc5d9..99f5604e7 100644 --- a/misc/integrations/k8s.mysql.yml +++ b/misc/integrations/k8s.mysql.yml @@ -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"] diff --git a/misc/integrations/k8s.postgres.ui.yml b/misc/integrations/k8s.postgres.ui.yml index cb165bb00..6e78d8df6 100644 --- a/misc/integrations/k8s.postgres.ui.yml +++ b/misc/integrations/k8s.postgres.ui.yml @@ -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"] diff --git a/misc/integrations/k8s.postgres.yml b/misc/integrations/k8s.postgres.yml index 69df9178d..69af0aad4 100644 --- a/misc/integrations/k8s.postgres.yml +++ b/misc/integrations/k8s.postgres.yml @@ -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"] diff --git a/misc/logo.ascii b/misc/logo.ascii index 4a7126cbd..964309ee9 100644 --- a/misc/logo.ascii +++ b/misc/logo.ascii @@ -1,12 +1,12 @@ -β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ -β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ -β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ -β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ -β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ -β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ -β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ -β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ -β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ -β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ -β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ +β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ +β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ +β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ +β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ +β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ +β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ +β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ +β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ +β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ +β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ +β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„β–„ diff --git a/misc/logo.png b/misc/logo.png index b4f39d0da..18d95f3d7 100644 Binary files a/misc/logo.png and b/misc/logo.png differ diff --git a/misc/requirements-ansible.txt b/misc/requirements-ansible.txt index 0f99812f9..40f7cf1bc 100644 --- a/misc/requirements-ansible.txt +++ b/misc/requirements-ansible.txt @@ -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 \ diff --git a/mkdocs.yml b/mkdocs.yml index df4fcd0bb..b8cd13a60 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -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 © 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 diff --git a/src/autoconf/Dockerfile b/src/autoconf/Dockerfile index b757f9031..65330ff4b 100644 --- a/src/autoconf/Dockerfile +++ b/src/autoconf/Dockerfile @@ -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 diff --git a/src/autoconf/IngressController.py b/src/autoconf/IngressController.py index cbfb9621e..bdd3d34bf 100644 --- a/src/autoconf/IngressController.py +++ b/src/autoconf/IngressController.py @@ -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]: diff --git a/src/bw/lua/bunkerweb/plugin.lua b/src/bw/lua/bunkerweb/plugin.lua index 473714a7c..488eb05c1 100644 --- a/src/bw/lua/bunkerweb/plugin.lua +++ b/src/bw/lua/bunkerweb/plugin.lua @@ -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", diff --git a/src/bw/lua/bunkerweb/utils.lua b/src/bw/lua/bunkerweb/utils.lua index 364b52b85..77382757c 100644 --- a/src/bw/lua/bunkerweb/utils.lua +++ b/src/bw/lua/bunkerweb/utils.lua @@ -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() diff --git a/src/common/confs/server-http/server.conf b/src/common/confs/server-http/server.conf index 4a137ed69..d6871be91 100644 --- a/src/common/confs/server-http/server.conf +++ b/src/common/confs/server-http/server.conf @@ -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 diff --git a/src/common/confs/server-http/ssl-certificate-lua.conf b/src/common/confs/server-http/ssl-certificate-lua.conf new file mode 100644 index 000000000..e9692db0c --- /dev/null +++ b/src/common/confs/server-http/ssl-certificate-lua.conf @@ -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 +} diff --git a/src/common/core/customcert/confs/server-http/custom-cert.conf b/src/common/core/customcert/confs/server-http/custom-cert.conf index 623fc48a7..0447a7d1c 100644 --- a/src/common/core/customcert/confs/server-http/custom-cert.conf +++ b/src/common/core/customcert/confs/server-http/custom-cert.conf @@ -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 %} \ No newline at end of file diff --git a/src/common/core/customcert/customcert.lua b/src/common/core/customcert/customcert.lua new file mode 100644 index 000000000..22e0582ea --- /dev/null +++ b/src/common/core/customcert/customcert.lua @@ -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 \ No newline at end of file diff --git a/src/common/core/customcert/jobs/custom-cert.py b/src/common/core/customcert/jobs/custom-cert.py index b6a2e5a5b..c88ef819f 100644 --- a/src/common/core/customcert/jobs/custom-cert.py +++ b/src/common/core/customcert/jobs/custom-cert.py @@ -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} ...", diff --git a/src/common/core/customcert/plugin.json b/src/common/core/customcert/plugin.json index 0016ee42a..c6366f368 100644 --- a/src/common/core/customcert/plugin.json +++ b/src/common/core/customcert/plugin.json @@ -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": [ diff --git a/src/common/core/headers/plugin.json b/src/common/core/headers/plugin.json index c6573f3c3..8da20a712 100644 --- a/src/common/core/headers/plugin.json +++ b/src/common/core/headers/plugin.json @@ -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", diff --git a/src/common/core/letsencrypt/confs/server-http/lets-encrypt.conf b/src/common/core/letsencrypt/confs/server-http/lets-encrypt.conf index 6cf6f2bf6..1d5e9538b 100644 --- a/src/common/core/letsencrypt/confs/server-http/lets-encrypt.conf +++ b/src/common/core/letsencrypt/confs/server-http/lets-encrypt.conf @@ -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; diff --git a/src/common/core/letsencrypt/letsencrypt.lua b/src/common/core/letsencrypt/letsencrypt.lua index dbf958791..54c76e92f 100644 --- a/src/common/core/letsencrypt/letsencrypt.lua +++ b/src/common/core/letsencrypt/letsencrypt.lua @@ -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") diff --git a/src/common/core/order.json b/src/common/core/order.json index 2a6f90007..a63c5f311 100644 --- a/src/common/core/order.json +++ b/src/common/core/order.json @@ -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", diff --git a/src/common/core/selfsigned/confs/server-http/self-signed.conf b/src/common/core/selfsigned/confs/server-http/self-signed.conf index d305f81ad..a690f2039 100644 --- a/src/common/core/selfsigned/confs/server-http/self-signed.conf +++ b/src/common/core/selfsigned/confs/server-http/self-signed.conf @@ -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; diff --git a/src/common/core/selfsigned/selfsigned.lua b/src/common/core/selfsigned/selfsigned.lua new file mode 100644 index 000000000..d2de5e7e9 --- /dev/null +++ b/src/common/core/selfsigned/selfsigned.lua @@ -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 diff --git a/src/common/db/Database.py b/src/common/db/Database.py index 10fef9d5c..499b2b02c 100644 --- a/src/common/db/Database.py +++ b/src/common/db/Database.py @@ -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 diff --git a/src/common/db/requirements.txt b/src/common/db/requirements.txt index 7408a4e2e..0db96e162 100644 --- a/src/common/db/requirements.txt +++ b/src/common/db/requirements.txt @@ -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 diff --git a/src/common/gen/Templator.py b/src/common/gen/Templator.py index 3fa0b4d4e..3b567b09e 100644 --- a/src/common/gen/Templator.py +++ b/src/common/gen/Templator.py @@ -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", diff --git a/src/common/gen/requirements.in b/src/common/gen/requirements.in index fb3bf36d4..94055e71c 100644 --- a/src/common/gen/requirements.in +++ b/src/common/gen/requirements.in @@ -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 diff --git a/src/common/gen/requirements.txt b/src/common/gen/requirements.txt index 29a436147..19c629d14 100644 --- a/src/common/gen/requirements.txt +++ b/src/common/gen/requirements.txt @@ -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 diff --git a/src/common/gen/save_config.py b/src/common/gen/save_config.py index dd67a5bff..605cc4363 100644 --- a/src/common/gen/save_config.py +++ b/src/common/gen/save_config.py @@ -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) diff --git a/src/scheduler/Dockerfile b/src/scheduler/Dockerfile index 97e576f45..9d9d48e58 100644 --- a/src/scheduler/Dockerfile +++ b/src/scheduler/Dockerfile @@ -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 diff --git a/src/ui/Dockerfile b/src/ui/Dockerfile index 299b06be3..64b15011e 100644 --- a/src/ui/Dockerfile +++ b/src/ui/Dockerfile @@ -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 diff --git a/src/ui/main.py b/src/ui/main.py index 38bff71c0..554d94d4a 100755 --- a/src/ui/main.py +++ b/src/ui/main.py @@ -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: diff --git a/src/ui/static/images/favicon-white.ico b/src/ui/static/images/favicon-white.ico old mode 100755 new mode 100644 diff --git a/src/ui/static/images/favicon.ico b/src/ui/static/images/favicon.ico old mode 100755 new mode 100644 diff --git a/tests/Test.py b/tests/Test.py index 5e872e2d9..baf5f9f85 100644 --- a/tests/Test.py +++ b/tests/Test.py @@ -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']}")) diff --git a/tests/core/badbehavior/requirements.in b/tests/core/badbehavior/requirements.in index 0aa9a6b38..87bc072d9 100644 --- a/tests/core/badbehavior/requirements.in +++ b/tests/core/badbehavior/requirements.in @@ -1,2 +1,2 @@ -docker==6.1.3 +docker==7.0.0 requests==2.31.0 diff --git a/tests/core/badbehavior/requirements.txt b/tests/core/badbehavior/requirements.txt index f83005ee2..ca98425ae 100644 --- a/tests/core/badbehavior/requirements.txt +++ b/tests/core/badbehavior/requirements.txt @@ -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 diff --git a/tests/core/blacklist/api/requirements.in b/tests/core/blacklist/api/requirements.in index b04d6bd60..8e346bd2b 100644 --- a/tests/core/blacklist/api/requirements.in +++ b/tests/core/blacklist/api/requirements.in @@ -1,2 +1,2 @@ -fastapi==0.104.1 +fastapi==0.105.0 uvicorn[standard]==0.24.0 diff --git a/tests/core/blacklist/api/requirements.txt b/tests/core/blacklist/api/requirements.txt index b52ef7152..2352d9e41 100644 --- a/tests/core/blacklist/api/requirements.txt +++ b/tests/core/blacklist/api/requirements.txt @@ -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 diff --git a/tests/core/bunkernet/api/requirements.in b/tests/core/bunkernet/api/requirements.in index b04d6bd60..8e346bd2b 100644 --- a/tests/core/bunkernet/api/requirements.in +++ b/tests/core/bunkernet/api/requirements.in @@ -1,2 +1,2 @@ -fastapi==0.104.1 +fastapi==0.105.0 uvicorn[standard]==0.24.0 diff --git a/tests/core/bunkernet/api/requirements.txt b/tests/core/bunkernet/api/requirements.txt index b52ef7152..2352d9e41 100644 --- a/tests/core/bunkernet/api/requirements.txt +++ b/tests/core/bunkernet/api/requirements.txt @@ -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 diff --git a/tests/core/bwcli/requirements.in b/tests/core/bwcli/requirements.in index 23b7591c4..901105d06 100644 --- a/tests/core/bwcli/requirements.in +++ b/tests/core/bwcli/requirements.in @@ -1 +1 @@ -docker==6.1.3 +docker==7.0.0 diff --git a/tests/core/bwcli/requirements.txt b/tests/core/bwcli/requirements.txt index e535176b7..de920371a 100644 --- a/tests/core/bwcli/requirements.txt +++ b/tests/core/bwcli/requirements.txt @@ -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 diff --git a/tests/core/db/requirements.txt b/tests/core/db/requirements.txt index 7408a4e2e..0db96e162 100644 --- a/tests/core/db/requirements.txt +++ b/tests/core/db/requirements.txt @@ -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 diff --git a/tests/core/greylist/api/requirements.in b/tests/core/greylist/api/requirements.in index b04d6bd60..8e346bd2b 100644 --- a/tests/core/greylist/api/requirements.in +++ b/tests/core/greylist/api/requirements.in @@ -1,2 +1,2 @@ -fastapi==0.104.1 +fastapi==0.105.0 uvicorn[standard]==0.24.0 diff --git a/tests/core/greylist/api/requirements.txt b/tests/core/greylist/api/requirements.txt index b52ef7152..2352d9e41 100644 --- a/tests/core/greylist/api/requirements.txt +++ b/tests/core/greylist/api/requirements.txt @@ -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 diff --git a/tests/core/redis/requirements.in b/tests/core/redis/requirements.in index 117888c95..6de6aa9ee 100644 --- a/tests/core/redis/requirements.in +++ b/tests/core/redis/requirements.in @@ -1,4 +1,4 @@ -fastapi==0.104.1 +fastapi==0.105.0 redis==5.0.1 requests==2.31.0 selenium==4.16.0 diff --git a/tests/core/redis/requirements.txt b/tests/core/redis/requirements.txt index 477b4b9cc..c6d50dc4f 100644 --- a/tests/core/redis/requirements.txt +++ b/tests/core/redis/requirements.txt @@ -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 diff --git a/tests/core/reversescan/requirements.in b/tests/core/reversescan/requirements.in index 22cca2ade..38d2876d6 100644 --- a/tests/core/reversescan/requirements.in +++ b/tests/core/reversescan/requirements.in @@ -1,3 +1,3 @@ -fastapi==0.104.1 +fastapi==0.105.0 requests==2.31.0 uvicorn[standard]==0.24.0 diff --git a/tests/core/reversescan/requirements.txt b/tests/core/reversescan/requirements.txt index f46853cb0..68b0679ee 100644 --- a/tests/core/reversescan/requirements.txt +++ b/tests/core/reversescan/requirements.txt @@ -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 diff --git a/tests/core/whitelist/api/requirements.in b/tests/core/whitelist/api/requirements.in index b04d6bd60..8e346bd2b 100644 --- a/tests/core/whitelist/api/requirements.in +++ b/tests/core/whitelist/api/requirements.in @@ -1,2 +1,2 @@ -fastapi==0.104.1 +fastapi==0.105.0 uvicorn[standard]==0.24.0 diff --git a/tests/core/whitelist/api/requirements.txt b/tests/core/whitelist/api/requirements.txt index b52ef7152..2352d9e41 100644 --- a/tests/core/whitelist/api/requirements.txt +++ b/tests/core/whitelist/api/requirements.txt @@ -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 diff --git a/tests/requirements.in b/tests/requirements.in index 332fdbdeb..09f397033 100644 --- a/tests/requirements.in +++ b/tests/requirements.in @@ -1,2 +1,3 @@ pyyaml==6.0.1 requests==2.31.0 +pyOpenSSL==23.3.0 diff --git a/tests/requirements.txt b/tests/requirements.txt index c9454d9bf..c9ae6cfb6 100644 --- a/tests/requirements.txt +++ b/tests/requirements.txt @@ -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