diff --git a/src/freedombone-controlpanel b/src/freedombone-controlpanel index f0184032..dcbe8277 100755 --- a/src/freedombone-controlpanel +++ b/src/freedombone-controlpanel @@ -224,150 +224,153 @@ function show_tor_bridges { function show_domains { read_config_param "DEFAULT_DOMAIN_NAME" - W=() - - W+=("IPv4" "$(get_ipv4_address) / $(get_external_ipv4_address)") - ipv6_address="$(get_ipv6_address)" - if [ ${#ipv6_address} -gt 0 ]; then - W+=("IPv6" "${ipv6_address}") - fi - - if [ -f /etc/ssh/ssh_host_rsa_key.pub ]; then - W+=("ssh rsa sha256" "$(awk '{print $2}' /etc/ssh/ssh_host_rsa_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64 | sed 's|=||g')") - fi - if [ -f /etc/ssh/ssh_host_ed25519_key.pub ]; then - W+=("ssh ed25519 sha256" "$(awk '{print $2}' /etc/ssh/ssh_host_ed25519_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64 | sed 's|=||g')") - fi - - if grep -q "ssh onion domain" "$COMPLETION_FILE"; then - domain_onion=$(grep 'ssh onion domain' "${COMPLETION_FILE}" | awk -F ':' '{print $2}') - W+=("ssh" "${DEFAULT_DOMAIN_NAME} / ${domain_onion}") - fi - if grep -q "email onion domain" "$COMPLETION_FILE"; then - domain_onion=$(grep 'email onion domain' "${COMPLETION_FILE}" | awk -F ':' '{print $2}') - W+=("Email" "${DEFAULT_DOMAIN_NAME} / ${domain_onion}") - fi - if grep -q "sks onion domain" "$COMPLETION_FILE"; then - read_config_param "KEYSERVER_DOMAIN_NAME" - domain_onion=$(grep 'sks onion domain' "${COMPLETION_FILE}" | awk -F ':' '{print $2}') - W+=("SKS" "${KEYSERVER_DOMAIN_NAME} / ${domain_onion}") - fi - - INTRODUCER_FILENAME=/home/tahoelafs/data/private/introducer.furl - if [ -f $INTRODUCER_FILENAME ]; then - W+=("Tahoe-LAFS" "$(cat $INTRODUCER_FILENAME)") - fi - - show_tor_bridges - - # shellcheck disable=SC2068 - for app_name in ${APPS_INSTALLED_NAMES[@]} + while true do - if ! grep -q "SHOW_ON_ABOUT=1" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}"; then - continue + W=() + + W+=("IPv4" "$(get_ipv4_address) / $(get_external_ipv4_address)") + ipv6_address="$(get_ipv6_address)" + if [ ${#ipv6_address} -gt 0 ]; then + W+=("IPv6" "${ipv6_address}") fi - # handle the foibles of capitalisation - if ! grep -q "${app_name} domain" "$COMPLETION_FILE"; then - app_name_upper=$(echo "${app_name}" | awk '{print toupper($0)}') - if grep -q "${app_name_upper} domain" "$COMPLETION_FILE"; then - app_name=${app_name_upper} - else - app_name_first_upper="$(tr '[:lower:]' '[:upper:]' <<< "${app_name:0:1}")${app_name:1}" - if grep -q "${app_name_first_upper} domain" "$COMPLETION_FILE"; then - app_name=${app_name_first_upper} + if [ -f /etc/ssh/ssh_host_rsa_key.pub ]; then + W+=("ssh rsa sha256" "$(awk '{print $2}' /etc/ssh/ssh_host_rsa_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64 | sed 's|=||g')") + fi + if [ -f /etc/ssh/ssh_host_ed25519_key.pub ]; then + W+=("ssh ed25519 sha256" "$(awk '{print $2}' /etc/ssh/ssh_host_ed25519_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64 | sed 's|=||g')") + fi + + if grep -q "ssh onion domain" "$COMPLETION_FILE"; then + domain_onion=$(grep 'ssh onion domain' "${COMPLETION_FILE}" | awk -F ':' '{print $2}') + W+=("ssh" "${DEFAULT_DOMAIN_NAME} / ${domain_onion}") + fi + if grep -q "email onion domain" "$COMPLETION_FILE"; then + domain_onion=$(grep 'email onion domain' "${COMPLETION_FILE}" | awk -F ':' '{print $2}') + W+=("Email" "${DEFAULT_DOMAIN_NAME} / ${domain_onion}") + fi + if grep -q "sks onion domain" "$COMPLETION_FILE"; then + read_config_param "KEYSERVER_DOMAIN_NAME" + domain_onion=$(grep 'sks onion domain' "${COMPLETION_FILE}" | awk -F ':' '{print $2}') + W+=("SKS" "${KEYSERVER_DOMAIN_NAME} / ${domain_onion}") + fi + + INTRODUCER_FILENAME=/home/tahoelafs/data/private/introducer.furl + if [ -f $INTRODUCER_FILENAME ]; then + W+=("Tahoe-LAFS" "$(cat $INTRODUCER_FILENAME)") + fi + + show_tor_bridges + + # shellcheck disable=SC2068 + for app_name in ${APPS_INSTALLED_NAMES[@]} + do + if ! grep -q "SHOW_ON_ABOUT=1" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}"; then + continue + fi + + # handle the foibles of capitalisation + if ! grep -q "${app_name} domain" "$COMPLETION_FILE"; then + app_name_upper=$(echo "${app_name}" | awk '{print toupper($0)}') + if grep -q "${app_name_upper} domain" "$COMPLETION_FILE"; then + app_name=${app_name_upper} + else + app_name_first_upper="$(tr '[:lower:]' '[:upper:]' <<< "${app_name:0:1}")${app_name:1}" + if grep -q "${app_name_first_upper} domain" "$COMPLETION_FILE"; then + app_name=${app_name_first_upper} + fi fi fi - fi - if [ ${#app_name} -gt 0 ]; then - icann_address=$(get_app_icann_address "$app_name") - if grep -q "SHOW_ICANN_ADDRESS_ON_ABOUT=0" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}"; then - icann_address='-' - fi - if [[ "$ONION_ONLY" != 'no' ]]; then - if [[ "${icann_address}" != "${LOCAL_NAME}.local" ]]; then + if [ ${#app_name} -gt 0 ]; then + icann_address=$(get_app_icann_address "$app_name") + if grep -q "SHOW_ICANN_ADDRESS_ON_ABOUT=0" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}"; then icann_address='-' fi - fi - onion_address=$(get_app_onion_address "$app_name") - if [ ${#onion_address} -eq 0 ]; then - onion_address="-" - fi - - if [[ "${icann_address}" != '-' ]]; then - if [[ "${onion_address}" != '-' ]]; then - W+=("${app_name}" "${icann_address} / ${onion_address}") - else - W+=("${app_name}" "${icann_address}") + if [[ "$ONION_ONLY" != 'no' ]]; then + if [[ "${icann_address}" != "${LOCAL_NAME}.local" ]]; then + icann_address='-' + fi + fi + onion_address=$(get_app_onion_address "$app_name") + if [ ${#onion_address} -eq 0 ]; then + onion_address="-" fi - else - W+=("${app_name}" "${onion_address}") - fi - if grep -q "mobile${app_name} onion domain" "$COMPLETION_FILE"; then - onion_address=$(get_app_onion_address "${app_name}" "mobile") if [[ "${icann_address}" != '-' ]]; then - W+=("${app_name} (mobile)" "${icann_address} / ${onion_address}") + if [[ "${onion_address}" != '-' ]]; then + W+=("${app_name}" "${icann_address} / ${onion_address}") + else + W+=("${app_name}" "${icann_address}") + fi else - W+=("${app_name} (mobile)" "${onion_address}") + W+=("${app_name}" "${onion_address}") + fi + + if grep -q "mobile${app_name} onion domain" "$COMPLETION_FILE"; then + onion_address=$(get_app_onion_address "${app_name}" "mobile") + if [[ "${icann_address}" != '-' ]]; then + W+=("${app_name} (mobile)" "${icann_address} / ${onion_address}") + else + W+=("${app_name} (mobile)" "${onion_address}") + fi fi fi - fi - done + done - if grep -q "rss reader domain" "$COMPLETION_FILE"; then - if [ -d /var/lib/tor/hidden_service_ttrss ]; then - domain_onion=$(cat /var/lib/tor/hidden_service_ttrss/hostname) - W+=("RSS Reader" "${domain_onion}") + if grep -q "rss reader domain" "$COMPLETION_FILE"; then + if [ -d /var/lib/tor/hidden_service_ttrss ]; then + domain_onion=$(cat /var/lib/tor/hidden_service_ttrss/hostname) + W+=("RSS Reader" "${domain_onion}") + fi + if [ -d /var/lib/tor/hidden_service_mobilerss ]; then + domain_onion=$(cat /var/lib/tor/hidden_service_mobilerss/hostname) + W+=("RSS mobile" "${domain_onion}") + fi fi - if [ -d /var/lib/tor/hidden_service_mobilerss ]; then - domain_onion=$(cat /var/lib/tor/hidden_service_mobilerss/hostname) - W+=("RSS mobile" "${domain_onion}") - fi - fi - width=$(tput cols) - height=$(tput lines) + width=$(tput cols) + height=$(tput lines) - # shellcheck disable=SC2068 - selected=$(dialog --backtitle $"Freedombone Control Panel" --title $"Domains" --menu $"Use Shift+cursors to select and copy onion addresses" $((height-4)) $((width-4)) $((height-4)) "${W[@]}" 3>&2 2>&1 1>&3) - if [ ! "$selected" ]; then - return - fi - # obtain the addresses from the key by itterating through - # the array. This is quite crude and maybe there's a better way - key_found= - selected_addresses= - for key in "${W[@]}"; - do - if [ $key_found ]; then - selected_addresses="$key" + # shellcheck disable=SC2068 + selected=$(dialog --backtitle $"Freedombone Control Panel" --title $"Domains" --menu $"Use Shift+cursors to select and copy onion addresses" $((height-4)) $((width-4)) $((height-4)) "${W[@]}" 3>&2 2>&1 1>&3) + if [ ! "$selected" ]; then break fi - if [[ "$key" == "$selected" ]]; then - key_found=1 + # obtain the addresses from the key by itterating through + # the array. This is quite crude and maybe there's a better way + key_found= + selected_addresses= + for key in "${W[@]}"; + do + if [ $key_found ]; then + selected_addresses="$key" + break + fi + if [[ "$key" == "$selected" ]]; then + key_found=1 + fi + done + # Was the key matched? + if [ ! "$selected_addresses" ]; then + break fi + # addresses were found - is this an onion? + if [[ "$selected_addresses" != *".onion"* ]]; then + continue + fi + # There are two forms of addresses: "x / y.onion" and "x.onion" + if [[ "$selected_addresses" == *'/'* ]]; then + onion_addr=$(echo "$selected_addresses" | awk -F '/' '{print $2}' | awk -F ' ' '{print $1}') + else + onion_addr="$selected_addresses" + fi + # show the onion address as a QR code + clear + echo "$onion_addr" + echo -n "$onion_addr" | qrencode -t UTF8 + any_key done - # Was the key matched? - if [ ! "$selected_addresses" ]; then - return - fi - # addresses were found - is this an onion? - if [[ "$selected_addresses" != *".onion"* ]]; then - return - fi - # There are two forms of addresses: "x / y.onion" and "x.onion" - if [[ "$selected_addresses" == *'/'* ]]; then - onion_addr=$(echo "$selected_addresses" | awk -F '/' '{print $2}' | awk -F ' ' '{print $1}') - else - onion_addr="$selected_addresses" - fi - # show the onion address as a QR code - clear - echo "$onion_addr" - echo -n "$onion_addr" | qrencode -t UTF8 - any_key } function show_users {