Full Code of digitalocean/nginxconfig.io for AI

master dd290c0b706b cached
518 files
1.2 MB
283.6k tokens
13 symbols
1 requests
Download .txt
Showing preview only (1,333K chars total). Download the full file or copy to clipboard to get everything.
Repository: digitalocean/nginxconfig.io
Branch: master
Commit: dd290c0b706b
Files: 518
Total size: 1.2 MB

Directory structure:
gitextract_q2tmsz7t/

├── .babelrc
├── .editorconfig
├── .eslintrc.cjs
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── help.md
│   │   ├── report-a-bug.md
│   │   └── request-a-feature.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── workflows/
│       ├── do-spaces-workflow.yml
│       ├── gh-pages-workflow.yml
│       └── test-workflow.yml
├── .gitignore
├── .husky/
│   └── pre-commit
├── .lintstagedrc.json
├── .nvmrc
├── .prettierignore
├── .prettierrc.json
├── LICENSE
├── README.md
├── package.json
├── src/
│   ├── nginxconfig/
│   │   ├── build/
│   │   │   ├── prism.js
│   │   │   ├── template.js
│   │   │   └── webpack-dynamic-import.js
│   │   ├── generators/
│   │   │   ├── conf/
│   │   │   │   ├── drupal.conf.js
│   │   │   │   ├── general.conf.js
│   │   │   │   ├── joomla.conf.js
│   │   │   │   ├── letsencrypt.conf.js
│   │   │   │   ├── magento.conf.js
│   │   │   │   ├── nginx.conf.js
│   │   │   │   ├── php_fastcgi.conf.js
│   │   │   │   ├── proxy.conf.js
│   │   │   │   ├── python_uwsgi.conf.js
│   │   │   │   ├── security.conf.js
│   │   │   │   ├── website.conf.js
│   │   │   │   └── wordpress.conf.js
│   │   │   ├── ext/
│   │   │   │   └── docker.js
│   │   │   ├── index.js
│   │   │   ├── to_conf.js
│   │   │   ├── to_yaml.js
│   │   │   └── yaml/
│   │   │       └── dockerCompose.yaml.js
│   │   ├── i18n/
│   │   │   ├── de/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   ├── en/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   ├── es/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   ├── fa/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   ├── fr/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   ├── ja/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   ├── pl/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   ├── pt-br/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   ├── ru/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   ├── setup.js
│   │   │   ├── verify.js
│   │   │   ├── zh-cn/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   └── zh-tw/
│   │   │       ├── common.js
│   │   │       ├── index.js
│   │   │       ├── languages.js
│   │   │       └── templates/
│   │   │           ├── app.js
│   │   │           ├── callouts/
│   │   │           │   ├── contribute.js
│   │   │           │   ├── droplet.js
│   │   │           │   └── index.js
│   │   │           ├── domain_sections/
│   │   │           │   ├── https.js
│   │   │           │   ├── index.js
│   │   │           │   ├── logging.js
│   │   │           │   ├── onion.js
│   │   │           │   ├── php.js
│   │   │           │   ├── presets.js
│   │   │           │   ├── python.js
│   │   │           │   ├── restrict.js
│   │   │           │   ├── reverse_proxy.js
│   │   │           │   ├── routing.js
│   │   │           │   └── server.js
│   │   │           ├── footer.js
│   │   │           ├── global_sections/
│   │   │           │   ├── docker.js
│   │   │           │   ├── https.js
│   │   │           │   ├── index.js
│   │   │           │   ├── logging.js
│   │   │           │   ├── nginx.js
│   │   │           │   ├── performance.js
│   │   │           │   ├── python.js
│   │   │           │   ├── reverse_proxy.js
│   │   │           │   ├── security.js
│   │   │           │   └── tools.js
│   │   │           ├── index.js
│   │   │           ├── setup.js
│   │   │           └── setup_sections/
│   │   │               ├── certbot.js
│   │   │               ├── download.js
│   │   │               ├── go_live.js
│   │   │               ├── index.js
│   │   │               └── ssl.js
│   │   ├── mount.js
│   │   ├── scss/
│   │   │   ├── _callout.scss
│   │   │   ├── _code.scss
│   │   │   ├── _columns.scss
│   │   │   ├── _fields.scss
│   │   │   ├── _files.scss
│   │   │   ├── _footer.scss
│   │   │   ├── _header.scss
│   │   │   ├── _modals.scss
│   │   │   ├── _panel.scss
│   │   │   ├── _setup.scss
│   │   │   ├── _tabs.scss
│   │   │   ├── _vue-select.scss
│   │   │   └── style.scss
│   │   ├── templates/
│   │   │   ├── app.vue
│   │   │   ├── callouts/
│   │   │   │   ├── contribute.vue
│   │   │   │   └── droplet.vue
│   │   │   ├── domain.vue
│   │   │   ├── domain_sections/
│   │   │   │   ├── https.vue
│   │   │   │   ├── index.js
│   │   │   │   ├── logging.vue
│   │   │   │   ├── onion.vue
│   │   │   │   ├── php.vue
│   │   │   │   ├── presets.vue
│   │   │   │   ├── python.vue
│   │   │   │   ├── restrict.vue
│   │   │   │   ├── reverse_proxy.vue
│   │   │   │   ├── routing.vue
│   │   │   │   └── server.vue
│   │   │   ├── footer.vue
│   │   │   ├── global.vue
│   │   │   ├── global_sections/
│   │   │   │   ├── docker.vue
│   │   │   │   ├── https.vue
│   │   │   │   ├── index.js
│   │   │   │   ├── logging.vue
│   │   │   │   ├── nginx.vue
│   │   │   │   ├── performance.vue
│   │   │   │   ├── python.vue
│   │   │   │   ├── reverse_proxy.vue
│   │   │   │   ├── security.vue
│   │   │   │   └── tools.vue
│   │   │   ├── inputs/
│   │   │   │   ├── checkbox.vue
│   │   │   │   └── radio.vue
│   │   │   ├── prism/
│   │   │   │   ├── bash.vue
│   │   │   │   ├── docker.vue
│   │   │   │   ├── nginx.vue
│   │   │   │   └── yaml.vue
│   │   │   ├── setup.vue
│   │   │   └── setup_sections/
│   │   │       ├── certbot.vue
│   │   │       ├── download.vue
│   │   │       ├── go_live.vue
│   │   │       ├── index.js
│   │   │       └── ssl.vue
│   │   └── util/
│   │       ├── analytics.js
│   │       ├── angular_backwards_compatibility.js
│   │       ├── browser_language.js
│   │       ├── camel_to_snake.js
│   │       ├── common_hsts.js
│   │       ├── computed_from_defaults.js
│   │       ├── deep_merge.js
│   │       ├── defaults.js
│   │       ├── delegated_from_defaults.js
│   │       ├── export_data.js
│   │       ├── get_ssl_certificate.js
│   │       ├── import_data.js
│   │       ├── is_changed.js
│   │       ├── is_object.js
│   │       ├── language_packs.js
│   │       ├── log.js
│   │       ├── logging.js
│   │       ├── php_path.js
│   │       ├── php_upstream.js
│   │       ├── prism_bundle.js
│   │       ├── share_query.js
│   │       ├── snake_to_camel.js
│   │       ├── ssl_profiles.js
│   │       ├── types_extensions.js
│   │       └── vue_backwards_compatibility.js
│   └── static/
│       └── robots.txt
├── test/
│   └── testBrowserLanguage.js
└── vue.config.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .babelrc
================================================
{
    "presets": [[
        "@babel/preset-env",
        {
            "corejs": "3",
            "useBuiltIns": "usage"
        }
    ]],
    "plugins": [
        "@babel/plugin-transform-runtime",
        "@babel/plugin-proposal-class-properties"
    ]
}


================================================
FILE: .editorconfig
================================================
root = true

[*]
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4

[*.scss]
indent_size = 2

[*.json]
indent_size = 2

[*.yml]
indent_size = 2


================================================
FILE: .eslintrc.cjs
================================================
module.exports = {
    env: {
        browser: true,
        node: true,
    },
    extends: ['eslint:recommended', 'plugin:vue/recommended', 'prettier'],
    parserOptions: {
        parser: '@babel/eslint-parser',
        ecmaVersion: 2018,
        sourceType: 'module',
        requireConfigFile: false,
    },
    rules: {
        'linebreak-style': ['error', 'unix'],
        semi: ['error', 'always'],
        'comma-dangle': ['error', 'always-multiline'],
        'vue/require-v-for-key': 0,
        'vue/require-default-prop': 0,
        'vue/no-v-html': 0,
        'vue/max-attributes-per-line': 0,
        'vue/html-indent': ['error', 4],
        'vue/script-indent': [
            'error',
            4,
            {
                baseIndent: 1,
                switchCase: 1,
            },
        ],
        'vue/no-unused-vars': 'warn',
        'vue/html-self-closing': 0,
        'vue/multi-word-component-names': 0,
        'vue/no-reserved-component-names': 0,
        'eol-last': ['error', 'always'],
        'prettier/prettier': 'error',
        'import/extensions': [
            'error',
            'always',
            {
                js: 'always',
                vue: 'always',
            },
        ],
    },
    globals: {
        describe: true,
        expect: true,
        it: true,
        test: true,
    },
    plugins: ['prettier', 'import'],
};


================================================
FILE: .github/ISSUE_TEMPLATE/help.md
================================================
---
name: Help ❓
about: Encountered a problem with the tool?
---

<!-- Don't write inside the arrows as they will be hidden when you post your issue.

If you are in need of help, please follow the following steps:

1.  Fill out the template.
      This will help us understand what problem you've encountered and help us
      find a solution.

2.  Delete this line and all above lines before posting your issue! -->

## Information
<!-- Head to https://www.whatismybrowser.com/ and copy/paste the
  'Send this link to Tech Support to share your system info:' link here -->

## Help request

### Problem
<!-- What problem did you encounter? -->

### What I have tried
<!-- What have you tried so far? -->

### Screenshots
<!-- If relevant, include any screenshots here. -->


================================================
FILE: .github/ISSUE_TEMPLATE/report-a-bug.md
================================================
---
name: Report a bug 🐛
about: Report a bug with the tool. Only use this if you're 100% sure there's something wrong, otherwise, try "Help".
---

<!-- Don't put anything inside this block, as it won't be included in the issue.

If you are reporting a bug, please follow the following steps:

1.  Fill out the template in full.
      This will help us understand the situation in which the bug occurred.

2.  If you are reporting a visual bug, please include screenshots of the
     tool to help us diagnose the problem.

3.  Make sure not to write between the arrows, as anything there will be hidden.

4.  Delete this line and all above lines before posting your issue! -->

## Information
<!-- Head to https://www.whatismybrowser.com/ and copy/paste the
  'Send this link to Tech Support to share your system info:' link here -->

## Details

### Description 
<!-- Replace this with a brief summary of the bug. -->

### Steps to reproduce
<!-- Replace this with exactly what you did to cause the bug. -->

### Expected behavior
<!-- Replace this with what you expected to happen. -->

### Screenshots
<!-- Replace this with screenshots, if necessary. -->


================================================
FILE: .github/ISSUE_TEMPLATE/request-a-feature.md
================================================
---
name: Request a feature 🆕
about: Suggest a new feature that you would like in the tool!
---

<!-- Fill out the template. Don't write inside the arrows as they will be hidden
when you post your issue.

If you have a feature suggestion for the tool, read through the following steps:

1.  Fill out the template.
      This will help us understand what you're requesting and why you want us
      to add it.

2.  Keep it simple.
      Make sure it's easy to understand what you're requesting. A good way is
      to keep it to one request per GitHub issue, as we can then easily track
      feature requests.

3.  Check whether it has already been asked or added.
      You can search the exiting GitHub issues to see if your feature has
      already been requested.

4.  Ask yourself: "Does this idea/feature belong as part of the tool?"
      Whilst we'd love to be able to add every feature that every user wants,
      we want to keep the site as small and as fast as possible by limiting how
      much code we have. Make sure the feature you are requesting is something
      that others will benefit from, not just you.

5.  Delete this line and all above lines before posting your issue! -->

## Feature request

### Feature description
<!-- What feature are you suggesting? -->

### How the feature is useful
<!-- How is the feature useful to users of the tool? -->


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
## Type of Change
<!-- What part of the source are you modifying? Remove the irrelevant options. -->

- **Build Scripts:** <!-- Scripts relating to building, testing or CI -->
- **Tool Source:** <!-- Which part of the tool source? Vue, JS, SCSS? -->
- **Something else:** <!-- Say what it is, here! -->

## What issue does this relate to?
<!-- Use a GitHub keyword ('resolves #xx', 'fixes #xx', 'closes #xx') to automatically close the relevant issue. -->

### What should this PR do?
<!-- Write a quick bullet point summary of the changes this PR should be making. -->

### What are the acceptance criteria?
<!-- Write a list of what should reviewers be checking before they approve this PR. -->
<!-- If there are UI changes, include before and after screenshots in a table for comparison. -->


================================================
FILE: .github/workflows/do-spaces-workflow.yml
================================================
name: Deploy to DigitalOcean Spaces

on: push

permissions:
  contents: write

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Use Node.js
        uses: actions/setup-node@v3
        with:
          node-version-file: .nvmrc
          cache: npm

      - name: Install dependencies
        run: npm ci

      - name: Build tool
        run: npm run build
        env:
          NODE_ENV: production

      - name: Deploy commit to DigitalOcean Spaces
        run: aws s3 sync ./dist s3://${{ secrets.SPACES_BUCKET }}/commits/nginxconfig/${{ github.sha }} --endpoint=https://${{ secrets.SPACES_REGION }}.digitaloceanspaces.com --acl public-read --content-encoding utf8
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.SPACES_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.SPACES_SECRET_ACCESS_KEY }}
          AWS_DEFAULT_REGION: ${{ secrets.SPACES_REGION }}

      - name: Leave a comment on commit
        run: npm run deploy:spaces:comment
        env:
          REPO_NAME: ${{ github.repository }}
          COMMIT_SHA: ${{ github.sha }}
          GITHUB_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SPACES_REGION: ${{ secrets.SPACES_REGION }}
          SPACES_BUCKET: ${{ secrets.SPACES_BUCKET }}


================================================
FILE: .github/workflows/gh-pages-workflow.yml
================================================
name: Test and deploy to GitHub Pages

on:
  push:
    branches:
      - master

permissions:
  contents: write

concurrency:
  group: gh-pages-workflow
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Use Node.js
        uses: actions/setup-node@v3
        with:
          node-version-file: .nvmrc
          cache: npm

      - name: Install dependencies
        run: npm ci

      - name: Test before production
        run: npm test

      - name: Build tool
        run: npm run build
        env:
          NODE_ENV: production

      - name: Deploy master to GitHub Pages
        uses: JamesIves/github-pages-deploy-action@v4
        with:
          folder: dist
          clean: true
          single-commit: true


================================================
FILE: .github/workflows/test-workflow.yml
================================================
name: Test commit or pull request

on: [push, pull_request]

jobs:
  eslint:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Use Node.js
        uses: actions/setup-node@v3
        with:
          node-version-file: .nvmrc
          cache: npm

      - name: Install dependencies
        run: npm ci

      - name: Test with eslint
        run: npm run test:eslint

  stylelint:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Use Node.js
        uses: actions/setup-node@v3
        with:
          node-version-file: .nvmrc
          cache: npm

      - name: Install dependencies
        run: npm ci

      - name: Test with stylelint
        run: npm run test:stylelint

  i18n-packs:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Use Node.js
        uses: actions/setup-node@v3
        with:
          node-version-file: .nvmrc
          cache: npm

      - name: Install dependencies
        run: npm ci

      - name: Test i18n packs integrity
        run: npm run test:i18n-packs

  prettier:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Use Node.js
        uses: actions/setup-node@v3
        with:
          node-version-file: .nvmrc
          cache: npm

      - name: Install dependencies
        run: npm ci

      - name: Test with prettier
        run: npm run test:prettier


================================================
FILE: .gitignore
================================================
node_modules
.cache
.idea
.vscode
.DS_Store

/build/
/dist/
/dev/

.eslintcache


================================================
FILE: .husky/pre-commit
================================================
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx lint-staged


================================================
FILE: .lintstagedrc.json
================================================
{
  "*.{js,vue}": [
    "prettier --write",
    "eslint --quiet --cache --fix"
  ],
  "*.scss": [
    "stylelint --config node_modules/do-bulma/.stylelintrc.json --fix"
  ]
}


================================================
FILE: .nvmrc
================================================
v20.9.0


================================================
FILE: .prettierignore
================================================
package.json
package-lock.json


================================================
FILE: .prettierrc.json
================================================
{
    "singleQuote": true,
    "trailingComma": "all",
    "vueIndentScriptAndStyle": true,
    "htmlWhitespaceSensitivity": "ignore",
    "printWidth": 100,
    "tabWidth": 4,
    "singleAttributePerLine": true
}


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2020 DigitalOcean

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


