From ed2d12dbba4bfefd3167231beeaf59c052652c17 Mon Sep 17 00:00:00 2001
From: cytopia <cytopia@everythingcli.org>
Date: Sun, 18 Mar 2018 17:15:23 +0100
Subject: [PATCH] Adding vhost-gen templates

---
 templates/vhost-gen/apache22.yml | 146 +++++++++++++++++++++++++++
 templates/vhost-gen/apache24.yml | 163 +++++++++++++++++++++++++++++++
 templates/vhost-gen/nginx.yml    | 139 ++++++++++++++++++++++++++
 3 files changed, 448 insertions(+)
 create mode 100644 templates/vhost-gen/apache22.yml
 create mode 100644 templates/vhost-gen/apache24.yml
 create mode 100644 templates/vhost-gen/nginx.yml

diff --git a/templates/vhost-gen/apache22.yml b/templates/vhost-gen/apache22.yml
new file mode 100644
index 00000000..c19ca513
--- /dev/null
+++ b/templates/vhost-gen/apache22.yml
@@ -0,0 +1,146 @@
+---
+
+# Apache 2.2 vHost Template defintion for vhost-gen.py
+#
+# The 'feature' section contains optional features that can be enabled via
+# conf.yml and will then be replaced into the main vhost ('structure' section)
+# into their corresponding position:
+#
+#    __XDOMAIN_REQ__
+#    __PHP_FPM__
+#    __ALIASES__
+#    __DENIES__
+#    __STATUS__
+#
+# The features itself also contain variables to be adjusted in conf.yml
+# and will then be replaced in their corresponding feature section
+# before being replaced into the vhost section (if enabled):
+#
+# PHP-FPM:
+#    __PHP_ADDR__
+#    __PHP_PORT__
+# XDomain:
+#    __REGEX__
+# Alias:
+#    __REGEX__
+#    __PATH__
+# Deny:
+#    __REGEX__
+# Status:
+#    __REGEX__
+#
+# Variables to be replaced directly in the vhost configuration can also be set
+# in conf.yml and include:
+#    __VHOST_NAME__
+#    __DOCUMENT_ROOT__
+#    __INDEX__
+#    __ACCESS_LOG__
+#    __ERROR_LOG__
+#    __PHP_ADDR__
+#    __PHP_PORT__
+#
+
+
+###
+### Basic vHost skeleton
+###
+vhost: |
+  <VirtualHost __DEFAULT_VHOST__:__PORT__>
+      ServerName   __VHOST_NAME__
+
+      CustomLog  "__ACCESS_LOG__" combined
+      ErrorLog   "__ERROR_LOG__"
+
+  __VHOST_DOCROOT__
+  __VHOST_RPROXY__
+  __PHP_FPM__
+  __ALIASES__
+  __DENIES__
+  __SERVER_STATUS__
+      # Custom directives
+  __CUSTOM__
+  </VirtualHost>
+
+###
+### vHost Type (normal or reverse proxy)
+###
+vhost_type:
+  # Normal vHost (-p)
+  docroot: |
+    # Define the vhost to serve files
+    DocumentRoot "__DOCUMENT_ROOT__"
+    <Directory "__DOCUMENT_ROOT__">
+        DirectoryIndex __INDEX__
+
+        AllowOverride All
+        Options All
+
+        RewriteEngine on
+        RewriteBase /
+
+        Order allow,deny
+        Allow from all
+    </Directory>
+
+  # Reverse Proxy (-r)
+  rproxy: |
+    # Define the vhost to reverse proxy
+    ProxyRequests off
+    ProxyPass __LOCATION__ __PROXY_PROTO://__PROXY_ADDR__:__PROXY_PORT__
+    ProxyHTMLURLMap __PROXY_PROTO://__PROXY_ADDR__:__PROXY_PORT__ __LOCATION__
+    <location __LOCATION__>
+        ProxyPassReverse /
+        SetOutputFilter  proxy-html
+        ProxyHTMLURLMap  /      __LOCATION__
+        ProxyHTMLURLMap  __LOCATION__  __LOCATION__
+        RequestHeader    unset  Accept-Encoding
+    </location>
+
+
+###
+### Optional features to be enabled in vHost
+###
+features:
+
+  # PHP-FPM will not be applied to a reverse proxy!
+  php_fpm: |
+    # PHP-FPM Definition
+    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://__PHP_ADDR__:__PHP_PORT____DOCUMENT_ROOT__/$1
+
+  alias: |
+    # Alias Definition
+    Alias "__ALIAS__" "__PATH____ALIAS__"
+    <Location "__ALIAS__">
+    __XDOMAIN_REQ__
+    </Location>
+    <Directory "__PATH____ALIAS__">
+        Order allow,deny
+        Allow from all
+    </Directory>
+
+  deny: |
+    # Deny Definition
+    <FilesMatch "__REGEX__">
+        Order allow,deny
+        Deny from all
+    </FilesMatch>
+
+  server_status: |
+    # Status Page
+    <Location __REGEX__>
+        SetHandler server-status
+        Order allow,deny
+        Allow from all
+    </Location>
+
+  xdomain_request: |
+    # Allow cross domain request from these hosts
+    SetEnvIf Origin "__REGEX__" AccessControlAllowOrigin=$0$1
+    Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
+    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
+    Header always set Access-Control-Max-Age "0"
+    Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
+    # Added a rewrite to respond with a 200 SUCCESS on every OPTIONS request.
+    RewriteEngine On
+    RewriteCond %{REQUEST_METHOD} OPTIONS
+    RewriteRule ^(.*)$ $1 [R=200,L]
diff --git a/templates/vhost-gen/apache24.yml b/templates/vhost-gen/apache24.yml
new file mode 100644
index 00000000..616e9f80
--- /dev/null
+++ b/templates/vhost-gen/apache24.yml
@@ -0,0 +1,163 @@
+---
+
+# Apache 2.4 vHost Template defintion for vhost-gen.py
+#
+# The 'feature' section contains optional features that can be enabled via
+# conf.yml and will then be replaced into the main vhost ('structure' section)
+# into their corresponding position:
+#
+#    __XDOMAIN_REQ__
+#    __PHP_FPM__
+#    __ALIASES__
+#    __DENIES__
+#    __STATUS__
+#
+# The features itself also contain variables to be adjusted in conf.yml
+# and will then be replaced in their corresponding feature section
+# before being replaced into the vhost section (if enabled):
+#
+# PHP-FPM:
+#    __PHP_ADDR__
+#    __PHP_PORT__
+# XDomain:
+#    __REGEX__
+# Alias:
+#    __REGEX__
+#    __PATH__
+# Deny:
+#    __REGEX__
+# Status:
+#    __REGEX__
+#
+# Variables to be replaced directly in the vhost configuration can also be set
+# in conf.yml and include:
+#    __VHOST_NAME__
+#    __DOCUMENT_ROOT__
+#    __INDEX__
+#    __ACCESS_LOG__
+#    __ERROR_LOG__
+#    __PHP_ADDR__
+#    __PHP_PORT__
+#
+
+
+###
+### Basic vHost skeleton
+###
+vhost: |
+  <VirtualHost __DEFAULT_VHOST__:__PORT__>
+      ServerName   __VHOST_NAME__
+
+      CustomLog  "__ACCESS_LOG__" combined
+      ErrorLog   "__ERROR_LOG__"
+
+  __VHOST_DOCROOT__
+  __VHOST_RPROXY__
+  __PHP_FPM__
+  __ALIASES__
+  __DENIES__
+  __SERVER_STATUS__
+      # Custom directives
+  __CUSTOM__
+  </VirtualHost>
+
+###
+### vHost Type (normal or reverse proxy)
+###
+vhost_type:
+  # Normal vHost (-p)
+  docroot: |
+    # Define the vhost to serve files
+    DocumentRoot "__DOCUMENT_ROOT__"
+    <Directory "__DOCUMENT_ROOT__">
+        DirectoryIndex __INDEX__
+
+        AllowOverride All
+        Options All
+
+        RewriteEngine on
+        RewriteBase /
+
+        Order allow,deny
+        Allow from all
+        Require all granted
+    </Directory>
+
+  # Reverse Proxy (-r)
+  rproxy: |
+    # Define the vhost to reverse proxy
+    ProxyRequests off
+    ProxyPass __LOCATION__ __PROXY_PROTO://__PROXY_ADDR__:__PROXY_PORT__
+    ProxyHTMLURLMap __PROXY_PROTO://__PROXY_ADDR__:__PROXY_PORT__ __LOCATION__
+    <location __LOCATION__>
+        ProxyPassReverse /
+        SetOutputFilter  proxy-html
+        ProxyHTMLURLMap  /      __LOCATION__
+        ProxyHTMLURLMap  __LOCATION__  __LOCATION__
+        RequestHeader    unset  Accept-Encoding
+    </location>
+
+
+###
+### Optional features to be enabled in vHost
+###
+features:
+
+  # PHP-FPM will not be applied to a reverse proxy!
+  php_fpm: |
+    # PHP-FPM Definition
+    <FilesMatch \.php$>
+        Require all granted
+        SetHandler proxy:fcgi://__PHP_ADDR__:__PHP_PORT__
+    </FilesMatch>
+
+    # enablereuse requires Apache 2.4.11 or later
+    <Proxy "fcgi://__PHP_ADDR__:__PHP_PORT__/" enablereuse=on max=10>
+    </Proxy>
+
+    # If the php file doesn't exist, disable the proxy handler.
+    # This will allow .htaccess rewrite rules to work and
+    # the client will see the default 404 page of Apache
+    RewriteCond %{REQUEST_FILENAME} \.php$
+    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f
+    RewriteRule (.*) - [H=text/html]
+
+  alias: |
+    # Alias Definition
+    Alias "__ALIAS__" "__PATH____ALIAS__"
+    <Location "__ALIAS__">
+    __XDOMAIN_REQ__
+    </Location>
+    <Directory "__PATH____ALIAS__">
+        Order allow,deny
+        Allow from all
+        Require all granted
+    </Directory>
+
+  deny: |
+    # Deny Definition
+    <FilesMatch "__REGEX__">
+        Order allow,deny
+        Deny from all
+    </FilesMatch>
+
+  server_status: |
+    # Status Page
+    <Location __REGEX__>
+        SetHandler server-status
+        Order allow,deny
+        Allow from all
+        Require all granted
+    </Location>
+
+  xdomain_request: |
+    # Allow cross domain request from these hosts
+    SetEnvIf Origin "__REGEX__" AccessControlAllowOrigin=$0$1
+    Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
+    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
+    Header always set Access-Control-Max-Age "0"
+    Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
+    # Added a rewrite to respond with a 200 SUCCESS on every OPTIONS request.
+    RewriteEngine On
+    RewriteCond %{REQUEST_METHOD} OPTIONS
+    RewriteRule ^(.*)$ $1 [R=200,L]
diff --git a/templates/vhost-gen/nginx.yml b/templates/vhost-gen/nginx.yml
new file mode 100644
index 00000000..35a06556
--- /dev/null
+++ b/templates/vhost-gen/nginx.yml
@@ -0,0 +1,139 @@
+---
+
+# Nginx vHost Template defintion for vhost-gen.py
+#
+# The 'feature' section contains optional features that can be enabled via
+# conf.yml and will then be replaced into the main vhost ('structure' section)
+# into their corresponding position:
+#
+#    __XDOMAIN_REQ__
+#    __PHP_FPM__
+#    __ALIASES__
+#    __DENIES__
+#    __STATUS__
+#
+# The features itself also contain variables to be adjusted in conf.yml
+# and will then be replaced in their corresponding feature section
+# before being replaced into the vhost section (if enabled):
+#
+# PHP-FPM:
+#    __PHP_ADDR__
+#    __PHP_PORT__
+# XDomain:
+#    __REGEX__
+# Alias:
+#    __REGEX__
+#    __PATH__
+# Deny:
+#    __REGEX__
+# Status:
+#    __REGEX__
+#
+# Variables to be replaced directly in the vhost configuration can also be set
+# in conf.yml and include:
+#    __VHOST_NAME__
+#    __DOCUMENT_ROOT__
+#    __INDEX__
+#    __ACCESS_LOG__
+#    __ERROR_LOG__
+#    __PHP_ADDR__
+#    __PHP_PORT__
+#
+
+
+###
+### Basic vHost skeleton
+###
+vhost: |
+  server {
+      listen       __PORT____DEFAULT_VHOST__;
+      server_name  __VHOST_NAME__;
+
+      access_log   "__ACCESS_LOG__" combined;
+      error_log    "__ERROR_LOG__" warn;
+
+  __VHOST_DOCROOT__
+  __VHOST_RPROXY__
+  __PHP_FPM__
+  __ALIASES__
+  __DENIES__
+  __SERVER_STATUS__
+      # Custom directives
+  __CUSTOM__
+  }
+
+
+###
+### vHost Type (normal or reverse proxy)
+###
+vhost_type:
+  # Normal vHost (-p)
+  docroot: |
+    # Define the vhost to serve files
+    root         "__DOCUMENT_ROOT__";
+    index        __INDEX__;
+
+  # Reverse Proxy (-r)
+  rproxy: |
+    # Define the vhost to reverse proxy
+    location __LOCATION__ {
+        proxy_set_header Host $host;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_pass __PROXY_PROTO__://__PROXY_ADDR__:__PROXY_PORT__;
+    }
+
+
+###
+### Optional features to be enabled in vHost
+###
+features:
+
+  # PHP-FPM will not be applied to a reverse proxy!
+  php_fpm: |
+    # PHP-FPM Definition
+    location / {
+        try_files $uri $uri/ /index.php$is_args$args;
+    }
+    location ~ \.php?$ {
+        try_files $uri = 404;
+        include fastcgi_params;
+
+        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+        fastcgi_split_path_info ^(.+\.php)(.*)$;
+
+        fastcgi_pass __PHP_ADDR__:__PHP_PORT__;
+
+        fastcgi_index index.php;
+        fastcgi_intercept_errors on;
+    }
+
+  alias: |
+    # Alias Definition
+    location ~ __ALIAS__ {
+        root  __PATH__;
+    __XDOMAIN_REQ__
+    }
+
+  deny: |
+    # Deny Definition
+    location ~ __REGEX__ {
+        deny all;
+    }
+
+  server_status: |
+    # Status Page
+    location ~ __REGEX__ {
+        stub_status on;
+        access_log off;
+    }
+
+  xdomain_request: |
+    # Allow cross domain request from these hosts
+    if ( $http_origin ~* (__REGEX__) ) {
+        add_header "Access-Control-Allow-Origin" "$http_origin";
+        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
+        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
+        add_header 'Access-Control-Expose-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
+        add_header 'Access-Control-Max-Age' 0;
+        return 200;
+    }