# Rx3-Docker/Server Docker Image
#-------------------------------------------------------------------------------

ARG IMG_FROM_URL="rx3-docker/base: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 SERVER_LOG_INIT_DIR
ARG SERVER_LOG_SV_DIR
ARG SERVER_PORT_SV_INT

ARG SERVER_LOG_INIT_FILE=${SERVER_LOG_INIT_DIR}/init.log

ARG SERVER_CROND_INI=/etc/supervisord.d/crond.ini

ARG SERVER_DNSMASQ_INI=/etc/supervisord.d/dnsmasq.ini
ARG SERVER_DNSMASQ_CONF=/etc/dnsmasq.conf
ARG SERVER_RESOLV_CONF=/etc/resolv.conf

ARG SERVER_SV_INI=/etc/supervisord.d/supervisord.ini
ARG SERVER_SV_HTTPD_INI=/etc/supervisord.d/supervisord-httpd.ini
ARG SERVER_SV_HTTPD_PAGE=/usr/lib/python3.10/site-packages/supervisor/ui/status.html
ARG SERVER_SV_HTTPD_CSS=/usr/lib/python3.10/site-packages/supervisor/ui/stylesheets/supervisor.css



#-----------------------------------------------------------------------------------------------------------------------
ARG SERVER_SV_HTML_IMG_B='status" />'
#-----------------------------------------------------------------------------------------------------------------------

#-----------------------------------------------------------------------------------------------------------------------
ARG SERVER_SV_HTML_IMG_A='status"/>                                                                                  \n\
    <div id="isl">IMG_NAME_VERSION                                                                                   \n\
      <div id="isl-tab">                                                                                             \n\
        <table>                                                                                                      \n\
          <thead>                                                                                                    \n\
            <tr>                                                                                                     \n\
              <th>Id</th>                                                                                            \n\
              <th>Date</th>                                                                                          \n\
              <th>Time</th>                                                                                          \n\
              <th>Registry</th>                                                                                      \n\
              <th>Image</th>                                                                                         \n\
              <th>Tag</th>                                                                                           \n\
            </tr>                                                                                                    \n\
          </thead>                                                                                                   \n\
          <tbody>                                                                                                    \n\
IMG_STACK_LOG                                                                                                        \n\
          </tbody>                                                                                                   \n\
        </table>                                                                                                     \n\
      </div>                                                                                                         \n\
    </div>'
#-----------------------------------------------------------------------------------------------------------------------



#-----------------------------------------------------------------------------------------------------------------------
ARG SERVER_SV_HTML_VERSION_B='version">#</span>'
#-----------------------------------------------------------------------------------------------------------------------

#-----------------------------------------------------------------------------------------------------------------------
ARG SERVER_SV_HTML_VERSION_A='version">#</span> + <a href="https://www.rx3.net/">Rx<sup>3</sup></a> Image Stack Log support'
#-----------------------------------------------------------------------------------------------------------------------



#-----------------------------------------------------------------------------------------------------------------------
ARG SERVER_SV_CSS_HEADER_B='repeat-x;'
#-----------------------------------------------------------------------------------------------------------------------

