Change passwords from control panel

This commit is contained in:
Bob Mottram 2016-11-19 15:45:15 +00:00
parent d128a5f762
commit ebf91c686d
2 changed files with 157 additions and 37 deletions

View File

@ -108,6 +108,95 @@ function any_key {
read -n1 -r -p $"Press any key to continue..." key read -n1 -r -p $"Press any key to continue..." key
} }
function passwords_select_user {
SELECTED_USERNAME=
users_array=($(ls /home))
delete=(mirrors git)
for del in ${delete[@]}
do
users_array=(${users_array[@]/$del})
done
i=0
W=()
name=()
for u in ${users_array[@]}
do
if [[ $(is_valid_user "$u") == "1" ]]; then
i=$((i+1))
W+=($i "$u")
name+=("$u")
fi
done
if [ $i -eq 1 ]; then
SELECTED_USERNAME="${name[0]}"
else
user_index=$(dialog --backtitle $"Freedombone Control Panel" --title $"Select User" --menu $"Select one of the following:" 24 40 17 "${W[@]}" 3>&2 2>&1 1>&3)
if [ $? -eq 0 ]; then
SELECTED_USERNAME="${name[$((user_index-1))]}"
fi
fi
}
function passwords_show_apps {
SELECTED_APP=
select_all_apps=$1
applist=""
n=1
app_index=0
for a in "${APPS_AVAILABLE[@]}"
do
applist="$applist $n $a off"
n=$[n+1]
app_index=$[app_index+1]
done
selected_app_index=$(dialog --backtitle $"Freedombone Control Panel" --title $"Select App" --menu $"Select one of the following:" 24 40 17 "${W[@]}" 3>&2 2>&1 1>&3)
if [ $? -eq 0 ]; then
SELECTED_APP="${name[$((selected_app_index-1))]}"
fi
}
function view_or_change_passwords {
passwords_select_user
if [ ! $SELECTED_USER ]; then
return
fi
detect_installed_apps
passwords_show_apps
if [ ! $SELECTED_APP ]; then
return
fi
CURR_PASSWORD=$(${PROJECT_NAME}-pass -u ${SELECTED_USER} -a ${SELECTED_APP})
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --title $"View or Change Password" \
--backtitle $"Freedombone Control Panel" \
--inputbox $"${SELECTED_APP} password for ${SELECTED_USER}. Copy or change it if you wish." 8 60 "$CURR_PASSWORD" 2>$data
sel=$?
case $sel in
0)
CURR_PASSWORD=$(<$data)
if [ ${#CURR_PASSWORD} -gt 8 ]; then
if [[ $(function_exists change_password_${SELECTED_APP}) == "1" ]]; then
${PROJECT_NAME}-pass -u ${SELECTED_USER} -a ${SELECTED_APP} -p ${CURR_PASSWORD}
change_password_${SELECTED_APP} ${SELECTED_USER} "${CURR_PASSWORD}"
dialog --title $"Change password" \
--msgbox $"The password was changed" 6 40
fi
fi
;;
esac
}
function check_for_updates { function check_for_updates {
if [ ! -f /etc/cron.weekly/$UPGRADE_SCRIPT_NAME ]; then if [ ! -f /etc/cron.weekly/$UPGRADE_SCRIPT_NAME ]; then
dialog --title $"Check for updates" \ dialog --title $"Check for updates" \
@ -1809,26 +1898,27 @@ function menu_top_level {
trap "rm -f $data" 0 1 2 5 15 trap "rm -f $data" 0 1 2 5 15
dialog --backtitle $"Freedombone Control Panel" \ dialog --backtitle $"Freedombone Control Panel" \
--title $"Control Panel" \ --title $"Control Panel" \
--radiolist $"Choose an operation:" 27 70 20 \ --radiolist $"Choose an operation:" 28 70 21 \
1 $"About this system" off \ 1 $"About this system" off \
2 $"Backup and Restore" off \ 2 $"Passwords" off \
3 $"Show Firewall" off \ 3 $"Backup and Restore" off \
4 $"Reset Tripwire" off \ 4 $"Show Firewall" off \
5 $"App Settings" off \ 5 $"Reset Tripwire" off \
6 $"Add/Remove Apps" off \ 6 $"App Settings" off \
7 $"Logging on/off" off \ 7 $"Add/Remove Apps" off \
8 $"Ping enable/disable" off \ 8 $"Logging on/off" off \
9 $"Manage Users" off \ 9 $"Ping enable/disable" off \
10 $"Email Menu" off \ 10 $"Manage Users" off \
11 $"Security Settings" off \ 11 $"Email Menu" off \
12 $"Set the main repository (repo mirrors)" off \ 12 $"Security Settings" off \
13 $"Change the name of this system" off \ 13 $"Set the main repository (repo mirrors)" off \
14 $"Set a static local IP address" off \ 14 $"Change the name of this system" off \
15 $"Wifi menu" off \ 15 $"Set a static local IP address" off \
16 $"Check for updates" off \ 16 $"Wifi menu" off \
17 $"Power off the system" off \ 17 $"Check for updates" off \
18 $"Restart the system" off \ 18 $"Power off the system" off \
19 $"Exit" on 2> $data 19 $"Restart the system" off \
20 $"Exit" on 2> $data
sel=$? sel=$?
case $sel in case $sel in
1) exit 1;; 1) exit 1;;
@ -1836,24 +1926,25 @@ function menu_top_level {
esac esac
case $(cat $data) in case $(cat $data) in
1) show_about;; 1) show_about;;
2) menu_backup_restore;; 2) view_or_change_passwords;;
3) show_firewall;; 3) menu_backup_restore;;
4) reset_tripwire;; 4) show_firewall;;
5) menu_app_settings;; 5) reset_tripwire;;
6) ${PROJECT_NAME}-addremove;; 6) menu_app_settings;;
7) logging_on_off;; 7) ${PROJECT_NAME}-addremove;;
8) ping_enable_disable;; 8) logging_on_off;;
9) menu_users;; 9) ping_enable_disable;;
10) menu_email;; 10) menu_users;;
11) security_settings;; 11) menu_email;;
12) set_main_repo;; 12) security_settings;;
13) change_system_name;; 13) set_main_repo;;
14) set_static_IP;; 14) change_system_name;;
15) menu_wifi;; 15) set_static_IP;;
16) check_for_updates;; 16) menu_wifi;;
17) shut_down_system;; 17) check_for_updates;;
18) restart_system;; 18) shut_down_system;;
19) break;; 19) restart_system;;
20) break;;
esac esac
done done
} }

View File

@ -320,6 +320,35 @@ function detect_installable_apps {
done done
} }
function detect_installed_apps {
FILES=/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-*
APPS_AVAILABLE=()
APPS_INSTALLED=()
APPS_INSTALLED_NAMES=()
function_check app_variants
function_check app_is_installed
function_check item_in_array
# for all the app scripts
for filename in $FILES
do
app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}')
if [[ $(app_is_installed $app_name) ]]; then
item_in_array "${app_name}" "${APPS_AVAILABLE[@]}"
if [[ $? != 0 ]]; then
variants_list=$(app_variants $filename)
if [ ${#variants_list} -gt 0 ]; then
APPS_AVAILABLE+=("${app_name}")
APPS_INSTALLED_NAMES+=("$app_name")
fi
fi
fi
done
}
# creates the APPS_AVAILABLE and APPS_CHOSEN arrays based on # creates the APPS_AVAILABLE and APPS_CHOSEN arrays based on
# the given variant name # the given variant name
function choose_apps_for_variant { function choose_apps_for_variant {