From 18083f0cf3ae706ad82f9bd9e132a9098bd05a4a Mon Sep 17 00:00:00 2001 From: Dominika Liberda Date: Mon, 20 Jun 2022 04:56:54 +0200 Subject: [PATCH 1/9] * broken, i'll squish this anyways --- src/template.sh | 61 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 4 deletions(-) diff --git a/src/template.sh b/src/template.sh index eedee09..1a1bb12 100755 --- a/src/template.sh +++ b/src/template.sh @@ -7,14 +7,32 @@ function render() { local -n ref=$1 local tmp=$(mktemp) for key in ${!ref[@]}; do - if [[ "${ref[$key]}" != "" ]]; then + if [[ "$key" == "_"* ]]; then # iter mode + local subtemplate=$(mktemp) + grep "start $key" -A99999 | grep "end $key" -B99999 > "$subtemplate" + local -n item_array=${ref[$key]} + echo 's/{{start '"$key"'}}.*{{end '"$key"'}}/{{'"$key"'}}/' >> "$tmp" + for (( i=0; i<${#item_array}; i++ )); do + nested_get item_array $i + for meow in ${!res[@]}; do + local -n nyaa=${res[$meow]} + # todo: unhtml_encode this? + local value="$(html_encode "$(render nyaa "$subtemplate")" | sed -E 's/\&/�UwU�/g')" + echo 's/{{'"${res[$meow]}"'}}/'"$value"'/' >> "$tmp" + + done + done + echo 's/\{\{'"$key"'\}\}/'"$value"'/g' >> "$tmp" + rm "$subtemplate" + elif [[ "${ref[$key]}" != "" ]]; then local value="$(html_encode "${ref[$key]}" | sed -E 's/\&/�UwU�/g')" echo 's/\{\{\.'"$key"'\}\}/'"$value"'/g' >> "$tmp" else echo 's/\{\{\.'"$key"'\}\}//g' >> "$tmp" fi done - template="$(sed -E -f "$tmp" <<< "$template")" + + template="$(tr '\n' $'\01' <<< "$template" | sed -E -f "$tmp" | tr $'\01' '\n')" sed -E 's/�UwU�/\&/g' <<< "$template" rm "$tmp" } @@ -25,10 +43,45 @@ function render_unsafe() { local -n ref=$1 local tmp=$(mktemp) for key in ${!ref[@]}; do - local value="$(xxd -ps <<< "${ref[$key]}" | tr -d '\n' | sed -E 's/.{2}/\\x&/g')" - echo 's/\{\{\.'"$key"'\}\}/'"$value"'/g' >> "$tmp" + if [[ "$key" == "_"* ]]; then # iter mode + # grep "start _test" -A99999 | grep "end _test" -B99999 + local -n item_array=${ref[$key]} + local value + for ((i = 0; i < ${#item_array[@]}; i++)); do + value+="$(xxd -ps <<< "${item_array[$i]}" | tr -d '\n' | sed -E 's/../\\x&/g')" + done + echo 's/\{\{'"$key"'\}\}/'"$value"'/g' >> "$tmp" + else + local value="$(xxd -ps <<< "${ref[$key]}" | tr -d '\n' | sed -E 's/../\\x&/g')" + echo 's/\{\{\.'"$key"'\}\}/'"$value"'/g' >> "$tmp" done sed -E -f "$tmp" <<< "$template" rm "$tmp" } + + +# mmmm this should be a library because i am so much copying those later +# _nested_random +function _nested_random() { + dd if=/dev/urandom bs=1 count=16 status=none | xxd -p +} + +# nested_declare(ref) +function nested_declare() { + declare -g -a $1 +} + +# nested_add(ref, array) +function nested_add() { + local nested_id=$(_nested_random) + declare -g -n _$nested_id=$2 + local -n ref=$1 + ref+=("$nested_id") +} + +# nested_get(ref, i) +function nested_get() { + local -n ref=$1 + declare -g -n res=_${ref[$2]} +} From c607722e2bb0721144719c04d28532e3ed8e6493 Mon Sep 17 00:00:00 2001 From: Dominika Liberda Date: Tue, 21 Jun 2022 04:00:17 +0200 Subject: [PATCH 2/9] * stuff working --- src/template.sh | 51 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/src/template.sh b/src/template.sh index 1a1bb12..21555db 100755 --- a/src/template.sh +++ b/src/template.sh @@ -8,31 +8,47 @@ function render() { local tmp=$(mktemp) for key in ${!ref[@]}; do if [[ "$key" == "_"* ]]; then # iter mode - local subtemplate=$(mktemp) - grep "start $key" -A99999 | grep "end $key" -B99999 > "$subtemplate" - local -n item_array=${ref[$key]} - echo 's/{{start '"$key"'}}.*{{end '"$key"'}}/{{'"$key"'}}/' >> "$tmp" - for (( i=0; i<${#item_array}; i++ )); do - nested_get item_array $i - for meow in ${!res[@]}; do - local -n nyaa=${res[$meow]} - # todo: unhtml_encode this? - local value="$(html_encode "$(render nyaa "$subtemplate")" | sed -E 's/\&/�UwU�/g')" - echo 's/{{'"${res[$meow]}"'}}/'"$value"'/' >> "$tmp" - + local value='' + subtemplate=$(mktemp) + subtemplate_tmp=$(mktemp) + echo "subtemplate: $subtemplate" > /dev/stderr + echo "subtemplate_tmp: $subtemplate_tmp" > /dev/stderr + echo "$template" | grep "{{start $key}}" -A99999 | grep "{{end $key}}" -B99999 > "$subtemplate" + + echo 's'$'\02''\{\{start '"$key"'\}\}.*\{\{end '"$key"'\}\}'$'\02''\{\{'"$key"'\}\}'$'\02'';' >> "$tmp" + + local -n asdf=${ref[$key]} + echo "asdf ${asdf[@]}" > /dev/stderr + + for j in ${!asdf[@]}; do + local -n fdsa=_${asdf[$j]} + + for i in ${!fdsa[@]}; do + echo 's'$'\02''\{\{.'"$i"'\}\}'$'\02'''"${fdsa[$i]}"''$'\02'';' | tr -d '\n' >> "$subtemplate_tmp" done + + echo 's'$'\02''\{\{start '"$key"'\}\}'$'\02'$'\02' >> "$subtemplate_tmp" + echo 's'$'\02''\{\{end '"$key"'\}\}'$'\02'$'\02' >> "$subtemplate_tmp" + + value+="$(cat "$subtemplate" | tr -d '\n' | sed -E -f "$subtemplate_tmp" | tr $'\01' '\n' | sed 's/'$'\01''/\n/g')" + echo "eeeee $value" > /dev/stderr + rm "$subtemplate_tmp" done - echo 's/\{\{'"$key"'\}\}/'"$value"'/g' >> "$tmp" + + + echo 's'$'\02''\{\{'"$key"'\}\}'$'\02'''"$value"''$'\02'';' >> "$tmp" + cat "$tmp" > /dev/stderr rm "$subtemplate" elif [[ "${ref[$key]}" != "" ]]; then local value="$(html_encode "${ref[$key]}" | sed -E 's/\&/�UwU�/g')" - echo 's/\{\{\.'"$key"'\}\}/'"$value"'/g' >> "$tmp" + echo 's'$'\02''\{\{\.'"$key"'\}\}'$'\02'''"$value"''$'\02'';' >> "$tmp" else - echo 's/\{\{\.'"$key"'\}\}//g' >> "$tmp" + echo 's'$'\02''\{\{\.'"$key"'\}\}'$'\02'$'\02'';' >> "$tmp" fi done - - template="$(tr '\n' $'\01' <<< "$template" | sed -E -f "$tmp" | tr $'\01' '\n')" + + cat "$tmp" | tr -d '\n' > "${tmp}_" + template="$(tr '\n' $'\01' <<< "$template" | sed -E -f "${tmp}_" | tr $'\01' '\n')" sed -E 's/�UwU�/\&/g' <<< "$template" rm "$tmp" } @@ -54,6 +70,7 @@ function render_unsafe() { else local value="$(xxd -ps <<< "${ref[$key]}" | tr -d '\n' | sed -E 's/../\\x&/g')" echo 's/\{\{\.'"$key"'\}\}/'"$value"'/g' >> "$tmp" + fi done sed -E -f "$tmp" <<< "$template" From a954f330ab7c37fdd8665739a16e7d354ba59bae Mon Sep 17 00:00:00 2001 From: Dominika Liberda Date: Sat, 25 Jun 2022 09:00:25 +0200 Subject: [PATCH 3/9] + poor man's array copy --- src/template.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/template.sh b/src/template.sh index 21555db..bb67769 100755 --- a/src/template.sh +++ b/src/template.sh @@ -92,7 +92,15 @@ function nested_declare() { # nested_add(ref, array) function nested_add() { local nested_id=$(_nested_random) - declare -g -n _$nested_id=$2 + declare -n nested_ref=$2 + declare -g -A _$nested_id + + # poor man's array copy + for i in ${!nested_ref[@]}; do + declare -g -A _$nested_id[$i]="${nested_ref[$i]}" + done + declare -p _$nested_id > /dev/stderr + local -n ref=$1 ref+=("$nested_id") } From 828bc8e42664194c91d50016cce06e8774a9bf74 Mon Sep 17 00:00:00 2001 From: Dominika Liberda Date: Sat, 25 Jun 2022 09:23:16 +0200 Subject: [PATCH 4/9] * proper multiline --- src/template.sh | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/template.sh b/src/template.sh index bb67769..ff43684 100755 --- a/src/template.sh +++ b/src/template.sh @@ -11,33 +11,27 @@ function render() { local value='' subtemplate=$(mktemp) subtemplate_tmp=$(mktemp) - echo "subtemplate: $subtemplate" > /dev/stderr - echo "subtemplate_tmp: $subtemplate_tmp" > /dev/stderr - echo "$template" | grep "{{start $key}}" -A99999 | grep "{{end $key}}" -B99999 > "$subtemplate" + echo "$template" | grep "{{start $key}}" -A99999 | grep "{{end $key}}" -B99999 | tr '\n' $'\01' > "$subtemplate" echo 's'$'\02''\{\{start '"$key"'\}\}.*\{\{end '"$key"'\}\}'$'\02''\{\{'"$key"'\}\}'$'\02'';' >> "$tmp" local -n asdf=${ref[$key]} - echo "asdf ${asdf[@]}" > /dev/stderr for j in ${!asdf[@]}; do local -n fdsa=_${asdf[$j]} for i in ${!fdsa[@]}; do - echo 's'$'\02''\{\{.'"$i"'\}\}'$'\02'''"${fdsa[$i]}"''$'\02'';' | tr -d '\n' >> "$subtemplate_tmp" + echo 's'$'\02''\{\{.'"$i"'\}\}'$'\02'''"${fdsa[$i]}"''$'\02'';' | tr '\n' $'\01' | sed 's/'$'\02'';'$'\01''/'$'\02'';/g' >> "$subtemplate_tmp" done echo 's'$'\02''\{\{start '"$key"'\}\}'$'\02'$'\02' >> "$subtemplate_tmp" echo 's'$'\02''\{\{end '"$key"'\}\}'$'\02'$'\02' >> "$subtemplate_tmp" - value+="$(cat "$subtemplate" | tr -d '\n' | sed -E -f "$subtemplate_tmp" | tr $'\01' '\n' | sed 's/'$'\01''/\n/g')" - echo "eeeee $value" > /dev/stderr + value+="$(cat "$subtemplate" | tr '\n' $'\01' | sed -E -f "$subtemplate_tmp" | tr $'\01' '\n')" rm "$subtemplate_tmp" done - echo 's'$'\02''\{\{'"$key"'\}\}'$'\02'''"$value"''$'\02'';' >> "$tmp" - cat "$tmp" > /dev/stderr rm "$subtemplate" elif [[ "${ref[$key]}" != "" ]]; then local value="$(html_encode "${ref[$key]}" | sed -E 's/\&/�UwU�/g')" @@ -47,7 +41,7 @@ function render() { fi done - cat "$tmp" | tr -d '\n' > "${tmp}_" + cat "$tmp" | tr '\n' $'\01' | sed 's/'$'\02'';'$'\01''/'$'\02'';/g' > "${tmp}_" template="$(tr '\n' $'\01' <<< "$template" | sed -E -f "${tmp}_" | tr $'\01' '\n')" sed -E 's/�UwU�/\&/g' <<< "$template" rm "$tmp" From b7945227ea72d01a95e8f36b63ad5d9a41644907 Mon Sep 17 00:00:00 2001 From: Dominika Liberda Date: Sat, 25 Jun 2022 11:03:39 +0200 Subject: [PATCH 5/9] * fix ampersand expansion --- src/template.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/template.sh b/src/template.sh index ff43684..004567a 100755 --- a/src/template.sh +++ b/src/template.sh @@ -3,7 +3,7 @@ # render(array, template_file) function render() { - local template="$(cat "$2")" + local template="$(cat "$2" | sed 's/\&/�UwU�/g')" local -n ref=$1 local tmp=$(mktemp) for key in ${!ref[@]}; do @@ -11,7 +11,7 @@ function render() { local value='' subtemplate=$(mktemp) subtemplate_tmp=$(mktemp) - echo "$template" | grep "{{start $key}}" -A99999 | grep "{{end $key}}" -B99999 | tr '\n' $'\01' > "$subtemplate" + echo "$template" | sed 's/\&/�UwU�/g' | grep "{{start $key}}" -A99999 | grep "{{end $key}}" -B99999 | tr '\n' $'\01' > "$subtemplate" echo 's'$'\02''\{\{start '"$key"'\}\}.*\{\{end '"$key"'\}\}'$'\02''\{\{'"$key"'\}\}'$'\02'';' >> "$tmp" @@ -93,7 +93,6 @@ function nested_add() { for i in ${!nested_ref[@]}; do declare -g -A _$nested_id[$i]="${nested_ref[$i]}" done - declare -p _$nested_id > /dev/stderr local -n ref=$1 ref+=("$nested_id") From f3ff522d82a6fb6f0447b606057f32b5d82822ee Mon Sep 17 00:00:00 2001 From: Dominika Liberda Date: Sat, 25 Jun 2022 11:32:20 +0200 Subject: [PATCH 6/9] * template replace now global except for foreach --- src/template.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/template.sh b/src/template.sh index 004567a..168ab7b 100755 --- a/src/template.sh +++ b/src/template.sh @@ -21,7 +21,7 @@ function render() { local -n fdsa=_${asdf[$j]} for i in ${!fdsa[@]}; do - echo 's'$'\02''\{\{.'"$i"'\}\}'$'\02'''"${fdsa[$i]}"''$'\02'';' | tr '\n' $'\01' | sed 's/'$'\02'';'$'\01''/'$'\02'';/g' >> "$subtemplate_tmp" + echo 's'$'\02''\{\{.'"$i"'\}\}'$'\02'''"${fdsa[$i]}"''$'\02''g;' | tr '\n' $'\01' | sed 's/'$'\02'';'$'\01''/'$'\02'';/g' >> "$subtemplate_tmp" done echo 's'$'\02''\{\{start '"$key"'\}\}'$'\02'$'\02' >> "$subtemplate_tmp" @@ -35,9 +35,9 @@ function render() { rm "$subtemplate" elif [[ "${ref[$key]}" != "" ]]; then local value="$(html_encode "${ref[$key]}" | sed -E 's/\&/�UwU�/g')" - echo 's'$'\02''\{\{\.'"$key"'\}\}'$'\02'''"$value"''$'\02'';' >> "$tmp" + echo 's'$'\02''\{\{\.'"$key"'\}\}'$'\02'''"$value"''$'\02''g;' >> "$tmp" else - echo 's'$'\02''\{\{\.'"$key"'\}\}'$'\02'$'\02'';' >> "$tmp" + echo 's'$'\02''\{\{\.'"$key"'\}\}'$'\02'$'\02''g;' >> "$tmp" fi done From e1f8ded023296ea38e1b5dbe86dbfdb8caf8b234 Mon Sep 17 00:00:00 2001 From: Dominika Liberda Date: Sat, 25 Jun 2022 11:35:03 +0200 Subject: [PATCH 7/9] why not, let's bump to 0.95 --- config/master_example.sh | 4 ++-- http.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/master_example.sh b/config/master_example.sh index 8405090..17ede6f 100644 --- a/config/master_example.sh +++ b/config/master_example.sh @@ -21,9 +21,9 @@ cfg[ssl_cert]='' cfg[ssl_key]='' cfg[extension]='shs' -cfg[extra_headers]='server: HTTP.sh/0.94 (devel)' +cfg[extra_headers]='server: HTTP.sh/0.95 (devel)' -cfg[title]='HTTP.sh 0.94' +cfg[title]='HTTP.sh 0.95' cfg[php_enabled]=false # enable PHP script evalutaion (requires PHP) cfg[python_enabled]=false # enable Python script evalutaion (requires Python) diff --git a/http.sh b/http.sh index 3da2573..25f8617 100755 --- a/http.sh +++ b/http.sh @@ -27,9 +27,9 @@ cfg[ssl_cert]='' cfg[ssl_key]='' cfg[extension]='shs' -cfg[extra_headers]='server: HTTP.sh/0.94 (devel)' +cfg[extra_headers]='server: HTTP.sh/0.95 (devel)' -cfg[title]='HTTP.sh 0.94' +cfg[title]='HTTP.sh 0.95' cfg[php_enabled]=false # enable PHP script evalutaion (requires PHP) cfg[python_enabled]=false # enable Python script evalutaion (requires Python) From fcd102f1137382e442316231b413896d876e39af Mon Sep 17 00:00:00 2001 From: Dominika Liberda Date: Sat, 25 Jun 2022 12:02:45 +0200 Subject: [PATCH 8/9] * oops, fixes global replace --- src/template.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/template.sh b/src/template.sh index 168ab7b..60dd8a3 100755 --- a/src/template.sh +++ b/src/template.sh @@ -21,18 +21,18 @@ function render() { local -n fdsa=_${asdf[$j]} for i in ${!fdsa[@]}; do - echo 's'$'\02''\{\{.'"$i"'\}\}'$'\02'''"${fdsa[$i]}"''$'\02''g;' | tr '\n' $'\01' | sed 's/'$'\02'';'$'\01''/'$'\02'';/g' >> "$subtemplate_tmp" + echo 's'$'\02''\{\{.'"$i"'\}\}'$'\02'''"${fdsa[$i]}"''$'\02''g;' | tr '\n' $'\01' | sed -E 's/'$'\02'';'$'\01''/'$'\02'';/g;s/'$'\02''g;'$'\01''/'$'\02''g;/g' >> "$subtemplate_tmp" done echo 's'$'\02''\{\{start '"$key"'\}\}'$'\02'$'\02' >> "$subtemplate_tmp" echo 's'$'\02''\{\{end '"$key"'\}\}'$'\02'$'\02' >> "$subtemplate_tmp" value+="$(cat "$subtemplate" | tr '\n' $'\01' | sed -E -f "$subtemplate_tmp" | tr $'\01' '\n')" - rm "$subtemplate_tmp" + # rm "$subtemplate_tmp" done echo 's'$'\02''\{\{'"$key"'\}\}'$'\02'''"$value"''$'\02'';' >> "$tmp" - rm "$subtemplate" + #rm "$subtemplate" elif [[ "${ref[$key]}" != "" ]]; then local value="$(html_encode "${ref[$key]}" | sed -E 's/\&/�UwU�/g')" echo 's'$'\02''\{\{\.'"$key"'\}\}'$'\02'''"$value"''$'\02''g;' >> "$tmp" @@ -41,10 +41,10 @@ function render() { fi done - cat "$tmp" | tr '\n' $'\01' | sed 's/'$'\02'';'$'\01''/'$'\02'';/g' > "${tmp}_" + cat "$tmp" | tr '\n' $'\01' | sed -E 's/'$'\02'';'$'\01''/'$'\02'';/g;s/'$'\02''g;'$'\01''/'$'\02''g;/g' > "${tmp}_" template="$(tr '\n' $'\01' <<< "$template" | sed -E -f "${tmp}_" | tr $'\01' '\n')" sed -E 's/�UwU�/\&/g' <<< "$template" - rm "$tmp" + #rm "$tmp" } # render_unsafe(array, template_file) From 1a7805fccbacd8daab1151ce9504c385a617337e Mon Sep 17 00:00:00 2001 From: Dominika Liberda Date: Tue, 28 Jun 2022 09:34:04 +0200 Subject: [PATCH 9/9] * satanize --- src/template.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/template.sh b/src/template.sh index 60dd8a3..492f466 100755 --- a/src/template.sh +++ b/src/template.sh @@ -3,7 +3,7 @@ # render(array, template_file) function render() { - local template="$(cat "$2" | sed 's/\&/�UwU�/g')" + local template="$(cat "$2" | tr -d $'\01'$'\02' | sed 's/\&/�UwU�/g')" local -n ref=$1 local tmp=$(mktemp) for key in ${!ref[@]}; do @@ -11,7 +11,7 @@ function render() { local value='' subtemplate=$(mktemp) subtemplate_tmp=$(mktemp) - echo "$template" | sed 's/\&/�UwU�/g' | grep "{{start $key}}" -A99999 | grep "{{end $key}}" -B99999 | tr '\n' $'\01' > "$subtemplate" + echo "$template" | sed 's/\&/�UwU�/g' | grep "{{start $key}}" -A99999 | grep "{{end $key}}" -B99999 | tr -d $'\01'$'\02' | tr '\n' $'\01' > "$subtemplate" echo 's'$'\02''\{\{start '"$key"'\}\}.*\{\{end '"$key"'\}\}'$'\02''\{\{'"$key"'\}\}'$'\02'';' >> "$tmp" @@ -28,11 +28,11 @@ function render() { echo 's'$'\02''\{\{end '"$key"'\}\}'$'\02'$'\02' >> "$subtemplate_tmp" value+="$(cat "$subtemplate" | tr '\n' $'\01' | sed -E -f "$subtemplate_tmp" | tr $'\01' '\n')" - # rm "$subtemplate_tmp" + rm "$subtemplate_tmp" done echo 's'$'\02''\{\{'"$key"'\}\}'$'\02'''"$value"''$'\02'';' >> "$tmp" - #rm "$subtemplate" + rm "$subtemplate" elif [[ "${ref[$key]}" != "" ]]; then local value="$(html_encode "${ref[$key]}" | sed -E 's/\&/�UwU�/g')" echo 's'$'\02''\{\{\.'"$key"'\}\}'$'\02'''"$value"''$'\02''g;' >> "$tmp" @@ -44,7 +44,7 @@ function render() { cat "$tmp" | tr '\n' $'\01' | sed -E 's/'$'\02'';'$'\01''/'$'\02'';/g;s/'$'\02''g;'$'\01''/'$'\02''g;/g' > "${tmp}_" template="$(tr '\n' $'\01' <<< "$template" | sed -E -f "${tmp}_" | tr $'\01' '\n')" sed -E 's/�UwU�/\&/g' <<< "$template" - #rm "$tmp" + rm "$tmp" } # render_unsafe(array, template_file)