From a8b3b67d87114afb9a8cb46162da9988d2f48ff0 Mon Sep 17 00:00:00 2001 From: casjay Date: Wed, 22 Oct 2025 14:10:17 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=97=83=EF=B8=8F=20Update=20codebase=20?= =?UTF-8?q?=F0=9F=97=83=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit rootfs/root/docker/setup/06-post.sh rootfs/usr/local/etc/docker/init.d/zz-nginx.sh --- rootfs/root/docker/setup/06-post.sh | 205 +++++++++++++++++- .../usr/local/etc/docker/init.d/zz-nginx.sh | 19 +- 2 files changed, 213 insertions(+), 11 deletions(-) diff --git a/rootfs/root/docker/setup/06-post.sh b/rootfs/root/docker/setup/06-post.sh index d7bd215..d2a3253 100755 --- a/rootfs/root/docker/setup/06-post.sh +++ b/rootfs/root/docker/setup/06-post.sh @@ -24,13 +24,216 @@ set -o pipefail # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Set env variables exitCode=0 +LIST_INDEX_FILE="/usr/share/httpd/default/list.html" +RAW_URL="https://raw.githubusercontent.com/alecmuffett/real-world-onion-sites/refs/heads/master/README.md" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Predefined actions +md2html() { + # Emit a lightweight container; you can remove the outer
if you don’t want it. + emit_open() { + cat <<'EOF' +
+EOF + } + emit_close() { + cat <<'EOF' +
+EOF + } + + # AWK Markdown -> HTML (body only). Designed to handle the README’s structure. + awk_prog=' +BEGIN{ + in_code=0; code_fence=""; in_ul=0; in_ol=0; in_blockquote=0; + in_table=0; table_open=0; last_nonblank=""; + FS=""; +} + +function htmlesc(s, t){ + gsub(/&/,"&",s); gsub(//,">",s); return s +} + +# Inline transforms: minimal but safe +function linkify(s, before,after){ + # Images: ![alt](src) + s = gensub(/!\[([^[\]]+)\]\(([^) \t]+)\)/, "\"\\1\"", "g", s) + # Links: [text](url) + s = gensub(/\[([^[\]]+)\]\(([^) \t]+)\)/, "\\1<\\/a>", "g", s) + # Inline code: `code` + s = gensub(/`([^`]+)`/, "\\1<\\/code>", "g", s) + # Bold/italic (simple, non-nested) + s = gensub(/\*\*([^*]+)\*\*/, "\\1<\\/strong>", "g", s) + s = gensub(/\*([^*]+)\*/, "\\1<\\/em>", "g", s) + # Autolink http(s) + s = gensub(/(https?:\/\/[A-Za-z0-9._~:\/?#\\[\\]@!$&'\''()*+,;=%-]+)/, "\\1<\\/a>", "g", s) + # Bare .onion (with optional path/query) + s = gensub(/([A-Za-z2-7]{16,56}\\.onion([A-Za-z0-9._~:\/?#\\[\\]@!$&'\''()*+,;=%-]*)?)/, "\\1<\\/a>", "g", s) + return s +} + +# Emit paragraph buffer if needed +function flush_p(){ + if(pbuf!=""){ + printf("

%s

