- #!/bin/sh
-
- PRINT_PASSED=2
-
- NGINX_UTIL="/usr/bin/nginx-util"
-
- __esc_newlines() {
- echo "${1}" | sed -E 's/$/\\n/' | tr -d '\n' | sed -E 's/\\n$/\n/'
- }
-
- __esc_sed_rhs() {
- __esc_newlines "${1}" | sed -E 's/[&/\]/\\&/g'
- }
-
- _sed_rhs() {
- __esc_sed_rhs "$(echo "${1}" | sed -E "s/[$]/$(__esc_sed_rhs "${2}")/g")"
- }
-
- __esc_regex() {
- __esc_newlines "${1}" | sed -E 's/[^^_a-zA-Z0-9-]/[&]/g; s/\^/\\^/g'
- }
-
- _regex() {
- __esc_regex "${1}" | sed -E -e 's/^(\[\s])*/^\\s*/' \
- -e 's/(\[\s])+\[[*]]/(\\s.*)?/g' \
- -e 's/(\[\s])+/\\s+/g' \
- -e 's/(\[\s])*\[[;]]/\\s*;/g' \
- -e "s/\[['\"]]/['\"]?/g" \
- -e "s/\[[$]]/$(__esc_sed_rhs "$(__esc_regex "${2}")")/g"
- }
-
- _echo_sed() {
- echo "" | sed -E "c${1}"
- }
-
- setpoint_add_ssl() {
- local indent="\n$1"
- local name="$2"
- local default=""
- [ "${name}" = "${LAN_NAME}" ] && default=".default"
- local prefix="${CONF_DIR}${name}"
-
- local CONF="$(grep -vE "$(_regex "${NGX_INCLUDE}" \
- "${LAN_LISTEN}${default}")" "${prefix}.sans" 2>/dev/null)"
- local ADDS=""
- echo "${CONF}" \
- | grep -qE "$(_regex "${NGX_INCLUDE}" "${LAN_SSL_LISTEN}${default}")" \
- || ADDS="${ADDS}${indent}$(_sed_rhs "${NGX_INCLUDE}" \
- "${LAN_SSL_LISTEN}${default}")"
- echo "${CONF}" | grep -qE "$(_regex "${NGX_SSL_CRT}" "${prefix}")" \
- || ADDS="${ADDS}${indent}$(_sed_rhs "${NGX_SSL_CRT}" "${prefix}")"
- echo "${CONF}" | grep -qE "$(_regex "${NGX_SSL_KEY}" "${prefix}")" \
- || ADDS="${ADDS}${indent}$(_sed_rhs "${NGX_SSL_KEY}" "${prefix}")"
- echo "${CONF}" | grep -qE "^\s*ssl_session_cache\s" \
- || ADDS="${ADDS}${indent}$(_sed_rhs "${NGX_SSL_SESSION_CACHE}" "${name}")"
- echo "${CONF}" | grep -qE "^\s*ssl_session_timeout\s" \
- || ADDS="${ADDS}${indent}$(_sed_rhs "${NGX_SSL_SESSION_TIMEOUT}" "")"
-
- if [ -n "${ADDS}" ]
- then
- ADDS="$(echo "${ADDS}" | sed -E 's/^\\n//')"
- echo "${CONF}" | grep -qE "$(_regex "${NGX_SERVER_NAME}" "${name}")" \
- && echo "${CONF}" \
- | sed -E "/$(_regex "${NGX_SERVER_NAME}" "${name}")/a\\${ADDS}" \
- > "${prefix}.with" \
- && _echo_sed "Added directives to ${prefix}.with:\n${ADDS}" \
- && return 0 \
- || _echo_sed "Cannot add directives to ${prefix}.sans, missing:\
- \n$(_sed_rhs "${NGX_SERVER_NAME}" "${name}")\n${ADDS}"
- return 1
- fi
- return 0
- }
-
- # ----------------------------------------------------------------------------
-
- test_setpoint() {
- [ "$(cat "$1")" = "$2" ] && return
- echo "$1:"; cat "$1"
- echo "differs from setpoint:"; echo "$2"
- [ "${PRINT_PASSED}" -gt 1 ] && pst_exit 1
- }
-
-
- test() {
- eval "$1 2>/dev/null >/dev/null"
- if [ "$?" -eq "$2" ]
- then
- [ "${PRINT_PASSED}" -gt 0 ] \
- && printf "%-72s%-1s\n" "$1" "2>/dev/null >/dev/null (-> $2?) passed."
- else
- printf "%-72s%-1s\n" "$1" "2>/dev/null >/dev/null (-> $2?) failed!!!"
- [ "${PRINT_PASSED}" -gt 1 ] && exit 1
- fi
- }
-
-
- [ "$PRINT_PASSED" -gt 0 ] && printf "\nTesting %s get_env ...\n" "${NGINX_UTIL}"
-
- eval $("${NGINX_UTIL}" get_env)
- test '[ -n "${NGINX_CONF}" ]' 0
- test '[ -n "${CONF_DIR}" ]' 0
- test '[ -n "${LAN_NAME}" ]' 0
- test '[ -n "${LAN_LISTEN}" ]' 0
- test '[ -n "${LAN_SSL_LISTEN}" ]' 0
- test '[ -n "${SSL_SESSION_CACHE_ARG}" ]' 0
- test '[ -n "${SSL_SESSION_TIMEOUT_ARG}" ]' 0
- test '[ -n "${ADD_SSL_FCT}" ]' 0
-
-
- [ "$PRINT_PASSED" -gt 0 ] && printf "\nPrepare files in %s ...\n" "${CONF_DIR}"
-
- mkdir -p "${CONF_DIR}"
-
- cd "${CONF_DIR}" || exit 2
-
- NGX_INCLUDE="include '\$';"
- NGX_SERVER_NAME="server_name * '\$' *;"
- NGX_SSL_CRT="ssl_certificate '\$.crt';"
- NGX_SSL_KEY="ssl_certificate_key '\$.key';"
- NGX_SSL_SESSION_CACHE="ssl_session_cache '$(echo "${SSL_SESSION_CACHE_ARG}" \
- | sed -E "s/$(__esc_regex "${LAN_NAME}")/\$/")';"
- NGX_SSL_SESSION_TIMEOUT="ssl_session_timeout '${SSL_SESSION_TIMEOUT_ARG}';"
-
- cat > "${LAN_NAME}.sans" <<EOF
- # default_server for the LAN addresses getting the IPs by:
- # ifstatus lan | jsonfilter -e '@["ipv4-address","ipv6-address"].*.address'
- server {
- include '${LAN_LISTEN}.default';
- server_name ${LAN_NAME};
- include conf.d/*.locations;
- }
- EOF
- CONFS="${CONFS} ${LAN_NAME}:0"
-
- cat > minimal.sans <<EOF
- server {
- server_name minimal;
- }
- EOF
- CONFS="${CONFS} minimal:0"
-
- cat > normal.sans <<EOF
- server {
- include '${LAN_LISTEN}';
- server_name normal;
- }
- EOF
- CONFS="${CONFS} normal:0"
-
- cat > more_server.sans <<EOF
- server {
- # include '${LAN_LISTEN}';
- server_name normal;
- }
- server {
- include '${LAN_LISTEN}';
- server_name more_server;
- }
- EOF
- CONFS="${CONFS} more_server:0"
-
- cat > more_names.sans <<EOF
- server {
- include '${LAN_LISTEN}';
- server_name example.com more_names example.org;
- }
- EOF
- CONFS="${CONFS} more_names:0"
-
- cat > different_name.sans <<EOF
- server {
- include '${LAN_LISTEN}';
- server_name minimal;
- }
- EOF
- CONFS="${CONFS} different_name:1"
-
- cat > comments.sans <<EOF
- server { # comment1
- # comment2
- include '${LAN_LISTEN}';
- server_name comments;
- # comment3
- } # comment4
- EOF
- CONFS="${CONFS} comments:0"
-
- cat > name_comment.sans <<EOF
- server {
- include '${LAN_LISTEN}';
- server_name name_comment; # comment
- }
- EOF
- CONFS="${CONFS} name_comment:0"
-
- cat > tab.sans <<EOF
- server {
- include '${LAN_LISTEN}';
- server_name tab;
- }
- EOF
- CONFS="${CONFS} tab:0"
-
-
- [ "$PRINT_PASSED" -gt 0 ] && printf "\nTesting %s init_lan ...\n" "${NGINX_UTIL}"
-
- mkdir -p "$(dirname "${LAN_LISTEN}")"
-
- cp "${LAN_NAME}.sans" "${LAN_NAME}.conf"
-
- test '"${NGINX_UTIL}" init_lan' 0
-
-
- [ "$PRINT_PASSED" -gt 0 ] && printf "\nSetup files in %s ...\n" "${CONF_DIR}"
-
- for conf in ${CONFS}
- do test 'setpoint_add_ssl " " '"${conf%:*}" "${conf#*:}"
- done
-
- test 'setpoint_add_ssl "\t" tab' 0 # fixes wrong indentation.
-
-
- [ "$PRINT_PASSED" -gt 0 ] && printf "\nTesting %s add_ssl ...\n" "${NGINX_UTIL}"
-
- cp different_name.sans different_name.with
-
- test '[ "${ADD_SSL_FCT}" = "add_ssl" ] ' 0
-
- for conf in ${CONFS}; do
- name="${conf%:*}"
- cp "${name}.sans" "${name}.conf"
- test '"${NGINX_UTIL}" add_ssl '"${name}" "${conf#*:}"
- test_setpoint "${name}.conf" "$(cat "${name}.with")"
- done
-
- [ "$PRINT_PASSED" -gt 0 ] && printf "\nTesting %s del_ssl ...\n" "${NGINX_UTIL}"
-
- sed -i "/server {/a\\ include '${LAN_LISTEN}';" minimal.sans
-
- for conf in ${CONFS}; do
- name="${conf%:*}"
- cp "${name}.with" "${name}.conf"
- test '"${NGINX_UTIL}" del_ssl '"${name}" "${conf#*:}"
- test_setpoint "${name}.conf" "$(cat "${name}.sans")"
- done
|