diff --git a/rowbot b/rowbot index cd1d499..456375f 100755 --- a/rowbot +++ b/rowbot @@ -6,31 +6,6 @@ shopt -s nullglob dotglob extglob -### -# utilities -### - -parent() { - (( BASHPID == $$ )) -} - -has() { - hash "$1" 2>/dev/null -} - -die() { - local status=1 - - if (( $# > 1 )) && [[ $1 = -s ]]; then - status=$2 - shift - shift - fi - - error "$@" - exit "$status" -} - ### # logger ### @@ -62,6 +37,43 @@ error() { LEVEL=error log "$@" } +### +# utilities +### + +parent() { + (( BASHPID == $$ )) +} + +has() { + hash "$1" 2>/dev/null +} + +die() { + local status=1 + + if (( $# > 1 )) && [[ $1 = -s ]]; then + status=$2 + shift + shift + fi + + error "$@" + exit "$status" +} + +is-log-level() { + local level + + for level in "${!levels[@]}"; do + if [[ ${1,,} = "$level" ]]; then + return 0 + fi + done + + return 1 +} + ### # argument parser for parsing arguments ## @@ -126,6 +138,16 @@ if [[ -v opts[tls] ]]; then tls=${opts[tls]} fi +# This is a false positive. +# shellcheck disable=SC2102 +if [[ -v opts[level] ]]; then + if is-log-level "${opts[level]}"; then + level=${opts[level],,} + else + die "%s is not a valid logging level" "${opts[level]}" + fi +fi + if [[ $tls = yes ]]; then # This is a false positive. # shellcheck disable=SC2102 @@ -140,8 +162,7 @@ fi config=( server port nick ident realname chan trigger - fact_root reload dev level log owner sys_root - reload + fact_root reload dev log owner sys_root reload ) for opt in "${config[@]}"; do @@ -685,8 +706,12 @@ hook_cmd_control_panel() { exec "$0" --reload "${original_args[@]}" ;; level) - level=${action_args[0]} - privmsg "$to" "log level is now set to $level" + if is-log-level "${action_args[0]}"; then + level=${action_args[0],,} + privmsg "$to" "log level is now set to $level" + else + privmsg "$to" "${action_args[0]} is not a valid logging level" + fi ;; dev) if [[ $dev = yes ]]; then