#-----------------------------------------------------------------------------------------------------------------------
ARG SERVER_SV_CSS_HEADER_A='repeat-x;                                                                                \n\
  display: flex;                                                                                                     \n\
  align-items: center;                                                                                               \n\
  justify-content: space-between;                                                                                    \n\
  font-size: 16px;                                                                                                   \n\
  font-weight: bold;                                                                                                 \n\
}                                                                                                                    \n\
                                                                                                                     \n\
\#isl {                                                                                                              \n\
  position: relative;                                                                                                \n\
  display: inline-block;                                                                                             \n\
  cursor: pointer;                                                                                                   \n\
}                                                                                                                    \n\
                                                                                                                     \n\
\#isl-tab {                                                                                                          \n\
  visibility: hidden;                                                                                                \n\
  width: fit-content;                                                                                                \n\
  background: #00000000;                                                                                             \n\
  color: white;                                                                                                      \n\
  padding: 2px;                                                                                                      \n\
  border-radius: 4px;                                                                                                \n\
  position: absolute;                                                                                                \n\
  z-index: 1;                                                                                                        \n\
  top: 100%;                                                                                                         \n\
  right: 0;                                                                                                          \n\
  transform: none;                                                                                                   \n\
  opacity: 0;                                                                                                        \n\
  transition: opacity 0.3s;                                                                                          \n\
}                                                                                                                    \n\
                                                                                                                     \n\
\#isl:hover #isl-tab {                                                                                               \n\
  visibility: visible;                                                                                               \n\
  opacity: 1;                                                                                                        \n\
}                                                                                                                    \n\
                                                                                                                     \n\
\#isl-tab table td,                                                                                                  \n\
\#isl-tab table th {                                                                                                 \n\
  white-space: nowrap;                                                                                               \n\
  padding: 4px 8px;                                                                                                  \n\
  border: 0px solid #666;                                                                                            \n\
  font-size: 14px;                                                                                                   \n\
}                                                                                                                    \n\
                                                                                                                     \n\
\#isl-tab table th {                                                                                                 \n\
  background: #333;                                                                                                  \n\
}                                                                                                                    \n\
                                                                                                                     \n\
\#isl-tab table {                                                                                                    \n\
  border-collapse: collapse;                                                                                         \n\
  width: fit-content;                                                                                                \n\
  max-width: 500px;                                                                                                  \n\
  overflow-x: auto;                                                                                                  \n\
'
#-----------------------------------------------------------------------------------------------------------------------



#-----------------------------------------------------------------------------------------------------------------------
ARG INIT_SHELL='#!/bin/bash                                                                                          \n\
                                                                                                                     \n\
. /etc/profile.d/rx3.sh                                                                                              \n\
                                                                                                                     \n\
                                                                                                                     \n\
log() { echo "$(date --rfc-3339=ns) Init: $*" | tee -a '${SERVER_LOG_INIT_FILE}'; }                                  \n\
                                                                                                                     \n\
                                                                                                                     \n\
log "Starting"                                                                                                       \n\
                                                                                                                     \n\
for pgm in /etc/rcD.d/*                                                                                              \n\
do                                                                                                                   \n\
    if [[ -r ${pgm} ]]                                                                                               \n\
    then                                                                                                             \n\
        if [[ ${pgm##*/} == S99* ]]                                                                                  \n\
        then                                                                                                         \n\
            log "Executing: [${pgm##*/}]"                                                                            \n\
            log "Completed"                                                                                          \n\
            exec ${pgm}                                                                                              \n\
        else                                                                                                         \n\
            log "Calling: [${pgm##*/}]"                                                                              \n\
            ${pgm}                                                                                                   \n\
        fi                                                                                                           \n\
    fi                                                                                                               \n\
done'
#-----------------------------------------------------------------------------------------------------------------------



#-----------------------------------------------------------------------------------------------------------------------
ARG CROND='#!/bin/bash                                                                                               \n\
                                                                                                                     \n\
                                                                                                                     \n\
if [[ "${SERVER_CROND_ENABLED}" != "TRUE" ]]                                                                         \n\
then                                                                                                                 \n\
    file_enable "'${SERVER_CROND_INI}'" FALSE                                                                        \n\
else                                                                                                                 \n\
    file_enable "'${SERVER_CROND_INI}'" TRUE                                                                         \n\
fi'
#-----------------------------------------------------------------------------------------------------------------------



