diff --git a/src/freedombone-controlpanel-user b/src/freedombone-controlpanel-user index 50ab4ca5..9f62fe21 100755 --- a/src/freedombone-controlpanel-user +++ b/src/freedombone-controlpanel-user @@ -40,829 +40,841 @@ SYNCTHING_CONFIG_FILE=~/.syncthingids SYNCTHING_ID=$(cat ~/.syncthing-server-id) function any_key { - echo ' ' - read -n1 -r -p $"Press any key to continue..." key + echo ' ' + read -n1 -r -p $"Press any key to continue..." key } function remove_user_from_mailing_list { - USER_MAILING_LISTS=$(cat "/home/$USER/.procmailrc" | grep '\[' | grep '\]' | awk -F '\[' '{print $2}' | awk -F '\\' '{print $1}') + USER_MAILING_LISTS=$(cat "/home/$USER/.procmailrc" | grep '\[' | grep '\]' | awk -F '\[' '{print $2}' | awk -F '\\' '{print $1}') - i=0 - W=() - list_name=() - while read -r listname; do - i=$((i+1)) - W+=($i "$listname") - list_name+=("$listname") - echo $listname - done <<< "$USER_MAILING_LISTS" + i=0 + W=() + list_name=() + while read -r listname; do + i=$((i+1)) + W+=($i "$listname") + list_name+=("$listname") + echo $listname + done <<< "$USER_MAILING_LISTS" - i=$((i+1)) - W+=($i $"Exit back to user mainenance") + i=$((i+1)) + W+=($i $"Exit back to user mainenance") - list_selected=$(dialog --default-item "$i" --backtitle $"Freedombone User Control Panel" --title $"Remove yourself from a mailing list" --menu $"Select one of the following:" 24 50 17 "${W[@]}" 3>&2 2>&1 1>&3) + list_selected=$(dialog --default-item "$i" --backtitle $"Freedombone User Control Panel" --title $"Remove yourself from a mailing list" --menu $"Select one of the following:" 24 50 17 "${W[@]}" 3>&2 2>&1 1>&3) - if [ $? -eq 0 ]; then # Exit with OK - if [ ${list_selected} -ne ${i} ]; then - remove_list_name="${list_name[$((list_selected-1))]}" + if [ $? -eq 0 ]; then # Exit with OK + if [ ${list_selected} -ne ${i} ]; then + remove_list_name="${list_name[$((list_selected-1))]}" - # find the line number where the list is defined - line_number=0 - i=0 - while read -r line - do - if [[ "$line" == *"\[${remove_list_name}\\]"* ]]; then - line_number=${i} - fi - i=$((i+1)) - done < "/home/$USER/.procmailrc" + # find the line number where the list is defined + line_number=0 + i=0 + while read -r line + do + if [[ "$line" == *"\[${remove_list_name}\\]"* ]]; then + line_number=${i} + fi + i=$((i+1)) + done < "/home/$USER/.procmailrc" - if [ ${line_number} -eq 0 ]; then - # no match was found - return - fi + if [ ${line_number} -eq 0 ]; then + # no match was found + return + fi - # recreate the file - if [ -f /home/${USER}/.procmailrc_new ]; then - rm /home/${USER}/.procmailrc_new - fi - i=0 - clip=0 - while read -r line - do - i=$((i+1)) - if [ ${i} -gt $((line_number-1)) ]; then - if [ ${clip} -eq 0 ]; then - clip=1 - fi - if [ ${clip} -eq 1 ]; then - if [ ${i} -lt $((line_number+2)) ]; then - continue - else - if [ ${#line} -lt 1 ]; then - clip=2 - continue - fi - if [[ "$line" == ":"* || "$line" == "#"* ]]; then - clip=2 - else - continue - fi - fi - fi - fi + # recreate the file + if [ -f /home/${USER}/.procmailrc_new ]; then + rm /home/${USER}/.procmailrc_new + fi + i=0 + clip=0 + while read -r line + do + i=$((i+1)) + if [ ${i} -gt $((line_number-1)) ]; then + if [ ${clip} -eq 0 ]; then + clip=1 + fi + if [ ${clip} -eq 1 ]; then + if [ ${i} -lt $((line_number+2)) ]; then + continue + else + if [ ${#line} -lt 1 ]; then + clip=2 + continue + fi + if [[ "$line" == ":"* || "$line" == "#"* ]]; then + clip=2 + else + continue + fi + fi + fi + fi - echo "$line" >> /home/${USER}/.procmailrc_new + echo "$line" >> /home/${USER}/.procmailrc_new - if [[ "$line" == *"\[${remove_list_name}\\]"* ]]; then - line_number=${i} - fi - done < "/home/$USER/.procmailrc" - cp /home/${USER}/.procmailrc_new /home/${USER}/.procmailrc - rm /home/${USER}/.procmailrc_new - chown ${USER}:${USER} /home/${USER}/.procmailrc - dialog --title $"Remove yourself from mailing list" \ - --msgbox $"You have been removed from ${remove_list_name}" 6 50 - fi - fi + if [[ "$line" == *"\[${remove_list_name}\\]"* ]]; then + line_number=${i} + fi + done < "/home/$USER/.procmailrc" + cp /home/${USER}/.procmailrc_new /home/${USER}/.procmailrc + rm /home/${USER}/.procmailrc_new + chown ${USER}:${USER} /home/${USER}/.procmailrc + dialog --title $"Remove yourself from mailing list" \ + --msgbox $"You have been removed from ${remove_list_name}" 6 50 + fi + fi } function add_to_mailing_list { - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone User Control Panel" \ - --title $"Subscribe to a mailing list" \ - --form $"You can either enter a subject or an email address\n" 11 68 4 \ - $"List folder name:" 1 1 "" 1 35 26 25 \ - $"Name between [] on subject line:" 2 1 "" 2 35 26 25 \ - $"List email address:" 3 1 "" 3 35 26 25 \ - $"Public:" 4 1 $"yes" 4 35 4 25 \ - 2> $data - sel=$? - case $sel in - 1) return;; - 255) return;; - esac - LIST_NAME=$(cat $data | sed -n 1p) - LIST_SUBJECT=$(cat $data | sed -n 2p) - LIST_EMAIL=$(cat $data | sed -n 3p) - LIST_PUBLIC=$(cat $data | sed -n 4p) + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone User Control Panel" \ + --title $"Subscribe to a mailing list" \ + --form $"You can either enter a subject or an email address\n" 11 68 4 \ + $"List folder name:" 1 1 "" 1 35 26 25 \ + $"Name between [] on subject line:" 2 1 "" 2 35 26 25 \ + $"List email address:" 3 1 "" 3 35 26 25 \ + $"Public:" 4 1 $"yes" 4 35 4 25 \ + 2> $data + sel=$? + case $sel in + 1) return;; + 255) return;; + esac + LIST_NAME=$(cat $data | sed -n 1p) + LIST_SUBJECT=$(cat $data | sed -n 2p) + LIST_EMAIL=$(cat $data | sed -n 3p) + LIST_PUBLIC=$(cat $data | sed -n 4p) - if [ ${#LIST_PUBLIC} -lt 1 ]; then - LIST_PUBLIC='no' - fi - if [[ $LIST_PUBLIC == $'y' || $LIST_PUBLIC == $'Y' || $LIST_PUBLIC == $'true' || $LIST_PUBLIC == $'True' || $LIST_PUBLIC == $'yes' || $LIST_PUBLIC == $'Yes' || $LIST_PUBLIC == $'YES' ]]; then - LIST_PUBLIC='yes' - else - LIST_PUBLIC='no' - fi - if [ ${#LIST_NAME} -lt 2 ]; then - dialog --title $"Add mailing list" \ - --msgbox $"No mailing list name was given" 6 40 - return - fi - if [ ${#LIST_SUBJECT} -lt 2 ]; then - if [ ${#LIST_EMAIL} -lt 2 ]; then - dialog --title $"Add mailing list" \ - --msgbox $"No mailing list subject or address was given" 6 40 - return - fi - fi - if [ ${#LIST_SUBJECT} -gt 1 ]; then - ${PROJECT_NAME}-addlist -u $USER -l "$LIST_NAME" \ - -s "$LIST_SUBJECT" --public $LIST_PUBLIC - else - if [[ "$LIST_EMAIL" != *"@"* || "$LIST_EMAIL" != *"."* ]]; then - dialog --title $"Add mailing list" \ - --msgbox $"Unrecognised email address" 6 40 - return - else - ${PROJECT_NAME}-addlist -u $USER -l "$LIST_NAME" \ - -e "$LIST_EMAIL" --public $LIST_PUBLIC - fi - fi + if [ ${#LIST_PUBLIC} -lt 1 ]; then + LIST_PUBLIC='no' + fi + if [[ $LIST_PUBLIC == $'y' || $LIST_PUBLIC == $'Y' || $LIST_PUBLIC == $'true' || $LIST_PUBLIC == $'True' || $LIST_PUBLIC == $'yes' || $LIST_PUBLIC == $'Yes' || $LIST_PUBLIC == $'YES' ]]; then + LIST_PUBLIC='yes' + else + LIST_PUBLIC='no' + fi + if [ ${#LIST_NAME} -lt 2 ]; then + dialog --title $"Add mailing list" \ + --msgbox $"No mailing list name was given" 6 40 + return + fi + if [ ${#LIST_SUBJECT} -lt 2 ]; then + if [ ${#LIST_EMAIL} -lt 2 ]; then + dialog --title $"Add mailing list" \ + --msgbox $"No mailing list subject or address was given" 6 40 + return + fi + fi + if [ ${#LIST_SUBJECT} -gt 1 ]; then + ${PROJECT_NAME}-addlist -u $USER -l "$LIST_NAME" \ + -s "$LIST_SUBJECT" --public $LIST_PUBLIC + else + if [[ "$LIST_EMAIL" != *"@"* || "$LIST_EMAIL" != *"."* ]]; then + dialog --title $"Add mailing list" \ + --msgbox $"Unrecognised email address" 6 40 + return + else + ${PROJECT_NAME}-addlist -u $USER -l "$LIST_NAME" \ + -e "$LIST_EMAIL" --public $LIST_PUBLIC + fi + fi - dialog --title $"Add mailing list" \ - --msgbox $"$LIST_NAME list was added" 6 40 + dialog --title $"Add mailing list" \ + --msgbox $"$LIST_NAME list was added" 6 40 } function email_rule_address { - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone User Control Panel" \ - --title $"Create an email rule" \ - --form "\n" 9 65 4 \ - $"When email arrives from address:" 1 1 "" 1 35 24 28 \ - $"Move to folder:" 2 1 "" 2 35 24 28 \ - $"Public:" 3 1 $"no" 3 35 4 25 \ - 2> $data - sel=$? - case $sel in - 1) return;; - 255) return;; - esac - RULE_EMAIL=$(cat $data | sed -n 1p) - RULE_FOLDER=$(cat $data | sed -n 2p) - RULE_PUBLIC=$(cat $data | sed -n 3p) + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone User Control Panel" \ + --title $"Create an email rule" \ + --form "\n" 9 65 4 \ + $"When email arrives from address:" 1 1 "" 1 35 24 28 \ + $"Move to folder:" 2 1 "" 2 35 24 28 \ + $"Public:" 3 1 $"no" 3 35 4 25 \ + 2> $data + sel=$? + case $sel in + 1) return;; + 255) return;; + esac + RULE_EMAIL=$(cat $data | sed -n 1p) + RULE_FOLDER=$(cat $data | sed -n 2p) + RULE_PUBLIC=$(cat $data | sed -n 3p) - if [ ${#RULE_PUBLIC} -lt 1 ]; then - RULE_PUBLIC='no' - fi - if [[ $RULE_PUBLIC == $'y' || $RULE_PUBLIC == $'Y' || $RULE_PUBLIC == $'true' || $RULE_PUBLIC == $'True' || $RULE_PUBLIC == $'yes' || $RULE_PUBLIC == $'Yes' || $RULE_PUBLIC == $'YES' ]]; then - RULE_PUBLIC='yes' - else - RULE_PUBLIC='no' - fi - if [ ${#RULE_EMAIL} -lt 2 ]; then - dialog --title $"Create an email rule" \ - --msgbox $"No email address was given" 6 40 - return - fi - if [ ${#RULE_FOLDER} -lt 2 ]; then - dialog --title $"Create an email rule" \ - --msgbox $"No folder name was given" 6 40 - return - fi - if [[ "$RULE_EMAIL" != *"@"* || "$RULE_EMAIL" != *"."* ]]; then - dialog --title $"Create an email rule" \ - --msgbox $"Unrecognised email address" 6 40 - return - fi + if [ ${#RULE_PUBLIC} -lt 1 ]; then + RULE_PUBLIC='no' + fi + if [[ $RULE_PUBLIC == $'y' || $RULE_PUBLIC == $'Y' || $RULE_PUBLIC == $'true' || $RULE_PUBLIC == $'True' || $RULE_PUBLIC == $'yes' || $RULE_PUBLIC == $'Yes' || $RULE_PUBLIC == $'YES' ]]; then + RULE_PUBLIC='yes' + else + RULE_PUBLIC='no' + fi + if [ ${#RULE_EMAIL} -lt 2 ]; then + dialog --title $"Create an email rule" \ + --msgbox $"No email address was given" 6 40 + return + fi + if [ ${#RULE_FOLDER} -lt 2 ]; then + dialog --title $"Create an email rule" \ + --msgbox $"No folder name was given" 6 40 + return + fi + if [[ "$RULE_EMAIL" != *"@"* || "$RULE_EMAIL" != *"."* ]]; then + dialog --title $"Create an email rule" \ + --msgbox $"Unrecognised email address" 6 40 + return + fi - ${PROJECT_NAME}-addemail -u $USER -e "$RULE_EMAIL" \ - -g "$RULE_FOLDER" --public $RULE_PUBLIC - dialog --title $"Create an email rule" \ - --msgbox $"Email rule for $RULE_EMAIL was added" 6 40 + ${PROJECT_NAME}-addemail -u $USER -e "$RULE_EMAIL" \ + -g "$RULE_FOLDER" --public $RULE_PUBLIC + dialog --title $"Create an email rule" \ + --msgbox $"Email rule for $RULE_EMAIL was added" 6 40 } function email_rule_subject { - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone User Control Panel" \ - --title $"Create an email rule" \ - --form "\n" 9 75 4 \ - $"When email arrives with subject containing:" 1 1 "" 1 45 24 28 \ - $"Move to folder:" 2 1 "" 2 45 24 28 \ - $"Public:" 3 1 $"no" 3 45 4 25 \ - 2> $data - sel=$? - case $sel in - 1) return;; - 255) return;; - esac - RULE_SUBJECT=$(cat $data | sed -n 1p) - RULE_FOLDER=$(cat $data | sed -n 2p) - RULE_PUBLIC=$(cat $data | sed -n 3p) + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone User Control Panel" \ + --title $"Create an email rule" \ + --form "\n" 9 75 4 \ + $"When email arrives with subject containing:" 1 1 "" 1 45 24 28 \ + $"Move to folder:" 2 1 "" 2 45 24 28 \ + $"Public:" 3 1 $"no" 3 45 4 25 \ + 2> $data + sel=$? + case $sel in + 1) return;; + 255) return;; + esac + RULE_SUBJECT=$(cat $data | sed -n 1p) + RULE_FOLDER=$(cat $data | sed -n 2p) + RULE_PUBLIC=$(cat $data | sed -n 3p) - if [ ${#RULE_PUBLIC} -lt 1 ]; then - RULE_PUBLIC='no' - fi - if [[ $RULE_PUBLIC == $'y' || $RULE_PUBLIC == $'Y' || $RULE_PUBLIC == $'true' || $RULE_PUBLIC == $'True' || $RULE_PUBLIC == $'yes' || $RULE_PUBLIC == $'Yes' || $RULE_PUBLIC == $'YES' ]]; then - RULE_PUBLIC='yes' - else - RULE_PUBLIC='no' - fi - if [ ${#RULE_SUBJECT} -lt 2 ]; then - dialog --title $"Create an email rule" \ - --msgbox $"No subject text was given" 6 40 - return - fi - if [ ${#RULE_FOLDER} -lt 2 ]; then - dialog --title $"Create an email rule" \ - --msgbox $"No folder name was given" 6 40 - return - fi + if [ ${#RULE_PUBLIC} -lt 1 ]; then + RULE_PUBLIC='no' + fi + if [[ $RULE_PUBLIC == $'y' || $RULE_PUBLIC == $'Y' || $RULE_PUBLIC == $'true' || $RULE_PUBLIC == $'True' || $RULE_PUBLIC == $'yes' || $RULE_PUBLIC == $'Yes' || $RULE_PUBLIC == $'YES' ]]; then + RULE_PUBLIC='yes' + else + RULE_PUBLIC='no' + fi + if [ ${#RULE_SUBJECT} -lt 2 ]; then + dialog --title $"Create an email rule" \ + --msgbox $"No subject text was given" 6 40 + return + fi + if [ ${#RULE_FOLDER} -lt 2 ]; then + dialog --title $"Create an email rule" \ + --msgbox $"No folder name was given" 6 40 + return + fi - ${PROJECT_NAME}-addemail -u $USER -s "$RULE_SUBJECT" \ - -g "$RULE_FOLDER" --public $RULE_PUBLIC - dialog --title $"Create an email rule" \ - --msgbox $"Email rule for subject '$RULE_SUBJECT' was added" 6 40 + ${PROJECT_NAME}-addemail -u $USER -s "$RULE_SUBJECT" \ + -g "$RULE_FOLDER" --public $RULE_PUBLIC + dialog --title $"Create an email rule" \ + --msgbox $"Email rule for subject '$RULE_SUBJECT' was added" 6 40 } function block_unblock_email { - blockstr=$"Block or unblock emails from a given address" - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone User Control Panel" \ - --title "$blockstr" \ - --form "\n" 8 65 3 \ - $"When email arrives from address:" 1 1 "" 1 35 24 100 \ - $"Block it:" 2 1 "yes" 2 35 4 4 \ - 2> $data - sel=$? - case $sel in - 1) return;; - 255) return;; - esac - BLOCK_EMAIL=$(cat $data | sed -n 1p) - BLOCK=$(cat $data | sed -n 2p) - if [ ${#BLOCK_EMAIL} -lt 2 ]; then - dialog --title "$blockstr" \ - --msgbox $"No email address was given" 6 40 - return - fi - if [[ "$BLOCK_EMAIL" != *"@"* || "$BLOCK_EMAIL" != *"."* ]]; then - dialog --title "$blockstr" \ - --msgbox $"Unrecognised email address" 6 40 - return - fi - if [[ $BLOCK == "y"* || $BLOCK == "Y"* ]]; then - ${PROJECT_NAME}-ignore -u $USER -e "$BLOCK_EMAIL" - dialog --title $"Block an email" \ - --msgbox "Email from $BLOCK_EMAIL is now blocked" 6 75 - else - ${PROJECT_NAME}-unignore -u $USER -e "$BLOCK_EMAIL" - dialog --title $"Unblock an email" \ - --msgbox "Email from $BLOCK_EMAIL is now unblocked" 6 75 - fi + blockstr=$"Block or unblock emails from a given address" + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone User Control Panel" \ + --title "$blockstr" \ + --form "\n" 8 65 3 \ + $"When email arrives from address:" 1 1 "" 1 35 24 100 \ + $"Block it:" 2 1 "yes" 2 35 4 4 \ + 2> $data + sel=$? + case $sel in + 1) return;; + 255) return;; + esac + BLOCK_EMAIL=$(cat $data | sed -n 1p) + BLOCK=$(cat $data | sed -n 2p) + if [ ${#BLOCK_EMAIL} -lt 2 ]; then + dialog --title "$blockstr" \ + --msgbox $"No email address was given" 6 40 + return + fi + if [[ "$BLOCK_EMAIL" != *"@"* || "$BLOCK_EMAIL" != *"."* ]]; then + dialog --title "$blockstr" \ + --msgbox $"Unrecognised email address" 6 40 + return + fi + if [[ $BLOCK == "y"* || $BLOCK == "Y"* ]]; then + ${PROJECT_NAME}-ignore -u $USER -e "$BLOCK_EMAIL" + dialog --title $"Block an email" \ + --msgbox "Email from $BLOCK_EMAIL is now blocked" 6 75 + else + ${PROJECT_NAME}-unignore -u $USER -e "$BLOCK_EMAIL" + dialog --title $"Unblock an email" \ + --msgbox "Email from $BLOCK_EMAIL is now unblocked" 6 75 + fi } function block_unblock_subject { - blockstr=$"Block or unblock emails with text in the subject line" - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone User Control Panel" \ - --title "$blockstr" \ - --form "\n" 8 70 3 \ - $"When email arrives with subject text:" 1 1 "" 1 40 24 28 \ - $"Block it:" 2 1 "yes" 2 40 4 4 \ - 2> $data - sel=$? - case $sel in - 1) return;; - 255) return;; - esac - BLOCK_SUBJECT=$(cat $data | sed -n 1p) - BLOCK=$(cat $data | sed -n 2p) - if [ ${#BLOCK_SUBJECT} -lt 2 ]; then - dialog --title "$blockstr" \ - --msgbox $"No subject was given" 6 40 - return - fi - if [[ $BLOCK == "y"* || $BLOCK == "Y"* ]]; then - ${PROJECT_NAME}-ignore -u $USER -t "$BLOCK_SUBJECT" - dialog --title $"Block an email" \ - --msgbox $"Email with subject $BLOCK_SUBJECT is now blocked" 6 40 - else - ${PROJECT_NAME}-unignore -u $USER -t "$BLOCK_SUBJECT" - dialog --title $"Unblock an email" \ - --msgbox $"Email with subject $BLOCK_SUBJECT is now unblocked" 6 40 - fi + blockstr=$"Block or unblock emails with text in the subject line" + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone User Control Panel" \ + --title "$blockstr" \ + --form "\n" 8 70 3 \ + $"When email arrives with subject text:" 1 1 "" 1 40 24 28 \ + $"Block it:" 2 1 "yes" 2 40 4 4 \ + 2> $data + sel=$? + case $sel in + 1) return;; + 255) return;; + esac + BLOCK_SUBJECT=$(cat $data | sed -n 1p) + BLOCK=$(cat $data | sed -n 2p) + if [ ${#BLOCK_SUBJECT} -lt 2 ]; then + dialog --title "$blockstr" \ + --msgbox $"No subject was given" 6 40 + return + fi + if [[ $BLOCK == "y"* || $BLOCK == "Y"* ]]; then + ${PROJECT_NAME}-ignore -u $USER -t "$BLOCK_SUBJECT" + dialog --title $"Block an email" \ + --msgbox $"Email with subject $BLOCK_SUBJECT is now blocked" 6 40 + else + ${PROJECT_NAME}-unignore -u $USER -t "$BLOCK_SUBJECT" + dialog --title $"Unblock an email" \ + --msgbox $"Email with subject $BLOCK_SUBJECT is now unblocked" 6 40 + fi } function show_gpg_key { - GPG_FINGERPRINT=$(gpg --fingerprint $MY_EMAIL_ADDRESS | grep -i "key fingerprint" | head -n 1 | awk -F '= ' '{print $2}') - GPG_DATE=$(gpg --fingerprint $MY_EMAIL_ADDRESS | grep -i "pub" | head -n 1 | awk -F '/' '{print $2}' | awk -F ' ' '{print $2}') - dialog --title $"My PGP/GPG Key" \ - --backtitle $"Freedombone User Control Panel" \ - --msgbox $"Email Address: $MY_EMAIL_ADDRESS\n\nKey ID: $GPG_ID\n\nFingerprint: $GPG_FINGERPRINT\n\nCreated: $GPG_DATE" 12 70 + GPG_FINGERPRINT=$(gpg --fingerprint $MY_EMAIL_ADDRESS | grep -i "key fingerprint" | head -n 1 | awk -F '= ' '{print $2}') + GPG_DATE=$(gpg --fingerprint $MY_EMAIL_ADDRESS | grep -i "pub" | head -n 1 | awk -F '/' '{print $2}' | awk -F ' ' '{print $2}') + dialog --title $"My PGP/GPG Key" \ + --backtitle $"Freedombone User Control Panel" \ + --msgbox $"Email Address: $MY_EMAIL_ADDRESS\n\nKey ID: $GPG_ID\n\nFingerprint: $GPG_FINGERPRINT\n\nCreated: $GPG_DATE" 12 70 } function publish_gpg_key { - gpg --send-key $GPG_ID - dialog --title $"Publish your PGP/GPG key" \ - --msgbox $"Your key has now been published" 6 40 + gpg --send-key $GPG_ID + dialog --title $"Publish your PGP/GPG key" \ + --msgbox $"Your key has now been published" 6 40 } function refresh_gpg_keys { - gpg --refresh-keys - dialog --title $"Refresh PGP/GPG keys" \ - --msgbox $"Your keys have been refreshed" 6 40 + gpg --refresh-keys + dialog --title $"Refresh PGP/GPG keys" \ + --msgbox $"Your keys have been refreshed" 6 40 } function add_gpg_key { - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --title $"Add someone's PGP/GPG key" \ - --backtitle $"Freedombone User Control Panel" \ - --inputbox $"Enter their email address below" 8 60 2>$data - sel=$? - case $sel in - 0) - ADD_EMAIL_ADDRESS=$(<$data) - if [ ${#ADD_EMAIL_ADDRESS} -gt 2 ]; then - if [[ $ADD_EMAIL_ADDRESS == *"@"* && $ADD_EMAIL_ADDRESS == *"."* ]]; then - clear - gpg --search-keys $ADD_EMAIL_ADDRESS - else - dialog --title $"Unrecognised email address" \ - --backtitle $"Freedombone User Control Panel" \ - --msgbox $"This doesn't look like an email address" 6 50 - fi - fi - ;; - esac + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --title $"Add someone's PGP/GPG key" \ + --backtitle $"Freedombone User Control Panel" \ + --inputbox $"Enter their email address below" 8 60 2>$data + sel=$? + case $sel in + 0) + ADD_EMAIL_ADDRESS=$(<$data) + if [ ${#ADD_EMAIL_ADDRESS} -gt 2 ]; then + if [[ $ADD_EMAIL_ADDRESS == *"@"* && $ADD_EMAIL_ADDRESS == *"."* ]]; then + clear + gpg --search-keys $ADD_EMAIL_ADDRESS + else + dialog --title $"Unrecognised email address" \ + --backtitle $"Freedombone User Control Panel" \ + --msgbox $"This doesn't look like an email address" 6 50 + fi + fi + ;; + esac } function remove_gpg_key { - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --title $"Remove someone's PGP/GPG key" \ - --backtitle $"Freedombone User Control Panel" \ - --inputbox $"Enter their email address below" 8 60 2>$data - sel=$? - case $sel in - 0) - REMOVE_EMAIL_ADDRESS=$(<$data) - if [ ${#REMOVE_EMAIL_ADDRESS} -gt 2 ]; then - if [[ $REMOVE_EMAIL_ADDRESS == *"@"* && $REMOVE_EMAIL_ADDRESS == *"."* ]]; then - if [[ $REMOVE_EMAIL_ADDRESS != $MY_EMAIL_ADDRESS ]]; then - clear - gpg --delete-key $REMOVE_EMAIL_ADDRESS - else - dialog --title $"Remove someone's PGP/GPG key" \ - --backtitle $"Freedombone User Control Panel" \ - --msgbox $"It's not a good idea to remove your own encryption key" 6 65 - fi - else - dialog --title $"Unrecognised email address" \ - --backtitle $"Freedombone User Control Panel" \ - --msgbox $"This doesn't look like an email address" 6 50 - fi - fi - ;; - esac + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --title $"Remove someone's PGP/GPG key" \ + --backtitle $"Freedombone User Control Panel" \ + --inputbox $"Enter their email address below" 8 60 2>$data + sel=$? + case $sel in + 0) + REMOVE_EMAIL_ADDRESS=$(<$data) + if [ ${#REMOVE_EMAIL_ADDRESS} -gt 2 ]; then + if [[ $REMOVE_EMAIL_ADDRESS == *"@"* && $REMOVE_EMAIL_ADDRESS == *"."* ]]; then + if [[ $REMOVE_EMAIL_ADDRESS != $MY_EMAIL_ADDRESS ]]; then + clear + gpg --delete-key $REMOVE_EMAIL_ADDRESS + else + dialog --title $"Remove someone's PGP/GPG key" \ + --backtitle $"Freedombone User Control Panel" \ + --msgbox $"It's not a good idea to remove your own encryption key" 6 65 + fi + else + dialog --title $"Unrecognised email address" \ + --backtitle $"Freedombone User Control Panel" \ + --msgbox $"This doesn't look like an email address" 6 50 + fi + fi + ;; + esac } function add_ssh_key { - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --title $"Add an ssh key for logging in" \ - --backtitle $"Freedombone User Control Panel" \ - --inputbox $"This will allow you to log into ${PROJECT_NAME} if you have an ssh key on your system, and provides much stronger security than simply using a login password.\n\nWARNING: If you make any mistakes here then you may not be able to log in and will need to get the administrator to clear your ssh authorized_keys file." 15 60 2>$data - sel=$? - case $sel in - 0) - SSH_PUBLIC_KEY=$(<$data) - if [ ${#SSH_PUBLIC_KEY} -gt 20 ]; then - if [[ "$SSH_PUBLIC_KEY" == "ssh-"* ]]; then - if [ ! -d /home/$USER/.ssh ]; then - mkdir /home/$USER/.ssh - fi - if [ ! -f /home/$USER/.ssh/authorized_keys ]; then - touch /home/$USER/.ssh/authorized_keys - fi - if ! grep -q "$SSH_PUBLIC_KEY" /home/$USER/.ssh/authorized_keys; then - echo "$SSH_PUBLIC_KEY" >> /home/$USER/.ssh/authorized_keys - dialog --title $"New ssh key added" \ - --backtitle $"Freedombone User Control Panel" \ - --msgbox $"Your ssh key has now been added" 6 50 - else - dialog --title $"ssh key already added" \ - --backtitle $"Freedombone User Control Panel" \ - --msgbox $"That ssh key has already been added" 6 50 - fi - else - dialog --title $"Unrecognised ssh public key" \ - --backtitle $"Freedombone User Control Panel" \ - --msgbox $"This doesn't look like an ssh key" 6 50 - fi - fi - ;; - esac + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --title $"Add an ssh key for logging in" \ + --backtitle $"Freedombone User Control Panel" \ + --inputbox $"This will allow you to log into ${PROJECT_NAME} if you have an ssh key on your system, and provides much stronger security than simply using a login password.\n\nWARNING: If you make any mistakes here then you may not be able to log in and will need to get the administrator to clear your ssh authorized_keys file." 15 60 2>$data + sel=$? + case $sel in + 0) + SSH_PUBLIC_KEY=$(<$data) + if [ ${#SSH_PUBLIC_KEY} -gt 20 ]; then + if [[ "$SSH_PUBLIC_KEY" == "ssh-"* ]]; then + if [ ! -d /home/$USER/.ssh ]; then + mkdir /home/$USER/.ssh + fi + if [ ! -f /home/$USER/.ssh/authorized_keys ]; then + touch /home/$USER/.ssh/authorized_keys + fi + if ! grep -q "$SSH_PUBLIC_KEY" /home/$USER/.ssh/authorized_keys; then + echo "$SSH_PUBLIC_KEY" >> /home/$USER/.ssh/authorized_keys + dialog --title $"New ssh key added" \ + --backtitle $"Freedombone User Control Panel" \ + --msgbox $"Your ssh key has now been added" 6 50 + else + dialog --title $"ssh key already added" \ + --backtitle $"Freedombone User Control Panel" \ + --msgbox $"That ssh key has already been added" 6 50 + fi + else + dialog --title $"Unrecognised ssh public key" \ + --backtitle $"Freedombone User Control Panel" \ + --msgbox $"This doesn't look like an ssh key" 6 50 + fi + fi + ;; + esac } function remove_ssh_key { - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --title $"Remove an ssh key for logging in" \ - --backtitle $"Freedombone User Control Panel" \ - --inputbox $"Enter the ssh public key which is to be removed. This can be just the address at the end.\n\nWARNING: If you make any mistakes here then you may not be able to log in and will need to get the administrator to clear your ssh authorized_keys file." 15 60 2>$data - sel=$? - case $sel in - 0) - SSH_PUBLIC_KEY=$(<$data) - if [ ${#SSH_PUBLIC_KEY} -gt 5 ]; then - if [ -f /home/$USER/.ssh/authorized_keys ]; then - sed -i "s|.*${SSH_PUBLIC_KEY}.*||g" /home/$USER/.ssh/authorized_keys - dialog --title $"Remove an ssh public key" \ - --backtitle $"Freedombone User Control Panel" \ - --msgbox $"The ssh key has been removed" 6 50 - fi - fi - ;; - esac + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --title $"Remove an ssh key for logging in" \ + --backtitle $"Freedombone User Control Panel" \ + --inputbox $"Enter the ssh public key which is to be removed. This can be just the address at the end.\n\nWARNING: If you make any mistakes here then you may not be able to log in and will need to get the administrator to clear your ssh authorized_keys file." 15 60 2>$data + sel=$? + case $sel in + 0) + SSH_PUBLIC_KEY=$(<$data) + if [ ${#SSH_PUBLIC_KEY} -gt 5 ]; then + if [ -f /home/$USER/.ssh/authorized_keys ]; then + sed -i "s|.*${SSH_PUBLIC_KEY}.*||g" /home/$USER/.ssh/authorized_keys + dialog --title $"Remove an ssh public key" \ + --backtitle $"Freedombone User Control Panel" \ + --msgbox $"The ssh key has been removed" 6 50 + fi + fi + ;; + esac } function smtp_proxy { - MUTTRC_FILE=/home/$USER/.muttrc - if [ ! -f $MUTTRC_FILE ]; then - return - fi - SMTP_PROXY_ENABLE=$'no' - SMTP_PROXY_PROTOCOL='smtps' - SMTP_PROXY_SERVER='mail.myispdomain' - SMTP_PROXY_PORT=465 - SMTP_PROXY_USERNAME='' - SMTP_PROXY_PASSWORD='' + MUTTRC_FILE=/home/$USER/.muttrc + if [ ! -f $MUTTRC_FILE ]; then + return + fi + SMTP_PROXY_ENABLE=$'no' + SMTP_PROXY_PROTOCOL='smtps' + SMTP_PROXY_SERVER='mail.myispdomain' + SMTP_PROXY_PORT=465 + SMTP_PROXY_USERNAME='' + SMTP_PROXY_PASSWORD='' - if grep -q "set smtp_url" $MUTTRC_FILE; then - if grep -q "#set smtp_url" $MUTTRC_FILE; then - SMTP_PROXY_ENABLE=$'no' - else - SMTP_PROXY_ENABLE=$'yes' - fi - SMTP_PROXY_PROTOCOL=$(cat $MUTTRC_FILE | grep "set smtp_url" | awk -F '"' '{print $2}' | awk -F ':' '{print $1}') - SMTP_PROXY_SERVER=$(cat $MUTTRC_FILE | grep "set smtp_url" | awk -F '"' '{print $2}' | awk -F '/' '{print $3}' | awk -F ':' '{print $2}' | awk -F '@' '{print $2}') - SMTP_PROXY_PORT=$(cat $MUTTRC_FILE | grep "set smtp_url" | awk -F ':' '{print $4}' | awk -F '/' '{print $1}') - SMTP_PROXY_USERNAME=$(cat $MUTTRC_FILE | grep "set smtp_url" | awk -F '"' '{print $2}' | awk -F '/' '{print $3}' | awk -F ':' '{print $1}') - SMTP_PROXY_PASSWORD=$(cat $MUTTRC_FILE | grep "set smtp_url" | awk -F '"' '{print $2}' | awk -F '/' '{print $3}' | awk -F ':' '{print $2}' | awk -F '@' '{print $1}') - fi + if grep -q "set smtp_url" $MUTTRC_FILE; then + if grep -q "#set smtp_url" $MUTTRC_FILE; then + SMTP_PROXY_ENABLE=$'no' + else + SMTP_PROXY_ENABLE=$'yes' + fi + SMTP_PROXY_PROTOCOL=$(cat $MUTTRC_FILE | grep "set smtp_url" | awk -F '"' '{print $2}' | awk -F ':' '{print $1}') + SMTP_PROXY_SERVER=$(cat $MUTTRC_FILE | grep "set smtp_url" | awk -F '"' '{print $2}' | awk -F '/' '{print $3}' | awk -F ':' '{print $2}' | awk -F '@' '{print $2}') + SMTP_PROXY_PORT=$(cat $MUTTRC_FILE | grep "set smtp_url" | awk -F ':' '{print $4}' | awk -F '/' '{print $1}') + SMTP_PROXY_USERNAME=$(cat $MUTTRC_FILE | grep "set smtp_url" | awk -F '"' '{print $2}' | awk -F '/' '{print $3}' | awk -F ':' '{print $1}') + SMTP_PROXY_PASSWORD=$(cat $MUTTRC_FILE | grep "set smtp_url" | awk -F '"' '{print $2}' | awk -F '/' '{print $3}' | awk -F ':' '{print $2}' | awk -F '@' '{print $1}') + fi - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone Control Panel" \ - --title $"SMTP Proxy for $USER" \ - --form $"You may need to proxy outgoing email via your ISP's mail server. If so enter the details below." 14 75 6 \ - $"Enable proxy:" 1 1 "$SMTP_PROXY_ENABLE" 1 24 5 5 \ - $"Protocol (smtp/smtps):" 2 1 "$SMTP_PROXY_PROTOCOL" 2 24 5 5 \ - $"ISP mail server:" 3 1 "$SMTP_PROXY_SERVER" 3 24 40 10000 \ - $"Port:" 4 1 "$SMTP_PROXY_PORT" 4 24 5 5 \ - $"Username:" 5 1 "$SMTP_PROXY_USERNAME" 5 24 40 10000 \ - $"Password:" 6 1 "$SMTP_PROXY_PASSWORD" 6 24 40 10000 \ - 2> $data - sel=$? - case $sel in - 1) return;; - 255) return;; - esac - SMTP_PROXY_ENABLE=$(cat $data | sed -n 1p) - SMTP_PROXY_PROTOCOL=$(cat $data | sed -n 2p) - SMTP_PROXY_SERVER=$(cat $data | sed -n 3p) - SMTP_PROXY_PORT=$(cat $data | sed -n 4p) - SMTP_PROXY_USERNAME=$(cat $data | sed -n 5p) - SMTP_PROXY_PASSWORD=$(cat $data | sed -n 6p) + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone Control Panel" \ + --title $"SMTP Proxy for $USER" \ + --form $"You may need to proxy outgoing email via your ISP's mail server. If so enter the details below." 14 75 6 \ + $"Enable proxy:" 1 1 "$SMTP_PROXY_ENABLE" 1 24 5 5 \ + $"Protocol (smtp/smtps):" 2 1 "$SMTP_PROXY_PROTOCOL" 2 24 5 5 \ + $"ISP mail server:" 3 1 "$SMTP_PROXY_SERVER" 3 24 40 10000 \ + $"Port:" 4 1 "$SMTP_PROXY_PORT" 4 24 5 5 \ + $"Username:" 5 1 "$SMTP_PROXY_USERNAME" 5 24 40 10000 \ + $"Password:" 6 1 "$SMTP_PROXY_PASSWORD" 6 24 40 10000 \ + 2> $data + sel=$? + case $sel in + 1) return;; + 255) return;; + esac + SMTP_PROXY_ENABLE=$(cat $data | sed -n 1p) + SMTP_PROXY_PROTOCOL=$(cat $data | sed -n 2p) + SMTP_PROXY_SERVER=$(cat $data | sed -n 3p) + SMTP_PROXY_PORT=$(cat $data | sed -n 4p) + SMTP_PROXY_USERNAME=$(cat $data | sed -n 5p) + SMTP_PROXY_PASSWORD=$(cat $data | sed -n 6p) - # change muttrc - if [ $SMTP_PROXY_ENABLE != $'no' ]; then - if ! grep -q "set smtp_url" $MUTTRC_FILE; then - echo "set smtp_url=\"${SMTP_PROXY_PROTOCOL}://${SMTP_PROXY_USERNAME}:${SMTP_PROXY_PASSWORD}@${SMTP_PROXY_SERVER}:${SMTP_PROXY_PORT}/\"" >> $MUTTRC_FILE - else - sed -i "s|set smtp_url=.*|set smtp_url=\"${SMTP_PROXY_PROTOCOL}://${SMTP_PROXY_USERNAME}:${SMTP_PROXY_PASSWORD}@${SMTP_PROXY_SERVER}:${SMTP_PROXY_PORT}/\"|g" $MUTTRC_FILE - fi - sed -i 's|#set smtp_url|set smtp_url|g' $MUTTRC_FILE - else - if grep "set smtp_url" $MUTTRC_FILE; then - sed -i 's|set smtp_url|#set smtp_url|g' $MUTTRC_FILE - fi - fi + # change muttrc + if [ $SMTP_PROXY_ENABLE != $'no' ]; then + if ! grep -q "set smtp_url" $MUTTRC_FILE; then + echo "set smtp_url=\"${SMTP_PROXY_PROTOCOL}://${SMTP_PROXY_USERNAME}:${SMTP_PROXY_PASSWORD}@${SMTP_PROXY_SERVER}:${SMTP_PROXY_PORT}/\"" >> $MUTTRC_FILE + else + sed -i "s|set smtp_url=.*|set smtp_url=\"${SMTP_PROXY_PROTOCOL}://${SMTP_PROXY_USERNAME}:${SMTP_PROXY_PASSWORD}@${SMTP_PROXY_SERVER}:${SMTP_PROXY_PORT}/\"|g" $MUTTRC_FILE + fi + sed -i 's|#set smtp_url|set smtp_url|g' $MUTTRC_FILE + else + if grep "set smtp_url" $MUTTRC_FILE; then + sed -i 's|set smtp_url|#set smtp_url|g' $MUTTRC_FILE + fi + fi } function syncthing_create_ids_file { - if [ ! -f ~/.syncthing-server-id ]; then - return - fi + if [ ! -f ~/.syncthing-server-id ]; then + return + fi - SYNCTHING_ID=$(cat ~/.syncthing-server-id) - if [ ! -f $SYNCTHING_CONFIG_FILE ]; then - echo $'# Your syncthing configuration file' > $SYNCTHING_CONFIG_FILE - echo '#' >> $SYNCTHING_CONFIG_FILE - echo $"# The ${PROJECT_NAME} syncthing ID is: $SYNCTHING_ID" >> $SYNCTHING_CONFIG_FILE - echo '#' >> $SYNCTHING_CONFIG_FILE - echo '# Paste the IDs of your devices below' >> $SYNCTHING_CONFIG_FILE - echo '#' >> $SYNCTHING_CONFIG_FILE - fi + SYNCTHING_ID=$(cat ~/.syncthing-server-id) + if [ ! -f $SYNCTHING_CONFIG_FILE ]; then + echo $'# Your syncthing configuration file' > $SYNCTHING_CONFIG_FILE + echo '#' >> $SYNCTHING_CONFIG_FILE + echo $"# The ${PROJECT_NAME} syncthing ID is: $SYNCTHING_ID" >> $SYNCTHING_CONFIG_FILE + echo '#' >> $SYNCTHING_CONFIG_FILE + echo '# Paste the IDs of your devices below' >> $SYNCTHING_CONFIG_FILE + echo '#' >> $SYNCTHING_CONFIG_FILE + fi } function syncthing_manual_edit { - if [ ! -f ~/.syncthing-server-id ]; then - return - fi - syncthing_create_ids_file - editor $SYNCTHING_CONFIG_FILE + if [ ! -f ~/.syncthing-server-id ]; then + return + fi + syncthing_create_ids_file + editor $SYNCTHING_CONFIG_FILE - # force an update of the configuration - touch ~/.syncthing-update + # force an update of the configuration + touch ~/.syncthing-update } function syncthing_show_id { - if [ ! -f ~/.syncthing-server-id ]; then - return - fi + if [ ! -f ~/.syncthing-server-id ]; then + return + fi - SYNCTHING_ID=$(cat ~/.syncthing-server-id) - dialog --title $"Device ID for ${PROJECT_NAME}" \ - --backtitle $"Freedombone User Control Panel" \ - --msgbox $"In a desktop terminal press shift and select the ID below,\nthen right click and copy.\n\nWithin Connectbot select Menu/Copy and then highlight the ID below\n\n$SYNCTHING_ID" 12 78 + SYNCTHING_ID=$(cat ~/.syncthing-server-id) + dialog --title $"Device ID for ${PROJECT_NAME}" \ + --backtitle $"Freedombone User Control Panel" \ + --msgbox $"In a desktop terminal press shift and select the ID below,\nthen right click and copy.\n\nWithin Connectbot select Menu/Copy and then highlight the ID below\n\n$SYNCTHING_ID" 12 78 } function syncthing_add_id { - if [ ! -f ~/.syncthing-server-id ]; then - return - fi + if [ ! -f ~/.syncthing-server-id ]; then + return + fi - syncthing_create_ids_file + syncthing_create_ids_file - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone User Control Panel" \ - --title $"Add a Syncthing device ID" \ - --form $"Paste the device ID for your laptop/desktop/netbook/phone/tablet below" 9 80 2 \ - $"Device ID:" 1 1 "" 1 26 80 80 \ - $"Description (optional):" 2 1 "" 2 26 80 80 \ - 2> $data - sel=$? - case $sel in - 1) return;; - 255) return;; - esac - SYNCTHING_DEVICE_ID=$(cat $data | sed -n 1p) - SYNCTHING_DESCRIPTION=$(cat $data | sed -n 2p) + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone User Control Panel" \ + --title $"Add a Syncthing device ID" \ + --form $"Paste the device ID for your laptop/desktop/netbook/phone/tablet below" 9 80 2 \ + $"Device ID:" 1 1 "" 1 26 80 80 \ + $"Description (optional):" 2 1 "" 2 26 80 80 \ + 2> $data + sel=$? + case $sel in + 1) return;; + 255) return;; + esac + SYNCTHING_DEVICE_ID=$(cat $data | sed -n 1p) + SYNCTHING_DESCRIPTION=$(cat $data | sed -n 2p) - if [ ${#SYNCTHING_DEVICE_ID} -lt 10 ]; then - return - fi + if [ ${#SYNCTHING_DEVICE_ID} -lt 10 ]; then + return + fi - if [[ $SYNCTHING_DEVICE_ID == *"#"* || $SYNCTHING_DEVICE_ID == *"*"* || $SYNCTHING_DEVICE_ID == *'/'* || $SYNCTHING_DEVICE_ID != *"-"* ]]; then - dialog --title $"Add a Syncthing device ID" \ - --backtitle $"Freedombone User Control Panel" \ - --msgbox $"That doesn't look like a device ID" 6 50 - return - fi + if [[ $SYNCTHING_DEVICE_ID == *"#"* || $SYNCTHING_DEVICE_ID == *"*"* || $SYNCTHING_DEVICE_ID == *'/'* || $SYNCTHING_DEVICE_ID != *"-"* ]]; then + dialog --title $"Add a Syncthing device ID" \ + --backtitle $"Freedombone User Control Panel" \ + --msgbox $"That doesn't look like a device ID" 6 50 + return + fi - if grep -q "$SYNCTHING_DEVICE_ID" $SYNCTHING_CONFIG_FILE; then - dialog --title $"Add a Syncthing device ID" \ - --backtitle $"Freedombone User Control Panel" \ - --msgbox $"That ID has already been added" 6 50 - return - fi + if grep -q "$SYNCTHING_DEVICE_ID" $SYNCTHING_CONFIG_FILE; then + dialog --title $"Add a Syncthing device ID" \ + --backtitle $"Freedombone User Control Panel" \ + --msgbox $"That ID has already been added" 6 50 + return + fi - if [ ${#SYNCTHING_DESCRIPTION} -gt 0 ]; then - echo "# $SYNCTHING_DESCRIPTION" >> $SYNCTHING_CONFIG_FILE - fi - echo "$SYNCTHING_DEVICE_ID" >> $SYNCTHING_CONFIG_FILE + if [ ${#SYNCTHING_DESCRIPTION} -gt 0 ]; then + echo "# $SYNCTHING_DESCRIPTION" >> $SYNCTHING_CONFIG_FILE + fi + echo "$SYNCTHING_DEVICE_ID" >> $SYNCTHING_CONFIG_FILE - # force an update of the configuration - touch ~/.syncthing-update + # force an update of the configuration + touch ~/.syncthing-update - dialog --title $"Add a Syncthing device ID" \ - --backtitle $"Freedombone User Control Panel" \ - --msgbox $"The ID was added" 6 50 + dialog --title $"Add a Syncthing device ID" \ + --backtitle $"Freedombone User Control Panel" \ + --msgbox $"The ID was added" 6 50 } function syncthing_remove_id { - if [ ! -f ~/.syncthing-server-id ]; then - return - fi + if [ ! -f ~/.syncthing-server-id ]; then + return + fi - syncthing_create_ids_file + syncthing_create_ids_file - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone User Control Panel" \ - --title $"Remove a Syncthing device ID" \ - --form $"Paste the device ID which is to be removed below" 8 80 1 \ - $"Device ID:" 1 1 "" 1 14 80 80 \ - 2> $data - sel=$? - case $sel in - 1) return;; - 255) return;; - esac - SYNCTHING_DEVICE_ID=$(cat $data | sed -n 1p) + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone User Control Panel" \ + --title $"Remove a Syncthing device ID" \ + --form $"Paste the device ID which is to be removed below" 8 80 1 \ + $"Device ID:" 1 1 "" 1 14 80 80 \ + 2> $data + sel=$? + case $sel in + 1) return;; + 255) return;; + esac + SYNCTHING_DEVICE_ID=$(cat $data | sed -n 1p) - if [ ${#SYNCTHING_DEVICE_ID} -lt 10 ]; then - return - fi + if [ ${#SYNCTHING_DEVICE_ID} -lt 10 ]; then + return + fi - if [[ $SYNCTHING_DEVICE_ID == *"#"* || $SYNCTHING_DEVICE_ID == *"*"* || $SYNCTHING_DEVICE_ID == *'/'* || $SYNCTHING_DEVICE_ID != *"-"* ]]; then - dialog --title $"Remove a Syncthing device ID" \ - --backtitle $"Freedombone User Control Panel" \ - --msgbox $"That doesn't look like a device ID" 6 50 - return - fi + if [[ $SYNCTHING_DEVICE_ID == *"#"* || $SYNCTHING_DEVICE_ID == *"*"* || $SYNCTHING_DEVICE_ID == *'/'* || $SYNCTHING_DEVICE_ID != *"-"* ]]; then + dialog --title $"Remove a Syncthing device ID" \ + --backtitle $"Freedombone User Control Panel" \ + --msgbox $"That doesn't look like a device ID" 6 50 + return + fi - if ! grep -q "$SYNCTHING_DEVICE_ID" $SYNCTHING_CONFIG_FILE; then - dialog --title $"Remove a Syncthing device ID" \ - --backtitle $"Freedombone User Control Panel" \ - --msgbox $"That ID wasn't registered anyway" 6 50 - return - fi + if ! grep -q "$SYNCTHING_DEVICE_ID" $SYNCTHING_CONFIG_FILE; then + dialog --title $"Remove a Syncthing device ID" \ + --backtitle $"Freedombone User Control Panel" \ + --msgbox $"That ID wasn't registered anyway" 6 50 + return + fi - sed -i "/$SYNCTHING_DEVICE_ID/d" $SYNCTHING_CONFIG_FILE + sed -i "/$SYNCTHING_DEVICE_ID/d" $SYNCTHING_CONFIG_FILE - # force an update of the configuration - touch ~/.syncthing-update + # force an update of the configuration + touch ~/.syncthing-update - dialog --title $"Remove a Syncthing device ID" \ - --backtitle $"Freedombone User Control Panel" \ - --msgbox $"The ID was removed" 6 50 + dialog --title $"Remove a Syncthing device ID" \ + --backtitle $"Freedombone User Control Panel" \ + --msgbox $"The ID was removed" 6 50 } function sign_gpg_key { - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --title $"Sign a PGP/GPG key or website domain" \ - --backtitle $"Freedombone User Control Panel" \ - --inputbox $"Enter the Key ID, address or domain to be signed.\n\nIf you are signing a website domain then include the https:// at the beginning.\n\nIf you are signing an ssh key then include ssh:// before the domain name." 14 75 2>$data - sel=$? - case $sel in - 0) - SIGN_ADDRESS=$(<$data) - if [ ${#SIGN_ADDRESS} -gt 2 ]; then - clear - gpg --search "$SIGN_ADDRESS" - fpr=$(gpg --with-colons --fingerprint "$SIGN_ADDRESS" | grep fpr | head -n 1 | awk -F ':' '{print $10}') - if [ ${#fpr} -gt 2 ]; then - gpg --sign-key $fpr - if [ "$?" = "0" ]; then - gpg --update-trustdb - dialog --title $"Sign a PGP/GPG key" \ - --backtitle $"Freedombone User Control Panel" \ - --msgbox $"$SIGN_ADDRESS was signed" 6 50 - fi - fi - fi - ;; - esac + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --title $"Sign a PGP/GPG key or website domain" \ + --backtitle $"Freedombone User Control Panel" \ + --inputbox $"Enter the Key ID, address or domain to be signed.\n\nIf you are signing a website domain then include the https:// at the beginning.\n\nIf you are signing an ssh key then include ssh:// before the domain name." 14 75 2>$data + sel=$? + case $sel in + 0) + SIGN_ADDRESS=$(<$data) + if [ ${#SIGN_ADDRESS} -gt 2 ]; then + clear + gpg --search "$SIGN_ADDRESS" + fpr=$(gpg --with-colons --fingerprint "$SIGN_ADDRESS" | grep fpr | head -n 1 | awk -F ':' '{print $10}') + if [ ${#fpr} -gt 2 ]; then + gpg --sign-key $fpr + if [ "$?" = "0" ]; then + gpg --update-trustdb + dialog --title $"Sign a PGP/GPG key" \ + --backtitle $"Freedombone User Control Panel" \ + --msgbox $"$SIGN_ADDRESS was signed" 6 50 + fi + fi + fi + ;; + esac } function menu_encryption_keys { - while true - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone User Control Panel" \ - --title $"My Encryption Keys" \ - --radiolist $"Choose an operation:" 17 70 9 \ - 1 $"Show your PGP/GPG key" off \ - 2 $"Publish your PGP/GPG key so that others can find it" off \ - 3 $"Add someone's PGP/GPG key" off \ - 4 $"Remove someone's PGP/GPG key" off \ - 5 $"Sign a PGP/GPG key or website domain" off \ - 6 $"Refresh your PGP/GPG keys" off \ - 7 $"Add an ssh key for logging in" off \ - 8 $"Remove an ssh key for logging in" off \ - 9 $"Back to main menu" on 2> $data - sel=$? - case $sel in - 1) break;; - 255) break;; - esac - case $(cat $data) in - 1) show_gpg_key;; - 2) publish_gpg_key;; - 3) add_gpg_key;; - 4) remove_gpg_key;; - 5) sign_gpg_key;; - 6) refresh_gpg_keys;; - 7) add_ssh_key;; - 8) remove_ssh_key;; - 9) break;; - esac - done + while true + do + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone User Control Panel" \ + --title $"My Encryption Keys" \ + --radiolist $"Choose an operation:" 17 70 9 \ + 1 $"Show your PGP/GPG key" off \ + 2 $"Publish your PGP/GPG key so that others can find it" off \ + 3 $"Add someone's PGP/GPG key" off \ + 4 $"Remove someone's PGP/GPG key" off \ + 5 $"Sign a PGP/GPG key or website domain" off \ + 6 $"Refresh your PGP/GPG keys" off \ + 7 $"Add an ssh key for logging in" off \ + 8 $"Remove an ssh key for logging in" off \ + 9 $"Back to main menu" on 2> $data + sel=$? + case $sel in + 1) break;; + 255) break;; + esac + case $(cat $data) in + 1) show_gpg_key;; + 2) publish_gpg_key;; + 3) add_gpg_key;; + 4) remove_gpg_key;; + 5) sign_gpg_key;; + 6) refresh_gpg_keys;; + 7) add_ssh_key;; + 8) remove_ssh_key;; + 9) break;; + esac + done } function menu_email { - while true - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone User Control Panel" \ - --title $"Change Email Filtering Rules" \ - --radiolist $"Choose an operation:" 14 70 7 \ - 1 $"Add yourself to a mailing list" off \ - 2 $"Remove yourself from a mailing list" off \ - 3 $"Add an email rule for an address" off \ - 4 $"Add an email rule for a subject" off \ - 5 $"Block or unblock an email address" off \ - 6 $"Block or unblock email with subject text" off \ - 7 $"Back to main menu" on 2> $data - sel=$? - case $sel in - 1) break;; - 255) break;; - esac - case $(cat $data) in - 1) add_to_mailing_list;; - 2) remove_user_from_mailing_list;; - 3) email_rule_address;; - 4) email_rule_subject;; - 5) block_unblock_email;; - 6) block_unblock_subject;; - 7) break;; - esac - done + while true + do + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone User Control Panel" \ + --title $"Change Email Filtering Rules" \ + --radiolist $"Choose an operation:" 14 70 7 \ + 1 $"Add yourself to a mailing list" off \ + 2 $"Remove yourself from a mailing list" off \ + 3 $"Add an email rule for an address" off \ + 4 $"Add an email rule for a subject" off \ + 5 $"Block or unblock an email address" off \ + 6 $"Block or unblock email with subject text" off \ + 7 $"Back to main menu" on 2> $data + sel=$? + case $sel in + 1) break;; + 255) break;; + esac + case $(cat $data) in + 1) add_to_mailing_list;; + 2) remove_user_from_mailing_list;; + 3) email_rule_address;; + 4) email_rule_subject;; + 5) block_unblock_email;; + 6) block_unblock_subject;; + 7) break;; + esac + done } function menu_syncthing { - while true - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone User Control Panel" \ - --title $"File Synchronization" \ - --radiolist $"Choose an operation:" 12 70 6 \ - 1 $"Show device ID for ${PROJECT_NAME}" off \ - 2 $"Add an ID for another machine or device" off \ - 3 $"Remove an ID for another machine or device" off \ - 4 $"Manually edit device IDs" off \ - 5 $"Back to main menu" on 2> $data - sel=$? - case $sel in - 1) break;; - 255) break;; - esac - case $(cat $data) in - 1) syncthing_show_id;; - 2) syncthing_add_id;; - 3) syncthing_remove_id;; - 4) syncthing_manual_edit;; - 5) break;; - esac - done + while true + do + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone User Control Panel" \ + --title $"File Synchronization" \ + --radiolist $"Choose an operation:" 12 70 6 \ + 1 $"Show device ID for ${PROJECT_NAME}" off \ + 2 $"Add an ID for another machine or device" off \ + 3 $"Remove an ID for another machine or device" off \ + 4 $"Manually edit device IDs" off \ + 5 $"Back to main menu" on 2> $data + sel=$? + case $sel in + 1) break;; + 255) break;; + esac + case $(cat $data) in + 1) syncthing_show_id;; + 2) syncthing_add_id;; + 3) syncthing_remove_id;; + 4) syncthing_manual_edit;; + 5) break;; + esac + done } function menu_admin { - if [ ! -f /etc/sudoers ]; then - clear - exit 0 - fi - sudo freedombone-controlpanel + if [ ! -f /etc/sudoers ]; then + clear + exit 0 + fi + sudo freedombone-controlpanel +} + +function sign_keys { + dialog --title $"Monkeysphere sign server keys" \ + --backtitle $"Freedombone Security Configuration" \ + --defaultno \ + --yesno $"\nMonkeysphere has been enabled and you will need to sign and trust the server keys. Do you want to do that now?" 8 60 + sel=$? + case $sel in + 0) ${PROJECT_NAME}-sec --sign yes;; + esac } function menu_top_level { - while true - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone User Control Panel" \ - --title $"User Control Panel" \ - --radiolist $"Choose an operation:" 19 50 12 \ - 1 $"Use Email" off \ - 2 $"Change Email Filtering Rules" off \ - 3 $"Use Tox Chat" off \ - 4 $"Use XMPP Chat" off \ - 5 $"Use IRC" off \ - 6 $"Browse the Web" off \ - 7 $"File Synchronization" off \ - 8 $"My Encryption Keys" off \ - 9 $"Set an outgoing email proxy" off \ - 10 $"Administrator controls" off \ - 11 $"Exit to the command line" off \ - 12 $"Log out" on 2> $data - sel=$? - case $sel in - 1) exit 1;; - 255) exit 1;; - esac - case $(cat $data) in - 1) mutt;; - 2) menu_email;; - 3) toxic --force-tcp --SOCKS5-proxy 127.0.0.1 9050;; - 4) torify profanity;; - 5) irssi;; - 6) torify elinks;; - 7) menu_syncthing;; - 8) menu_encryption_keys;; - 9) smtp_proxy;; - 10) menu_admin;; - 11) break;; - 12) kill -HUP `pgrep -s 0 -o`;; - esac - done + while true + do + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone User Control Panel" \ + --title $"User Control Panel" \ + --radiolist $"Choose an operation:" 19 50 12 \ + 1 $"Use Email" off \ + 2 $"Change Email Filtering Rules" off \ + 3 $"Use Tox Chat" off \ + 4 $"Use XMPP Chat" off \ + 5 $"Use IRC" off \ + 6 $"Browse the Web" off \ + 7 $"File Synchronization" off \ + 8 $"My Encryption Keys" off \ + 9 $"Set an outgoing email proxy" off \ + 10 $"Administrator controls" off \ + 11 $"Exit to the command line" off \ + 12 $"Log out" on 2> $data + sel=$? + case $sel in + 1) exit 1;; + 255) exit 1;; + esac + case $(cat $data) in + 1) mutt;; + 2) menu_email;; + 3) toxic --force-tcp --SOCKS5-proxy 127.0.0.1 9050;; + 4) torify profanity;; + 5) irssi;; + 6) torify elinks;; + 7) menu_syncthing;; + 8) menu_encryption_keys;; + 9) smtp_proxy;; + 10) menu_admin;; + 11) break;; + 12) kill -HUP `pgrep -s 0 -o`;; + esac + done } +sign_keys menu_top_level clear . ~/.bashrc diff --git a/src/freedombone-sec b/src/freedombone-sec index 0fca3239..725c9a43 100755 --- a/src/freedombone-sec +++ b/src/freedombone-sec @@ -64,9 +64,6 @@ DH_KEYLENGTH=2048 LETSENCRYPT_SERVER='https://acme-v01.api.letsencrypt.org/directory' MY_USERNAME= -if grep -q "MY_USERNAME" $CONFIGURATION_FILE; then - MY_USERNAME=$(grep "MY_USERNAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}') -fi function get_protocols_from_website { if [ ! -f $WEBSITES_DIRECTORY/$1 ]; then @@ -614,6 +611,10 @@ function enable_monkeysphere { esac if [ $monkey ]; then + if grep -q "MY_USERNAME" $CONFIGURATION_FILE; then + MY_USERNAME=$(grep "MY_USERNAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}') + fi + if [ ! -f /home/$MY_USERNAME/.monkeysphere/authorized_user_ids ]; then dialog --title $"GPG based authentication" \ --msgbox $"$MY_USERNAME does not currently have any ids within ~/.monkeysphere/authorized_user_ids" 6 40 @@ -927,6 +928,33 @@ function refresh_gpg_keys { exit 0 } +function monkeysphere_sign_server_keys { + server_keys_file=/home/$USER/.monkeysphere/server_keys + if [ ! -f $server_keys_file ]; then + exit 0 + fi + + keys_signed= + while read line; do + echo $line + if [ ${#line} -gt 2 ]; then + fpr=$(gpg --with-colons --fingerprint "$line" | grep fpr | head -n 1 | awk -F ':' '{print $10}') + if [ ${#fpr} -gt 2 ]; then + gpg --sign-key $fpr + if [ "$?" = "0" ]; then + gpg --update-trustdb + keys_signed=1 + fi + fi + fi + done <$server_keys_file + + if [ $keys_signed ]; then + rm $server_keys_file + fi + exit 0 +} + function show_help { echo '' echo "${PROJECT_NAME}-sec" @@ -938,6 +966,7 @@ function show_help { echo $' -e --export Export security settings to a file' echo $' -i --import Import security settings from a file' echo $' -r --refresh Refresh GPG keys for all users' + echo $' -s --sign Sign monkeysphere server keys' echo $' --register [domain] Register a https domain with monkeysphere' echo '' exit 0 @@ -973,6 +1002,11 @@ case $key in shift register_website "$1" ;; + # user signs monkeysphere server keys + -s|--sign) + shift + monkeysphere_sign_server_keys + ;; *) # unknown option ;;