# Rx3-Docker/PHP-Apache Docker Image
#-------------------------------------------------------------------------------

ARG IMG_FROM_URL="rx3-docker/server:latest"

FROM ${IMG_FROM_URL}

ARG IMG_NAME
ARG IMG_NAME_FULL
ARG IMG_VERSION
ARG IMG_MAINTAINER
ARG IMG_URL

LABEL org.rx3.${IMG_NAME}.name=${IMG_NAME_FULL}
LABEL org.rx3.${IMG_NAME}.version=${IMG_VERSION}
LABEL org.rx3.${IMG_NAME}.maintainer=${IMG_MAINTAINER}
LABEL maintainer=${IMG_MAINTAINER}

ARG APACHE_DOC_ROOT
ARG APACHE_LOG_DIR
ARG APACHE_PORT

ARG HTTPD_CONF_FILE=/etc/httpd/conf/sites.d/default_vhost.d/30-rx3.conf



#-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ARG HTTPD='#!/bin/bash                                                                                                                                                 \n\
                                                                                                                                                                       \n\
[[ "${APACHE_UID}" != "" ]] && usermod  -u ${APACHE_UID} apache                                                                                                        \n\
[[ "${APACHE_GID}" != "" ]] && groupmod -g ${APACHE_GID} apache                                                                                                        \n\
                                                                                                                                                                       \n\
chgrp           apache /usr/bin/pwauth                                                                                                                                 \n\
chmod    u+s           /usr/bin/pwauth                                                                                                                                 \n\
                                                                                                                                                                       \n\
chown -R apache:apache /var/log/httpd                                                                                                                                  \n\
                                                                                                                                                                       \n\
for file in /etc/httpd/conf/httpd.conf '${HTTPD_CONF_FILE}'                                                                                                            \n\
do                                                                                                                                                                     \n\
    sed -i -e "s%/var/www/html%${APACHE_DOC_ROOT}%" ${file}                                                                                                            \n\
done                                                                                                                                                                   \n\
                                                                                                                                                                       \n\
[[ "${PHP_MEMORY_LIMIT}" == "" ]] && PHP_MEMORY_LIMIT="512M"                                                                                                           \n\
[[ "${PHP_UPLOAD_LIMIT}" == "" ]] && PHP_UPLOAD_LIMIT="32M"                                                                                                            \n\
                                                                                                                                                                       \n\
sed  -i -e "s/memory_limit = 128M/memory_limit = ${PHP_MEMORY_LIMIT}/"              /etc/php.d/01_ressourcelimits.ini                                                  \n\
sed  -i -e "s/upload_max_filesize = 16M/upload_max_filesize = ${PHP_UPLOAD_LIMIT}/" /etc/php.d/01_fileuploads.ini                                                      \n\
sed  -i -e "s/post_max_size = 8M/post_max_size = ${PHP_UPLOAD_LIMIT}/"              /etc/php.d/01_datahandling.ini                                                     \n\
                                                                                                                                                                       \n\
# HTTPD enabled by default                                                                                                                                             \n\
if [[ "${APACHE_HTTPD_ENABLED}" == "FALSE" ]]                                                                                                                          \n\
then                                                                                                                                                                   \n\
    file_enable /etc/supervisord.d/httpd.ini FALSE                                                                                                                     \n\
else                                                                                                                                                                   \n\
    file_enable /etc/supervisord.d/httpd.ini TRUE                                                                                                                      \n\
fi'
#-------------------------------------------------------------------------------------------------------------------------------------------------------------------------



#-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ARG HTTPD_INI='[program:httpd]                                                                                                                                         \n\
command=/usr/sbin/httpd -DFOREGROUND'
#-------------------------------------------------------------------------------------------------------------------------------------------------------------------------



