Make port check optional, add y/n prompt (#448)
authorRuben Homs <ruben@homs.codes>
Thu, 24 Oct 2019 00:40:36 +0000 (02:40 +0200)
committerSam <sam.saffron@gmail.com>
Thu, 24 Oct 2019 00:40:36 +0000 (11:40 +1100)
discourse-setup

index 69e6f58536172bb176bff2b43a47690415c14300..205d4a0fb1ae5ba351365e7771f24e489f3118ca 100755 (executable)
@@ -18,49 +18,66 @@ check_root() {
 connect_to_port () {
   HOST="$1"
   PORT="$2"
-  VERIFY=`date +%s | sha256sum | base64 | head -c 20`
-  echo -e "HTTP/1.1 200 OK\n\n $VERIFY" | nc -w 4 -l -p $PORT >/dev/null 2>&1 &
-  if curl --proto =http -s $HOST:$PORT --connect-timeout 3 | grep $VERIFY >/dev/null 2>&1
-  then
-      return 0
+  VERIFY=$(date +%s | sha256sum | base64 | head -c 20)
+  if ! [ -x "$(command -v nc)" ]; then
+    echo "In order to check the connection to $HOST:$PORT we need to open a socket using netcat."
+    echo However netcat is not installed on your system. You can continue without this check
+    echo or abort the setup, install netcat and try again.
+    while true; do
+      read -p "Would you like to continue without this check? [yn] " yn
+      case $yn in
+      [Yy]*) return 2 ;;
+      [Nn]*) exit ;;
+      *) echo "Please answer y or n." ;;
+      esac
+    done
   else
-    curl --proto =http -s localhost:$PORT >/dev/null 2>&1
-    return 1
+    echo -e "HTTP/1.1 200 OK\n\n $VERIFY" | nc -w 4 -l -p $PORT >/dev/null 2>&1 &
+    if curl --proto =http -s $HOST:$PORT --connect-timeout 3 | grep $VERIFY >/dev/null 2>&1; then
+      return 0
+    else
+      curl --proto =http -s localhost:$PORT >/dev/null 2>&1
+      return 1
+    fi
   fi
 }
 
-check_IP_match () {
+check_IP_match() {
   HOST="$1"
   echo
   echo Checking your domain name . . .
-  if connect_to_port $HOST 443
-  then
-      echo
+  connect_to_port $HOST 443; ec=$?
+  case $ec in
+    0)
       echo "Connection to $HOST succeeded."
-  else
-    echo WARNING:: This server does not appear to be accessible at $HOST:443.
-    echo
-    if connect_to_port $HOST 80
-    then
-       echo A connection to port 80 succeeds, however.
-       echo This suggests that your DNS settings are correct,
-       echo but something is keeping traffic to port 443 from getting to your server.
-       echo Check your networking configuration to see that connections to port 443 are allowed.
-    else
-      echo "A connection to http://$HOST (port 80) also fails."
+      ;;
+    1)
+      echo "WARNING:: This server does not appear to be accessible at $HOST:443."
       echo
-      echo This suggests that $HOST resolves to the wrong IP address
-      echo or that traffic is not being routed to your server.
-    fi
-    echo
-    echo Google: \"open ports YOUR CLOUD SERVICE\" for information for resolving this problem.
-    echo
-    echo You should probably answer \"n\" at the next prompt and disable Let\'s Encrypt.
-    echo
-    echo This test might not work for all situations,
-    echo so if you can access Discourse at http://$HOST, you might try anyway.
-    sleep 3
-  fi
+      if connect_to_port $HOST 80; then
+        echo A connection to port 80 succeeds, however.
+        echo This suggests that your DNS settings are correct,
+        echo but something is keeping traffic to port 443 from getting to your server.
+        echo Check your networking configuration to see that connections to port 443 are allowed.
+      else
+        echo "A connection to http://$HOST (port 80) also fails."
+        echo
+        echo "This suggests that $HOST resolves to the wrong IP address"
+        echo or that traffic is not being routed to your server.
+      fi
+      echo
+      echo Google: \"open ports YOUR CLOUD SERVICE\" for information for resolving this problem.
+      echo
+      echo You should probably answer \"n\" at the next prompt and disable Let\'s Encrypt.
+      echo
+      echo This test might not work for all situations,
+      echo "so if you can access Discourse at http://$HOST, you might try anyway."
+      sleep 3
+      ;;
+    2)
+      echo "Continuing without port check."
+      ;;
+  esac
 }
 
 ##