浏览代码

Change passwords from control panel

Bob Mottram 8 年前
父节点
当前提交
ebf91c686d
共有 2 个文件被更改,包括 157 次插入37 次删除
  1. 128
    37
      src/freedombone-controlpanel
  2. 29
    0
      src/freedombone-utils-selector

+ 128
- 37
src/freedombone-controlpanel 查看文件

@@ -108,6 +108,95 @@ function any_key {
108 108
     read -n1 -r -p $"Press any key to continue..." key
109 109
 }
110 110
 
111
+function passwords_select_user {
112
+    SELECTED_USERNAME=
113
+
114
+    users_array=($(ls /home))
115
+
116
+    delete=(mirrors git)
117
+    for del in ${delete[@]}
118
+    do
119
+        users_array=(${users_array[@]/$del})
120
+    done
121
+
122
+    i=0
123
+    W=()
124
+    name=()
125
+    for u in ${users_array[@]}
126
+    do
127
+        if [[ $(is_valid_user "$u") == "1" ]]; then
128
+            i=$((i+1))
129
+            W+=($i "$u")
130
+            name+=("$u")
131
+        fi
132
+    done
133
+
134
+    if [ $i -eq 1 ]; then
135
+        SELECTED_USERNAME="${name[0]}"
136
+    else
137
+        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)
138
+
139
+        if [ $? -eq 0 ]; then
140
+            SELECTED_USERNAME="${name[$((user_index-1))]}"
141
+        fi
142
+    fi
143
+}
144
+
145
+function passwords_show_apps {
146
+    SELECTED_APP=
147
+    select_all_apps=$1
148
+    applist=""
149
+    n=1
150
+    app_index=0
151
+    for a in "${APPS_AVAILABLE[@]}"
152
+    do
153
+        applist="$applist $n $a off"
154
+        n=$[n+1]
155
+        app_index=$[app_index+1]
156
+    done
157
+
158
+    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)
159
+
160
+    if [ $? -eq 0 ]; then
161
+        SELECTED_APP="${name[$((selected_app_index-1))]}"
162
+    fi
163
+}
164
+
165
+function view_or_change_passwords {
166
+    passwords_select_user
167
+    if [ ! $SELECTED_USER ]; then
168
+        return
169
+    fi
170
+    detect_installed_apps
171
+    passwords_show_apps
172
+    if [ ! $SELECTED_APP ]; then
173
+        return
174
+    fi
175
+
176
+    CURR_PASSWORD=$(${PROJECT_NAME}-pass -u ${SELECTED_USER} -a ${SELECTED_APP})
177
+
178
+    data=$(tempfile 2>/dev/null)
179
+    trap "rm -f $data" 0 1 2 5 15
180
+    dialog --title $"View or Change Password" \
181
+           --backtitle $"Freedombone Control Panel" \
182
+           --inputbox $"${SELECTED_APP} password for ${SELECTED_USER}. Copy or change it if you wish." 8 60 "$CURR_PASSWORD" 2>$data
183
+    sel=$?
184
+    case $sel in
185
+        0)
186
+            CURR_PASSWORD=$(<$data)
187
+            if [ ${#CURR_PASSWORD} -gt 8 ]; then
188
+                if [[ $(function_exists change_password_${SELECTED_APP}) == "1" ]]; then
189
+                    ${PROJECT_NAME}-pass -u ${SELECTED_USER} -a ${SELECTED_APP} -p ${CURR_PASSWORD}
190
+                    change_password_${SELECTED_APP} ${SELECTED_USER} "${CURR_PASSWORD}"
191
+                    dialog --title $"Change password" \
192
+                           --msgbox $"The password was changed" 6 40
193
+                fi
194
+            fi
195
+            ;;
196
+    esac
197
+
198
+}
199
+
111 200
 function check_for_updates {
112 201
     if [ ! -f /etc/cron.weekly/$UPGRADE_SCRIPT_NAME ]; then
113 202
         dialog --title $"Check for updates" \
@@ -1809,26 +1898,27 @@ function menu_top_level {
1809 1898
         trap "rm -f $data" 0 1 2 5 15
1810 1899
         dialog --backtitle $"Freedombone Control Panel" \
1811 1900
                --title $"Control Panel" \
1812
-               --radiolist $"Choose an operation:" 27 70 20 \
1901
+               --radiolist $"Choose an operation:" 28 70 21 \
1813 1902
                1 $"About this system" off \
1814
-               2 $"Backup and Restore" off \
1815
-               3 $"Show Firewall" off \
1816
-               4 $"Reset Tripwire" off \
1817
-               5 $"App Settings" off \
1818
-               6 $"Add/Remove Apps" off \
1819
-               7 $"Logging on/off" off \
1820
-               8 $"Ping enable/disable" off \
1821
-               9 $"Manage Users" off \
1822
-               10 $"Email Menu" off \
1823
-               11 $"Security Settings" off \
1824
-               12 $"Set the main repository (repo mirrors)" off \
1825
-               13 $"Change the name of this system" off \
1826
-               14 $"Set a static local IP address" off \
1827
-               15 $"Wifi menu" off \
1828
-               16 $"Check for updates" off \
1829
-               17 $"Power off the system" off \
1830
-               18 $"Restart the system" off \
1831
-               19 $"Exit" on 2> $data
1903
+               2 $"Passwords" off \
1904
+               3 $"Backup and Restore" off \
1905
+               4 $"Show Firewall" off \
1906
+               5 $"Reset Tripwire" off \
1907
+               6 $"App Settings" off \
1908
+               7 $"Add/Remove Apps" off \
1909
+               8 $"Logging on/off" off \
1910
+               9 $"Ping enable/disable" off \
1911
+               10 $"Manage Users" off \
1912
+               11 $"Email Menu" off \
1913
+               12 $"Security Settings" off \
1914
+               13 $"Set the main repository (repo mirrors)" off \
1915
+               14 $"Change the name of this system" off \
1916
+               15 $"Set a static local IP address" off \
1917
+               16 $"Wifi menu" off \
1918
+               17 $"Check for updates" off \
1919
+               18 $"Power off the system" off \
1920
+               19 $"Restart the system" off \
1921
+               20 $"Exit" on 2> $data
1832 1922
         sel=$?
1833 1923
         case $sel in
1834 1924
             1) exit 1;;
@@ -1836,24 +1926,25 @@ function menu_top_level {
1836 1926
         esac
1837 1927
         case $(cat $data) in
1838 1928
             1) show_about;;
1839
-            2) menu_backup_restore;;
1840
-            3) show_firewall;;
1841
-            4) reset_tripwire;;
1842
-            5) menu_app_settings;;
1843
-            6) ${PROJECT_NAME}-addremove;;
1844
-            7) logging_on_off;;
1845
-            8) ping_enable_disable;;
1846
-            9) menu_users;;
1847
-            10) menu_email;;
1848
-            11) security_settings;;
1849
-            12) set_main_repo;;
1850
-            13) change_system_name;;
1851
-            14) set_static_IP;;
1852
-            15) menu_wifi;;
1853
-            16) check_for_updates;;
1854
-            17) shut_down_system;;
1855
-            18) restart_system;;
1856
-            19) break;;
1929
+            2) view_or_change_passwords;;
1930
+            3) menu_backup_restore;;
1931
+            4) show_firewall;;
1932
+            5) reset_tripwire;;
1933
+            6) menu_app_settings;;
1934
+            7) ${PROJECT_NAME}-addremove;;
1935
+            8) logging_on_off;;
1936
+            9) ping_enable_disable;;
1937
+            10) menu_users;;
1938
+            11) menu_email;;
1939
+            12) security_settings;;
1940
+            13) set_main_repo;;
1941
+            14) change_system_name;;
1942
+            15) set_static_IP;;
1943
+            16) menu_wifi;;
1944
+            17) check_for_updates;;
1945
+            18) shut_down_system;;
1946
+            19) restart_system;;
1947
+            20) break;;
1857 1948
         esac
