diff options
-rwxr-xr-x | bin/ak-settings | 45 | ||||
-rwxr-xr-x | lib/_ak_settings | 95 |
2 files changed, 140 insertions, 0 deletions
diff --git a/bin/ak-settings b/bin/ak-settings new file mode 100755 index 0000000..e096ff4 --- /dev/null +++ b/bin/ak-settings @@ -0,0 +1,45 @@ +#!/bin/bash +## +## Set or get settings for your instance +## +## Usage: +## +## -h, --help Prints this help message +## +fullprogrampath="$(realpath $0)" +PROGRAM=$(basename $0) +descriptionString="Settings helper program" + +source $AK_LIBDIR/_ak_log +source $AK_LIBDIR/_ak_script +source $AK_LIBDIR/_ak_settings + +if [ ! -z "$AK_SETTINGS" ] && [ -n "$AK_SETTINGS" ] +then + _ak_log_info "AK_SETTINGS = $AK_SETTINGS" +else + _ak_log_error "No settings variable is set" + exit 1 +fi + +if [ ! -d "$AK_SETTINGS" ] +then + mkdir $AK_SETTINGS + if [ $? -ne 0 ] + then + _ak_log_error "Failed to create settings directory" + exit 1 + fi + _ak_log_info "Created settings directory" +fi + +# Flags to run +if [ ! -z $1 ]; then + case $1 in + -h | --help) _ak_usage; exit;; + -g | --get) _ak_settings_get "$2" ; exit;; + -s | --set) _ak_settings_set "$2" "$3" ; exit;; + * ) _ak_usage;; + esac +else _ak_usage +fi diff --git a/lib/_ak_settings b/lib/_ak_settings new file mode 100755 index 0000000..ce0f9c4 --- /dev/null +++ b/lib/_ak_settings @@ -0,0 +1,95 @@ +#!/bin/bash + +source $AK_LIBDIR/_ak_script + +_ak_settings_get(){ + if [ ! -z "$1" ] && [ -n "$1" ] + then + cd $AK_SETTINGS + echo $1 | grep '\.' > /dev/null 2>&1 + if [ $? -ne 0 ] + then + _ak_log_error "No ungrouped settings allowed" + exit 1 + fi + subset="$(echo $1 | cut -d '.' -f 1)" + echo "$subset" | grep '[.\-\*/~!@#$%^&*()_=\-\>\<,{}[]]' > /dev/null 2>&1 + if [ $? -eq 0 ] + then + _ak_log_error "Names containing symbols are not allowed" + exit 1 + fi + if [ ! -d $subset ] + then + _ak_log_error "Subsetting $subset not found" + exit 1 + fi + cd $subset + label="$(echo $1 | cut -d '.' -f 2-)" + echo "$label" | grep '[.\-\*/~!@#$%^&*()_=\-\>\<,{}[]]' > /dev/null 2>&1 + if [ $? -eq 0 ] + then + _ak_log_error "Names containing symbols are not allowed" + exit 1 + fi + cat $AK_SETTINGS/$subset/$label + else + cd $AK_SETTINGS + find . -type f | while read setting + do + printf '%s:%s\n' "$(echo $setting| sed -e 's/^\.\///;s/\//./g')" "$(cat $setting)" + done + fi +} + +_ak_settings_set(){ + if [ ! -z "$1" ] && [ -n "$1" ] + then + if [ ! -z "$2" ] && [ -n "$2" ] + then + cd $AK_SETTINGS + echo $1 | grep '\.' > /dev/null 2>&1 + if [ $? -ne 0 ] + then + _ak_log_error "No ungrouped settings allowed" + exit 1 + fi + subset="$(echo $1 | cut -d '.' -f 1)" + echo "$subset" | grep '[.\-\*/~!@#$%^&*()_=\-\>\<,{}[]]' > /dev/null 2>&1 + if [ $? -eq 0 ] + then + _ak_log_error "Names containing symbols are not allowed" + exit 1 + fi + if [ ! -d $subset ] + then + mkdir $subset + if [ $? -ne 0 ] + then + _ak_log_error "Could not create $AK_SETTINGS/$subset" + exit 1 + fi + fi + label="$(echo $1 | cut -d '.' -f 2-)" + echo "$label" | grep '[.\-\*/~!@#$%^&*()_=\-\>\<,{}[]]' > /dev/null 2>&1 + if [ $? -eq 0 ] + then + _ak_log_error "Names containing symbols are not allowed" + exit 1 + fi + printf '%s' "$2" > $AK_SETTINGS/$subset/$label + else + _ak_log_error "No value provided for $1" + fi + else + _ak_log_error "No value provided to set" + fi +} + +_ak_settings_get_sub(){ + _ak_not_implemented +} + +_ak_settings_get_all(){ + _ak_not_implemented +} |