\n", pbuf); + pbuf=""; + } +} + +# Close list/blockquote contexts +function close_lists(){ + if(in_ul){ print ""; in_ul=0 } + if(in_ol){ print ""; in_ol=0 } +} +function close_blockquote(){ + if(in_blockquote){ print ""; in_blockquote=0 } +} + +# Table helpers +function table_open_fn(){ + if(!table_open){ print ""; table_open=1 } +} +function table_close_fn(){ + if(table_open){ print "
"; table_open=0 } + in_table=0 +} +function split_cells(line, arr,n,i,cell){ + # strip leading/trailing | + sub(/^ *\|/,"",line); sub(/\| *$/,"",line); + n=split(line, arr, /\|/); + for(i=1;i<=n;i++){ + gsub(/^ +| +$/,"",arr[i]); # trim + arr[i]=arr[i]; + } + return n +} + +{ + raw=$0 + # Track last nonblank for table header detection + if(raw ~ /[^[:space:]]/){ last_nonblank=raw } + + # Handle fenced code + if(!in_code && raw ~ /^```/){ + flush_p(); close_lists(); close_blockquote(); + print "
"; in_code=1; next
+  }
+  if(in_code){
+    if(raw ~ /^```/){ print "
"; in_code=0; next } + print htmlesc(raw); next + } + + # Blank line: end paragraphs/lists/quotes; not tables + if(raw ~ /^[[:space:]]*$/){ + if(in_table==0){ flush_p(); close_lists(); close_blockquote() } + next + } + + # Horizontal rule + if(raw ~ /^ *(-{3,}|\*{3,}|_{3,}) *$/){ + flush_p(); close_lists(); close_blockquote(); + print "
"; next + } + + # Table separator row => open table, emit header from last_nonblank + if(raw ~ /^ *\|? *:?-{3,}:? *(?:\| *:?-{3,}:? *)+\|? *$/){ + # last_nonblank is header + hdr=last_nonblank + # Parse header into + split_cells(hdr, H, nH) + print "" + for(i=1;i<=nH;i++){ printf("", linkify(htmlesc(H[i]))) } + print "" + in_table=1; table_open=1 + next + } + + # Inside table: any row with at least one pipe (and not a fence) + if(in_table && raw ~ /\|/){ + split_cells(raw, C, nC) + printf("") + for(i=1;i<=nC;i++){ printf("", linkify(htmlesc(C[i]))) } + print "" + next + } + # Exiting table block if we hit a non-pipe line + if(in_table){ + table_close_fn() + } + + # Blockquotes + if(raw ~ /^ *> */){ + flush_p(); close_lists(); + if(!in_blockquote){ print "
"; in_blockquote=1 } + gsub(/^ *> */,"",raw) + print "

" linkify(htmlesc(raw)) "

" + next + }else{ + if(in_blockquote && raw !~ /^ *> */){ close_blockquote() } + } + + # Headings + if(raw ~ /^#{1,6} /){ + flush_p(); close_lists(); close_blockquote(); + m=match(raw,/^#{1,6}/); level=RLENGTH + text=substr(raw, level+2) + printf("%s\n", level, linkify(htmlesc(text)), level) + next + } + + # Lists + if(raw ~ /^ *([-*]) +/){ + flush_p() + if(!in_ul){ print "
    "; in_ul=1 } + item=raw; sub(/^ *[-*] +/,"",item) + print "
  • " linkify(htmlesc(item)) "
  • " + next + } + if(raw ~ /^ *[0-9]+\. +/){ + flush_p() + if(!in_ol){ print "
      "; in_ol=1 } + item=raw; sub(/^ *[0-9]+\. +/,"",item) + print "
    1. " linkify(htmlesc(item)) "
    2. " + next + } + # If we switch list types or leave lists + if(in_ul && raw !~ /^ *([-*]) +/ && raw !~ /^[[:space:]]*$/){ close_lists() } + if(in_ol && raw !~ /^ *[0-9]+\. +/ && raw !~ /^[[:space:]]*$/){ close_lists() } + + # Default: paragraph (accumulate soft-wrap into one

      ) + line = linkify(htmlesc(raw)) + if(pbuf==""){ pbuf=line } else { pbuf=pbuf " " line } +} + +END{ + if(in_code){ print "" } + if(in_table){ table_close_fn() } + if(in_blockquote){ close_blockquote() } + flush_p(); close_lists() +} +' + + emit_open + curl -q -LSsf "$RAW_URL" | awk "$awk_prog" || return 1 + emit_close +} # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Main script - +cat >"$LIST_INDEX_FILE" <<'HTML' + + + + + + + + Welcome to your tor site + + +HTML +md2html >>"$LIST_INDEX_FILE" +printf '\n\n\n' >>"$LIST_INDEX_FILE" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Set the exit code #exitCode=$? diff --git a/rootfs/usr/local/etc/docker/init.d/zz-nginx.sh b/rootfs/usr/local/etc/docker/init.d/zz-nginx.sh index 969f3a0..3405fe1 100755 --- a/rootfs/usr/local/etc/docker/init.d/zz-nginx.sh +++ b/rootfs/usr/local/etc/docker/init.d/zz-nginx.sh @@ -259,17 +259,17 @@ __update_conf_files() { local exitCode=0 # default exit code local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname local default_host="$DEFAULT_ONION_SITE" - if [ -f "$WWW_ROOT_DIR/default_host.txt" ]; then - default_host="${default_host:-$(<"$WWW_ROOT_DIR/default_host.txt")}" - rm -Rf "$WWW_ROOT_DIR/default_host.txt" - fi + local NEW_SITE="no" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # delete files #__rm "" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # custom commands - + if [ -f "$WWW_ROOT_DIR/default_host.txt" ]; then + default_host="${default_host:-$(<"$WWW_ROOT_DIR/default_host.txt")}" + rm -Rf "$WWW_ROOT_DIR/default_host.txt" + fi # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # replace variables # __replace "" "" "$CONF_DIR/nginx.conf" @@ -287,17 +287,17 @@ __update_conf_files() { # define actions while :; do sleep 30 - echo "waiting for tor to start" - sites="$(ls -A /run/tor/sites 2>/dev/null | wc -l)" + echo "The nginx server is waiting for tor to start" + sites="$(ls -A /run/tor/sites/* 2>/dev/null | wc -l)" if [ ! -f "/tmp/init_tor_services" ]; then break; fi done - echo "The tor server seems to have started " + echo "The tor server seems to have started" if [ "$sites" -eq 0 ]; then echo "No onion sites found in /run/tor/sites" >&2 else for site in "/run/tor/sites"/*; do onion_site="$(basename -- $site)" - __onion_site_dir_is_empty "$onion_site" && NEW_SITE="yes" + __onion_site_dir_is_empty "$onion_site" && NEW_SITE="yes" || NEW_SITE="no" [ -d "/data/htdocs/onions/$onion_site" ] || mkdir -p "/data/htdocs/onions/$onion_site" if [ "$default_host" = "$onion_site" ] && __onion_site_dir_is_empty "$onion_site"; then cp -Rfa "$WWW_ROOT_DIR/." "/data/htdocs/onions/$onion_site/" @@ -323,7 +323,6 @@ __update_conf_files() { sed -i 's|REPLACE_DEFAULT_TOR_ADDRESS|'$onion_site'|g' "/data/htdocs/onions/$onion_site/index.html" sed -i 's|REPLACE_ONION_WWW_DIR|/data/htdocs/onions/'$onion_site'|g' "/data/htdocs/onions/$onion_site/index.html" fi - unset NEW_SITE echo "Created $onion_site.onion in /data/htdocs/onions/$onion_site" done fi

%s
%s