#-----------------------------------------------------------------------------------------------------------------------
ARG DNSMASQ='#!/bin/bash                                                                                             \n\
                                                                                                                     \n\
                                                                                                                     \n\
if [[ "${SERVER_DNS_ENABLED}" != "TRUE" ]]                                                                           \n\
then                                                                                                                 \n\
    file_enable "'${SERVER_DNSMASQ_INI}'" FALSE                                                                      \n\
else                                                                                                                 \n\
    file_enable "'${SERVER_DNSMASQ_INI}'" TRUE                                                                       \n\
                                                                                                                     \n\
    cp '${SERVER_DNSMASQ_CONF}'.dist '${SERVER_DNSMASQ_CONF}'                                                        \n\
                                                                                                                     \n\
    echo ""                                                                            >> '${SERVER_DNSMASQ_CONF}'   \n\
    echo "# Listen local address"                                                      >> '${SERVER_DNSMASQ_CONF}'   \n\
    echo "interface=lo"                                                                >> '${SERVER_DNSMASQ_CONF}'   \n\
    echo "bind-interfaces"                                                             >> '${SERVER_DNSMASQ_CONF}'   \n\
    echo ""                                                                            >> '${SERVER_DNSMASQ_CONF}'   \n\
    echo "port=53               # DNS only"                                            >> '${SERVER_DNSMASQ_CONF}'   \n\
    echo "no-dhcp-interface=    # disables DHCPv4"                                     >> '${SERVER_DNSMASQ_CONF}'   \n\
    echo ""                                                                            >> '${SERVER_DNSMASQ_CONF}'   \n\
    echo "# Forward local domains"                                                     >> '${SERVER_DNSMASQ_CONF}'   \n\
                                                                                                                     \n\
    for map in ${SERVER_DNS_MAP}                                                                                     \n\
    do                                                                                                               \n\
        OIFS=$IFS                                                                                                    \n\
        IFS=":"                                                                                                      \n\
        set ${map}                                                                                                   \n\
        IFS=$OIFS                                                                                                    \n\
                                                                                                                     \n\
        domain="$1"                                                                                                  \n\
        server="$2"                                                                                                  \n\
                                                                                                                     \n\
        echo "server=/${domain}/${server}"                                             >> '${SERVER_DNSMASQ_CONF}'   \n\
    done                                                                                                             \n\
                                                                                                                     \n\
    echo ""                                                                            >> '${SERVER_DNSMASQ_CONF}'   \n\
    echo "# Forward all other queries to default server"                               >> '${SERVER_DNSMASQ_CONF}'   \n\
    echo "server=${SERVER_DNS_DEFAULT}"                                                >> '${SERVER_DNSMASQ_CONF}'   \n\
                                                                                                                     \n\
    cp /etc/resolv.conf /etc/resolv.conf.old                                                                         \n\
                                                                                                                     \n\
    echo "# Generated by DNSMasq init script"                                            > '${SERVER_RESOLV_CONF}'   \n\
    echo ""                                                                             >> '${SERVER_RESOLV_CONF}'   \n\
    echo "nameserver 127.0.0.1"                                                         >> '${SERVER_RESOLV_CONF}'   \n\
    echo "search ${SERVER_DNS_SEARCH}"                                                  >> '${SERVER_RESOLV_CONF}'   \n\
                                                                                                                     \n\
fi'
#-----------------------------------------------------------------------------------------------------------------------



#-----------------------------------------------------------------------------------------------------------------------
ARG SUPERVISORD='#!/bin/bash                                                                                         \n\
                                                                                                                     \n\
if [[ "${SERVER_SV_HTTPD_ENABLED}" == "FALSE" ]]                                                                     \n\
then                                                                                                                 \n\
    file_enable "'${SERVER_SV_HTTPD_INI}'" FALSE                                                                     \n\
else                                                                                                                 \n\
    file_enable "'${SERVER_SV_HTTPD_INI}'" TRUE                                                                      \n\
fi                                                                                                                   \n\
                                                                                                                     \n\    
cp         '${SERVER_SV_HTTPD_CSS}.ref'                                                    '${SERVER_SV_HTTPD_CSS}'  \n\
cp         '${SERVER_SV_HTTPD_PAGE}.ref'                                                   '${SERVER_SV_HTTPD_PAGE}' \n\
sed  -i -e "s%IMG_NAME_VERSION%$(isl --top --image)%"                                      '${SERVER_SV_HTTPD_PAGE}' \n\
sed  -i -e "s%IMG_STACK_LOG%$(isl --html-dump --inline)%"                                  '${SERVER_SV_HTTPD_PAGE}' \n\
                                                                                                                     \n\
exec supervisord -c /etc/supervisord.conf'
#-----------------------------------------------------------------------------------------------------------------------



#-----------------------------------------------------------------------------------------------------------------------
ARG CROND_INI='[program:crond]                                                                                       \n\
command=crond -n'
#-----------------------------------------------------------------------------------------------------------------------



#-----------------------------------------------------------------------------------------------------------------------
ARG DNSMASQ_INI='[program:dnsmasq]                                                                                   \n\
command=dnsmasq -k'
#-----------------------------------------------------------------------------------------------------------------------