#-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ARG HTTPD_CONF='#-------------------------------------------------------------------------------                                                                       \n\
# _Proxy (Internal Macro)                                                                                                                                              \n\
#-------------------------------------------------------------------------------                                                                                       \n\
# Warning: prefix_ext should be formated as: "", "aaa" or "aaa/bbb"...                                                                                                 \n\
#          prefix_int should be formated as: "", "aaa/" or "aaa/bbb/"...                                                                                               \n\
#-------------------------------------------------------------------------------                                                                                       \n\
                                                                                                                                                                       \n\
<Macro _Proxy $prefix_ext $prefix_int $host $port>                                                                                                                     \n\
                                                                                                                                                                       \n\
    RewriteCond "`$prefix_ext`" "!= ``"                                                                                                                                \n\
    RewriteRule "^/$prefix_ext$" "/$prefix_ext/" [R,L]                                                                                                                 \n\
                                                                                                                                                                       \n\
    <Location /$prefix_ext/>                                                                                                                                           \n\
        Require all granted                                                                                                                                            \n\
                                                                                                                                                                       \n\
        ProxyPass           http://$host:$port/$prefix_int flushpackets=on nocanon                                                                                     \n\
        ProxyPassReverse    http://$host:$port/$prefix_int                                                                                                             \n\
                                                                                                                                                                       \n\
        # CookiePath Mapping                                                                                                                                           \n\
        <If "`$prefix_int` != ``">                                                                                                                                     \n\
            <If "`$prefix_ext` != ``">                                                                                                                                 \n\
                ProxyPassReverseCookiePath /$prefix_int /$prefix_ext/                                                                                                  \n\
            </If>                                                                                                                                                      \n\
            <Else>                                                                                                                                                     \n\
                ProxyPassReverseCookiePath /$prefix_int /                                                                                                              \n\
            </Else>                                                                                                                                                    \n\
        </If>                                                                                                                                                          \n\
        <ElseIf "`$prefix_ext` != ``">                                                                                                                                 \n\
            ProxyPassReverseCookiePath / /$prefix_ext/                                                                                                                 \n\
        </ElseIf>                                                                                                                                                      \n\
                                                                                                                                                                       \n\
        # Header Normalization                                                                                                                                         \n\
        RequestHeader setifempty X-Forwarded-Proto expr=%{REQUEST_SCHEME}                                                                                              \n\
                                                                                                                                                                       \n\
        <If "`$prefix_ext` != ``">                                                                                                                                     \n\
            RequestHeader setifempty X-Forwarded-Prefix "/$prefix_ext"                                                                                                 \n\
                                                                                                                                                                       \n\
            # Fix absolute Location headers (with domain)                                                                                                              \n\
            Header edit* Location ^(https?://[^/]+)/(?!$prefix_ext/)(.*)$ $1/$prefix_ext/$2                                                                            \n\
                                                                                                                                                                       \n\
            # Fix relative Location headers (starting with /)                                                                                                          \n\
            Header edit* Location ^/(?!$prefix_ext/)(.*)$ /$prefix_ext/$1                                                                                              \n\
        </If>                                                                                                                                                          \n\
    </Location>                                                                                                                                                        \n\
</Macro>                                                                                                                                                               \n\
                                                                                                                                                                       \n\
                                                                                                                                                                       \n\
                                                                                                                                                                       \n\
#-------------------------------------------------------------------------------                                                                                       \n\
# Proxy_Ext / Proxy_Int / Proxy_Ext_Int                                                                                                                                \n\
#-------------------------------------------------------------------------------                                                                                       \n\
# Warning: prefix_* should be formated as: "", "aaa" or "aaa/bbb"...                                                                                                   \n\
#-------------------------------------------------------------------------------                                                                                       \n\
                                                                                                                                                                       \n\
<Macro Proxy_Ext $prefix_ext $host $port>                                                                                                                              \n\
    Use _Proxy $prefix_ext "" $host $port                                                                                                                              \n\
</Macro>                                                                                                                                                               \n\
                                                                                                                                                                       \n\
<Macro Proxy_Int $prefix_ext $prefix_int $host $port>                                                                                                                  \n\
    Use _Proxy "" $prefix_int/ $host $port                                                                                                                             \n\
</Macro>                                                                                                                                                               \n\
                                                                                                                                                                       \n\
<Macro Proxy_Ext_Int $prefix_ext $prefix_int $host $port>                                                                                                              \n\
    Use _Proxy $prefix_ext $prefix_int/ $host $port                                                                                                                    \n\
</Macro>                                                                                                                                                               \n\
                                                                                                                                                                       \n\
                                                                                                                                                                       \n\
                                                                                                                                                                       \n\
RewriteEngine                      On                                                                                                                                  \n\
                                                                                                                                                                       \n\
# Reverse Proxy Configuration                                                                                                                                          \n\
ProxyRequests                      Off                                                                                                                                 \n\
ProxyPreserveHost                  On                                                                                                                                  \n\
AllowEncodedSlashes                NoDecode                                                                                                                            \n\
                                                                                                                                                                       \n\
                                                                                                                                                                       \n\
                                                                                                                                                                       \n\
<Directory /var/www/html>                                                                                                                                              \n\
    Options Includes Indexes FollowSymLinks                                                                                                                            \n\
    AllowOverride All                                                                                                                                                  \n\
    Require all granted                                                                                                                                                \n\
</Directory>'
#-------------------------------------------------------------------------------------------------------------------------------------------------------------------------



#-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ARG INFO_PHP='<?php                                                                                                                                                    \n\
    phpinfo();                                                                                                                                                         \n\
    phpinfo( INFO_MODULES);                                                                                                                                            \n\
?>'
#-------------------------------------------------------------------------------------------------------------------------------------------------------------------------



RUN    . /etc/profile.d/rx3.sh && isl --add ${IMG_URL}                                                                                                                   \
    && urpmi.update -a                                                                                                                                                   \
    && urpmi --force apache apache-mod_proxy apache-mod_proxy_html apache-mod_php php-cli php-pgsql php-mysqli php-pdo_pgsql php-pdo_mysql php-phpmailer pwauth          \
    && sed -i     -e "s%#LoadModule macro_module modules/mod_macro.so%LoadModule macro_module modules/mod_macro.so%"     /etc/httpd/conf/modules.d/00_base.conf          \
    && mv         /etc/httpd/conf/sites.d/00_default_vhosts.conf /etc/httpd/conf/sites.d/00-default_vhost.conf                                                           \
    && sed  -i    -e "s%ServerName localhost%ServerName localhost\n\n    Include conf/sites.d/default_vhost.d/*.conf%"   /etc/httpd/conf/sites.d/00-default_vhost.conf   \
    && mkdir      /etc/httpd/conf/sites.d/default_vhost.d                                                                                                                \
    && rm   -f    /var/log/README                                                                                                                                        \
    && echo -e    "${HTTPD}"        | sed -e "s/\`/'/g" -e 's/ *$//'                                                   > /etc/init.d/httpd                               \
    && chmod a+x  /etc/init.d/httpd                                                                                                                                      \
    && ln   -s    /etc/init.d/httpd /etc/rcD.d/S30httpd                                                                                                                  \
    && echo -e    "${HTTPD_INI}"    | sed -e "s/\`/'/g" -e 's/ *$//'                                                   > /etc/supervisord.d/httpd.ini                    \
    && echo -e    "${HTTPD_CONF}"   | sed -e "s/\`/'/g" -e 's/ *$//'                                                   > ${HTTPD_CONF_FILE}                              \
    && echo -e    "${INFO_PHP}"     | sed -e "s/\`/'/g" -e 's/ *$//'                                                   > /var/www/html/info.php



VOLUME ${APACHE_DOC_ROOT}
VOLUME ${APACHE_LOG_DIR}



EXPOSE ${APACHE_PORT}
