summaryrefslogtreecommitdiffstats
path: root/snap/helpers/configuration.sh
diff options
context:
space:
mode:
Diffstat (limited to 'snap/helpers/configuration.sh')
-rwxr-xr-xsnap/helpers/configuration.sh126
1 files changed, 126 insertions, 0 deletions
diff --git a/snap/helpers/configuration.sh b/snap/helpers/configuration.sh
new file mode 100755
index 0000000000..34b7fc7af4
--- /dev/null
+++ b/snap/helpers/configuration.sh
@@ -0,0 +1,126 @@
+#!/bin/bash
+if snapctl get gitea.snap.custom; then
+ cdir=$(snapctl get gitea.snap.custom)
+else
+ cdir=$SNAP_COMMON
+fi
+
+cfg="$cdir/conf/app.ini"
+bak="$cdir/conf/app.ini.bak-$(date -Ins)"
+basecfg="$SNAP/snap/helpers/app.ini"
+smp="$SNAP/gitea/custom/conf/app.ini.sample"
+
+function toSnap() {
+OIFS=$IFS
+IFS='
+'
+ category="none"
+ src="$cfg"
+ [[ "$1" = "init" ]] && src="$smp"
+ [[ "$1" = "snap" ]] && src="$basecfg"
+
+ for l in $(sed 's_;\([A-Z]*\)_\1_g' $src | grep -v -e '^;' -e '^$'); do
+ if echo $l | grep -q '^[[]'; then
+ category=$(CatToSnap "$l")
+ elif echo $l | grep -q '^[A-Z]'; then
+ option=$(OptToSnap "$l")
+ value=$(ValToSnap "$l")
+ if [[ $category = "none" ]]; then
+ snapctl set "$option=$value"
+ else
+ snapctl set "$category.$option=$value"
+ fi
+ fi
+ done
+IFS=$OIFS
+}
+
+function toIni() {
+OIFS=$IFS
+IFS='
+'
+ category="none"; option="none"; catUnset=true
+ src=$smp
+ [[ -f $cfg ]] && src="$cfg"
+ tmpIni="$cfg.tmp"
+ [[ -f $src ]] && cp "$src" "$tmpIni"
+ cp $tmpIni $bak
+ echo '' > $cfg
+ for l in $(grep -v -e '^;' -e '^$' $tmpIni); do
+ if echo $l | grep -q '^[[]'; then
+ category=$(CatToSnap "$l")
+ catUnset=true
+ elif echo $l | grep -q '^[A-Z]'; then
+ option=$(OptToSnap "$l")
+ if [[ $category = "none" ]]; then
+ value=$(snapctl get $option)
+ echo $(OptToIni "$option") = $value >> $cfg
+ else
+ value=$(snapctl get $category.$option)
+ if $catUnset; then
+ echo "" >> $cfg
+ echo "[$(CatToIni "$category")]" >> $cfg
+ catUnset=false
+ fi
+ echo $(OptToIni "$option") = $value >> $cfg
+ fi
+ fi
+ done;
+ IFS=$OIFS
+}
+
+function CatToSnap {
+ ret=$(echo "$1" \
+ | grep -oP '[A-Za-z0-9._]+' \
+ | sed 's|\.|-|g' \
+ | sed 's|_|99|g')
+ echo $ret
+}
+function OptToSnap {
+ ret=$(echo "$1" \
+ | grep -oP '^[A-Z_]+' \
+ | tr '[:upper:]' '[:lower:]' \
+ | sed 's|_|-|g')
+ echo $ret
+}
+function ValToSnap {
+ ret=$(echo "$1" \
+ | grep -oP '=.*$' \
+ | sed 's_^= __g' \
+ | sed 's_^=__g' \
+ | sed "s|SNAP_DIR_DATA|$SDATA|g" \
+ | sed "s|SNAP_DIR_COMMON|$SCOMMON|g" \
+ | sed 's|{}||g')
+ echo $ret
+}
+
+function CatToIni {
+ ret=$(echo "$1" \
+ | sed 's|-|.|g' \
+ | sed 's|\ |_|g' \
+ | sed 's|99|_|g')
+ echo $ret
+}
+function OptToIni {
+ ret=$(echo "$1" \
+ | tr '[:lower:]' '[:upper:]' \
+ | sed 's|-|_|g')
+ echo $ret
+}
+
+[[ "$1" = "configure" ]] \
+ && toIni \
+ && exit 0
+
+[[ "$1" = "install" ]] \
+ && echo "Initial Configuration..." \
+ && mkdir -p $SNAP_COMMON/conf \
+ && toSnap init \
+ && toSnap snap \
+ && toIni sample \
+ && exit 0
+
+[[ "$1" = "save" ]] \
+ && echo "Saving current config..." \
+ && toSnap \
+ && exit 0