#-----------------------------------------------------------------------------------------------------------------------
ARG SUPERVISORD_INI='[supervisord]                                                                                   \n\
nodaemon=true                                                                                                        \n\
childlogdir='${SERVER_LOG_SV_DIR}'                                                                                   \n\
user=root'      
#-----------------------------------------------------------------------------------------------------------------------



#-----------------------------------------------------------------------------------------------------------------------
ARG SUPERVISORD_HTTPD_INI='[inet_http_server]                                                                        \n\
port=*:'${SERVER_PORT_SV_INT}
#-----------------------------------------------------------------------------------------------------------------------



RUN    . /etc/profile.d/rx3.sh && isl --add ${IMG_URL}                                                                 \
    && urpmi.update -a                                                                                                 \
    && urpmi --force dnsmasq myip supervisor                                                                           \
    && rm   -f   /var/log/README                                                                                       \
    && echo -e   "${INIT_SHELL}"          | sed -e "s/\`/'/g" -e 's/ *$//'        > /usr/local/sbin/init.sh            \
    && chmod a+x /usr/local/sbin/init.sh                                                                               \
    && mkdir     /etc/rc.d/rcD.d                                                                                       \
    && ln   -s   /etc/rc.d/rcD.d /etc                                                                                  \
    && mkdir     "${SERVER_LOG_INIT_DIR}"                                                                              \
    && echo -e   "${CROND}"                 | sed -e "s/\`/'/g" -e 's/ *$//'      > /etc/init.d/crond                  \
    && echo -e   "${DNSMASQ}"               | sed -e "s/\`/'/g" -e 's/ *$//'      > /etc/init.d/dnsmasq                \
    && echo -e   "${SUPERVISORD}"           | sed -e "s/\`/'/g" -e 's/ *$//'      > /etc/init.d/supervisord            \
    && chmod a+x /etc/init.d/crond                                                                                     \
    && chmod a+x /etc/init.d/dnsmasq                                                                                   \
    && chmod a+x /etc/init.d/supervisord                                                                               \
    && ln   -s   /etc/init.d/crond                                                  /etc/rcD.d/S60crond                \
    && ln   -s   /etc/init.d/dnsmasq                                                /etc/rcD.d/S65dnsmasq              \
    && ln   -s   /etc/init.d/supervisord                                            /etc/rcD.d/S99supervisord          \
    && echo -e   "${CROND_INI}"             | sed -e "s/\`/'/g" -e 's/ *$//'      > ${SERVER_CROND_INI}                \
    && echo -e   "${DNSMASQ_INI}"           | sed -e "s/\`/'/g" -e 's/ *$//'      > ${SERVER_DNSMASQ_INI}              \
    && echo -e   "${SUPERVISORD_INI}"       | sed -e "s/\`/'/g" -e 's/ *$//'      > ${SERVER_SV_INI}                   \
    && echo -e   "${SUPERVISORD_HTTPD_INI}" | sed -e "s/\`/'/g" -e 's/ *$//'      > ${SERVER_SV_HTTPD_INI}             \
    && mv        "${SERVER_DNSMASQ_CONF}"                                           "${SERVER_DNSMASQ_CONF}.dist"      \
    && mv        "${SERVER_SV_HTTPD_PAGE}"                                          "${SERVER_SV_HTTPD_PAGE}.ref"      \
    && sed -i -e "s%${SERVER_SV_HTML_IMG_B}%${SERVER_SV_HTML_IMG_A}%"               "${SERVER_SV_HTTPD_PAGE}.ref"      \
    && sed -i -e "s%${SERVER_SV_HTML_VERSION_B}%${SERVER_SV_HTML_VERSION_A}%"       "${SERVER_SV_HTTPD_PAGE}.ref"      \
    && mv        "${SERVER_SV_HTTPD_CSS}"                                           "${SERVER_SV_HTTPD_CSS}.ref"       \
    && sed -i -e "s/${SERVER_SV_CSS_HEADER_B}/${SERVER_SV_CSS_HEADER_A}/"           "${SERVER_SV_HTTPD_CSS}.ref"



VOLUME ${SERVER_LOG_INIT_DIR}
VOLUME ${SERVER_LOG_SV_DIR}



EXPOSE ${SERVER_PORT_SV_INT}



CMD []
ENTRYPOINT ["init.sh"]