================================================
FILE: README.md
================================================
[![GitHub stars](https://img.shields.io/github/stars/digitalocean/nginxconfig.io.svg)](https://github.com/digitalocean/nginxconfig.io/stargazers)
[![GitHub contributors](https://img.shields.io/github/contributors/digitalocean/nginxconfig.io.svg?color=blue)](https://github.com/digitalocean/nginxconfig.io/graphs/contributors)
[![MIT License](https://img.shields.io/github/license/digitalocean/nginxconfig.io.svg?color=blue)](https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE)
<br />
[![Closed issues](https://img.shields.io/github/issues-closed-raw/digitalocean/nginxconfig.io.svg?color=brightgreen)](https://github.com/digitalocean/nginxconfig.io/issues?q=is%3Aissue+is%3Aclosed)
[![Closed PR](https://img.shields.io/github/issues-pr-closed-raw/digitalocean/nginxconfig.io.svg?color=brightgreen)](https://github.com/digitalocean/nginxconfig.io/pulls?q=is%3Apr+is%3Aclosed)
[![Open issues](https://img.shields.io/github/issues-raw/digitalocean/nginxconfig.io.svg)](https://github.com/digitalocean/nginxconfig.io/issues)
[![Open PR](https://img.shields.io/github/issues-pr-raw/digitalocean/nginxconfig.io.svg)](https://github.com/digitalocean/nginxconfig.io/pulls)

[![nginxconfig](src/static/banner.png)](https://do.co/nginxconfig)

<h3 align="center">⚙️ NGINX configuration generator on steroids 💉</h3>
<p align="center">
    The only tool you'll ever need to configure your NGINX server.
    <br />
    <a href="https://do.co/nginxconfig"><strong>do.co/nginxconfig »</strong></a>
    <br />
    <br />
    <a href="https://github.com/digitalocean/nginxconfig.io/issues/new?template=report-a-bug.md">Report a bug</a>
    ·
    <a href="https://github.com/digitalocean/nginxconfig.io/issues/new?template=request-a-feature.md">Request a feature</a>
</p>

<br />

# ✨ [NGINX Config](https://do.co/nginxconfig)

NGINX is so much more than just a webserver. You already knew that, probably.

We love NGINX, because:
* Low memory usage
* High concurrency
* Asynchronous event-driven architecture
* Load balancing
* Reverse proxying
* FastCGI support with caching (PHP)
* Amazing fast handling of static files
* TLS/SSL with SNI

A lot of features with corresponding configuration directives.
You can deep dive into the [NGINX documentation](http://nginx.org/en/docs/) right now OR you can [use this tool](https://do.co/nginxconfig) to check
how NGINX works, observe how your inputs are affecting the output, and **generate the best config for your specific
use-case** (in parallel you can also still use the docs).

## 🚀 Usage

`GOTO` **[`do.co/nginxconfig`](https://do.co/nginxconfig)**

**Features:**
HTTPS, HTTP/2, IPv6, certbot, HSTS, security headers, SSL profiles, OCSP resolvers, caching, gzip, brotli, fallback
routing, reverse proxy, www/non-www redirect, CDN, PHP (TCP/socket, WordPress, Drupal, Magento, Joomla), Node.js support, Python
(Django) server, etc.

## 👨‍💻 Author

### Rewrite & Maintenance

**Matt (IPv4) Cowley &lt;me@mattcowley.co.uk&gt; (https://mattcowley.co.uk)**
* GitHub: [@MattIPv4](https://github.com/MattIPv4)

### Original version

**Bálint Szekeres &lt;balint@szekeres.me&gt; (https://balint.szekeres.me)**
* GitHub: [@0xB4LINT](https://github.com/0xB4LINT)
* LinkedIn: [@0xB4LINT](https://www.linkedin.com/in/0xB4LINT/)

## ▶️ Development

1. Clone the repository
    ```sh
    git clone https://github.com/digitalocean/nginxconfig.io.git
    ```
 
2. Install NPM packages
    ```sh
    npm ci
    ```

3. Run the development server *(with file watchers)*
    ```sh
    npm run dev
    ```

4. Open the development site **[localhost:8080](http://localhost:8080)**

5. Lint your code *(eslint & stylelint)*
    ```sh
    npm test
    ```

6. Build for production *(to the `dist` directory)*
    ```sh
    npm run build
    ```

## 🤝 Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create.
Any contributions you make are **greatly appreciated**.

1. Fork the Project
2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the Branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request

## ⚒️ Built With

* [Vue.js](https://vuejs.org/) - Template handling & app generation
* [Bulma](https://bulma.io/) - Base styling, customised by [do-bulma](https://github.com/do-community/do-bulma)
* [Prism](https://prismjs.com/) - Bash & NGINX syntax highlighting

## 📚 Resources

* [Mozilla SSL Configuration Generator v5](https://ssl-config.mozilla.org)
* [Mozilla SSL Configuration Generator](https://mozilla.github.io/server-side-tls/ssl-config-generator/)
* [OWASP TLS Cipher String Cheat Sheet](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/TLS_Cipher_String_Cheat_Sheet.md)
* [Nginx Optimization: understanding sendfile, tcp_nodelay and tcp_nopush](https://thoughts.t37.net/nginx-optimization-understanding-sendfile-tcp-nodelay-and-tcp-nopush-c55cdd276765)
* [NGINX Tuning For Best Performance](https://gist.github.com/denji/8359866)
* [Hardening Your HTTP Security Headers](https://www.keycdn.com/blog/http-security-headers/)
* [h5bp/server-configs-nginx](https://github.com/h5bp/server-configs-nginx)
* [Diffie-Hellman DSA-like parameters](https://security.stackexchange.com/questions/95178/diffie-hellman-parameters-still-calculating-after-24-hours/95184#95184)
* [hstspreload.org](https://hstspreload.org)
* [Optimal value for nginx worker_connections](https://serverfault.com/questions/787919/optimal-value-for-nginx-worker-connections)

## ⭐️ Show your support

Give a ⭐️ if this project helped you!

## 📝 License

Copyright © 2020 [DigitalOcean, Inc](https://www.digitalocean.com) &lt;contact@digitalocean.com&gt; (https://www.digitalocean.com).
<br />
This project is licensed under the [MIT](https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE) license.


================================================
FILE: package.json
================================================
{
  "name": "nginxconfig.io",
  "version": "1.0.0",
  "description": "NGINX config generator on steroids",
  "license": "MIT",
  "private": true,
  "engines": {
    "node": "20.9.0"
  },
  "main": "src/nginxconfig/mount.js",
  "type": "module",
  "scripts": {
    "build": "npm run build:clean && npm run build:template && npm run build:prism && npm run build:static && npm run build:tool",
    "build:clean": "do-vue clean",
    "build:template": "do-vue template && node src/nginxconfig/build/template.js",
    "build:prism": "node src/nginxconfig/build/prism.js",
    "build:static": "copyfiles --up 2 src/static/{*,**/*} dist",
    "build:tool": "vue-cli-service build src/nginxconfig/mount.js --no-clean",
    "dev": "npm run build:template && npm run build:prism && npm run dev:tool",
    "dev:tool": "vue-cli-service serve src/nginxconfig/mount.js",
    "deploy:spaces:comment": "do-vue comment nginxconfig",
    "test": "npm run test:prettier:fix && npm run test:eslint && npm run test:stylelint && npm run test:i18n-packs && npm run test:jest",
    "test:jest": "jest --env=jsdom /test/.*.js?$",
    "test:fix": "npm run test:prettier:fix && npm run test:eslint:fix",
    "test:eslint": "eslint 'src/**/*.{js,vue}' --cache",
    "test:eslint:fix": "npm run test:eslint -- --fix",
    "test:stylelint": "stylelint 'src/**/*.scss' --config node_modules/do-bulma/.stylelintrc.json",
    "test:i18n-packs": "node src/nginxconfig/i18n/verify.js",
    "test:prettier": "prettier 'src/**/*.{js,vue}' --check",
    "test:prettier:fix": "prettier --write 'src/**/*.{js,vue}'",
    "prepare": "husky install"
  },
  "jest": {
    "testRegex": "/test/.*.js?$"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/digitalocean/nginxconfig.io.git"
  },
  "keywords": [
    "nginx"
  ],
  "author": "DigitalOcean",
  "bugs": {
    "url": "https://github.com/digitalocean/nginxconfig.io/issues"
  },
  "homepage": "https://github.com/digitalocean/nginxconfig.io#readme",
  "dependencies": {
    "clipboard": "^2.0.11",
    "clone": "^2.1.2",
    "do-bulma": "github:do-community/do-bulma",
    "do-vue": "github:do-community/do-vue",
    "escape-html": "^1.0.3",
    "files-diff": "0.0.6",
    "json-to-pretty-yaml": "^1.2.2",
    "memory-tar-create": "0.0.3",
    "pretty-checkbox-vue": "^1.1.9",
    "prismjs": "^1.29.0",
    "qs": "^6.11.2",
    "simple-js-sha2-256": "^1.0.7",
    "vue": "^3.4.15",
    "vue-i18n": "^9.9.0",
    "vue-select": "^4.0.0-beta.6",
    "webpack-require-from": "^1.8.6"
  },
  "devDependencies": {
    "@babel/eslint-parser": "^7.23.3",
    "@babel/plugin-proposal-class-properties": "^7.18.6",
    "@babel/plugin-transform-runtime": "^7.23.7",
    "@babel/preset-env": "^7.23.8",
    "@babel/runtime": "^7.23.8",
    "@vue/cli-service": "^5.0.8",
    "ajv": "^8.12.0",
    "chalk": "^5.3.0",
    "copyfiles": "^2.4.1",
    "core-js": "^3.35.1",
    "duplicate-package-checker-webpack-plugin": "^3.0.0",
    "eslint": "^8.56.0",
    "eslint-config-prettier": "^9.1.0",
    "eslint-plugin-import": "^2.30.0",
    "eslint-plugin-prettier": "^5.1.3",
    "eslint-plugin-vue": "^9.20.1",
    "husky": "^8.0.3",
    "jest": "^29.7.0",
    "jest-environment-jsdom": "^29.7.0",
    "lint-staged": "^15.2.10",
    "node-fetch": "^3.3.2",
    "postcss": "^8.4.33",
    "prettier": "3.2.4",
    "sass": "^1.70.0",
    "sass-loader": "^14.0.0",
    "stylelint": "^16.2.0",
    "stylelint-config-standard-scss": "^13.0.0",
    "stylelint-order": "^6.0.4",
    "vue-template-compiler": "^2.7.16",
    "webpack": "^5.94.0",
    "webpack-bundle-analyzer": "^4.10.1"
  },
  "overrides": {
    "@vue/cli-service": {
      "mini-css-extract-plugin": "^1.6.2",
      "@achrinza/node-ipc": "^10.1.10"
    },
    "pretty-checkbox-vue": {
      "vue": "^3.0.0"
    }
  }
}


================================================
FILE: src/nginxconfig/build/prism.js
================================================
/*
Copyright 2022 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import { promises as fs } from 'fs';
import { URL } from 'url';
import fetch from 'node-fetch';

const main = async () => {
    const resp = await fetch('https://assets.digitalocean.com/prism/prism.css');
    const text = await resp.text();

    // Fix $676767 -> #676767
    const fixed = text.replace(/:\s*\$((?:[0-9a-fA-F]{3}){1,2});/g, ':#$1;');

    const buildDir = '../../../build';
    await fs.writeFile(new URL(`${buildDir}/prism.css`, import.meta.url), fixed);
};

main()
    .then(() => {})
    .catch((err) => {
        console.error(err);
        process.exit(1);
    });


================================================
FILE: src/nginxconfig/build/template.js
================================================
/*
Copyright 2022 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import fs from 'fs';
import { URL } from 'url';

// Fetch the posthtml template and convert it to an ejs template
const main = () => {
    const buildDir = '../../../build';
    let template = fs.readFileSync(new URL(`${buildDir}/base.html`, import.meta.url), 'utf8');

    // Inject our title now
    template = template.replace(
        '<block name="title"><title>DigitalOcean</title></block>',
        '<title>NGINXConfig | DigitalOcean</title>',
    );

    // Inject our app mounting point
    template = template.replace('<block name="content"></block>', '<div id="app"></div>');

    fs.writeFileSync(new URL(`${buildDir}/index.html`, import.meta.url), template);
};

main();


================================================
FILE: src/nginxconfig/build/webpack-dynamic-import.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import { info } from '../util/log.js';

const originalSrcDir = document.currentScript.src.split('/').slice(0, -2).join('/') + '/';
window.__webpackDynamicImportURL = () => {
    info(`Using ${originalSrcDir} for webpack dynamic import`);
    return originalSrcDir;
};


================================================
FILE: src/nginxconfig/generators/conf/drupal.conf.js
================================================
/*
Copyright 2020 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default (global) => {
    const config = {};

    config['# Drupal: deny private files'] = '';
    config[
        'location ~ ((^|/)\\.|^.*\\.yml$|^/sites/.*/private/|^/sites/[^/]+/[^/]*settings.*\\.php$)'
    ] = {
        deny: 'all',
        return: '404',
    };

    config['# Drupal: deny php in files'] = '';
    config['location ~ ^/sites/[^/]+/files/.*\\.php$'] = {
        deny: 'all',
    };

    config['# Drupal: deny php in vendor'] = '';
    config['location ~ /vendor/.*\\.php$'] = {
        deny: 'all',
    };

    config['# Drupal: allow image styles to be handled by the CMS'] = '';
    config['location ~ ^/sites/[^/]+/files/styles/'] = {
        try_files: '$uri /index.php?q=$uri&$args',
    };

    config['# Drupal: handle private files'] = '';
    config['location ~ ^(/[a-z\\-]+)?/system/files/'] = {
        try_files: '$uri /index.php?$query_string',
    };

    if (global.security.limitReq.computed) {
        config['# Drupal: throttle user functions'] = '';
        config['location ~ ^/user/(?:login|register|password)'] = {
            limit_req: 'zone=login burst=2 nodelay',
            try_files: '$uri /index.php?$query_string',
        };
    }

    // Done!
    return config;
};


================================================
FILE: src/nginxconfig/generators/conf/general.conf.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import { gzipTypes, extensions } from '../../util/types_extensions.js';

export default (domains, global) => {
    const config = {};

    config['# favicon.ico'] = '';
    config['location = /favicon.ico'] = {
        log_not_found: 'off',
    };

    config['# robots.txt'] = '';
    config['location = /robots.txt'] = {
        log_not_found: 'off',
    };

    if (global.performance.disableHtmlCaching.computed) {
        // Disable HTML caching for changes take effect in time
        config['# Disable HTML caching'] = '';
        const loc = `location ~* \\.(?:${extensions.html})$`;
        config[loc] = {
            add_header: 'Cache-Control "no-cache"',
        };
    }

    if (domains.every((d) => d.routing.root.computed)) {
        if (
            global.performance.assetsExpiration.computed ===
            global.performance.mediaExpiration.computed
        ) {
            if (global.performance.assetsExpiration.computed) {
                // Assets & media combined
                config['# assets, media'] = '';
                const loc = `location ~* \\.(?:${extensions.assets}|${extensions.images}|${extensions.audio}|${extensions.video})$`;
                config[loc] = {
                    expires: global.performance.assetsExpiration.computed,
                };
            }
        } else {
            // Assets & media separately
            if (global.performance.assetsExpiration.computed) {
                config['# assets'] = '';
                const loc = `location ~* \\.(?:${extensions.assets})$`;
                config[loc] = {
                    expires: global.performance.assetsExpiration.computed,
                };
            }

            if (global.performance.mediaExpiration.computed) {
                config['# media'] = '';
                const loc = `location ~* \\.(?:${extensions.images}|${extensions.audio}|${extensions.video})$`;
                config[loc] = {
                    expires: global.performance.mediaExpiration.computed,
                };
            }
        }

        if (
            global.performance.svgExpiration.computed ===
            global.performance.fontsExpiration.computed
        ) {
            if (global.performance.svgExpiration.computed) {
                // SVG & fonts combined
                config['# svg, fonts'] = '';
                const loc = `location ~* \\.(?:${extensions.svg}|${extensions.fonts})$`;
                config[loc] = {
                    add_header: 'Access-Control-Allow-Origin "*"',
                    expires: global.performance.svgExpiration.computed,
                };
            }
        } else {
            // SVG & fonts separately
            if (global.performance.svgExpiration.computed) {
                config['# svg'] = '';
                const loc = `location ~* \\.${extensions.svg}$`;
                config[loc] = {
                    add_header: 'Access-Control-Allow-Origin "*"',
                    expires: global.performance.svgExpiration.computed,
                };
            }

            if (global.performance.fontsExpiration.computed) {
                config['# fonts'] = '';
                const loc = `location ~* \\.${extensions.fonts}$`;
                config[loc] = {
                    add_header: 'Access-Control-Allow-Origin "*"',
                    expires: global.performance.fontsExpiration.computed,
                };
            }
        }
    }

    if (global.performance.gzipCompression.computed) {
        config['# gzip'] = '';
        config.gzip = 'on';
        config.gzip_vary = 'on';
        config.gzip_proxied = 'any';
        config.gzip_comp_level = 6;
        config.gzip_types = gzipTypes;
    }

    if (global.performance.brotliCompression.computed) {
        config['# brotli'] = '';
        config.brotli = 'on';
        config.brotli_comp_level = 6;
        config.brotli_types = gzipTypes;
    }

    // Done!
    return config;
};


================================================
FILE: src/nginxconfig/generators/conf/joomla.conf.js
================================================
/*
Copyright 2020 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default () => {
    const config = {};

    config['# Joomla: deny running scripts inside writable directories'] = '';
    config['location ~* /(images|cache|media|logs|tmp)/.*\\.(php|pl|py|jsp|asp|sh|cgi)$'] = {
        return: '403',
        error_page: '403 /403_error.html',
    };

    config['# Joomla: caching of files'] = '';
    config['location ~* \\.(ico|pdf|flv)$'] = {
        expires: '1y',
    };

    config['# Joomla: caching of files'] = '';
    config['location ~* \\.(js|css|png|jpg|jpeg|gif|swf|xml|txt)$'] = {
        expires: '14d',
    };

    // Done!
    return config;
};


================================================
FILE: src/nginxconfig/generators/conf/letsencrypt.conf.js
================================================
/*
Copyright 2020 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default (global) => {
    const config = {};

    config['# ACME-challenge'] = '';
    config['location ^~ /.well-known/acme-challenge/'] = {
        root: global.https.letsEncryptRoot.computed.replace(/\/+$/, ''),
    };

    // Done!
    return config;
};


================================================
FILE: src/nginxconfig/generators/conf/magento.conf.js
================================================
/*
Copyright 2020 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default () => {
    const config = {};

    config['# Magento: setup'] = '';
    config['location ^~ /setup'] = {
        root: '$base',

        '# allow index.php': '',
        'location ~ ^/setup/index.php': {
            include: 'nginxconfig.io/php_fastcgi.conf',
        },

        '# deny everything except pub': '',
        'location ~ ^/setup/(?!pub/).': {
            deny: 'all',
        },
    };

    config['# Magento: update'] = '';
    config['location ^~ /update'] = {
        root: '$base',

        '# allow index.php': '',
        'location ~ ^/update/index.php': {
            include: 'nginxconfig.io/php_fastcgi.conf',
        },

        '# deny everything except pub': '',
        'location ~ ^/update/(?!pub/).': {
            deny: 'all',
        },
    };

    config['# Magento: media files'] = '';
    config['location ^~ /media/'] = {
        try_files: '$uri $uri/ /get.php?$args',

        'location ~* \\.(?:ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$': {
            expires: '+1y',
            add_header: 'Cache-Control "public"',
            try_files: '$uri $uri/ /get.php?$args',
        },

        'location ~* \\.(?:zip|gz|gzip|bz2|csv|xml)$': {
            expires: 'off',
            add_header: 'Cache-Control "no-store"',
            try_files: '$uri $uri/ /get.php?$args',
        },

        'location ~ ^/media/theme_customization/.*\\.xml': {
            deny: 'all',
        },

        'location ~ ^/media/(?:customer|downloadable|import)/': {
            deny: 'all',
        },
    };

    config['# Magento: static route'] = '';
    config['location @magento_static'] = {
        rewrite: '^/static/(version\\d*/)?(.*)$ /static.php?resource=$2 last',
    };

    config['# Magento: static files'] = '';
    config['location ^~ /static/'] = {
        expires: 'max',
        try_files: '$uri $uri/ @magento_static',

        'location ~* \\.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$': {
            expires: '+1y',
            add_header: 'Cache-Control "public"',
            try_files: '$uri $uri/ magento_static',
        },

        'location ~* .(zip|gz|gzip|bz2|csv|xml)$': {
            expires: 'off',
            add_header: 'Cache-Control "no-store"',
            try_files: '$uri $uri/ @magento_static',
        },
    };

    config['# Magento: deny cron'] = '';
    config['location ~ cron\\.php'] = {
        deny: 'all',
    };

    // Done!
    return config;
};


================================================
FILE: src/nginxconfig/generators/conf/nginx.conf.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import { errorLogPathDisabled } from '../../util/logging.js';
import sslProfiles from '../../util/ssl_profiles.js';
import websiteConf from './website.conf.js';

export default (domains, global) => {
    const config = {};

    // Source
    config['# Generated by nginxconfig.io'] = '';
    config['# See nginxconfig.txt for the configuration share link'] = '';

    // Basic nginx conf
    config.user = global.nginx.user.computed;
    if (global.nginx.pid.computed) config.pid = global.nginx.pid.computed;
    config.worker_processes = global.nginx.workerProcesses.computed;
    config.worker_rlimit_nofile = 65535;

    // Modules
    config['# Load modules'] = '';
    config.include = `${global.nginx.nginxConfigDirectory.computed.replace(
        /\/+$/,
        '',
    )}/modules-enabled/*.conf`;

    // Events
    config.events = {
        multi_accept: 'on',
        worker_connections: 65535,
    };

    // HTTP (kv so we can use the same key multiple times)
    config.http = [];

    config.http.push(['charset', 'utf-8']);
    config.http.push(['sendfile', 'on']);
    config.http.push(['tcp_nopush', 'on']);
    config.http.push(['tcp_nodelay', 'on']);
    if (!global.security.serverTokens.computed) config.http.push(['server_tokens', 'off']);
    if (!global.logging.logNotFound.computed) config.http.push(['log_not_found', 'off']);
    config.http.push(['types_hash_max_size', global.nginx.typesHashMaxSize.computed]);
    config.http.push(['types_hash_bucket_size', global.nginx.typesHashBucketSize.computed]);
    config.http.push(['client_max_body_size', `${global.nginx.clientMaxBodySize.computed}M`]);

    config.http.push(['# MIME', '']);
    config.http.push(['include', 'mime.types']);
    config.http.push(['default_type', 'application/octet-stream']);

    // Append Cloudflare request headers to the default log format
    if (global.logging.cloudflare.computed) {
        config.http.push(['# Log Format', '']);

        // Define default log format as an array
        let logging = [
            '$remote_addr',
            '-',
            '$remote_user',
            '[$time_local]',
            '"$request"',
            '$status',
            '$body_bytes_sent',
            '"$http_referer"',
            '"$http_user_agent"',
        ];

        if (global.logging.cfRay.computed) logging.push('$http_cf_ray');

        if (global.logging.cfConnectingIp.computed) logging.push('$http_cf_connecting_ip');

        if (global.logging.xForwardedFor.computed) logging.push('$http_x_forwarded_for');

        if (global.logging.xForwardedProto.computed) logging.push('$http_x_forwarded_proto');

        if (global.logging.trueClientIp.computed) logging.push('$http_true_client_ip');

        if (global.logging.cfIpCountry.computed) logging.push('$http_cf_ipcountry');

        if (global.logging.cfVisitor.computed) logging.push('$http_cf_visitor');

        if (global.logging.cdnLoop.computed) logging.push('$http_cdn_loop');

        config.http.push(['log_format', `cloudflare '${logging.join(' ')}'`]);
    }

    config.http.push(['# Logging', '']);
    config.http.push(['access_log', 'off']);
    if (global.logging.errorLogEnabled.computed) {
        config.http.push([
            'error_log',
            global.logging.errorLogPath.computed.trim() +
                ` ${global.logging.errorLogLevel.computed}`,
        ]);
    } else {
        config.http.push(['error_log', errorLogPathDisabled]);
    }

    if (global.security.limitReq.computed) {
        config.http.push(['# Limits', '']);
        config.http.push(['limit_req_log_level', 'warn']);
        config.http.push(['limit_req_zone', '$binary_remote_addr zone=login:10m rate=10r/m']);
    }

    // HTTPS
    let hasHttps = false;
    for (const domain of domains) {
        if (domain && domain.https && domain.https.https && domain.https.https.computed) {
            hasHttps = true;
            break;
        }
    }
    if (hasHttps) {
        config.http.push(['# SSL', '']);
        config.http.push(['ssl_session_timeout', '1d']);
        config.http.push(['ssl_session_cache', 'shared:SSL:10m']);
        config.http.push(['ssl_session_tickets', 'off']);

        const sslProfile = sslProfiles[global.https.sslProfile.computed];
        if (sslProfile) {
            if (sslProfile.dh_param_size) {
                config.http.push(['# Diffie-Hellman parameter for DHE ciphersuites', '']);
                config.http.push([
                    'ssl_dhparam',
                    `${global.nginx.nginxConfigDirectory.computed.replace(/\/+$/, '')}/dhparam.pem`,
                ]);
            }

            config.http.push([`# ${sslProfile.name} configuration`, '']);
            config.http.push(['ssl_protocols', sslProfile.protocols.join(' ')]);
            if (sslProfile.ciphers.length)
                config.http.push(['ssl_ciphers', sslProfile.ciphers.join(':')]);
            if (sslProfile.server_preferred_order)
                config.http.push(['ssl_prefer_server_ciphers', 'on']);
        }

        config.http.push(['# OCSP Stapling', '']);
        config.http.push(['ssl_stapling', 'on']);
        config.http.push(['ssl_stapling_verify', 'on']);

        const ips = [];
        if (global.https.ocspCloudflare.computed) {
            if (['ipv4', 'both'].includes(global.https.ocspCloudflareType.computed))
                ips.push('1.1.1.1', '1.0.0.1');
            if (['ipv6', 'both'].includes(global.https.ocspCloudflareType.computed))
                ips.push('[2606:4700:4700::1111]', '[2606:4700:4700::1001]');
        }
        if (global.https.ocspGoogle.computed) {
            if (['ipv4', 'both'].includes(global.https.ocspGoogleType.computed))
                ips.push('8.8.8.8', '8.8.4.4');
            if (['ipv6', 'both'].includes(global.https.ocspGoogleType.computed))
                ips.push('[2001:4860:4860::8888]', '[2001:4860:4860::8844]');
        }
        if (global.https.ocspOpenDns.computed) {
            if (['ipv4', 'both'].includes(global.https.ocspOpenDnsType.computed))
                ips.push('208.67.222.222', '208.67.220.220');
            if (['ipv6', 'both'].includes(global.https.ocspOpenDnsType.computed))
                ips.push('[2620:119:35::35]', '[2620:119:53::53]');
        }
        if (global.https.ocspQuad9.computed) {
            if (['ipv4', 'both'].includes(global.https.ocspQuad9Type.computed))
                ips.push('9.9.9.9', '149.112.112.112');
            if (['ipv6', 'both'].includes(global.https.ocspQuad9Type.computed))
                ips.push('[2620:fe::fe]', '[2620:fe::9]');
        }
        if (global.https.ocspVerisign.computed) {
            if (['ipv4', 'both'].includes(global.https.ocspVerisignType.computed))
                ips.push('64.6.64.6', '64.6.65.6');
            if (['ipv6', 'both'].includes(global.https.ocspVerisignType.computed))
                ips.push('[2620:74:1b::1:1]', '[2620:74:1c::2:2]');
        }

        if (ips.length) {
            config.http.push(['resolver', `${ips.join(' ')} valid=60s`]);
            config.http.push(['resolver_timeout', '2s']);
        }
    }

    // Connection header for WebSocket reverse proxy
    if (domains.some((d) => d.reverseProxy.reverseProxy.computed)) {
        config.http.push(['# Connection header for WebSocket reverse proxy', '']);
        config.http.push([
            'map $http_upgrade $connection_upgrade',
            {
                default: 'upgrade',
                '""': 'close',
            },
        ]);
        // See https://www.nginx.com/resources/wiki/start/topics/examples/forwarded/
        config.http.push([
            'map $remote_addr $proxy_forwarded_elem',
            {
                '# IPv4 addresses can be sent as-is': '',
                '~^[0-9.]+$': '"for=$remote_addr"',
                '# IPv6 addresses need to be bracketed and quoted': '',
                '~^[0-9A-Fa-f:.]+$': '"for=\\"[$remote_addr]\\""',
                '# Unix domain socket names cannot be represented in RFC 7239 syntax': '',
                default: '"for=unknown"',
            },
        ]);
        config.http.push([
            'map $http_forwarded $proxy_add_forwarded',
            {
                '# If the incoming Forwarded header is syntactically valid, append to it': '',
                '': '"~^(,[ \\\\t]*)*([!#$%&\'*+.^_`|~0-9A-Za-z-]+=([!#$%&\'*+.^_`|~0-9A-Za-z-]+|\\"([\\\\t \\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E\\\\x80-\\\\xFF]|\\\\\\\\[\\\\t \\\\x21-\\\\x7E\\\\x80-\\\\xFF])*\\"))?(;([!#$%&\'*+.^_`|~0-9A-Za-z-]+=([!#$%&\'*+.^_`|~0-9A-Za-z-]+|\\"([\\\\t \\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E\\\\x80-\\\\xFF]|\\\\\\\\[\\\\t \\\\x21-\\\\x7E\\\\x80-\\\\xFF])*\\"))?)*([ \\\\t]*,([ \\\\t]*([!#$%&\'*+.^_`|~0-9A-Za-z-]+=([!#$%&\'*+.^_`|~0-9A-Za-z-]+|\\"([\\\\t \\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E\\\\x80-\\\\xFF]|\\\\\\\\[\\\\t \\\\x21-\\\\x7E\\\\x80-\\\\xFF])*\\"))?(;([!#$%&\'*+.^_`|~0-9A-Za-z-]+=([!#$%&\'*+.^_`|~0-9A-Za-z-]+|\\"([\\\\t \\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E\\\\x80-\\\\xFF]|\\\\\\\\[\\\\t \\\\x21-\\\\x7E\\\\x80-\\\\xFF])*\\"))?)*)?)*$" "$http_forwarded, $proxy_forwarded_elem"',
                '# Otherwise, replace it': '',
                default: '"$proxy_forwarded_elem"',
            },
        ]);
    }

    // Configs!
    config.http.push(['# Load configs', '']);
    config.http.push([
        'include',
        [
            `${global.nginx.nginxConfigDirectory.computed.replace(/\/+$/, '')}/conf.d/*.conf`,
            global.tools.modularizedStructure.computed
                ? `${global.nginx.nginxConfigDirectory.computed.replace(
                      /\/+$/,
                      '',
                  )}/sites-enabled/*`
                : '',
        ].filter((x) => x.length),
    ]);

    // Single file configs
    if (!global.tools.modularizedStructure.computed) {
        const ipPortPairs = new Set();
        for (const domain of domains) {
            config.http.push([`# ${domain.server.domain.computed}`, '']);
            config.http.push(...websiteConf(domain, domains, global, ipPortPairs));
        }
    }

    // Done!
    return config;
};


================================================
FILE: src/nginxconfig/generators/conf/php_fastcgi.conf.js
================================================
/*
Copyright 2021 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default (domains) => {
    const legacyRouting = domains.some((d) => d.routing.legacyPhpRouting.computed);
    const config = {};

    if (legacyRouting) {
        config['# split path'] = '';
        config.fastcgi_split_path_info = '^(.+\\.php)(/.+)$';
        config.set = '$_fastcgi_path_info $fastcgi_path_info';
    }

    config['# 404'] = '';
    config.try_files = '$fastcgi_script_name =404';

    config['# default fastcgi_params'] = '';
    config.include = 'fastcgi_params';

    config['# fastcgi settings'] = '';
    config.fastcgi_index = 'index.php';
    config.fastcgi_buffers = '8 16k';
    config.fastcgi_buffer_size = '32k';

    config['# fastcgi params'] = '';
    config['fastcgi_param DOCUMENT_ROOT'] = '$realpath_root';
    config['fastcgi_param SCRIPT_FILENAME'] = '$realpath_root$fastcgi_script_name';
    if (legacyRouting) config['fastcgi_param PATH_INFO'] = '$_fastcgi_path_info';
    config['fastcgi_param PHP_ADMIN_VALUE'] = '"open_basedir=$base/:/usr/lib/php/:/tmp/"';

    // Done!
    return config;
};


================================================
FILE: src/nginxconfig/generators/conf/proxy.conf.js
================================================
/*
Copyright 2022 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default (global) => {
    const config = {};

    config.proxy_http_version = '1.1';
    config.proxy_cache_bypass = '$http_upgrade';

    config['# Proxy SSL'] = '';
    config['proxy_ssl_server_name'] = 'on';

    config['# Proxy headers'] = '';
    config['proxy_set_header Upgrade'] = '$http_upgrade';
    config['proxy_set_header Connection'] = '$connection_upgrade';
    config['proxy_set_header X-Real-IP'] = '$remote_addr';
    config['proxy_set_header Forwarded'] = '$proxy_add_forwarded';
    if (global.reverseProxy.proxyCoexistenceXForwarded.computed == 'passOn') {
        config['proxy_set_header X-Forwarded-For'] = '$proxy_add_x_forwarded_for';
        config['proxy_set_header X-Forwarded-Proto'] = '$scheme';
        config['proxy_set_header X-Forwarded-Host'] = '$host';
        config['proxy_set_header X-Forwarded-Port'] = '$server_port';
    } else {
        config['proxy_set_header X-Forwarded-For'] = '""';
        config['proxy_set_header X-Forwarded-Proto'] = '""';
        config['proxy_set_header X-Forwarded-Host'] = '""';
        config['proxy_set_header X-Forwarded-Port'] = '""';
    }

    config['# Proxy timeouts'] = '';
    config['proxy_connect_timeout'] = global.reverseProxy.proxyConnectTimeout.computed;
    config['proxy_send_timeout'] = global.reverseProxy.proxySendTimeout.computed;
    config['proxy_read_timeout'] = global.reverseProxy.proxyReadTimeout.computed;

    // Done!
    return config;
};


================================================
FILE: src/nginxconfig/generators/conf/python_uwsgi.conf.js
================================================
/*
Copyright 2020 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default (global) => {
    const config = {};

    config['# default uwsgi_params'] = '';
    config.include = 'uwsgi_params';

    config['# uwsgi settings'] = '';
    config.uwsgi_pass =
        (global.python.pythonServer.computed[0] === '/' ? 'unix:' : '') +
        global.python.pythonServer.computed;
    config['uwsgi_param Host'] = '$host';
    config['uwsgi_param X-Real-IP'] = '$remote_addr';
    config['uwsgi_param X-Forwarded-For'] = '$proxy_add_x_forwarded_for';
    config['uwsgi_param X-Forwarded-Proto'] = '$http_x_forwarded_proto';

    // Done!
    return config;
};


================================================
FILE: src/nginxconfig/generators/conf/security.conf.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import commonHsts from '../../util/common_hsts.js';

export default (domains, global) => {
    const config = [];

    config.push(['# security headers', '']);
    config.push(['add_header X-XSS-Protection', '"1; mode=block" always']);
    config.push(['add_header X-Content-Type-Options', '"nosniff" always']);
    config.push([
        'add_header Referrer-Policy',
        `"${global.security.referrerPolicy.computed}" always`,
    ]);

    if (global.security.contentSecurityPolicy.computed)
        config.push([
            'add_header Content-Security-Policy',
            `"${global.security.contentSecurityPolicy.computed}" always`,
        ]);

    if (global.security.permissionsPolicy.computed)
        config.push([
            'add_header Permissions-Policy',
            `"${global.security.permissionsPolicy.computed}" always`,
        ]);

    // Every domain has HSTS enabled, and they all have same hstsSubdomains/hstsPreload settings
    if (commonHsts(domains)) {
        const commonHSTSSubdomains = domains.length && domains[0].https.hstsSubdomains.computed;
        const commonHSTSPreload = domains.length && domains[0].https.hstsPreload.computed;
        config.push([
            'add_header Strict-Transport-Security',
            `"max-age=31536000${commonHSTSSubdomains ? '; includeSubDomains' : ''}${
                commonHSTSPreload ? '; preload' : ''
            }" always`,
        ]);
    }

    config.push(['# . files', '']);
    config.push([
        'location ~ /\\.(?!well-known)',
        {
            deny: 'all',
        },
    ]);

    // Security.txt
    if (global.security.securityTxt.computed) {
        config.push(['# security.txt', '']);
        config.push([
            'location /security.txt',
            {
                return: '301 /.well-known/security.txt',
            },
        ]);

        // Custom security.txt path
        config.push([
            'location = /.well-known/security.txt',
            {
                alias: `${global.security.securityTxtPath.value}`,
            },
        ]);
    }

    // Done!
    return config;
};


================================================
FILE: src/nginxconfig/generators/conf/website.conf.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import { getSslCertificate, getSslCertificateKey } from '../../util/get_ssl_certificate.js';
import { extensions, gzipTypes } from '../../util/types_extensions.js';
import { getDomainAccessLog, getDomainErrorLog } from '../../util/logging.js';
import commonHsts from '../../util/common_hsts.js';
import securityConf from './security.conf.js';
import pythonConf from './python_uwsgi.conf.js';
import proxyConf from './proxy.conf.js';
import phpConf from './php_fastcgi.conf.js';
import generalConf from './general.conf.js';
import wordPressConf from './wordpress.conf.js';
import drupalConf from './drupal.conf.js';
import magentoConf from './magento.conf.js';
import joomlaConf from './joomla.conf.js';
import letsEncryptConf from './letsencrypt.conf.js';
import phpPath from '../../util/php_path.js';
import phpUpstream from '../../util/php_upstream.js';

const sslConfig = (domain, global) => {
    const config = [];
    if (domain.https.https.computed) {
        config.push(['# SSL', '']);
        config.push(['ssl_certificate', getSslCertificate(domain, global)]);
        config.push(['ssl_certificate_key', getSslCertificateKey(domain, global)]);

        // Let's encrypt
        if (domain.https.certType.computed === 'letsEncrypt')
            config.push([
                'ssl_trusted_certificate',
                `${global.https.letsEncryptCertRoot.computed.replace(/\/+$/, '')}/${
                    domain.server.domain.computed
                }/chain.pem`,
            ]);
    }
    return config;
};

const httpsListen = (domain, global, ipPortPairs) => {
    const config = [];

    // Check if reuseport needs to be set
    const ipPortV4 = `${
        domain.server.listenIpv4.computed === '*' ? '' : `${domain.server.listenIpv4.computed}:`
    }443`;
    const reusePortV4 = global.https.portReuse.computed && !ipPortPairs.has(ipPortV4);
    if (reusePortV4) ipPortPairs.add(ipPortV4);

    // HTTPS
    config.push([
        'listen',
        `${ipPortV4} ssl${domain.https.http2.computed ? ' http2' : ''}${
            reusePortV4 ? ' reuseport' : ''
        }`,
    ]);

    // HTTP/3
    if (domain.https.http3.computed) config.push(['listen', `${ipPortV4} http3`]);

    // v6
    if (domain.server.listenIpv6.computed) {
        // Check if reuseport needs to be set
        const ipPortV6 = `[${domain.server.listenIpv6.computed}]:443`;
        const reusePortV6 = global.https.portReuse.computed && !ipPortPairs.has(ipPortV6);
        if (reusePortV6) ipPortPairs.add(ipPortV6);

        // HTTPS
        config.push([
            'listen',
            `${ipPortV6} ssl${domain.https.http2.computed ? ' http2' : ''}${
                reusePortV6 ? ' reuseport' : ''
            }`,
        ]);

        // HTTP/3
        if (domain.https.http3.computed) config.push(['listen', `${ipPortV6} http3`]);
    }

    return config;
};

const httpListen = (domain, global, ipPortPairs) => {
    const config = [];

    // Check if reuseport needs to be set
    const ipPortV4 = `${
        domain.server.listenIpv4.computed === '*' ? '' : `${domain.server.listenIpv4.computed}:`
    }80`;
    const reusePortV4 = global.https.portReuse.computed && !ipPortPairs.has(ipPortV4);
    if (reusePortV4) ipPortPairs.add(ipPortV4);

    // v4
    config.push(['listen', `${ipPortV4}${reusePortV4 ? ' reuseport' : ''}`]);

    // v6
    if (domain.server.listenIpv6.computed) {
        // Check if reuseport needs to be set
        const ipPortV6 = `[${domain.server.listenIpv6.computed}]:80`;
        const reusePortV6 = global.https.portReuse.computed && !ipPortPairs.has(ipPortV6);
        if (reusePortV6) ipPortPairs.add(ipPortV6);

        config.push(['listen', `${ipPortV6}${reusePortV6 ? ' reuseport' : ''}`]);
    }

    return config;
};

const listenConfig = (domain, global, ipPortPairs) => {
    if (domain.https.https.computed) return httpsListen(domain, global, ipPortPairs);
    return httpListen(domain, global, ipPortPairs);
};

const httpRedirectConfig = (domain, global, ipPortPairs, domainName, redirectDomain) => {
    // Build the server config on its own before adding it to the parent config
    const config = [];

    config.push(...httpListen(domain, global, ipPortPairs));
    config.push(['server_name', domainName]);

    // Logging
    if (domain.logging.redirectAccessLog.computed || domain.logging.redirectErrorLog.computed) {
        config.push(['# logging', '']);

        if (domain.logging.redirectAccessLog.computed) {
            config.push(['access_log', getDomainAccessLog(domain, global)]);
        }

        if (domain.logging.redirectErrorLog.computed) {
            config.push(['error_log', getDomainErrorLog(domain)]);
        }
    }

    if (domain.https.certType.computed === 'letsEncrypt') {
        // Let's encrypt

        if (global.tools.modularizedStructure.computed) {
            // Modularized
            config.push(['include', 'nginxconfig.io/letsencrypt.conf']);
        } else {
            // Unified
            config.push(...Object.entries(letsEncryptConf(global)));
        }

        config.push([
            'location /',
            {
                return: `301 https://${redirectDomain ? redirectDomain : domainName}$request_uri`,
            },
        ]);
    } else {
        // Custom cert
        config.push([
            'return',
            `301 https://${redirectDomain ? redirectDomain : domainName}$request_uri`,
        ]);
    }

    return config;
};

export default (domain, domains, global, ipPortPairs) => {
    // Use kv so we can use the same key multiple times
    const config = [];

    // Build the server config on its own before adding it to the parent config
    const serverConfig = [];

    // Not HTTPS or not force HTTPS
    if (!domain.https.https.computed || !domain.https.forceHttps.computed)
        serverConfig.push(...httpListen(domain, global, ipPortPairs));

    // HTTPS
    if (domain.https.https.computed) serverConfig.push(...httpsListen(domain, global, ipPortPairs));

    serverConfig.push([
        'server_name',
        `${domain.server.wwwSubdomain.computed ? 'www.' : ''}${domain.server.domain.computed}`,
    ]);

    // PHP or Django
    if (
        domain.php.php.computed ||
        (domain.python.python.computed && domain.python.djangoRules.computed)
    ) {
        serverConfig.push(['set', `$base ${domain.server.path.computed}`]);

        // root
        if (domain.routing.root.computed)
            serverConfig.push(['root', `$base${domain.server.documentRoot.computed}`]);
    }

    // Not PHP and not Django and root
    if (
        !domain.php.php.computed &&
        (!domain.python.python.computed || !domain.python.djangoRules.computed) &&
        domain.routing.root.computed
    )
        serverConfig.push([
            'root',
            `${domain.server.path.computed}${domain.server.documentRoot.computed}`,
        ]);

    // HTTPS
    serverConfig.push(...sslConfig(domain, global));

    // Onion location
    if (domain.onion.onionLocation.computed) {
        serverConfig.push(['# Onion services', '']);
        serverConfig.push([
            'add_header Onion-Location',
            `http://${domain.onion.onionLocation.computed}$request_uri`,
        ]);
    }

    // HSTS
    if (!commonHsts(domains) && domain.https.hsts.computed) {
        serverConfig.push(['# HSTS', '']);
        serverConfig.push([
            'add_header Strict-Transport-Security',
            `"max-age=31536000${domain.https.hstsSubdomains.computed ? '; includeSubDomains' : ''}${
                domain.https.hstsPreload.computed ? '; preload' : ''
            }" always`,
        ]);
    }

    // Security
    if (global.tools.modularizedStructure.computed) {
        // Modularized
        serverConfig.push(['# security', '']);
        serverConfig.push(['include', 'nginxconfig.io/security.conf']);
    } else {
        // Unified
        serverConfig.push(...securityConf(domains, global));
    }

    // Restrict Methods
    if (
        Object.keys(domain.restrict).find(
            (k) => domain.restrict[k].computed && k !== 'responseCode',
        )
    ) {
        const allowedKeys = Object.keys(domain.restrict)
            .filter((k) => !domain.restrict[k].computed && k !== 'responseCode')
            .map((e) => e.replace('Method', '').toUpperCase());

        serverConfig.push(['# restrict methods', '']);
        serverConfig.push([
            `if ($request_method !~ ^(${allowedKeys.join('|')})$)`,
            {
                return: `'${domain.restrict.responseCode.computed}'`,
            },
        ]);
    }

    // Access log or error log for domain
    if (domain.logging.accessLogEnabled.computed || domain.logging.errorLogEnabled.computed) {
        serverConfig.push(['# logging', '']);

        if (domain.logging.accessLogEnabled.computed)
            serverConfig.push(['access_log', getDomainAccessLog(domain, global)]);

        if (domain.logging.errorLogEnabled.computed)
            serverConfig.push(['error_log', getDomainErrorLog(domain)]);
    }

    // index.php
    if (domain.routing.index.computed === 'index.php') {
        serverConfig.push(['# index.php', '']);
        serverConfig.push(['index', 'index.php']);
    }

    // Fallback index.html or index.php
    if (
        (domain.routing.fallbackHtml.computed || domain.routing.fallbackPhp.computed) &&
        (!domain.reverseProxy.reverseProxy.computed || domain.reverseProxy.path.computed !== '/')
    ) {
        serverConfig.push([
            `# index.${
                domain.routing.fallbackHtml.computed
                    ? 'html'
                    : domain.routing.fallbackPhp.computed
                      ? 'php'
                      : ''
            } fallback`,
            '',
        ]);
        serverConfig.push([
            'location /',
            {
                try_files: `$uri $uri/ /index.${
                    domain.routing.fallbackHtml.computed
                        ? 'html'
                        : domain.routing.fallbackPhp.computed
                          ? 'php?$query_string'
                          : ''
                }`,
            },
        ]);
    }

    // Fallback index.html and index.php
    if (domain.routing.fallbackHtml.computed && domain.routing.fallbackPhp.computed) {
        serverConfig.push(['# index.php fallback', '']);
        serverConfig.push([
            `location ~ ^${domain.routing.fallbackPhpPath.computed}`,
            {
                try_files: '$uri $uri/ /index.php?$query_string',
            },
        ]);
    }

    // Python
    if (domain.python.python.computed) {
        if (global.tools.modularizedStructure.computed) {
            // Modularized
            serverConfig.push(['location /', { include: 'nginxconfig.io/python_uwsgi.conf' }]);
        } else {
            // Unified
            serverConfig.push(['location /', pythonConf(global)]);
        }

        // Django
        if (domain.python.djangoRules.computed) {
            serverConfig.push(['# Django media', '']);
            serverConfig.push(['location /media/', { alias: '$base/media/' }]);

            serverConfig.push(['# Django static', '']);
            serverConfig.push(['location /static/', { alias: '$base/static/' }]);
        }
    }

    // Reverse proxy
    if (domain.reverseProxy.reverseProxy.computed) {
        const locConf = [];
        locConf.push(['proxy_pass', domain.reverseProxy.proxyPass.computed]);
        locConf.push(['proxy_set_header Host', domain.reverseProxy.proxyHostHeader.computed]);

        if (global.tools.modularizedStructure.computed) {
            // Modularized
            locConf.push(['include', 'nginxconfig.io/proxy.conf']);
        } else {
            // Unified
            locConf.push(...Object.entries(proxyConf(global)));
        }

        serverConfig.push(['# reverse proxy', '']);
        serverConfig.push([`location ${domain.reverseProxy.path.computed}`, locConf]);
    }

    // Additional config
    if (global.tools.modularizedStructure.computed) {
        // Modularized
        serverConfig.push(['# additional config', '']);
        serverConfig.push(['include', 'nginxconfig.io/general.conf']);

        if (!domain.https.forceHttps.computed && domain.https.certType.computed === 'letsEncrypt')
            serverConfig.push(['include', 'nginxconfig.io/letsencrypt.conf']);

        if (domain.php.wordPressRules.computed)
            serverConfig.push([
                'include',
                `nginxconfig.io/${domain.server.domain.computed}.wordpress.conf`,
            ]);
        if (domain.php.drupalRules.computed)
            serverConfig.push(['include', 'nginxconfig.io/drupal.conf']);
        if (domain.php.magentoRules.computed)
            serverConfig.push(['include', 'nginxconfig.io/magento.conf']);
        if (domain.php.joomlaRules.computed)
            serverConfig.push(['include', 'nginxconfig.io/joomla.conf']);
    } else {
        // Unified
        serverConfig.push(...Object.entries(generalConf(domains, global)));

        if (!domain.https.forceHttps.computed && domain.https.certType.computed === 'letsEncrypt')
            serverConfig.push(...Object.entries(letsEncryptConf(global)));

        if (domain.php.wordPressRules.computed)
            serverConfig.push(...Object.entries(wordPressConf(global, domain)));
        if (domain.php.drupalRules.computed)
            serverConfig.push(...Object.entries(drupalConf(global)));
        if (domain.php.magentoRules.computed) serverConfig.push(...Object.entries(magentoConf()));
        if (domain.php.joomlaRules.computed) serverConfig.push(...Object.entries(joomlaConf()));
    }

    // PHP
    if (domain.php.php.computed) {
        if (domain.php.phpBackupServer.computed) {
            config.push([
                `upstream ${phpUpstream(domain)}`,
                {
                    server: [phpPath(domain), `${phpPath(domain, true)} backup`],
                },
            ]);
        }

        serverConfig.push(['# handle .php', '']);

        const loc = `location ~ ${
            domain.routing.legacyPhpRouting.computed ? '[^/]\\.php(/|$)' : '\\.php$'
        }`;

        const fastcgiPass = {
            fastcgi_pass:
                domain.php.phpBackupServer.computed !== '' ? phpUpstream(domain) : phpPath(domain),
        };

        if (global.tools.modularizedStructure.computed || domain.php.wordPressRules.computed) {
            // Modularized
            serverConfig.push([
                loc,
                {
                    ...fastcgiPass,
                    include: 'nginxconfig.io/php_fastcgi.conf',
                },
            ]);
        } else {
            // Unified
            serverConfig.push([
                loc,
                {
                    ...fastcgiPass,
                    ...phpConf(domains),
                },
            ]);
        }
    }

    // Add the server config to the parent config now its built
    config.push(['server', serverConfig]);

    // CDN!
    if (domain.server.cdnSubdomain.computed) {
        // Build the server config on its own before adding it to the parent config
        const cdnConfig = [];

        cdnConfig.push(...listenConfig(domain, global, ipPortPairs));
        cdnConfig.push(['server_name', `cdn.${domain.server.domain.computed}`]);
        cdnConfig.push([
            'root',
            `${domain.server.path.computed}${domain.server.documentRoot.computed}`,
        ]);

        // HTTPS
        cdnConfig.push(...sslConfig(domain, global));

        cdnConfig.push(['# disable access_log', '']);
        cdnConfig.push(['access_log', 'off']);

        // Gzip
        if (global.performance.gzipCompression.computed) {
            cdnConfig.push(['# gzip', '']);
            cdnConfig.push(['gzip', 'on']);
            cdnConfig.push(['gzip_vary', 'on']);
            cdnConfig.push(['gzip_proxied', 'any']);
            cdnConfig.push(['gzip_comp_level', 6]);
            cdnConfig.push(['gzip_types', gzipTypes]);
        }

        cdnConfig.push(['# allow safe files', '']);
        cdnConfig.push([
            `location ~* \\.(?:${extensions.assets}|${extensions.fonts}|${extensions.svg}|${extensions.images}|${extensions.audio}|${extensions.video}|${extensions.docs})$`,
            [
                ['add_header', 'Access-Control-Allow-Origin "*"'],
                ['add_header', 'Cache-Control "public"'],
                ['expires', '30d'],
            ],
        ]);

        cdnConfig.push(['# deny everything else', '']);
        cdnConfig.push(['location /', { deny: 'all' }]);

        // Add the CDN config to the parent config now its built
        config.push(['# CDN', '']);
        config.push(['server', cdnConfig]);
    }

    // Subdomains redirect
    if (domain.server.redirectSubdomains.computed) {
        // Build the server config on its own before adding it to the parent config
        const redirectConfig = [];

        redirectConfig.push(...listenConfig(domain, global, ipPortPairs));
        redirectConfig.push([
            'server_name',
            `${domain.server.wwwSubdomain.computed ? '' : '*'}.${domain.server.domain.computed}`,
        ]);

        // HTTPS
        redirectConfig.push(...sslConfig(domain, global));

        // Logging
        if (domain.logging.redirectAccessLog.computed || domain.logging.redirectErrorLog.computed) {
            redirectConfig.push(['# logging', '']);

            if (domain.logging.redirectAccessLog.computed) {
                redirectConfig.push(['access_log', getDomainAccessLog(domain, global)]);
            }
            if (domain.logging.redirectErrorLog.computed) {
                redirectConfig.push(['error_log', getDomainErrorLog(domain)]);
            }
        }

        redirectConfig.push([
            'return',
            `301 http${domain.https.https.computed ? 's' : ''}://${
                domain.server.wwwSubdomain.computed ? 'www.' : ''
            }${domain.server.domain.computed}$request_uri`,
        ]);

        // Add the redirect config to the parent config now its built
        config.push([
            `# ${domain.server.wwwSubdomain.computed ? 'non-www, ' : ''}subdomains redirect`,
            '',
        ]);
        config.push(['server', redirectConfig]);
    }

    // HTTP redirect
    if (domain.https.forceHttps.computed) {
        // Add the redirect config to the parent config now its built
        config.push(['# HTTP redirect', '']);
        if (domain.server.wwwSubdomain.computed && !domain.server.redirectSubdomains.computed) {
            config.push([
                'server',
                httpRedirectConfig(
                    domain,
                    global,
                    ipPortPairs,
                    domain.server.domain.computed,
                    `www.${domain.server.domain.computed}`,
                ),
            ]);
            config.push([
                'server',
                httpRedirectConfig(
                    domain,
                    global,
                    ipPortPairs,
                    `www.${domain.server.domain.computed}`,
                ),
            ]);
        } else if (
            !domain.server.wwwSubdomain.computed &&
            !domain.server.redirectSubdomains.computed
        ) {
            config.push([
                'server',
                httpRedirectConfig(domain, global, ipPortPairs, domain.server.domain.computed),
            ]);
        }
        if (domain.server.cdnSubdomain.computed) {
            config.push([
                'server',
                httpRedirectConfig(
                    domain,
                    global,
                    ipPortPairs,
                    `cdn.${domain.server.domain.computed}`,
                ),
            ]);
        }
        if (domain.server.redirectSubdomains.computed) {
            config.push([
                'server',
                httpRedirectConfig(
                    domain,
                    global,
                    ipPortPairs,
                    `.${domain.server.domain.computed}`,
                    `${domain.server.wwwSubdomain.computed ? 'www.' : ''}${
                        domain.server.domain.computed
                    }`,
                ),
            ]);
        }
    }

    return config;
};


================================================
FILE: src/nginxconfig/generators/conf/wordpress.conf.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import phpPath from '../../util/php_path.js';
import phpUpstream from '../../util/php_upstream.js';

export default (global, domain) => {
    const config = {};

    config['# WordPress: allow TinyMCE'] = '';
    config['location = /wp-includes/js/tinymce/wp-tinymce.php'] = {
        include: 'nginxconfig.io/php_fastcgi.conf',
    };

    config['# WordPress: deny wp-content, wp-includes php files'] = '';
    config['location ~* ^/(?:wp-content|wp-includes)/.*\\.php$'] = {
        deny: 'all',
    };

    config['# WordPress: deny wp-content/uploads nasty stuff'] = '';
    config['location ~* ^/wp-content/uploads/.*\\.(?:s?html?|php|js|swf)$'] = {
        deny: 'all',
    };

    config['# WordPress: SEO plugin'] = '';
    config['location ~* ^/wp-content/plugins/wordpress-seo(?:-premium)?/css/main-sitemap\\.xsl$'] =
        {};

    config['# WordPress: deny wp-content/plugins (except earlier rules)'] = '';
    config['location ~ ^/wp-content/plugins'] = {
        deny: 'all',
    };

    config['# WordPress: deny general stuff'] = '';
    config[
        'location ~* ^/(?:xmlrpc\\.php|wp-links-opml\\.php|wp-config\\.php|wp-config-sample\\.php|readme\\.html|license\\.txt)$'
    ] = {
        deny: 'all',
    };

    if (global.security.limitReq.computed) {
        config['# WordPress: throttle wp-login.php'] = '';
        config['location = /wp-login.php'] = {
            limit_req: 'zone=login burst=2 nodelay',
            include: 'nginxconfig.io/php_fastcgi.conf',
        };
        if (domain.php.wordPressRules.computed) {
            config['location = /wp-login.php'].fastcgi_pass =
                domain.php.phpBackupServer.computed !== '' ? phpUpstream(domain) : phpPath(domain);
        }
    }

    // Done!
    return config;
};


================================================
FILE: src/nginxconfig/generators/ext/docker.js
================================================
/*
Copyright 2020 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default () => {
    return 'FROM nginx:latest\nCOPY . /etc/nginx/';
};


================================================
FILE: src/nginxconfig/generators/index.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import toConf from './to_conf.js';
import toYaml from './to_yaml.js';
import nginxConf from './conf/nginx.conf.js';
import websiteConf from './conf/website.conf.js';
import letsEncryptConf from './conf/letsencrypt.conf.js';
import securityConf from './conf/security.conf.js';
import generalConf from './conf/general.conf.js';
import phpConf from './conf/php_fastcgi.conf.js';
import pythonConf from './conf/python_uwsgi.conf.js';
import proxyConf from './conf/proxy.conf.js';
import wordPressConf from './conf/wordpress.conf.js';
import drupalConf from './conf/drupal.conf.js';
import magentoConf from './conf/magento.conf.js';
import joomlaConf from './conf/joomla.conf.js';
import dockerComposeYaml from './yaml/dockerCompose.yaml.js';
import dockerConf from './ext/docker.js';
import shareQuery from '../util/share_query.js';

export default (domains, global) => {
    const files = {};

    // Base nginx config
    files['nginx.conf'] = toConf(nginxConf(domains, global));

    // Dockerfile
    if (global.docker.dockerfile.computed) files['Dockerfile'] = dockerConf();

    if (global.docker.dockerCompose.computed)
        files['docker-compose.yaml'] = toYaml(dockerComposeYaml());

    // Modularised configs
    if (global.tools.modularizedStructure.computed) {
        // Domain config
        const sitesDir = `sites-${global.tools.symlinkVhost.computed ? 'available' : 'enabled'}`;
        const ipPortPairs = new Set();
        for (const domain of domains) {
            files[`${sitesDir}/${domain.server.domain.computed}.conf`] = toConf(
                websiteConf(domain, domains, global, ipPortPairs),
            );
            // WordPress
            if (domains.some((d) => d.php.wordPressRules.computed))
                files[`nginxconfig.io/${domain.server.domain.computed}.wordpress.conf`] = toConf(
                    wordPressConf(global, domain),
                );
        }

        // Let's encrypt
        if (domains.some((d) => d.https.certType.computed === 'letsEncrypt'))
            files['nginxconfig.io/letsencrypt.conf'] = toConf(letsEncryptConf(global));

        // Security
        files['nginxconfig.io/security.conf'] = toConf(securityConf(domains, global));

        // General
        files['nginxconfig.io/general.conf'] = toConf(generalConf(domains, global));

        // PHP
        if (domains.some((d) => d.php.php.computed))
            files['nginxconfig.io/php_fastcgi.conf'] = toConf(phpConf(domains));

        // Python
        if (domains.some((d) => d.python.python.computed))
            files['nginxconfig.io/python_uwsgi.conf'] = toConf(pythonConf(global));

        // Reverse proxy
        if (domains.some((d) => d.reverseProxy.reverseProxy.computed))
            files['nginxconfig.io/proxy.conf'] = toConf(proxyConf(global));

        // Drupal
        if (domains.some((d) => d.php.drupalRules.computed))
            files['nginxconfig.io/drupal.conf'] = toConf(drupalConf(global));

        // Magento
        if (domains.some((d) => d.php.magentoRules.computed))
            files['nginxconfig.io/magento.conf'] = toConf(magentoConf());

        // Joomla
        if (domains.some((d) => d.php.joomlaRules.computed))
            files['nginxconfig.io/joomla.conf'] = toConf(joomlaConf());
    } else {
        // PHP
        if (domains.some((d) => d.php.wordPressRules.computed))
            files['nginxconfig.io/php_fastcgi.conf'] = toConf(phpConf(domains));
    }

    const query = shareQuery(
        domains.map((domain, index) => [domain, index]).filter((d) => d[0] !== null),
        global,
    );
    files['nginxconfig.txt'] =
        `${window.location.protocol}//${window.location.host}${window.location.pathname}${query}`;

    return files;
};


================================================
FILE: src/nginxconfig/generators/to_conf.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import isObject from '../util/is_object.js';

const isBlock = (item) => {
    // If an object, or kv entries, this is considered a block
    return (
        isObject(item) ||
        (Array.isArray(item) && item.every((i) => Array.isArray(i) && i.length === 2))
    );
};

const longestKey = (items) => {
    let longest = 0;

    for (const item of items) {
        // Only consider up to the first block
        if (isBlock(item[1])) return longest;

        // If this is the new longest, and not a comment, use this
        if (item[0].length > longest && !item[0].startsWith('#')) longest = item[0].length;
    }

    // Done!
    return longest;
};

const recurse = (entriesOrObject, depth) => {
    // Support an object or kv array entries
    // Convert to entries if given an object
    const entries = isObject(entriesOrObject) ? Object.entries(entriesOrObject) : entriesOrObject;

    // If not a valid kv entries array, return
    if (!Array.isArray(entries) || !entries.every((i) => Array.isArray(i) && i.length === 2))
        return '';

    // Initial values
    let retVal = '';
    let longestKeyLen = longestKey(entries);
    const indent = '    '.repeat(depth);

    // Track whether the previous was a block, for indentation
    let previousBlock = false;

    // Loop over every kv pair
    for (let i = 0; i < entries.length; i++) {
        const item = entries[i];

        // If a block (object or kv entries), recurse
        if (isBlock(item[1])) {
            // Recurse
            retVal += '\n' + indent + item[0] + ' {\n';
            retVal += recurse(item[1], depth + 1);
            retVal += indent + '}\n\n';

            // Done
            previousBlock = true;
            continue;
        }

        // Update key length if we've just left a block
        if (previousBlock) {
            longestKeyLen = longestKey(entries.slice(i));
            previousBlock = false;
        }

        // Otherwise, assume it can be made a string
        // Ensure we're working with an array
        const val = Array.isArray(item[1]) ? item[1] : [item[1]];

        // Calculate spacing
        const keyValSpacing = longestKeyLen - item[0].length + 1;
        const keyValIndent = ' '.repeat(Math.max(keyValSpacing, 0));

        // Work through each item in the array
        val.forEach((subVal) => {
            const val = subVal.toString();
            retVal +=
                indent +
                (item[0] + keyValIndent + val).trim() +
                (item[0].startsWith('#') ? '' : ';') +
                '\n';
        });
    }

    return retVal;
};

export default (entriesOrObject) => {
    // Generate the conf
    let conf = recurse(entriesOrObject, 0);

    // Do some regex cleanup
    conf = conf
        // Cleanup triple linebreaks
        .replace(/\n\n\n/g, '\n\n')
        // Double linebreak before comment
        .replace(/^([^\S\r\n]*[^#\s].*[^\n])\n([^\S\r\n]*)#/gm, '$1\n\n$2#')
        // Single linebreak between comment and block
        .replace(/^([^\S\r\n]*#.*)(?:\n[^\S\r\n]*)+\n([^\S\r\n]*.*{)/gm, '$1\n$2')
        // Double linebreak after double comment
        .replace(/^([^\S\r\n]*#.*\n[^\S\r\n]*#.*\n)([^\S\r\n]*[^#\s])/gm, '$1\n$2')
        // No newline for empty blocks
        .replace(/^([^\S\r\n]*.*{)\n[^\S\r\n]*(})/gm, '$1$2');

    // Cleanup extra linebreaks between multiple close blocks
    // Use a loop as this has overlapping matches
    let match;
    do {
        match = /^([^\S\r\n]*})(?:\n[^\S\r\n]*)+\n([^\S\r\n]*})/m.exec(conf);
        if (match)
            conf =
                conf.slice(0, match.index) +
                match[1] +
                '\n' +
                match[2] +
                conf.slice(match.index + match[0].length);
    } while (match);

    // Remove initial & trailing whitespace
    return conf.trim();
};


================================================
FILE: src/nginxconfig/generators/to_yaml.js
================================================
/*
Copyright 2022 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import yaml from 'json-to-pretty-yaml';

export default (yamlConf) => {
    return yaml.stringify(yamlConf);
};


================================================
FILE: src/nginxconfig/generators/yaml/dockerCompose.yaml.js
================================================
/*
Copyright 2020 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default () => {
    return {
        version: '3.3',
        services: {
            nginx: {
                build: {
                    context: '.',
                    dockerfile: 'Dockerfile',
                },
            },
        },
    };
};


================================================
FILE: src/nginxconfig/i18n/de/common.js
================================================
/*
Copyright 2021 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default {
    back: 'Zurück',
    next: 'Weiter',
    enable: 'Aktiviere',
    php: 'PHP',
    ssl: 'SSL',
    nginx: 'NGINX',
    http: 'HTTP',
    https: 'HTTPS',
    letsEncrypt: "Let's Encrypt",
    python: 'Python',
    wordPress: 'WordPress',
    drupal: 'Drupal',
    magento: 'Magento',
    joomla: 'Joomla',
    django: 'Django',
    logging: 'Logging',
    reverseProxy: 'Reverse Proxy',
    reverseProxyLower: 'reverse proxy',
    restrict: 'Beschränkungen',
    path: 'Pfad',
};


================================================
FILE: src/nginxconfig/i18n/de/index.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from './common.js';
import languages from './languages.js';
import templates from './templates/index.js';

export default { common, languages, templates };


================================================
FILE: src/nginxconfig/i18n/de/languages.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default {
    en: 'Englisch',
    es: 'Spanisch',
    zhCN: 'Chinesisch (vereinfacht)',
    zhTW: 'Chinesisch (traditionell)',
    ptBR: 'Portugiesisch (Brasilien)',
    fr: 'Französisch',
    ru: 'Russisch',
    pl: 'Polnisch',
    de: 'Deutsch',
    ja: 'Japanisch',
    fa: 'Persisch',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/app.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../common.js';

export default {
    title: `${common.nginx}Config`,
    description: `Der einfachste Weg, einen performanten, sicheren und stabilen ${common.nginx} Server zu konfigurieren.`,
    singleColumnMode: 'Einspaltiger Modus',
    splitColumnMode: 'Mehrspaltiger Modus',
    perWebsiteConfig: 'Webseiten-Konfiguration',
    addSite: 'Webseite hinzufügen',
    globalConfig: 'Globale Konfiguration',
    setup: 'Setup',
    configFiles: 'Konfigurationsdateien',
    copied: 'kopiert',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/callouts/contribute.js
================================================
/*
Copyright 2021 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default {
    wantToContributeChanges:
        '👋 Willst du neue Features vorschlagen, Änderungen beitragen oder das Tool in eine andere Sprache übersetzen?',
    getInvolvedOnGitHub: 'Beteilige dich auf GitHub',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/callouts/droplet.js
================================================
/*
Copyright 2021 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default {
    lookingForAPlaceToDeploy: '👋 Suchst du nach einem Ort, deine neue Konfiguration zu deployen?',
    tryOutDigitalOceansDroplet: "Teste DigitalOcean's LEMP Droplet mit NGINX",
};


================================================
FILE: src/nginxconfig/i18n/de/templates/callouts/index.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import droplet from './droplet.js';
import contribute from './contribute.js';

export default { droplet, contribute };


================================================
FILE: src/nginxconfig/i18n/de/templates/domain_sections/https.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

export default {
    enableEncryptedSslConnection: `${common.enable} verschlüsselte ${common.ssl} Verbindungen`,
    http2: `${common.http}/2`,
    enableHttp2Connections: `${common.enable} ${common.http}/2 Verbindungen`,
    http3: `${common.http}/3`,
    enableHttp3Connections: `${common.enable} ${common.http}/3 Verbindungen`,
    forceHttps: `Erzwinge ${common.https}`,
    hsts: 'HSTS',
    enableStrictTransportSecurity: `${common.enable} Strict Transport Security, was HTTPS Verbindungen erzwingt`,
    enableIncludeSubDomains: `${common.enable} includeSubDomains Direktive, welche HTTPS Verbindungen auf ALLEN Subdomains erzwingt`,
    enablePreload: `${common.enable} preload Direktive, welche Browsern mitteilt, ausschließlich HTTPS Verbindungen zu verwenden`,
    certificationType: 'Zertifizierungsart',
    customCertificate: 'Eigenes Zertifikat',
    letsEncryptEmail: `${common.letsEncrypt} E-Mail`,
    http3IsANonStandardModule: 'HTTP/3 ist kein Standard NGINX Modul. Besuche das ',
    http3NginxQuicReadme: 'NGINX QUIC Readme',
    http3OrThe: ' oder das ',
    http3CloudflareQuicheProject: 'Cloudflare Quiche Project',
    http3ForBuildingNginxWithHttp3: ' für Informationen, wie man NGINX mit HTTP/3 verwendet!',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/domain_sections/index.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import https from './https.js';
import logging from './logging.js';
import onion from './onion.js';
import php from './php.js';
import presets from './presets.js';
import python from './python.js';
import restrict from './restrict.js';
import reverseProxy from './reverse_proxy.js';
import routing from './routing.js';
import server from './server.js';

export default {
    https,
    logging,
    php,
    presets,
    python,
    reverseProxy,
    routing,
    server,
    restrict,
    onion,
};


================================================
FILE: src/nginxconfig/i18n/de/templates/domain_sections/logging.js
================================================
/*
Copyright 2022 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default {
    byDomain: 'der Domain',
    enableForThisDomain: 'Für diese Domain aktivieren',
    arguments: 'arguments', // TODO: translate
    level: 'logging level', // TODO: translate
    forRedirects: 'for redirects', // TODO: translate
};


================================================
FILE: src/nginxconfig/i18n/de/templates/domain_sections/onion.js
================================================
/*
Copyright 2021 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

const onion = 'Onion';

export default {
    onion,
    onionLocation: `${onion} Location`,
    provideAnOnionLocationToSetOnionLocationHeader:
        'Gib eine Onion Adresse an, um den Onion-Location Header für deine Seite zu setzen.',
    letsVisitorsKnownOnionServicesIsAvailable:
        'Dies teilt deinen Besuchern mit, dass eine Onion-Version deiner Webseite für Tor-Browser verfügbar ist.',
    learnMoreAboutOnionServices: 'Lerne mehr über Onion-Dienste',
    onionLocationExpectedToEndWithOnion: 'Onion Adressen enden normalerweise mit `.onion`.',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/domain_sections/php.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

export default {
    phpIsDisabled: `${common.php} ist deaktiviert.`,
    phpCannotBeEnabledWithReverseProxy: `${common.php} kann nicht aktiviert werden, während ein Reverse Proxy aktiviert ist.`,
    phpCannotBeEnabledWithPython: `${common.php} kann nicht aktiviert werden, während ${common.python} aktiviert ist.`,
    enablePhp: `${common.enable} ${common.php}`,
    wordPressRules: `${common.wordPress} Regeln`,
    enableWordPressRules: `${common.enable} ${common.wordPress}-spezifische Regeln`,
    drupalRules: `${common.drupal} Regeln`,
    enableDrupalRules: `${common.enable} ${common.drupal}-spezifische Regeln`,
    magentoRules: `${common.magento} Regeln`,
    enableMagentoRules: `${common.enable} ${common.magento}-spezifische Regeln`,
    joomlaRules: `${common.joomla} Regeln`,
    enableJoomlaRules: `${common.enable} ${common.joomla}-spezifische Regeln`,
    phpServer: `${common.php} Server`,
    phpBackupServer: `${common.php} Backup Server`,
    tcp: 'TCP',
    hhvmSocket: 'HHVM Socket',
    php70Socket: '7.0 Socket',
    php71Socket: '7.1 Socket',
    php72Socket: '7.2 Socket',
    php73Socket: '7.3 Socket',
    php74Socket: '7.4 Socket',
    php80Socket: '8.0 Socket',
    php81Socket: '8.1 Socket',
    php82Socket: '8.2 Socket',
    phpSocket: 'PHP Socket',
    custom: 'Benutzerdefiniert',
    disabled: 'Deaktiviert',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/domain_sections/presets.js
================================================
/*
Copyright 2021 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default {
    presets: 'Voreinstellungen',
    itLooksLikeYouCustomisedTheConfig:
        'Es sieht so aus, als hättest du die Konfiguration für diese Webseite angepasst. Eine neue Voreinstellung zu laden könnte manche deiner Anpassungen zurücksetzen oder ändern.',
    frontend: 'Frontend',
    nodeJs: 'Node.js',
    singlePageApplication: 'Single-Page-Webanwendung',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/domain_sections/python.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

export default {
    pythonIsDisabled: `${common.python} ist deaktiviert.`,
    pythonCannotBeEnabledWithReverseProxy: `${common.python} kann nicht aktiviert werden, während ein Reverse Proxy aktiviert ist.`,
    pythonCannotBeEnabledWithPhp: `${common.python} kann nicht aktiviert werden, während ${common.php} aktiviert ist.`,
    enablePython: `${common.enable} ${common.python}`,
    djangoRules: `${common.django} Regeln`,
    enableDjangoRules: `${common.enable} ${common.django}-spezifische Regeln`,
};


================================================
FILE: src/nginxconfig/i18n/de/templates/domain_sections/restrict.js
================================================
/*
Copyright 2021 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default {
    disableForThisDomain: 'Für diese Domain deaktivieren',
    responseCode: 'HTTP Antwort-Code',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/domain_sections/reverse_proxy.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

export default {
    reverseProxyIsDisabled: `${common.reverseProxy} ist deaktiviert.`,
    reverseProxyCannotBeEnabledWithPhp: `${common.reverseProxy} kann nicht aktiviert werden, während ${common.php} aktiviert ist.`,
    reverseProxyCannotBeEnabledWithPython: `${common.reverseProxy} kann nicht aktiviert werden, während ${common.python} aktiviert ist.`,
    enableReverseProxy: `${common.enable} ${common.reverseProxy}`,
    proxyHostHeader: 'Proxy Host header', // TODO: translate
};


================================================
FILE: src/nginxconfig/i18n/de/templates/domain_sections/routing.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

export default {
    fallbackRouting: 'Fallback Routing',
    fallbackRoutingPhpPath: `Fallback Routing ${common.php} Pfad`,
    legacyPhpRouting: `Legacy ${common.php} Routing`,
    enableLegacyRouting: `${common.enable} Legacy Routing`,
    routing: 'Routing',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/domain_sections/server.js
================================================
/*
Copyright 2021 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default {
    domain: 'Domain',
    documentRoot: 'Document Root',
    oneOrMoreOtherDomainsAreAlsoNamed: 'Eine oder mehrere Domains lauten ebenfalls',
    thisWillCauseIssuesWithConfigGeneration:
        'Dies sorgt für Probleme beim Generieren der Konfigurationsdateien.',
    wwwSubdomain: 'WWW Subdomain',
    cdnSubdomain: 'CDN Subdomain',
    redirectSubdomains: 'Subdomains weiterleiten',
    server: 'Server',
    listen: 'Hören auf',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/footer.js
================================================
/*
Copyright 2021 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default {
    backToTop: 'Zurück nach oben',
    thisToolIs: 'Dieses Tool ist',
    openSourceOnGitHub: 'Open-Source auf GitHub',
    underThe: 'unter der',
    mit: 'MIT',
    license: 'Lizenz!',
    weWelcomeFeedbackAndContributions: 'Feedback und Beiträge sind willkommen.',
    originallyCreatedBy: 'Ursprünglich erstellt von',
    balintSzekeres: 'Bálint Szekeres',
    maintainedBy: 'gepflegt von',
    digitalOcean: 'DigitalOcean',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/global_sections/docker.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

const docker = 'Docker';
const dockerfile = 'Dockerfile';

export default {
    docker,
    dockerfile,
    dockerCompose: `${docker} Compose`,
    applyDockerTweaks: `${docker} Optimierungen anwenden`,
    applyDockerTweaksForNginx: `Füge Optimierungen für den Betrieb von ${common.nginx} mit ${docker} der Konfigurationsdatei hinzu`,
    applyDockerTweaksExplainer: `Setzt den ${common.nginx} Benutzer auf <code class="slim">nginx</code> und die PID auf <code class="slim">/var/run/nginx.pid</code>`,
    includeDockerfile: `${dockerfile} hinzufügen, um ${common.nginx} mit ${docker} zu betreiben`,
    includeDockerCompose: `docker-compose.yaml hinzufügen, um ${common.nginx} mit docker-compose zu betreiben`,
};


================================================
FILE: src/nginxconfig/i18n/de/templates/global_sections/https.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

const mozilla = 'Mozilla';
const ipv4 = 'IPv4';
const ipv6 = 'IPv6';

export default {
    sslProfile: `${common.ssl} Profil`,
    httpsMustBeEnabledOnOneSite: `${common.https} muss auf mindestes einer Webseite aktiviert sein, um globale ${common.https} Einstellungen zu konfigurieren.`,
    portReuse: 'Reuseport',
    enableReuseOfPort: `${common.enable} Reuseport um einen Socket pro Worker zu generieren`,
    ocspDnsResolvers: 'OCSP DNS Resolver',
    cloudflareResolver: 'Cloudflare Resolver',
    googlePublicDns: 'Google Public DNS',
    openDns: 'OpenDNS',
    quad9: 'Quad9',
    verisign: 'Verisign',
    letsEncryptWebroot: `${common.letsEncrypt} Web-Root`,
    letsEncryptCertRoot: `${common.letsEncrypt} Zertifikats-Verzeichnis`,
    mozillaModern: `${mozilla} Modern`,
    mozillaIntermediate: `${mozilla} Intermediate`,
    mozillaOld: `${mozilla} Old`,
    ipv4Only: `nur ${ipv4}`,
    ipv6Only: `nur ${ipv6}`,
    ipv4AndIpv6: `${ipv4} & ${ipv6}`,
};


================================================
FILE: src/nginxconfig/i18n/de/templates/global_sections/index.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import https from './https.js';
import logging from './logging.js';
import nginx from './nginx.js';
import performance from './performance.js';
import python from './python.js';
import reverseProxy from './reverse_proxy.js';
import security from './security.js';
import tools from './tools.js';
import docker from './docker.js';

export default {
    https,
    logging,
    nginx,
    performance,
    python,
    reverseProxy,
    security,
    tools,
    docker,
};


================================================
FILE: src/nginxconfig/i18n/de/templates/global_sections/logging.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

export default {
    enableFileNotFoundErrorLogging: `${common.enable} "Seite nicht gefunden" Error Logging in`,
    logformat: 'log_format',
    level: 'logging level', // TODO: translate
    enableCloudflare: 'Füge Cloudflare Anfrage-Header dem Standard Log-Format hinzu',
    cfRay: 'CF-Ray',
    cfConnectingIp: 'CF-Connecting-IP',
    xForwardedFor: 'X-Forwarded-For',
    xForwardedProto: 'X-Forwarded-Proto',
    trueClientIp: 'True-Client-IP',
    cfIpCountry: 'CF-IPCountry',
    cfVisitor: 'CF-Visitor',
    cdnLoop: 'CDN-Loop',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/global_sections/nginx.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

export default {
    nginxConfigDirectory: `${common.nginx} Konfigurationsverzeichnis`,
    mb: 'MB',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/global_sections/performance.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

export default {
    disableHtmlCaching: 'Disable HTML caching', // TODO: translate
    enableDisableHtmlCaching: 'disable HTML caching', // TODO: translate
    gzipCompression: 'Gzip Komprimierung',
    enableGzipCompression: `${common.enable} Gzip Komprimierung`,
    brotliCompression: 'Brotli Komprimierung',
    enableBrotliCompression: `${common.enable} Brotli Komprimierung`,
    brotliIsANonStandardModule: 'Brotli ist kein Standard NGINX Modul. Besuche das ',
    brotliGoogleNgxBrotliProject: 'Google ngx_brotli Projekt',
    brotliForBuildingNginxWithBrotli: ' für Informationen, wie man NGINX mit Brotli verwendet!',
    expirationForAssets: 'Ablauf von Assets',
    expirationForMedia: 'Ablauf von Medien',
    expirationForSvgs: 'Ablauf von SVGs',
    expirationForFonts: 'Ablauf von Schriften',
    performance: 'Performance',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/global_sections/python.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

export default {
    pythonServer: `${common.python} Server`,
    pythonMustBeEnabledOnOneSite: `${common.python} muss auf mindestes einer Webseite aktiviert sein, um globale ${common.python} Einstellungen zu konfigurieren.`,
};


================================================
FILE: src/nginxconfig/i18n/de/templates/global_sections/reverse_proxy.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

const legacyXForwarded = 'Legacy X-Forwarded-* Header';

export default {
    reverseProxyMustBeEnabledOnOneSite: `${common.reverseProxy} muss auf mindestes einer Webseite aktiviert sein, um globale ${common.reverseProxy} Einstellungen zu konfigurieren.`,
    seconds: 'Sekunden',
    passOn: `${legacyXForwarded} weiterleiten`,
    remove: `${legacyXForwarded} aktiv entfernen`,
};


================================================
FILE: src/nginxconfig/i18n/de/templates/global_sections/security.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

export default {
    whenUsingWordPressUnsafeEvalIsOftenRequiredToAllowFunctionality: `Bei der Verwendung von ${common.wordPress} ist es oft nötig, <code class="slim">script-src 'self' 'unsafe-inline' 'unsafe-eval';</code> in die Content Security Policy aufzunehmen, damit der Admin-Bereich korrekt funktioniert.`,
    security: 'Security',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/global_sections/tools.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

export default {
    modularizedStructure: 'Modularisierte Struktur',
    enableModularizedConfigFiles: `${common.enable} modularisierte Konfigurationsdateien`,
    symlinkVhost: 'Symlink VHost',
    enableSymLinksFrom: `${common.enable} Symlinks von`,
    to: 'zu',
    shareConfiguration: 'Konfiguration teilen',
    resetConfiguration: 'Konfiguration zurücksetzen',
    resetGlobalConfig: 'Globale Konfiguration zurücksetzen',
    resetAllDomains: 'Alle Domains zurücksetzen',
    removeAllDomains: 'Alle Domains entfernen',
    resetAllDomainsConfig: 'Alle Domain-Konfigurationen entfernen',
    resetDomainConfig: 'Konfiguration zurücksetzen',
    removeDomain: 'Domain entfernen',
    yesImSure: 'Ja, ich bin sicher',
    noCancel: 'Nein, abbrechen',
    tools: 'Tools',
    resetGlobalConfigBody:
        'Bist du dir sicher, dass du alle Optionen im Bereich "Globale Konfiguration" zurücksetzen möchtest?',
    resetAllDomainsConfigBody:
        'Bist du dir sicher, dass du die Konfiguration ALLER Domains zurücksetzen möchtest?',
    removeAllDomainsBody: 'Bist du dir sicher, dass du ALLE Domains entfernen möchtest?',
    areYouSureYouWantToResetAllConfigurationOptionsForThe:
        'Bist du dir sicher, dass du die Konfiguration von',
    domain: 'zurücksetzen möchtest?',
    areYouSureYouWantToRemoveThe: 'Bist du dir sicher, dass du die Domain ',
    domainConfiguration: 'entfernen möchtest?',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/index.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import app from './app.js';
import setup from './setup.js';
import footer from './footer.js';
import domainSections from './domain_sections/index.js';
import globalSections from './global_sections/index.js';
import setupSections from './setup_sections/index.js';
import callouts from './callouts/index.js';

export default { app, setup, footer, domainSections, globalSections, setupSections, callouts };


================================================
FILE: src/nginxconfig/i18n/de/templates/setup.js
================================================
/*
Copyright 2021 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default {
    downloadConfig: 'Konfiguration herunterladen',
    copyBase64: 'Als Base64 kopieren',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/setup_sections/certbot.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

const certbot = 'Certbot';

export default {
    commentOutSslDirectivesInConfiguration: `Kommentiere ${common.ssl}-relevante Direktiven in deiner Konfiguration aus:`,
    sslOffDeprecationWarning: `This command will add a temporary <code class="slim">ssl off</code> directive to ensure that ${common.ssl} directives are not active. This may cause ${common.nginx} to emit a warning, which is safe to ignore. The directive will be removed once ${certbot} is configured.`, // TODO: translate
    reloadYourNginxServer: `Führe einen reload deines ${common.nginx} Server aus:`,
    obtainSslCertificatesFromLetsEncrypt: `Erhalte ${common.ssl} Zertifikate von ${common.letsEncrypt} mittels ${certbot}:`,
    uncommentSslDirectivesInConfiguration: `Kommentiere ${common.ssl}-relevante Direktiven in deiner Konfiguration ein:`,
    configureCertbotToReloadNginxOnCertificateRenewal: `Konfiguriere ${certbot} um ${common.nginx} neu zu laden, wenn die Zertifikate erfolgreich erneuert wurden:`,
    certbotDoesNotNeedToBeSetupForYourConfiguration: `${certbot} muss für deine ${common.nginx} Konfiguration nicht eingerichtet werden.`,
    certbot,
};


================================================
FILE: src/nginxconfig/i18n/de/templates/setup_sections/download.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

export default {
    downloadTheGeneratedConfig: 'Generierte Konfigurationsdateien <b>herunterladen</b>:',
    andUploadItToYourServers: 'Auf deinen Server <b>hochladen</b> und ins Verzeichnis ',
    directory: 'verschieben.',
    or: 'Oder ',
    copyBase64StringOfCompressedConfig:
        'kopiere einen Base64 String der komprimierten Konfiguration',
    pasteItInYourServersCommandLineAndExecute:
        ', füge ihn auf der Kommandozeile deines Servers ein und führe ihn aus.',
    navigateToYourNginxConfigurationDirectoryOnYourServer: `Wechsle in das ${common.nginx} <b>Konfigurationsverzeichnis</b> deines Servers:`,
    createABackupOfYourCurrentNginxConfiguration: `Erstelle ein <b>Backup</b> deiner aktuellen ${common.nginx} Konfiguration:`,
    extractTheNewCompressedConfigurationArchiveUsingTar:
        '<b>Entpacke</b> das komprimierte Konfigurationsverzeichnis mittels tar:',
    download: 'Download',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/setup_sections/go_live.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

export default {
    letsGoLive: 'Jetzt gehts los!',
    reloadNginxToLoadInYourNewConfiguration: `Lade ${common.nginx} neu, um deine neue Konfiguration zu verwenden:`,
    goLive: 'Los gehts!',
};


================================================
FILE: src/nginxconfig/i18n/de/templates/setup_sections/index.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import certbot from './certbot.js';
import download from './download.js';
import goLive from './go_live.js';
import ssl from './ssl.js';

export default { certbot, download, goLive, ssl };


================================================
FILE: src/nginxconfig/i18n/de/templates/setup_sections/ssl.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

export default {
    generateDiffieHellmanKeysByRunningThisCommandOnYourServer:
        'Erzeuge <b>Diffie-Hellman Schlüssel</b> indem du diesen Befehl auf deinem Server ausführst:',
    createACommonAcmeChallengeDirectoryForLetsEncrypt: `Erstelle ein <b>ACME-Challenge</b> Verzeichnis (für <b>${common.letsEncrypt}</b>):`,
    noAdditionalStepsAreNeededToSetUpSslForNginx: `Es sind keine weiteren Schritte nötig, um ${common.ssl} für deine ${common.nginx} Konfiguration einzurichten.`,
    sslInit: `${common.ssl} initialisieren`,
};


================================================
FILE: src/nginxconfig/i18n/en/common.js
================================================
/*
Copyright 2020 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default {
    back: 'Back',
    next: 'Next',
    enable: 'enable',
    php: 'PHP',
    ssl: 'SSL',
    nginx: 'NGINX',
    http: 'HTTP',
    https: 'HTTPS',
    letsEncrypt: "Let's Encrypt",
    python: 'Python',
    wordPress: 'WordPress',
    drupal: 'Drupal',
    magento: 'Magento',
    joomla: 'Joomla',
    django: 'Django',
    logging: 'Logging',
    reverseProxy: 'Reverse proxy',
    reverseProxyLower: 'reverse proxy',
    restrict: 'Restrict',
    path: 'Path',
};


================================================
FILE: src/nginxconfig/i18n/en/index.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from './common.js';
import languages from './languages.js';
import templates from './templates/index.js';

export default { common, languages, templates };


================================================
FILE: src/nginxconfig/i18n/en/languages.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default {
    en: 'English',
    es: 'Spanish',
    zhCN: 'Chinese (simplified)',
    zhTW: 'Chinese (traditional)',
    ptBR: 'Portuguese (brazilian)',
    fr: 'French',
    ru: 'Russian',
    pl: 'Polish',
    de: 'German',
    ja: 'Japanese',
    fa: 'Persian',
};


================================================
FILE: src/nginxconfig/i18n/en/templates/app.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../common.js';

export default {
    title: `${common.nginx}Config`,
    description: `The easiest way to configure a performant, secure, and stable ${common.nginx} server.`,
    singleColumnMode: 'Single column mode',
    splitColumnMode: 'Side-by-side mode',
    perWebsiteConfig: 'Per-website config',
    addSite: 'Add site',
    globalConfig: 'Global config',
    setup: 'Setup',
    configFiles: 'Config files',
    copied: 'Copied',
};


================================================
FILE: src/nginxconfig/i18n/en/templates/callouts/contribute.js
================================================
/*
Copyright 2021 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default {
    wantToContributeChanges:
        '👋 Want to request new features, contribute changes, or translate the tool into a new language?',
    getInvolvedOnGitHub: 'Get involved on GitHub',
};


================================================
FILE: src/nginxconfig/i18n/en/templates/callouts/droplet.js
================================================
/*
Copyright 2021 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

export default {
    lookingForAPlaceToDeploy: '👋 Looking for a place to deploy your new configuration?',
    tryOutDigitalOceansDroplet: "Try out DigitalOcean's LEMP Droplet with NGINX",
};


================================================
FILE: src/nginxconfig/i18n/en/templates/callouts/index.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import droplet from './droplet.js';
import contribute from './contribute.js';

export default { droplet, contribute };


================================================
FILE: src/nginxconfig/i18n/en/templates/domain_sections/https.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

export default {
    enableEncryptedSslConnection: `${common.enable} encrypted ${common.ssl} connections`,
    http2: `${common.http}/2`,
    enableHttp2Connections: `${common.enable} ${common.http}/2 connections`,
    http3: `${common.http}/3`,
    enableHttp3Connections: `${common.enable} ${common.http}/3 connections`,
    forceHttps: `Force ${common.https}`,
    hsts: 'HSTS',
    enableStrictTransportSecurity: `${common.enable} Strict Transport Security, requiring HTTPS connections`,
    enableIncludeSubDomains: `${common.enable} includeSubDomains directive, requiring HTTPS connections for ALL subdomains`,
    enablePreload: `${common.enable} preload directive, telling browsers to always make HTTPS connections only`,
    certificationType: 'Certification type',
    customCertificate: 'Custom certificate',
    letsEncryptEmail: `${common.letsEncrypt} email`,
    http3IsANonStandardModule: "HTTP/3 isn't a standard NGINX module, check the ",
    http3NginxQuicReadme: 'NGINX QUIC readme',
    http3OrThe: ' or the ',
    http3CloudflareQuicheProject: 'Cloudflare quiche project',
    http3ForBuildingNginxWithHttp3: ' for how to build NGINX with HTTP/3!',
};


================================================
FILE: src/nginxconfig/i18n/en/templates/domain_sections/index.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import https from './https.js';
import logging from './logging.js';
import php from './php.js';
import presets from './presets.js';
import python from './python.js';
import reverseProxy from './reverse_proxy.js';
import routing from './routing.js';
import server from './server.js';
import restrict from './restrict.js';
import onion from './onion.js';

export default {
    https,
    logging,
    php,
    presets,
    python,
    reverseProxy,
    routing,
    server,
    restrict,
    onion,
};


================================================
FILE: src/nginxconfig/i18n/en/templates/domain_sections/logging.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

export default {
    byDomain: 'by domain',
    enableForThisDomain: `${common.enable} for this domain`,
    arguments: 'arguments',
    level: 'logging level',
    forRedirects: 'for redirects',
};


================================================
FILE: src/nginxconfig/i18n/en/templates/domain_sections/onion.js
================================================
/*
Copyright 2020 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

const onion = 'Onion';

export default {
    onion,
    onionLocation: `${onion} location`,
    provideAnOnionLocationToSetOnionLocationHeader:
        'Provide an onion location address to set the Onion-Location header for your site.',
    letsVisitorsKnownOnionServicesIsAvailable:
        'This lets visitors know that an onion services version of your site is available for Tor browsers.',
    learnMoreAboutOnionServices: 'Learn more about Onion services',
    onionLocationExpectedToEndWithOnion: 'Onion location addresses normally end with `.onion`.',
};


================================================
FILE: src/nginxconfig/i18n/en/templates/domain_sections/php.js
================================================
/*
Copyright 2024 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/

import common from '../../common.js';

export default {
    phpIsDisabled: `${common.php} is disabled.`,
    phpCannotBeEnabledWithReverseProxy: `${common.php} cannot be enabled whilst the reverse proxy is enabled.`,
    phpCannotBeEnabledWithPython: `${common.php} cannot be enabled whilst ${common.python} is enabled.`,
    enablePhp: `${common.enable} ${common.php}`,
    wordPressRules: `${common.wordPress} rules`,
    enableWordPressRules: `${common.enable} ${common.wordPress}-specific rules`,
    drupalRules: `${common.drupal} rules`,
    enableDrupalRules: `${common.enable} ${common.drupal}-specific rules`,
    magentoRules: `${common.magento} rules`,
    enableMagentoRules: `${common.enable} ${common.magento}-specific rules`,
    joomlaRules: `${common.joomla} rules`,
    enableJoomlaRules: `${common.enable} ${common.joomla}-specific rules`,
    phpServer: `${common.php} server`,
    phpBackupServer: `${common.php} backup server`,
    tcp: 'TCP',
    hhvmSocket: 'HHVM socket',
    php70Socket: '7.0 socket',
    php71Socket: '7.1 socket',
    php72Socket: '7.2 socket',
    php73Socket: '7.3 socket',
    php74Socket: '7.4 socket',
    php80Socket: '8.0 socket',
    php81Socket: '8.1 socket',
    php82Socket: '8.2 socket',
    phpSocket: 'PHP socket',
    custom: 'Custom',
    disabled: 'Disabled',
};


================================================
FILE: src/nginxconfig/i18n/en/templates/domain_sections/presets.js
================================================
/*
Copyright 2020 DigitalOcean

This code is licensed under the MIT License.
You may obtain a copy of the License at
https://github.com/digitalocean/nginxconfig.io/blob/master/LICENSE or https://mit-license.org/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions :

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONT
Download .txt
gitextract_q2tmsz7t/

├── .babelrc
├── .editorconfig
├── .eslintrc.cjs
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── help.md
│   │   ├── report-a-bug.md
│   │   └── request-a-feature.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   └── workflows/
│       ├── do-spaces-workflow.yml
│       ├── gh-pages-workflow.yml
│       └── test-workflow.yml
├── .gitignore
├── .husky/
│   └── pre-commit
├── .lintstagedrc.json
├── .nvmrc
├── .prettierignore
├── .prettierrc.json
├── LICENSE
├── README.md
├── package.json
├── src/
│   ├── nginxconfig/
│   │   ├── build/
│   │   │   ├── prism.js
│   │   │   ├── template.js
│   │   │   └── webpack-dynamic-import.js
│   │   ├── generators/
│   │   │   ├── conf/
│   │   │   │   ├── drupal.conf.js
│   │   │   │   ├── general.conf.js
│   │   │   │   ├── joomla.conf.js
│   │   │   │   ├── letsencrypt.conf.js
│   │   │   │   ├── magento.conf.js
│   │   │   │   ├── nginx.conf.js
│   │   │   │   ├── php_fastcgi.conf.js
│   │   │   │   ├── proxy.conf.js
│   │   │   │   ├── python_uwsgi.conf.js
│   │   │   │   ├── security.conf.js
│   │   │   │   ├── website.conf.js
│   │   │   │   └── wordpress.conf.js
│   │   │   ├── ext/
│   │   │   │   └── docker.js
│   │   │   ├── index.js
│   │   │   ├── to_conf.js
│   │   │   ├── to_yaml.js
│   │   │   └── yaml/
│   │   │       └── dockerCompose.yaml.js
│   │   ├── i18n/
│   │   │   ├── de/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   ├── en/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   ├── es/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   ├── fa/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   ├── fr/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   ├── ja/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   ├── pl/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   ├── pt-br/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   ├── ru/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   ├── setup.js
│   │   │   ├── verify.js
│   │   │   ├── zh-cn/
│   │   │   │   ├── common.js
│   │   │   │   ├── index.js
│   │   │   │   ├── languages.js
│   │   │   │   └── templates/
│   │   │   │       ├── app.js
│   │   │   │       ├── callouts/
│   │   │   │       │   ├── contribute.js
│   │   │   │       │   ├── droplet.js
│   │   │   │       │   └── index.js
│   │   │   │       ├── domain_sections/
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── onion.js
│   │   │   │       │   ├── php.js
│   │   │   │       │   ├── presets.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── restrict.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── routing.js
│   │   │   │       │   └── server.js
│   │   │   │       ├── footer.js
│   │   │   │       ├── global_sections/
│   │   │   │       │   ├── docker.js
│   │   │   │       │   ├── https.js
│   │   │   │       │   ├── index.js
│   │   │   │       │   ├── logging.js
│   │   │   │       │   ├── nginx.js
│   │   │   │       │   ├── performance.js
│   │   │   │       │   ├── python.js
│   │   │   │       │   ├── reverse_proxy.js
│   │   │   │       │   ├── security.js
│   │   │   │       │   └── tools.js
│   │   │   │       ├── index.js
│   │   │   │       ├── setup.js
│   │   │   │       └── setup_sections/
│   │   │   │           ├── certbot.js
│   │   │   │           ├── download.js
│   │   │   │           ├── go_live.js
│   │   │   │           ├── index.js
│   │   │   │           └── ssl.js
│   │   │   └── zh-tw/
│   │   │       ├── common.js
│   │   │       ├── index.js
│   │   │       ├── languages.js
│   │   │       └── templates/
│   │   │           ├── app.js
│   │   │           ├── callouts/
│   │   │           │   ├── contribute.js
│   │   │           │   ├── droplet.js
│   │   │           │   └── index.js
│   │   │           ├── domain_sections/
│   │   │           │   ├── https.js
│   │   │           │   ├── index.js
│   │   │           │   ├── logging.js
│   │   │           │   ├── onion.js
│   │   │           │   ├── php.js
│   │   │           │   ├── presets.js
│   │   │           │   ├── python.js
│   │   │           │   ├── restrict.js
│   │   │           │   ├── reverse_proxy.js
│   │   │           │   ├── routing.js
│   │   │           │   └── server.js
│   │   │           ├── footer.js
│   │   │           ├── global_sections/
│   │   │           │   ├── docker.js
│   │   │           │   ├── https.js
│   │   │           │   ├── index.js
│   │   │           │   ├── logging.js
│   │   │           │   ├── nginx.js
│   │   │           │   ├── performance.js
│   │   │           │   ├── python.js
│   │   │           │   ├── reverse_proxy.js
│   │   │           │   ├── security.js
│   │   │           │   └── tools.js
│   │   │           ├── index.js
│   │   │           ├── setup.js
│   │   │           └── setup_sections/
│   │   │               ├── certbot.js
│   │   │               ├── download.js
│   │   │               ├── go_live.js
│   │   │               ├── index.js
│   │   │               └── ssl.js
│   │   ├── mount.js
│   │   ├── scss/
│   │   │   ├── _callout.scss
│   │   │   ├── _code.scss
│   │   │   ├── _columns.scss
│   │   │   ├── _fields.scss
│   │   │   ├── _files.scss
│   │   │   ├── _footer.scss
│   │   │   ├── _header.scss
│   │   │   ├── _modals.scss
│   │   │   ├── _panel.scss
│   │   │   ├── _setup.scss
│   │   │   ├── _tabs.scss
│   │   │   ├── _vue-select.scss
│   │   │   └── style.scss
│   │   ├── templates/
│   │   │   ├── app.vue
│   │   │   ├── callouts/
│   │   │   │   ├── contribute.vue
│   │   │   │   └── droplet.vue
│   │   │   ├── domain.vue
│   │   │   ├── domain_sections/
│   │   │   │   ├── https.vue
│   │   │   │   ├── index.js
│   │   │   │   ├── logging.vue
│   │   │   │   ├── onion.vue
│   │   │   │   ├── php.vue
│   │   │   │   ├── presets.vue
│   │   │   │   ├── python.vue
│   │   │   │   ├── restrict.vue
│   │   │   │   ├── reverse_proxy.vue
│   │   │   │   ├── routing.vue
│   │   │   │   └── server.vue
│   │   │   ├── footer.vue
│   │   │   ├── global.vue
│   │   │   ├── global_sections/
│   │   │   │   ├── docker.vue
│   │   │   │   ├── https.vue
│   │   │   │   ├── index.js
│   │   │   │   ├── logging.vue
│   │   │   │   ├── nginx.vue
│   │   │   │   ├── performance.vue
│   │   │   │   ├── python.vue
│   │   │   │   ├── reverse_proxy.vue
│   │   │   │   ├── security.vue
│   │   │   │   └── tools.vue
│   │   │   ├── inputs/
│   │   │   │   ├── checkbox.vue
│   │   │   │   └── radio.vue
│   │   │   ├── prism/
│   │   │   │   ├── bash.vue
│   │   │   │   ├── docker.vue
│   │   │   │   ├── nginx.vue
│   │   │   │   └── yaml.vue
│   │   │   ├── setup.vue
│   │   │   └── setup_sections/
│   │   │       ├── certbot.vue
│   │   │       ├── download.vue
│   │   │       ├── go_live.vue
│   │   │       ├── index.js
│   │   │       └── ssl.vue
│   │   └── util/
│   │       ├── analytics.js
│   │       ├── angular_backwards_compatibility.js
│   │       ├── browser_language.js
│   │       ├── camel_to_snake.js
│   │       ├── common_hsts.js
│   │       ├── computed_from_defaults.js
│   │       ├── deep_merge.js
│   │       ├── defaults.js
│   │       ├── delegated_from_defaults.js
│   │       ├── export_data.js
│   │       ├── get_ssl_certificate.js
│   │       ├── import_data.js
│   │       ├── is_changed.js
│   │       ├── is_object.js
│   │       ├── language_packs.js
│   │       ├── log.js
│   │       ├── logging.js
│   │       ├── php_path.js
│   │       ├── php_upstream.js
│   │       ├── prism_bundle.js
│   │       ├── share_query.js
│   │       ├── snake_to_camel.js
│   │       ├── ssl_profiles.js
│   │       ├── types_extensions.js
│   │       └── vue_backwards_compatibility.js
│   └── static/
│       └── robots.txt
├── test/
│   └── testBrowserLanguage.js
└── vue.config.js
Download .txt
SYMBOL INDEX (13 symbols across 3 files)

FILE: src/nginxconfig/util/computed_from_defaults.js
  method get (line 32) | get() {
  method set (line 35) | set(value) {
  method get (line 52) | get() {
  method get (line 57) | get() {
  method get (line 62) | get() {

FILE: src/nginxconfig/util/import_data.js
  method decoder (line 70) | decoder(value) {

FILE: test/testBrowserLanguage.js
  class MockLocales (line 29) | class MockLocales {
    method setNavigatorLanguages (line 38) | static setNavigatorLanguages(langs) {
    method setNavigatorLanguage (line 43) | static setNavigatorLanguage(lang) {
    method setDateTimeLocale (line 48) | static setDateTimeLocale(locale) {
    method restoreDateTimeLocale (line 66) | static restoreDateTimeLocale() {
    method setNavigator (line 73) | static setNavigator(navigator) {
    method restoreNavigator (line 79) | static restoreNavigator() {
Condensed preview — 518 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,307K chars).
[
  {
    "path": ".babelrc",
    "chars": 257,
    "preview": "{\n    \"presets\": [[\n        \"@babel/preset-env\",\n        {\n            \"corejs\": \"3\",\n            \"useBuiltIns\": \"usage\""
  },
  {
    "path": ".editorconfig",
    "chars": 176,
    "preview": "root = true\n\n[*]\nend_of_line = lf\ninsert_final_newline = true\nindent_style = space\nindent_size = 4\n\n[*.scss]\nindent_size"
  },
  {
    "path": ".eslintrc.cjs",
    "chars": 1390,
    "preview": "module.exports = {\n    env: {\n        browser: true,\n        node: true,\n    },\n    extends: ['eslint:recommended', 'plu"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/help.md",
    "chars": 774,
    "preview": "---\nname: Help ❓\nabout: Encountered a problem with the tool?\n---\n\n<!-- Don't write inside the arrows as they will be hid"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/report-a-bug.md",
    "chars": 1158,
    "preview": "---\nname: Report a bug 🐛\nabout: Report a bug with the tool. Only use this if you're 100% sure there's something wrong, o"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/request-a-feature.md",
    "chars": 1377,
    "preview": "---\nname: Request a feature 🆕\nabout: Suggest a new feature that you would like in the tool!\n---\n\n<!-- Fill out the templ"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 795,
    "preview": "## Type of Change\n<!-- What part of the source are you modifying? Remove the irrelevant options. -->\n\n- **Build Scripts:"
  },
  {
    "path": ".github/workflows/do-spaces-workflow.yml",
    "chars": 1306,
    "preview": "name: Deploy to DigitalOcean Spaces\n\non: push\n\npermissions:\n  contents: write\n\njobs:\n  build:\n    runs-on: ubuntu-latest"
  },
  {
    "path": ".github/workflows/gh-pages-workflow.yml",
    "chars": 827,
    "preview": "name: Test and deploy to GitHub Pages\n\non:\n  push:\n    branches:\n      - master\n\npermissions:\n  contents: write\n\nconcurr"
  },
  {
    "path": ".github/workflows/test-workflow.yml",
    "chars": 1546,
    "preview": "name: Test commit or pull request\n\non: [push, pull_request]\n\njobs:\n  eslint:\n    runs-on: ubuntu-latest\n\n    steps:\n    "
  },
  {
    "path": ".gitignore",
    "chars": 80,
    "preview": "node_modules\n.cache\n.idea\n.vscode\n.DS_Store\n\n/build/\n/dist/\n/dev/\n\n.eslintcache\n"
  },
  {
    "path": ".husky/pre-commit",
    "chars": 58,
    "preview": "#!/bin/sh\n. \"$(dirname \"$0\")/_/husky.sh\"\n\nnpx lint-staged\n"
  },
  {
    "path": ".lintstagedrc.json",
    "chars": 175,
    "preview": "{\n  \"*.{js,vue}\": [\n    \"prettier --write\",\n    \"eslint --quiet --cache --fix\"\n  ],\n  \"*.scss\": [\n    \"stylelint --confi"
  },
  {
    "path": ".nvmrc",
    "chars": 8,
    "preview": "v20.9.0\n"
  },
  {
    "path": ".prettierignore",
    "chars": 31,
    "preview": "package.json\npackage-lock.json\n"
  },
  {
    "path": ".prettierrc.json",
    "chars": 214,
    "preview": "{\n    \"singleQuote\": true,\n    \"trailingComma\": \"all\",\n    \"vueIndentScriptAndStyle\": true,\n    \"htmlWhitespaceSensitivi"
  },
  {
    "path": "LICENSE",
    "chars": 1069,
    "preview": "MIT License\n\nCopyright (c) 2020 DigitalOcean\n\nPermission is hereby granted, free of charge, to any person obtaining a co"
  },
  {
    "path": "README.md",
    "chars": 5915,
    "preview": "[![GitHub stars](https://img.shields.io/github/stars/digitalocean/nginxconfig.io.svg)](https://github.com/digitalocean/n"
  },
  {
    "path": "package.json",
    "chars": 3800,
    "preview": "{\n  \"name\": \"nginxconfig.io\",\n  \"version\": \"1.0.0\",\n  \"description\": \"NGINX config generator on steroids\",\n  \"license\": "
  },
  {
    "path": "src/nginxconfig/build/prism.js",
    "chars": 1828,
    "preview": "/*\nCopyright 2022 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/build/template.js",
    "chars": 1926,
    "preview": "/*\nCopyright 2022 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/build/webpack-dynamic-import.js",
    "chars": 1510,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/generators/conf/drupal.conf.js",
    "chars": 2471,
    "preview": "/*\nCopyright 2020 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/generators/conf/general.conf.js",
    "chars": 5198,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/generators/conf/joomla.conf.js",
    "chars": 1848,
    "preview": "/*\nCopyright 2020 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/generators/conf/letsencrypt.conf.js",
    "chars": 1507,
    "preview": "/*\nCopyright 2020 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/generators/conf/magento.conf.js",
    "chars": 3721,
    "preview": "/*\nCopyright 2020 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/generators/conf/nginx.conf.js",
    "chars": 11377,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/generators/conf/php_fastcgi.conf.js",
    "chars": 2288,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/generators/conf/proxy.conf.js",
    "chars": 2694,
    "preview": "/*\nCopyright 2022 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/generators/conf/python_uwsgi.conf.js",
    "chars": 1835,
    "preview": "/*\nCopyright 2020 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/generators/conf/security.conf.js",
    "chars": 3352,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/generators/conf/website.conf.js",
    "chars": 21622,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/generators/conf/wordpress.conf.js",
    "chars": 3010,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/generators/ext/docker.js",
    "chars": 1320,
    "preview": "/*\nCopyright 2020 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/generators/index.js",
    "chars": 4978,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/generators/to_conf.js",
    "chars": 5088,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/generators/to_yaml.js",
    "chars": 1354,
    "preview": "/*\nCopyright 2022 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/generators/yaml/dockerCompose.yaml.js",
    "chars": 1503,
    "preview": "/*\nCopyright 2020 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/common.js",
    "chars": 1740,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/index.js",
    "chars": 1412,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/languages.js",
    "chars": 1541,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/app.js",
    "chars": 1758,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/callouts/contribute.js",
    "chars": 1465,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/callouts/droplet.js",
    "chars": 1440,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/callouts/index.js",
    "chars": 1361,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/domain_sections/https.js",
    "chars": 2520,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/domain_sections/index.js",
    "chars": 1742,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/domain_sections/logging.js",
    "chars": 1494,
    "preview": "/*\nCopyright 2022 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/domain_sections/onion.js",
    "chars": 1804,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/domain_sections/php.js",
    "chars": 2635,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/domain_sections/presets.js",
    "chars": 1622,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/domain_sections/python.js",
    "chars": 1791,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/domain_sections/restrict.js",
    "chars": 1360,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/domain_sections/reverse_proxy.js",
    "chars": 1770,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/domain_sections/routing.js",
    "chars": 1547,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/domain_sections/server.js",
    "chars": 1695,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/footer.js",
    "chars": 1691,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/global_sections/docker.js",
    "chars": 1997,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/global_sections/https.js",
    "chars": 2250,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/global_sections/index.js",
    "chars": 1711,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/global_sections/logging.js",
    "chars": 1823,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/global_sections/nginx.js",
    "chars": 1386,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/global_sections/performance.js",
    "chars": 2126,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/global_sections/python.js",
    "chars": 1510,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/global_sections/reverse_proxy.js",
    "chars": 1664,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/global_sections/security.js",
    "chars": 1625,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/global_sections/tools.js",
    "chars": 2697,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/index.js",
    "chars": 1646,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/setup.js",
    "chars": 1352,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/setup_sections/certbot.js",
    "chars": 2422,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/setup_sections/download.js",
    "chars": 2204,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/setup_sections/go_live.js",
    "chars": 1479,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/setup_sections/index.js",
    "chars": 1431,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/de/templates/setup_sections/ssl.js",
    "chars": 1816,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/common.js",
    "chars": 1727,
    "preview": "/*\nCopyright 2020 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/index.js",
    "chars": 1412,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/languages.js",
    "chars": 1517,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/app.js",
    "chars": 1705,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/callouts/contribute.js",
    "chars": 1448,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/callouts/droplet.js",
    "chars": 1433,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/callouts/index.js",
    "chars": 1361,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/domain_sections/https.js",
    "chars": 2454,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/domain_sections/index.js",
    "chars": 1742,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/domain_sections/logging.js",
    "chars": 1480,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/domain_sections/onion.js",
    "chars": 1804,
    "preview": "/*\nCopyright 2020 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/domain_sections/php.js",
    "chars": 2567,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/domain_sections/presets.js",
    "chars": 1593,
    "preview": "/*\nCopyright 2020 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/domain_sections/python.js",
    "chars": 1752,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/domain_sections/restrict.js",
    "chars": 1350,
    "preview": "/*\nCopyright 2020 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/domain_sections/reverse_proxy.js",
    "chars": 1722,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/domain_sections/routing.js",
    "chars": 1547,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/domain_sections/server.js",
    "chars": 1658,
    "preview": "/*\nCopyright 2020 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/footer.js",
    "chars": 1680,
    "preview": "/*\nCopyright 2020 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/global_sections/docker.js",
    "chars": 1928,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/global_sections/https.js",
    "chars": 2226,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/global_sections/index.js",
    "chars": 1711,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/global_sections/logging.js",
    "chars": 1792,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/global_sections/nginx.js",
    "chars": 1377,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/global_sections/performance.js",
    "chars": 2070,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/global_sections/python.js",
    "chars": 1484,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/global_sections/reverse_proxy.js",
    "chars": 1641,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/global_sections/security.js",
    "chars": 1603,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/global_sections/tools.js",
    "chars": 2574,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/index.js",
    "chars": 1646,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/setup.js",
    "chars": 1332,
    "preview": "/*\nCopyright 2020 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/setup_sections/certbot.js",
    "chars": 2341,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/setup_sections/download.js",
    "chars": 2120,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/setup_sections/go_live.js",
    "chars": 1465,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/setup_sections/index.js",
    "chars": 1431,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/en/templates/setup_sections/ssl.js",
    "chars": 1776,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/common.js",
    "chars": 1740,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/index.js",
    "chars": 1412,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/languages.js",
    "chars": 1508,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/app.js",
    "chars": 1764,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/callouts/contribute.js",
    "chars": 1458,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/callouts/droplet.js",
    "chars": 1433,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/callouts/index.js",
    "chars": 1361,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/domain_sections/https.js",
    "chars": 2536,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/domain_sections/index.js",
    "chars": 1742,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/domain_sections/logging.js",
    "chars": 1541,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/domain_sections/onion.js",
    "chars": 1894,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/domain_sections/php.js",
    "chars": 2656,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/domain_sections/presets.js",
    "chars": 1702,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/domain_sections/python.js",
    "chars": 1789,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/domain_sections/restrict.js",
    "chars": 1363,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/domain_sections/reverse_proxy.js",
    "chars": 1768,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/domain_sections/routing.js",
    "chars": 1588,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/domain_sections/server.js",
    "chars": 1802,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/footer.js",
    "chars": 1698,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/global_sections/docker.js",
    "chars": 1952,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/global_sections/https.js",
    "chars": 2361,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/global_sections/index.js",
    "chars": 1711,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/global_sections/logging.js",
    "chars": 1858,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/global_sections/nginx.js",
    "chars": 1391,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/global_sections/performance.js",
    "chars": 2132,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/global_sections/python.js",
    "chars": 1507,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/global_sections/reverse_proxy.js",
    "chars": 1659,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/global_sections/security.js",
    "chars": 1630,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/global_sections/tools.js",
    "chars": 2789,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/index.js",
    "chars": 1646,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/setup.js",
    "chars": 1342,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/setup_sections/certbot.js",
    "chars": 2387,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/setup_sections/download.js",
    "chars": 2327,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/setup_sections/go_live.js",
    "chars": 1479,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/setup_sections/index.js",
    "chars": 1431,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/es/templates/setup_sections/ssl.js",
    "chars": 1793,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/common.js",
    "chars": 1733,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/index.js",
    "chars": 1412,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/languages.js",
    "chars": 1492,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/app.js",
    "chars": 1717,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/callouts/contribute.js",
    "chars": 1455,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/callouts/droplet.js",
    "chars": 1431,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/callouts/index.js",
    "chars": 1361,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/domain_sections/https.js",
    "chars": 2423,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/domain_sections/index.js",
    "chars": 1742,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/domain_sections/logging.js",
    "chars": 1481,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/domain_sections/onion.js",
    "chars": 1814,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/domain_sections/php.js",
    "chars": 2532,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/domain_sections/presets.js",
    "chars": 1608,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/domain_sections/python.js",
    "chars": 1750,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/domain_sections/restrict.js",
    "chars": 1348,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/domain_sections/reverse_proxy.js",
    "chars": 1728,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/domain_sections/routing.js",
    "chars": 1553,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/domain_sections/server.js",
    "chars": 1648,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/footer.js",
    "chars": 1660,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/global_sections/docker.js",
    "chars": 1936,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/global_sections/https.js",
    "chars": 2239,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/global_sections/index.js",
    "chars": 1711,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/global_sections/logging.js",
    "chars": 1783,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/global_sections/nginx.js",
    "chars": 1379,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/global_sections/performance.js",
    "chars": 2069,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/global_sections/python.js",
    "chars": 1485,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/global_sections/reverse_proxy.js",
    "chars": 1645,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/global_sections/security.js",
    "chars": 1594,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/global_sections/tools.js",
    "chars": 2617,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/index.js",
    "chars": 1646,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/setup.js",
    "chars": 1331,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/setup_sections/certbot.js",
    "chars": 2373,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/setup_sections/download.js",
    "chars": 2103,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/setup_sections/go_live.js",
    "chars": 1480,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/setup_sections/index.js",
    "chars": 1431,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fa/templates/setup_sections/ssl.js",
    "chars": 1779,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fr/common.js",
    "chars": 1738,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fr/index.js",
    "chars": 1412,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fr/languages.js",
    "chars": 1519,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fr/templates/app.js",
    "chars": 1757,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fr/templates/callouts/contribute.js",
    "chars": 1482,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fr/templates/callouts/droplet.js",
    "chars": 1440,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fr/templates/callouts/index.js",
    "chars": 1361,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fr/templates/domain_sections/https.js",
    "chars": 2512,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fr/templates/domain_sections/index.js",
    "chars": 1742,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fr/templates/domain_sections/logging.js",
    "chars": 1539,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fr/templates/domain_sections/onion.js",
    "chars": 1807,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fr/templates/domain_sections/php.js",
    "chars": 2648,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fr/templates/domain_sections/presets.js",
    "chars": 1628,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fr/templates/domain_sections/python.js",
    "chars": 1793,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fr/templates/domain_sections/restrict.js",
    "chars": 1355,
    "preview": "/*\nCopyright 2021 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fr/templates/domain_sections/reverse_proxy.js",
    "chars": 1782,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  },
  {
    "path": "src/nginxconfig/i18n/fr/templates/domain_sections/routing.js",
    "chars": 1547,
    "preview": "/*\nCopyright 2024 DigitalOcean\n\nThis code is licensed under the MIT License.\nYou may obtain a copy of the License at\nhtt"
  }
]

// ... and 318 more files (download for full content)

About this extraction

This page contains the full source code of the digitalocean/nginxconfig.io GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 518 files (1.2 MB), approximately 283.6k tokens, and a symbol index with 13 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!