From c53cb884ef0d030af44bbf7fe2800a7ccf5bd335 Mon Sep 17 00:00:00 2001 From: Dominika Liberda Date: Sun, 28 Feb 2021 03:33:58 +0100 Subject: [PATCH] + basic template engine --- http.sh | 2 +- src/misc.sh | 3 +-- src/server.sh | 3 ++- src/template.sh | 14 ++++++++++++++ 4 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 src/template.sh diff --git a/http.sh b/http.sh index 680b0cc..0f870e3 100755 --- a/http.sh +++ b/http.sh @@ -32,7 +32,7 @@ if [[ $error == true ]]; then fi if [[ $1 == "init" ]]; then # will get replaced with proper parameter parsing in 1.0 - mkdir -p "${cfg[namespace]}/${cfg[root]}" "${cfg[namespace]}/workers/example" "${cfg[namespace]}/views" + mkdir -p "${cfg[namespace]}/${cfg[root]}" "${cfg[namespace]}/workers/example" "${cfg[namespace]}/views" "${cfg[namespace]}/templates" touch "${cfg[namespace]}/config.sh" "${cfg[namespace]}/workers/example/control" cat < "${cfg[namespace]}/config.sh" ## app config diff --git a/src/misc.sh b/src/misc.sh index 5cb3479..3e759de 100755 --- a/src/misc.sh +++ b/src/misc.sh @@ -39,6 +39,5 @@ function post_dump() { # html_encode(string) function html_encode() { - #echo -n "$1" | xxd -ps | sed -E 's/.{2}/\&#x&;/g' - echo -n "$1" | sed 's//\>/g;s/%/\%/g;s/\//\//g;s/\\/\\/g;s/'"'"'/\'/g;s/"/\"/g;s/`/\`/g;s/?/\?/g' + sed 's//\>/g;s/%/\%/g;s/\//\//g;s/\\/\\/g;s/'"'"'/\'/g;s/"/\"/g;s/`/\`/g;s/?/\?/g' <<< "$1" } diff --git a/src/server.sh b/src/server.sh index 8c75ba8..3bd9348 100755 --- a/src/server.sh +++ b/src/server.sh @@ -5,6 +5,7 @@ source src/misc.sh source src/account.sh source src/mail.sh source src/route.sh +source src/template.sh [[ -f "${cfg[namespace]}/config.sh" ]] && source "${cfg[namespace]}/config.sh" declare -A r # current request / response @@ -17,7 +18,7 @@ declare -A params # parsed router data r[status]=210 # Mommy always said that I was special post_length=0 -while read param; do +while read -r param; do param_l="${param,,}" # lowercase name='' value='' diff --git a/src/template.sh b/src/template.sh new file mode 100644 index 0000000..76fe557 --- /dev/null +++ b/src/template.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# template.sh - basic templating engine + +# render(array, template_file) +function render() { + local template="$(cat "$2")" + local -n ref=$1 + for key in ${!ref[@]}; do + local value="$(html_encode "${ref[$key]}" | sed -E 's/\&/�UwU�/g')" + template="$(sed -E 's/\{\{\.'"$key"'\}\}/'"$value"'/g' <<< "$template")" + done + + sed -E 's/�UwU�/\&/g' <<< "$template" +}