1858 1949
     done
1859 1950
 }

+ 29
- 0
src/freedombone-utils-selector 查看文件

@@ -320,6 +320,35 @@ function detect_installable_apps {
320 320
     done
321 321
 }
322 322
 
323
+function detect_installed_apps {
324
+    FILES=/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-*
325
+
326
+    APPS_AVAILABLE=()
327
+    APPS_INSTALLED=()
328
+    APPS_INSTALLED_NAMES=()
329
+
330
+    function_check app_variants
331
+    function_check app_is_installed
332
+    function_check item_in_array
333
+
334
+    # for all the app scripts
335
+    for filename in $FILES
336
+    do
337
+        app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}')
338
+
339
+        if [[ $(app_is_installed $app_name) ]]; then
340
+            item_in_array "${app_name}" "${APPS_AVAILABLE[@]}"
341
+            if [[ $? != 0 ]]; then
342
+                variants_list=$(app_variants $filename)
343
+                if [ ${#variants_list} -gt 0 ]; then
344
+                    APPS_AVAILABLE+=("${app_name}")
345
+                    APPS_INSTALLED_NAMES+=("$app_name")
346
+                fi
347
+            fi
348
+        fi
349
+    done
350
+}
351
+
323 352
 # creates the APPS_AVAILABLE and APPS_CHOSEN arrays based on
324 353
 # the given variant name
325 354
 function choose_apps_for_variant {