From f4a701c4f92bcfa1074beaf94b6a81e10e606dd0 Mon Sep 17 00:00:00 2001 From: Patrick Murphy Date: Thu, 30 Apr 2020 13:04:00 -0500 Subject: moved 5.2.1 changes to master --- recipes-core/lighttpd/files/lighttpd.init | 310 ++++++++++++++++++++++++++++++ 1 file changed, 310 insertions(+) create mode 100644 recipes-core/lighttpd/files/lighttpd.init (limited to 'recipes-core/lighttpd/files/lighttpd.init') diff --git a/recipes-core/lighttpd/files/lighttpd.init b/recipes-core/lighttpd/files/lighttpd.init new file mode 100644 index 0000000..39860d3 --- /dev/null +++ b/recipes-core/lighttpd/files/lighttpd.init @@ -0,0 +1,310 @@ +#!/bin/sh + +enable -f libjsonget.so jsonget + +PATH=/sbin:/bin:/usr/sbin:/usr/bin +DAEMON=/usr/sbin/lighttpd +NAME=lighttpd +ANGEL=/sbin/lighttpd-angel +DESC="Lighttpd Web Server" +# Web UI +OPTS="-D -f /etc/lighttpd.conf" +# Node-RED stub +OPTS_NRS="-f /etc/lighttpd_nrs.conf" + +CAPA_NODE_RED=$(jsonget "$(< /var/run/config/device_info.json)" /capabilities/nodeRed) + +CONF_DIR=/var/config +RUN_CONF_DIR=/var/run/config + +true2enable() { + if [[ "$1" == "true" ]]; then + echo "enable" + else + echo "disable" + fi +} + +#Generates additional lighttpd configuration files +#1) Enables HTTPS +#2) Allows port configurations for HTTP and HTTPS +#3) Enables dipservice +#4) Allows port configurations for dipservice +generate_config() { + FILE="$RUN_CONF_DIR/lighttpd_port.conf" + FILE_DIP="$RUN_CONF_DIR/lighttpd_dipservice.conf" + + #Pull Webserver Ports + RMA=$(jsonget "$(< "/var/config/db.json")" /remoteAccess) + HTTP_ENABLED=$(jsonget "$RMA" /http/enabled) + HTTP_PORT=$(jsonget "$RMA" /http/port) + HTTPS_REDIRECT=$(jsonget "$RMA" /http/redirectToHttps) + HTTPS_ENABLED=$(jsonget "$RMA" /https/enabled) + HTTPS_PORT=$(jsonget "$RMA" /https/port) + + # Advanced secure protocol settings + ADVANCED_SEC_VALID="false" + ADVANCED_SEC=$(jsonget "$(< "/var/config/db.json")" /secureProtocols/2) + + if [[ "0" == "$?" ]]; then + ADVANCED_SEC_NAME=$(jsonget "$ADVANCED_SEC" /name) + if [[ "$ADVANCED_SEC_NAME" == "lighttpd" ]]; then + ADVANCED_SEC_VALID="true" + HTTPS_SSL3=$(true2enable "false") # $(true2enable $(jsonget "$ADVANCED_SEC" /protocol/ssl3)) + HTTPS_TLS1=$(true2enable "false") # $(true2enable $(jsonget "$ADVANCED_SEC" /protocol/tls1)) + HTTPS_TLS1_1=$(true2enable $(jsonget "$ADVANCED_SEC" /protocol/tls1_1)) + HTTPS_TLS1_2=$(true2enable $(jsonget "$ADVANCED_SEC" /protocol/tls1_2)) + HTTPS_CIPHER=$(jsonget "$ADVANCED_SEC" /cipherSuite) + if [[ -z $HTTPS_CIPHER && -f /etc/ssl/allowed_ciphersuites ]]; then + HTTPS_CIPHER=$( cat /etc/ssl/allowed_ciphersuites | tr "\n" ":" ) + fi + CLIENT_VERIFY=$(jsonget "$ADVANCED_SEC" /client/verify ) + fi + fi + + if [[ "$ADVANCED_SEC_VALID" != "true" ]]; then + echo "API init. Using default SSL security settings" + # In case of invalid Advanced Security section - start with default parameters + HTTPS_SSL3=$(true2enable "false") + HTTPS_TLS1=$(true2enable "false") + HTTPS_TLS1_1=$(true2enable "false") + HTTPS_TLS1_2=$(true2enable "true") + HTTPS_CIPHER="" + CLIENT_VERIFY="false" + fi + + #("Protocol" => "-ALL, TLSv1.2") + HTTPS_SSL_CONF='("Protocol" => "-ALL' + + if [[ "$HTTPS_TLS1" == "enable" ]]; then + HTTPS_SSL_CONF+=', TLSv1' + fi + if [[ "$HTTPS_TLS1_1" == "enable" ]]; then + HTTPS_SSL_CONF+=', TLSv1.1' + fi + if [[ "$HTTPS_TLS1_2" == "enable" ]]; then + HTTPS_SSL_CONF+=', TLSv1.2' + fi + HTTPS_SSL_CONF+='")' + + #Generate Lighttpd dipservice config + DIP=$(jsonget "$(< "$CONF_DIR/db.json")" /customDiagnostic || echo '{ "enabled": false, "port":8080 }') + DIP_ENABLED=$(jsonget "$DIP" /enabled) + DIP_PORT=$(jsonget "$DIP" /port) + + echo "Generating $FILE_DIP" + > "$FILE_DIP" + + #Generate Lighttpd Port Config + echo "Generating $FILE" + > "$FILE" + + if [[ "$DIP_ENABLED" == "true" ]]; then + cat >> $FILE_DIP < ( + ( + "host" => "127.0.0.1", + "port" => 9009, + "check-local" => "disable", + "bin-path" => "/sbin/dipservice -d /var/config/dipdata", + "max-procs" => 1, + "docroot" => "/var/config/dipdata" + ) + ) + ) +} +END + fi + + cat >> $FILE < CHANGE $0 +END + +#Explicitly set the default listening port to HTTP port. +cat >> $FILE <> $FILE <> $FILE + fi + + # Enable redirect from HTTP to HTTPS if enabled + if [ "$HTTPS_REDIRECT" == "true" ]; then + HTTPS_REDIRECT_CONFIG="\$SERVER[\"socket\"] == \":$HTTP_PORT\" { + \$HTTP[\"host\"] =~ \"^([^:^/]*)(:\d*)?(.*)\" { + url.redirect = ( \"^/(.*)\" => \"https://%1:$HTTPS_PORT/\$1\" ) + } + } else " + fi + + HTTPX_REWRITE_URL='url.rewrite-once = ( "^/(?!static|api|tmp|help)(.+)/?$" => "/index.html" )' + + #BREAKDOWN + # LINE 1: CHECK: REMOTE IP IS NOT 127.0.0.1 (LOOPBACK) + # LINE 2: CHECK: DEST PORT IS THE HTTP PORT LIGHTTPD IS LISTENING ON + # LINE 3: CHECK: HOST ADDRESS (ex: 192.168.2.1:81/whatever) MATCHES THE REGEX [DOMAIN][PORT (optional)][URI] + # THE REGEX FROM LINE 3 CAN BE ACCESSED IN LINE 4 WITH '%#' (ex: %1 == DOMAIN, %2 == PORT, %3 == URI) + # LINE 4: FUNCTION: REGEX THE URI ([MATCH ALL]) AND BUILD THE REDIRECT URL + # THE REGEX FROM LINE 4 CAN BE ACCESSED IN THE REDIRECT CONSTRUCTION WITH '$#' (ex: $1 == THE ENTIRE URI) + + cat >> $FILE <&2 + exit 1 + ;; +esac + +exit 0 -- cgit v1.2.3