From 55a446e0b3f7229a79f4c62da30c745c431c6481 Mon Sep 17 00:00:00 2001
From: Bob Mottram <bob@robotics.uk.to>
Date: Sat, 1 Oct 2016 10:39:23 +0100
Subject: [PATCH] Username validation function

---
 src/freedombone-app-blog         |  4 ++--
 src/freedombone-app-emacs        |  4 ++--
 src/freedombone-app-irc          |  2 +-
 src/freedombone-app-syncthing    |  4 ++--
 src/freedombone-app-tahoelafs    |  2 +-
 src/freedombone-app-xmpp         |  2 +-
 src/freedombone-archive-mail     |  4 +++-
 src/freedombone-backup-local     |  2 +-
 src/freedombone-backup-remote    |  4 ++--
 src/freedombone-base-email       |  4 ++--
 src/freedombone-controlpanel     |  2 +-
 src/freedombone-restore-local    | 22 +++++++++++-----------
 src/freedombone-restore-remote   | 24 +++++++++++++-----------
 src/freedombone-sec              |  6 ++++--
 src/freedombone-syncthing        | 12 +++++++-----
 src/freedombone-utils-backup     |  2 +-
 src/freedombone-utils-validation |  9 +++++++++
 17 files changed, 63 insertions(+), 46 deletions(-)

