Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tweaks to functions in utils.sh and refactored usages in webpage.sh #4653

Merged
merged 5 commits into from
Apr 4, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
48 changes: 42 additions & 6 deletions advanced/Scripts/utils.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@
# - New functions must have a test added for them in test/test_any_utils.py

#######################
# Takes three arguments key, value, and file.
# Takes either
# - Three arguments: key, value, and file.
# - Two arguments: key, and file
#
# Checks the target file for the existence of the key
# - If it exists, it changes the value
# - If it does not exist, it adds the value
PromoFaux marked this conversation as resolved.
Show resolved Hide resolved
Expand All @@ -25,15 +28,48 @@
#######################
addOrEditKeyValPair() {
local key="${1}"
local value="${2}"
local file="${3}"
if grep -q "^${key}=" "${file}"; then
sed -i "/^${key}=/c\\${key}=${value}" "${file}"
local value
local file

# If two arguments have been passed, then the second one is the file - there is no value
if [ $# -lt 3 ]; then
PromoFaux marked this conversation as resolved.
Show resolved Hide resolved
file="${2}"
else
value="${2}"
file="${3}"
fi

if [[ "${value}" != "" ]]; then
# value has a value, so it is a key pair
yubiuser marked this conversation as resolved.
Show resolved Hide resolved
if grep -q "^${key}=" "${file}"; then
# Key already exists in file, modify the value
sed -i "/^${key}=/c\\${key}=${value}" "${file}"
else
# Key does not already exist, add it and it's value
echo "${key}=${value}" >> "${file}"
fi
else
echo "${key}=${value}" >> "${file}"
# value has no value, so it is just a key. Add it if it does not already exist
if ! grep -q "^${key}" "${file}"; then
# Key does not exist, add it.
echo "${key}" >> "${file}"
fi
fi
}

#######################
# Takes two arguments key, and file.
yubiuser marked this conversation as resolved.
Show resolved Hide resolved
# Deletes a key from target file
#
# Example usage:
# removeKey "PIHOLE_DNS_1" "/etc/pihole/setupVars.conf"
#######################
removeKey() {
yubiuser marked this conversation as resolved.
Show resolved Hide resolved
local key="${1}"
local file="${2}"
sed -i "/^${key}/d" "${file}"
}

#######################
# returns FTL's current telnet API port
#######################
Expand Down
27 changes: 12 additions & 15 deletions advanced/Scripts/webpage.sh
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ readonly PI_HOLE_FILES_DIR="/etc/.pihole"
PH_TEST="true"
source "${PI_HOLE_FILES_DIR}/automated install/basic-install.sh"

readonly utilsfile="/opt/pihole/utils.sh"
source "${utilsfile}"

coltable="/opt/pihole/COL_TABLE"
if [[ -f ${coltable} ]]; then
source ${coltable}
Expand All @@ -51,41 +54,35 @@ Options:
}

add_setting() {
echo "${1}=${2}" >> "${setupVars}"
addOrEditKeyValPair "${1}" "${2}" "${setupVars}"
}

delete_setting() {
sed -i "/^${1}/d" "${setupVars}"
removeKey "${1}" "${setupVars}"
}

change_setting() {
delete_setting "${1}"
add_setting "${1}" "${2}"
addOrEditKeyValPair "${1}" "${2}" "${setupVars}"
}

addFTLsetting() {
echo "${1}=${2}" >> "${FTLconf}"
addOrEditKeyValPair "${1}" "${2}" "${FTLconf}"
}

deleteFTLsetting() {
sed -i "/^${1}/d" "${FTLconf}"
removeKey "${1}" "${FTLconf}"
}

changeFTLsetting() {
deleteFTLsetting "${1}"
addFTLsetting "${1}" "${2}"
addOrEditKeyValPair "${1}" "${2}" "${FTLconf}"
}

add_dnsmasq_setting() {
if [[ "${2}" != "" ]]; then
echo "${1}=${2}" >> "${dnsmasqconfig}"
else
echo "${1}" >> "${dnsmasqconfig}"
fi
addOrEditKeyValPair "${1}" "${2}" "${dnsmasqconfig}"
}

delete_dnsmasq_setting() {
sed -i "/^${1}/d" "${dnsmasqconfig}"
removeKey "${1}" "${dnsmasqconfig}"
}

SetTemperatureUnit() {
Expand Down Expand Up @@ -183,7 +180,7 @@ ProcessDNSSettings() {
fi

delete_dnsmasq_setting "dnssec"
delete_dnsmasq_setting "trust-anchor="
delete_dnsmasq_setting "trust-anchor"

if [[ "${DNSSEC}" == true ]]; then
echo "dnssec
Expand Down
19 changes: 18 additions & 1 deletion test/test_any_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,28 @@ def test_key_val_replacement_works(host):
addOrEditKeyValPair "KEY_TWO" "value2" "./testoutput"
addOrEditKeyValPair "KEY_ONE" "value3" "./testoutput"
addOrEditKeyValPair "KEY_FOUR" "value4" "./testoutput"
addOrEditKeyValPair "KEY_FIVE_NO_VALUE" "./testoutput"
addOrEditKeyValPair "KEY_FIVE_NO_VALUE" "./testoutput"
''')
output = host.run('''
cat ./testoutput
''')
expected_stdout = 'KEY_ONE=value3\nKEY_TWO=value2\nKEY_FOUR=value4\n'
expected_stdout = 'KEY_ONE=value3\nKEY_TWO=value2\nKEY_FOUR=value4\nKEY_FIVE_NO_VALUE\n'
assert expected_stdout == output.stdout

def test_key_val_removal_works(host):
''' Confirms addOrEditKeyValPair provides the expected output '''
yubiuser marked this conversation as resolved.
Show resolved Hide resolved
yubiuser marked this conversation as resolved.
Show resolved Hide resolved
host.run('''
source /opt/pihole/utils.sh
addOrEditKeyValPair "KEY_ONE" "value1" "./testoutput"
addOrEditKeyValPair "KEY_TWO" "value2" "./testoutput"
addOrEditKeyValPair "KEY_THREE" "value3" "./testoutput"
removeKey "KEY_TWO" "./testoutput"
''')
output = host.run('''
cat ./testoutput
''')
expected_stdout = 'KEY_ONE=value1\nKEY_THREE=value3\n'
assert expected_stdout == output.stdout


Expand Down