diff --git a/src/freedombone-app-blog b/src/freedombone-app-blog
index be2606af0..cfb3f9351 100755
--- a/src/freedombone-app-blog
+++ b/src/freedombone-app-blog
@@ -244,7 +244,7 @@ function restore_local_blog {
         fi
         for d in /home/*/ ; do
             USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
-            if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+            if [[ $(is_valid_user $USERNAME) == "1" ]]; then
                 if [ -d /var/www/${FULLBLOG_DOMAIN_NAME}/htdocs/content/$USERNAME/blog/uncategorized/post ]; then
                     mv /var/www/${FULLBLOG_DOMAIN_NAME}/htdocs/content/$USERNAME/blog/*.md /var/www/${FULLBLOG_DOMAIN_NAME}/htdocs/content/$USERNAME/blog/uncategorized/post
                 fi
@@ -296,7 +296,7 @@ function restore_remote_blog {
         fi
         for d in /home/*/ ; do
             USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
-            if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+            if [[ $(is_valid_user $USERNAME) == "1" ]]; then
                 if [ -d /var/www/${FULLBLOG_DOMAIN_NAME}/htdocs/content/$USERNAME/blog/uncategorized/post ]; then
                     mv /var/www/${FULLBLOG_DOMAIN_NAME}/htdocs/content/$USERNAME/blog/*.md /var/www/${FULLBLOG_DOMAIN_NAME}/htdocs/content/$USERNAME/blog/uncategorized/post
                 fi
diff --git a/src/freedombone-app-emacs b/src/freedombone-app-emacs
index f71c2780c..36cef8ec2 100755
--- a/src/freedombone-app-emacs
+++ b/src/freedombone-app-emacs
@@ -49,7 +49,7 @@ function upgrade_emacs {
 function backup_local_emacs {
     for d in /home/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             if [ -d /home/$USERNAME/.emacs.d ]; then
                 echo $"Backing up Emacs config for $USERNAME"
                 if [ -f /home/$USERNAME/.emacs ]; then
@@ -67,7 +67,7 @@ function restore_local_emacs {
     if [ -d $USB_MOUNT/backup/emacs ]; then
         for d in $USB_MOUNT/backup/emacs/*/ ; do
             USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-            if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+            if [[ $(is_valid_user $USERNAME) == "1" ]]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
                 fi
diff --git a/src/freedombone-app-irc b/src/freedombone-app-irc
index c746d9ea6..378494cf3 100755
--- a/src/freedombone-app-irc
+++ b/src/freedombone-app-irc
@@ -61,7 +61,7 @@ function irc_set_global_password {
             # replace the password for all users
             for d in /home/*/ ; do
                 IRC_USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
-                if [[ $IRC_USERNAME != "git" && $IRC_USERNAME != "mirrors" && $IRC_USERNAME != "sync" && $IRC_USERNAME != "tahoelafs" ]]; then
+                if [[ $(is_valid_user $IRC_USERNAME) == "1" ]]; then
                     if [ -f /home/$IRC_USERNAME/.irssi/config ]; then
                         sed -i "s|$EXISTING_IRC_PASSWORD|$NEW_IRC_PASSWORD|g" /home/$IRC_USERNAME/.irssi/config
                         chown -R $IRC_USERNAME:$IRC_USERNAME /home/$IRC_USERNAME/.irssi
diff --git a/src/freedombone-app-syncthing b/src/freedombone-app-syncthing
index 19d7c446d..f2e4193d9 100755
--- a/src/freedombone-app-syncthing
+++ b/src/freedombone-app-syncthing
@@ -278,7 +278,7 @@ function restore_local_syncthing {
     if [ -d $USB_MOUNT/backup/syncthing ]; then
         for d in $USB_MOUNT/backup/syncthing/*/ ; do
             USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-            if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+            if [[ $(is_valid_user $USERNAME) == "1" ]]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
                 fi
@@ -366,7 +366,7 @@ function restore_remote_syncthing {
     if [ -d $SERVER_DIRECTORY/backup/syncthing ]; then
         for d in $SERVER_DIRECTORY/backup/syncthing/*/ ; do
             USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-            if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+            if [[ $(is_valid_user $USERNAME) == "1" ]]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
                 fi
diff --git a/src/freedombone-app-tahoelafs b/src/freedombone-app-tahoelafs
index b39d9b833..53e1e0edd 100755
--- a/src/freedombone-app-tahoelafs
+++ b/src/freedombone-app-tahoelafs
@@ -50,7 +50,7 @@ function change_password_tahoelafs {
 function reconfigure_tahoelafs {
     for d in /home/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             if [ -d /home/$USERNAME/.tahoe ]; then
                 su -c "$TAHOE_COMMAND stop" - $USERNAME
                 rm -rf /home/$USERNAME/.tahoe
diff --git a/src/freedombone-app-xmpp b/src/freedombone-app-xmpp
index 6e525132f..8e3d3c58d 100755
--- a/src/freedombone-app-xmpp
+++ b/src/freedombone-app-xmpp
@@ -246,7 +246,7 @@ function remove_xmpp {
 function xmpp_email_headers {
     for d in /home/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             if [ -f /home/$USERNAME/.muttrc ]; then
                 if ! grep -q "Jabber-ID" /home/$USERNAME/.muttrc; then
                     echo "my_hdr Jabber-ID: ${USERNAME}@${HOSTNAME}" >> /home/$USERNAME/.muttrc
diff --git a/src/freedombone-archive-mail b/src/freedombone-archive-mail
index 5c8b5c78b..de21c549a 100755
--- a/src/freedombone-archive-mail
+++ b/src/freedombone-archive-mail
@@ -33,9 +33,11 @@ PROJECT_NAME='freedombone'
 export TEXTDOMAIN=${PROJECT_NAME}-archive-mail
 export TEXTDOMAINDIR="/usr/share/locale"
 
+source /usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-validation
+
 for d in /home/*/ ; do
     USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
-    if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+    if [[ $(is_valid_user $USERNAME) == "1" ]]; then
         # for every user who has a mail directory
         if [ -d /home/$USERNAME/Maildir ]; then
             MUTTRC=/home/$USERNAME/.muttrc
diff --git a/src/freedombone-backup-local b/src/freedombone-backup-local
index a14cfe3f4..07d911bc0 100755
--- a/src/freedombone-backup-local
+++ b/src/freedombone-backup-local
@@ -98,7 +98,7 @@ function backup_users {
     # Backup user files
     for d in /home/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
 
             # Backup any gpg keys
             if [ -d /home/$USERNAME/.gnupg ]; then
diff --git a/src/freedombone-backup-remote b/src/freedombone-backup-remote
index 03dc5f7a5..d2aae8896 100755
--- a/src/freedombone-backup-remote
+++ b/src/freedombone-backup-remote
@@ -122,7 +122,7 @@ function backup_configuration {
 function backup_users {
     for d in /home/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
 
             # personal settings
             if [ -d /home/$USERNAME/personal ]; then
@@ -451,7 +451,7 @@ do
         # Social key management
         for d in /home/*/ ; do
             USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
-            if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+            if [[ $(is_valid_user $USERNAME) == "1" ]]; then
                 disperse_key_shares $USERNAME $REMOTE_DOMAIN $REMOTE_SSH_PORT "$REMOTE_PASSWORD" $REMOTE_SERVER
             fi
         done
diff --git a/src/freedombone-base-email b/src/freedombone-base-email
index f06a7b87d..1fe7ea504 100755
--- a/src/freedombone-base-email
+++ b/src/freedombone-base-email
@@ -1050,7 +1050,7 @@ function spam_filtering {
     echo '#!/bin/bash' > /usr/bin/filterspam
     echo 'for d in /home/*/ ; do' >> /usr/bin/filterspam
     echo '    USERNAME=$(echo "$d" | awk -F '"'"'/'"'"' '"'"'{print $3}'"'"')' >> /usr/bin/filterspam
-    echo '    if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then' >> /usr/bin/filterspam
+    echo '    if [[ $USERNAME != "git" && $USERNAME != "go" && $USERNAME != "gogs" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then' >> /usr/bin/filterspam
     echo '        MAILDIR=/home/$USERNAME/Maildir/.learn-spam' >> /usr/bin/filterspam
     echo '        if [ ! -d "$MAILDIR" ]; then' >> /usr/bin/filterspam
     echo '           exit' >> /usr/bin/filterspam
@@ -1072,7 +1072,7 @@ function spam_filtering {
     echo '#!/bin/bash' > /usr/bin/filterham
     echo 'for d in /home/*/ ; do' >> /usr/bin/filterham
     echo '    USERNAME=$(echo "$d" | awk -F '"'"'/'"'"' '"'"'{print $3}'"'"')' >> /usr/bin/filterham
-    echo '    if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then' >> /usr/bin/filterham
+    echo '    if [[ $USERNAME != "git" && $USERNAME != "go" && $USERNAME != "gogs" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then' >> /usr/bin/filterham
     echo '        MAILDIR=/home/$USERNAME/Maildir/.learn-ham' >> /usr/bin/filterham
     echo '        if [ ! -d "$MAILDIR" ]; then' >> /usr/bin/filterham
     echo '            exit' >> /usr/bin/filterham
diff --git a/src/freedombone-controlpanel b/src/freedombone-controlpanel
index 2d373a546..6d82f4149 100755
--- a/src/freedombone-controlpanel
+++ b/src/freedombone-controlpanel
@@ -459,7 +459,7 @@ function show_users {
     echo '--------------------------------------------------------------------------'
     for d in /home/*/ ; do
         USRNAME=$(echo "$d" | awk -F '/' '{print $3}')
-        if [[ $USRNAME != "git" && $USRNAME != "mirrors" && $USRNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USRNAME) == "1" ]]; then
             echo -n -e "$(pad_string ${USRNAME})"
             # get the SIP extension
             SIPEXT=
diff --git a/src/freedombone-restore-local b/src/freedombone-restore-local
index b44175738..c2ae9c2e0 100755
--- a/src/freedombone-restore-local
+++ b/src/freedombone-restore-local
@@ -238,7 +238,7 @@ function restore_mutt_settings {
     if [ -d $USB_MOUNT/backup/mutt ]; then
         for d in $USB_MOUNT/backup/mutt/*/ ; do
             USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-            if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+            if [[ $(is_valid_user $USERNAME) == "1" ]]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
                 fi
@@ -272,7 +272,7 @@ function restore_gpg {
     if [ -d $USB_MOUNT/backup/gnupg ]; then
         for d in $USB_MOUNT/backup/gnupg/*/ ; do
             USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-            if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+            if [[ $(is_valid_user $USERNAME) == "1" ]]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
                 fi
@@ -309,7 +309,7 @@ function restore_procmail {
     if [ -d $USB_MOUNT/backup/procmail ]; then
         for d in $USB_MOUNT/backup/procmail/*/ ; do
             USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-            if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+            if [[ $(is_valid_user $USERNAME) == "1" ]]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
                 fi
@@ -338,7 +338,7 @@ function restore_spamassassin {
     if [ -d $USB_MOUNT/backup/spamassassin ]; then
         for d in $USB_MOUNT/backup/spamassassin/*/ ; do
             USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-            if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+            if [[ $(is_valid_user $USERNAME) == "1" ]]; then
                 if [ -d $USB_MOUNT/backup/spamassassin/$USERNAME ]; then
                     if [ ! -d /home/$USERNAME ]; then
                         ${PROJECT_NAME}-adduser $USERNAME
@@ -399,7 +399,7 @@ function restore_user_ssh_keys {
     if [ -d $USB_MOUNT/backup/ssh ]; then
         for d in $USB_MOUNT/backup/ssh/*/ ; do
             USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-            if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+            if [[ $(is_valid_user $USERNAME) == "1" ]]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
                 fi
@@ -428,7 +428,7 @@ function restore_user_config {
     if [ -d $USB_MOUNT/backup/config ]; then
         for d in $USB_MOUNT/backup/config/*/ ; do
             USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-            if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+            if [[ $(is_valid_user $USERNAME) == "1" ]]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
                 fi
@@ -469,7 +469,7 @@ function restore_user_monkeysphere {
     if [ -d $USB_MOUNT/backup/monkeysphere ]; then
         for d in $USB_MOUNT/backup/monkeysphere/*/ ; do
             USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-            if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+            if [[ $(is_valid_user $USERNAME) == "1" ]]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
                 fi
@@ -508,7 +508,7 @@ function restore_user_fin {
     if [ -d $USB_MOUNT/backup/fin ]; then
         for d in $USB_MOUNT/backup/fin/*/ ; do
             USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-            if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+            if [[ $(is_valid_user $USERNAME) == "1" ]]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
                 fi
@@ -537,7 +537,7 @@ function restore_user_local {
     if [ -d $USB_MOUNT/backup/local ]; then
         for d in $USB_MOUNT/backup/local/*/ ; do
             USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-            if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+            if [[ $(is_valid_user $USERNAME) == "1" ]]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
                 fi
@@ -610,7 +610,7 @@ function restore_personal_settings {
     if [ -d $USB_MOUNT/backup/personal ]; then
         for d in $USB_MOUNT/backup/personal/*/ ; do
             USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-            if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+            if [[ $(is_valid_user $USERNAME) == "1" ]]; then
                 if [ -d $USB_MOUNT/backup/personal/$USERNAME ]; then
                     if [ ! -d /home/$USERNAME ]; then
                         ${PROJECT_NAME}-adduser $USERNAME
@@ -663,7 +663,7 @@ function restore_email {
     if [ -d $USB_MOUNT/backup/mail ]; then
         for d in $USB_MOUNT/backup/mail/*/ ; do
             USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-            if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+            if [[ $(is_valid_user $USERNAME) == "1" ]]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
                 fi
diff --git a/src/freedombone-restore-remote b/src/freedombone-restore-remote
index b5c234b5f..ce540e622 100755
--- a/src/freedombone-restore-remote
+++ b/src/freedombone-restore-remote
@@ -36,6 +36,8 @@ BACKUP_EXTRA_DIRECTORIES=/root/backup-extra-dirs.csv
 export TEXTDOMAIN=${PROJECT_NAME}-restore-remote
 export TEXTDOMAINDIR="/usr/share/locale"
 
+source /usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-validation
+
 SERVER_NAME=$1
 
 # whether to restore everything or just a specific application
@@ -225,7 +227,7 @@ function restore_mutt_settings {
     fi
     for d in $SERVER_DIRECTORY/backup/mutt/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             if [ -d $SERVER_DIRECTORY/backup/mutt/$USERNAME ]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
@@ -257,7 +259,7 @@ function restore_gpg {
     fi
     for d in $SERVER_DIRECTORY/backup/gnupg/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             if [ -d $SERVER_DIRECTORY/backup/gnupg/$USERNAME ]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
@@ -290,7 +292,7 @@ function restore_procmail {
     fi
     for d in $SERVER_DIRECTORY/backup/procmail/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             if [ -d $SERVER_DIRECTORY/backup/procmail/$USERNAME ]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
@@ -317,7 +319,7 @@ function restore_spamassassin {
     fi
     for d in $SERVER_DIRECTORY/backup/spamassassin/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             if [ -d $SERVER_DIRECTORY/backup/spamassassin/$USERNAME ]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
@@ -363,7 +365,7 @@ function restore_ssh_keys {
     fi
     for d in $SERVER_DIRECTORY/backup/ssh/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             if [ -d $SERVER_DIRECTORY/backup/ssh/$USERNAME ]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
@@ -390,7 +392,7 @@ function restore_user_config {
     fi
     for d in $SERVER_DIRECTORY/backup/config/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             if [ -d $SERVER_DIRECTORY/backup/config/$USERNAME ]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
@@ -429,7 +431,7 @@ function restore_user_monkeysphere {
     fi
     for d in $SERVER_DIRECTORY/backup/monkeysphere/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             if [ -d $SERVER_DIRECTORY/backup/monkeysphere/$USERNAME ]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
@@ -466,7 +468,7 @@ function restore_user_fin {
     fi
     for d in $SERVER_DIRECTORY/backup/fin/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             if [ -d $SERVER_DIRECTORY/backup/fin/$USERNAME ]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
@@ -493,7 +495,7 @@ function restore_user_local {
     fi
     for d in $SERVER_DIRECTORY/backup/local/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             if [ -d $SERVER_DIRECTORY/backup/local/$USERNAME ]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
@@ -561,7 +563,7 @@ function restore_personal_settings {
     fi
     for d in $SERVER_DIRECTORY/backup/personal/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             if [ -d $SERVER_DIRECTORY/backup/personal/$USERNAME ]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
@@ -608,7 +610,7 @@ function restore_email {
     fi
     for d in $SERVER_DIRECTORY/backup/mail/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             if [ -d $SERVER_DIRECTORY/backup/mail/$USERNAME ]; then
                 if [ ! -d /home/$USERNAME ]; then
                     ${PROJECT_NAME}-adduser $USERNAME
diff --git a/src/freedombone-sec b/src/freedombone-sec
index a46bb89fc..5b126d5da 100755
--- a/src/freedombone-sec
+++ b/src/freedombone-sec
@@ -36,6 +36,8 @@ export TEXTDOMAINDIR="/usr/share/locale"
 CONFIGURATION_FILE=/root/${PROJECT_NAME}.cfg
 COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt
 
+source /usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-validation
+
 SSL_PROTOCOLS=
 SSL_CIPHERS=
 SSH_CIPHERS=
@@ -336,7 +338,7 @@ function send_monkeysphere_server_keys_to_users {
     monkeysphere_server_keys=$(monkeysphere-host show-key | grep $"OpenPGP fingerprint" | awk -F ' ' '{print $3}')
     for d in /home/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             if [ ! -d /home/$USERNAME/.monkeysphere ]; then
                 mkdir /home/$USERNAME/.monkeysphere
             fi
@@ -954,7 +956,7 @@ function export_settings {
 function refresh_gpg_keys {
     for d in /home/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             su -c 'gpg --refresh-keys' - $USERNAME
         fi
     done
diff --git a/src/freedombone-syncthing b/src/freedombone-syncthing
index bc91e3b48..777f14044 100755
--- a/src/freedombone-syncthing
+++ b/src/freedombone-syncthing
@@ -36,6 +36,8 @@ PROJECT_NAME='freedombone'
 export TEXTDOMAIN=$PROJECT_NAME-syncthing
 export TEXTDOMAINDIR="/usr/share/locale"
 
+source /usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-validation
+
 # File which keeps track of what has already been installed
 COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt
 
@@ -97,7 +99,7 @@ function create_syncthing_config {
 
     for d in /home/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             echo "    <folder id=\"$USERNAME\" path=\"/home/$USERNAME/Sync/\" ro=\"false\" rescanIntervalS=\"60\" ignorePerms=\"false\" autoNormalize=\"true\">" >> $SYNCTHING_CONFIG_FILE
             # include any specified device IDs for this user
             if [ -f /home/$USERNAME/$SYNCTHING_USER_IDS_FILE ]; then
@@ -137,7 +139,7 @@ function create_syncthing_config {
     echo "" > $TEMP_IDS_FILE
     for d in /home/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             if [ -f /home/$USERNAME/$SYNCTHING_USER_IDS_FILE ]; then
                 while read -r line || [[ -n "$line" ]]; do
                     line2="$(echo -e "${line}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
@@ -177,7 +179,7 @@ function create_syncthing_config {
     echo "" > $TEMP_IDS_FILE
     for d in /home/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             if [ -f /home/$USERNAME/$SYNCTHING_USER_IDS_FILE ]; then
                 while read -r line || [[ -n "$line" ]]; do
                     line2="$(echo -e "${line}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
@@ -236,7 +238,7 @@ function create_syncthing_config {
     # This allows it to appear within the user control panel
     for d in /home/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             echo "$SYNCTHING_ID" > /home/$USERNAME/.syncthing-server-id
             chown $USERNAME:$USERNAME /home/$USERNAME/.syncthing-server-id
         fi
@@ -257,7 +259,7 @@ function user_devices_changed {
 
     for d in /home/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             if [ -f /home/$USERNAME/$SYNCTHING_UPDATE_FILE ]; then
                 CHANGED=1
             fi
diff --git a/src/freedombone-utils-backup b/src/freedombone-utils-backup
index 9b1b4e678..a076c32d1 100755
--- a/src/freedombone-utils-backup
+++ b/src/freedombone-utils-backup
@@ -275,7 +275,7 @@ function set_user_permissions {
     echo $"Setting permissions"
     for d in /home/*/ ; do
         USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
-        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" && $USERNAME != "tahoelafs" ]]; then
+        if [[ $(is_valid_user $USERNAME) == "1" ]]; then
             chown -R $USERNAME:$USERNAME /home/$USERNAME
         fi
     done
diff --git a/src/freedombone-utils-validation b/src/freedombone-utils-validation
index a3f30c6e3..578ab08c6 100755
--- a/src/freedombone-utils-validation
+++ b/src/freedombone-utils-validation
@@ -60,4 +60,13 @@ function validate_freedns_code {
     VALID_CODE='yes'
 }
 
+function is_valid_user {
+    USRNAME="$1"
+    if [[ "$USRNAME" != "go" && "$USRNAME" != "gogs" && "$USRNAME" != "git" && "$USRNAME" != "mirrors" && "$USRNAME" != "sync" && "$USERNAME" != "tahoelafs" ]]; then
+        echo "1"
+    else
+        echo "0"
+    fi
+}
+
 # NOTE: deliberately no exit 0
-- 
GitLab