|  | @@ -0,0 +1,273 @@
 | 
	
		
			
			|  | 1 | +#!/bin/bash
 | 
	
		
			
			|  | 2 | +#
 | 
	
		
			
			|  | 3 | +# .---.                  .              .
 | 
	
		
			
			|  | 4 | +# |                      |              |
 | 
	
		
			
			|  | 5 | +# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
 | 
	
		
			
			|  | 6 | +# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
 | 
	
		
			
			|  | 7 | +# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
 | 
	
		
			
			|  | 8 | +#
 | 
	
		
			
			|  | 9 | +#                    Freedom in the Cloud
 | 
	
		
			
			|  | 10 | +#
 | 
	
		
			
			|  | 11 | +# Checks for changed syncthing device IDs within user home directories
 | 
	
		
			
			|  | 12 | +# and then recreates the syncthing configuration file accordingly
 | 
	
		
			
			|  | 13 | +#
 | 
	
		
			
			|  | 14 | +# License
 | 
	
		
			
			|  | 15 | +# =======
 | 
	
		
			
			|  | 16 | +#
 | 
	
		
			
			|  | 17 | +# Copyright (C) 2016 Bob Mottram <bob@robotics.uk.to>
 | 
	
		
			
			|  | 18 | +#
 | 
	
		
			
			|  | 19 | +# This program is free software: you can redistribute it and/or modify
 | 
	
		
			
			|  | 20 | +# it under the terms of the GNU Affero General Public License as published by
 | 
	
		
			
			|  | 21 | +# the Free Software Foundation, either version 3 of the License, or
 | 
	
		
			
			|  | 22 | +# (at your option) any later version.
 | 
	
		
			
			|  | 23 | +#
 | 
	
		
			
			|  | 24 | +# This program is distributed in the hope that it will be useful,
 | 
	
		
			
			|  | 25 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
	
		
			
			|  | 26 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
	
		
			
			|  | 27 | +# GNU Affero General Public License for more details.
 | 
	
		
			
			|  | 28 | +#
 | 
	
		
			
			|  | 29 | +# You should have received a copy of the GNU Affero General Public License
 | 
	
		
			
			|  | 30 | +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
	
		
			
			|  | 31 | +
 | 
	
		
			
			|  | 32 | +NO_OF_ARGS=$#
 | 
	
		
			
			|  | 33 | +
 | 
	
		
			
			|  | 34 | +PROJECT_NAME='freedombone'
 | 
	
		
			
			|  | 35 | +
 | 
	
		
			
			|  | 36 | +export TEXTDOMAIN=$PROJECT_NAME-syncthing
 | 
	
		
			
			|  | 37 | +export TEXTDOMAINDIR="/usr/share/locale"
 | 
	
		
			
			|  | 38 | +
 | 
	
		
			
			|  | 39 | +# File which keeps track of what has already been installed
 | 
	
		
			
			|  | 40 | +COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt
 | 
	
		
			
			|  | 41 | +
 | 
	
		
			
			|  | 42 | +SYNCTHING_ID=
 | 
	
		
			
			|  | 43 | +SYNCTHING_CONFIG_PATH=/root/.config/syncthing
 | 
	
		
			
			|  | 44 | +SYNCTHING_CONFIG_FILE=$SYNCTHING_CONFIG_PATH/config.xml
 | 
	
		
			
			|  | 45 | +SYNCTHING_RELAY_SERVER='https://relays.syncthing.net/endpoint'
 | 
	
		
			
			|  | 46 | +SYNCTHING_RELEASES='https://api.github.com/repos/syncthing/syncthing/releases?per_page=30'
 | 
	
		
			
			|  | 47 | +SYNCTHING_PORT=22000
 | 
	
		
			
			|  | 48 | +SYNCTHING_SHARED_DATA=/var/lib/syncthing/SyncShared
 | 
	
		
			
			|  | 49 | +SYNCTHING_USER_IDS_FILE='.syncthingids'
 | 
	
		
			
			|  | 50 | +CHANGED=
 | 
	
		
			
			|  | 51 | +TEMP_IDS_FILE=/root/.synthingids
 | 
	
		
			
			|  | 52 | +
 | 
	
		
			
			|  | 53 | +function new_syncthing_id {
 | 
	
		
			
			|  | 54 | +    for i in {1..8}
 | 
	
		
			
			|  | 55 | +    do
 | 
	
		
			
			|  | 56 | +        v=""
 | 
	
		
			
			|  | 57 | +        for j in {1..2}
 | 
	
		
			
			|  | 58 | +        do
 | 
	
		
			
			|  | 59 | +            v2=`echo "obase=16;$RANDOM" | bc`
 | 
	
		
			
			|  | 60 | +            v=$v$v2
 | 
	
		
			
			|  | 61 | +        done
 | 
	
		
			
			|  | 62 | +        v=$(echo "$v" | cut -c1-7)
 | 
	
		
			
			|  | 63 | +        if [[ ${i} < 8 ]]; then
 | 
	
		
			
			|  | 64 | +            v=$v"-"
 | 
	
		
			
			|  | 65 | +        fi
 | 
	
		
			
			|  | 66 | +        echo -n "$v"
 | 
	
		
			
			|  | 67 | +    done
 | 
	
		
			
			|  | 68 | +    echo "$v"
 | 
	
		
			
			|  | 69 | +}
 | 
	
		
			
			|  | 70 | +
 | 
	
		
			
			|  | 71 | +function create_syncthing_config {
 | 
	
		
			
			|  | 72 | +    if grep -q "Syncthing ID" $COMPLETION_FILE; then
 | 
	
		
			
			|  | 73 | +        SYNCTHING_ID=$(cat $COMPLETION_FILE | grep "Syncthing ID" | awk -F ':' '{print $2}')
 | 
	
		
			
			|  | 74 | +    else
 | 
	
		
			
			|  | 75 | +        if [ -f $SYNCTHING_CONFIG_FILE ]; then
 | 
	
		
			
			|  | 76 | +            SYNCTHING_ID=$(cat $SYNCTHING_CONFIG_FILE | grep "device id=" | head -n 1 | awk -F '"' '{print $2}')
 | 
	
		
			
			|  | 77 | +        else
 | 
	
		
			
			|  | 78 | +            SYNCTHING_ID=$(new_syncthing_id)            
 | 
	
		
			
			|  | 79 | +        fi      
 | 
	
		
			
			|  | 80 | +    fi
 | 
	
		
			
			|  | 81 | +
 | 
	
		
			
			|  | 82 | +    if ! grep -q "Syncthing ID" $COMPLETION_FILE; then
 | 
	
		
			
			|  | 83 | +        echo "Syncthing ID:$SYNCTHING_ID" >> $COMPLETION_FILE
 | 
	
		
			
			|  | 84 | +    else
 | 
	
		
			
			|  | 85 | +        sed -i "s|Syncthing ID.*|Syncthing ID:$SYNCTHING_ID|g" $COMPLETION_FILE
 | 
	
		
			
			|  | 86 | +    fi
 | 
	
		
			
			|  | 87 | +
 | 
	
		
			
			|  | 88 | +    if [ ! -d $SYNCTHING_CONFIG_PATH ]; then
 | 
	
		
			
			|  | 89 | +        mkdir -p $SYNCTHING_CONFIG_PATH
 | 
	
		
			
			|  | 90 | +    fi
 | 
	
		
			
			|  | 91 | +    if [ ! -d $SYNCTHING_SHARED_DATA ]; then
 | 
	
		
			
			|  | 92 | +        mkdir -p $SYNCTHING_SHARED_DATA
 | 
	
		
			
			|  | 93 | +    fi
 | 
	
		
			
			|  | 94 | +
 | 
	
		
			
			|  | 95 | +    echo '<configuration version="12">' > $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 96 | +
 | 
	
		
			
			|  | 97 | +    for d in /home/*/ ; do
 | 
	
		
			
			|  | 98 | +        USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
 | 
	
		
			
			|  | 99 | +        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" ]]; then
 | 
	
		
			
			|  | 100 | +            echo "    <folder id=\"$USERNAME\" path=\"/home/$USERNAME/Sync/\" ro=\"false\" rescanIntervalS=\"60\" ignorePerms=\"false\" autoNormalize=\"true\">" >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 101 | +            # include any specified device IDs for this user
 | 
	
		
			
			|  | 102 | +            if [ -f /home/$USERNAME/$SYNCTHING_USER_IDS_FILE ]; then
 | 
	
		
			
			|  | 103 | +                echo "" > $TEMP_IDS_FILE
 | 
	
		
			
			|  | 104 | +                while read -r line || [[ -n "$line" ]]; do
 | 
	
		
			
			|  | 105 | +                    if [[ $line != *"#"* && $line != *"*"* && $line != *'/'*  && $line == *"-"* ]]; then
 | 
	
		
			
			|  | 106 | +                        if [ ${#line} -gt 10 ]; then
 | 
	
		
			
			|  | 107 | +                            if ! grep -q "$line" $TEMP_IDS_FILE; then
 | 
	
		
			
			|  | 108 | +                                echo "        <device id=\"$line\"></device>" >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 109 | +                                echo "$line" >> $TEMP_IDS_FILE
 | 
	
		
			
			|  | 110 | +                            fi
 | 
	
		
			
			|  | 111 | +                        fi
 | 
	
		
			
			|  | 112 | +                    fi
 | 
	
		
			
			|  | 113 | +                done < /home/$USERNAME/$SYNCTHING_USER_IDS_FILE
 | 
	
		
			
			|  | 114 | +                rm $TEMP_IDS_FILE
 | 
	
		
			
			|  | 115 | +            fi
 | 
	
		
			
			|  | 116 | +            echo "        <device id=\"$SYNCTHING_ID\"></device>" >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 117 | +            echo '        <minDiskFreePct>1</minDiskFreePct>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 118 | +            echo '        <versioning></versioning>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 119 | +            echo '        <copiers>0</copiers>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 120 | +            echo '        <pullers>0</pullers>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 121 | +            echo '        <hashers>0</hashers>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 122 | +            echo '        <order>random</order>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 123 | +            echo '        <ignoreDelete>false</ignoreDelete>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 124 | +            echo '        <scanProgressIntervalS>0</scanProgressIntervalS>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 125 | +            echo '        <pullerSleepS>0</pullerSleepS>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 126 | +            echo '        <pullerPauseS>0</pullerPauseS>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 127 | +            echo '        <maxConflicts>10</maxConflicts>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 128 | +            echo '        <disableSparseFiles>false</disableSparseFiles>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 129 | +            echo '    </folder>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 130 | +        fi
 | 
	
		
			
			|  | 131 | +    done
 | 
	
		
			
			|  | 132 | +
 | 
	
		
			
			|  | 133 | +    echo "    <folder id=\"shared\" path=\"$SYNCTHING_SHARED_DATA/\" ro=\"false\" rescanIntervalS=\"60\" ignorePerms=\"false\" autoNormalize=\"true\">" >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 134 | +    # all user devices may access this shared directory
 | 
	
		
			
			|  | 135 | +    echo "" > $TEMP_IDS_FILE
 | 
	
		
			
			|  | 136 | +    for d in /home/*/ ; do
 | 
	
		
			
			|  | 137 | +        USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
 | 
	
		
			
			|  | 138 | +        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" ]]; then
 | 
	
		
			
			|  | 139 | +            if [ -f /home/$USERNAME/$SYNCTHING_USER_IDS_FILE ]; then
 | 
	
		
			
			|  | 140 | +                while read -r line || [[ -n "$line" ]]; do
 | 
	
		
			
			|  | 141 | +                    if [[ $line != *"#"* && $line != *"*"* && $line != *'/'*  && $line == *"-"* ]]; then
 | 
	
		
			
			|  | 142 | +                        if [ ${#line} -gt 10 ]; then
 | 
	
		
			
			|  | 143 | +                            if ! grep -q "$line" $TEMP_IDS_FILE; then
 | 
	
		
			
			|  | 144 | +                                echo "        <device id=\"$line\"></device>" >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 145 | +                                echo "$line" >> $TEMP_IDS_FILE
 | 
	
		
			
			|  | 146 | +                            fi
 | 
	
		
			
			|  | 147 | +                        fi
 | 
	
		
			
			|  | 148 | +                    fi
 | 
	
		
			
			|  | 149 | +                done < /home/$USERNAME/$SYNCTHING_USER_IDS_FILE
 | 
	
		
			
			|  | 150 | +            fi
 | 
	
		
			
			|  | 151 | +        fi
 | 
	
		
			
			|  | 152 | +    done
 | 
	
		
			
			|  | 153 | +    rm $TEMP_IDS_FILE
 | 
	
		
			
			|  | 154 | +    echo "        <device id=\"$SYNCTHING_ID\"></device>" >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 155 | +    echo '        <minDiskFreePct>1</minDiskFreePct>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 156 | +    echo '        <versioning></versioning>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 157 | +    echo '        <copiers>0</copiers>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 158 | +    echo '        <pullers>0</pullers>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 159 | +    echo '        <hashers>0</hashers>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 160 | +    echo '        <order>random</order>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 161 | +    echo '        <ignoreDelete>false</ignoreDelete>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 162 | +    echo '        <scanProgressIntervalS>0</scanProgressIntervalS>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 163 | +    echo '        <pullerSleepS>0</pullerSleepS>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 164 | +    echo '        <pullerPauseS>0</pullerPauseS>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 165 | +    echo '        <maxConflicts>10</maxConflicts>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 166 | +    echo '        <disableSparseFiles>false</disableSparseFiles>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 167 | +    echo '    </folder>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 168 | +
 | 
	
		
			
			|  | 169 | +    
 | 
	
		
			
			|  | 170 | +    echo "    <device id=\"$SYNCTHING_ID\" name=\"${PROJECT_NAME}\" compression=\"metadata\" introducer=\"false\">" >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 171 | +    echo '        <address>dynamic</address>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 172 | +    echo '    </device>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 173 | +
 | 
	
		
			
			|  | 174 | +    echo "" > $TEMP_IDS_FILE
 | 
	
		
			
			|  | 175 | +    for d in /home/*/ ; do
 | 
	
		
			
			|  | 176 | +        USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
 | 
	
		
			
			|  | 177 | +        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" ]]; then
 | 
	
		
			
			|  | 178 | +            if [ -f /home/$USERNAME/$SYNCTHING_USER_IDS_FILE ]; then
 | 
	
		
			
			|  | 179 | +                while read -r line || [[ -n "$line" ]]; do
 | 
	
		
			
			|  | 180 | +                    if [[ $line != *"#"* && $line != *"*"* && $line != *'/'*  && $line == *"-"* ]]; then
 | 
	
		
			
			|  | 181 | +                        if [ ${#line} -gt 10 ]; then
 | 
	
		
			
			|  | 182 | +                            if ! grep -q "$line" $TEMP_IDS_FILE; then
 | 
	
		
			
			|  | 183 | +                                echo "    <device id=\"$line\" name=\"${USERNAME}\" compression=\"metadata\" introducer=\"false\">" >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 184 | +                                echo '        <address>dynamic</address>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 185 | +                                echo '    </device>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 186 | +                                echo "$line" >> $TEMP_IDS_FILE
 | 
	
		
			
			|  | 187 | +                            fi
 | 
	
		
			
			|  | 188 | +                        fi
 | 
	
		
			
			|  | 189 | +                    fi
 | 
	
		
			
			|  | 190 | +                done < /home/$USERNAME/$SYNCTHING_USER_IDS_FILE
 | 
	
		
			
			|  | 191 | +            fi
 | 
	
		
			
			|  | 192 | +        fi
 | 
	
		
			
			|  | 193 | +    done
 | 
	
		
			
			|  | 194 | +    rm $TEMP_IDS_FILE   
 | 
	
		
			
			|  | 195 | +
 | 
	
		
			
			|  | 196 | +    echo '    <options>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 197 | +    echo "        <listenAddress>tcp://0.0.0.0:$SYNCTHING_PORT</listenAddress>" >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 198 | +    echo '        <globalAnnounceServer>default</globalAnnounceServer>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 199 | +    echo '        <globalAnnounceEnabled>true</globalAnnounceEnabled>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 200 | +    echo '        <localAnnounceEnabled>true</localAnnounceEnabled>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 201 | +    echo '        <localAnnouncePort>21027</localAnnouncePort>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 202 | +    echo '        <localAnnounceMCAddr>[ff12::8384]:21027</localAnnounceMCAddr>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 203 | +    echo "        <relayServer>dynamic+$SYNCTHING_RELAY_SERVER</relayServer>" >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 204 | +    echo '        <maxSendKbps>0</maxSendKbps>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 205 | +    echo '        <maxRecvKbps>0</maxRecvKbps>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 206 | +    echo '        <reconnectionIntervalS>60</reconnectionIntervalS>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 207 | +    echo '        <relaysEnabled>true</relaysEnabled>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 208 | +    echo '        <relayReconnectIntervalM>10</relayReconnectIntervalM>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 209 | +    echo '        <startBrowser>true</startBrowser>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 210 | +    echo '        <upnpEnabled>true</upnpEnabled>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 211 | +    echo '        <upnpLeaseMinutes>60</upnpLeaseMinutes>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 212 | +    echo '        <upnpRenewalMinutes>30</upnpRenewalMinutes>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 213 | +    echo '        <upnpTimeoutSeconds>10</upnpTimeoutSeconds>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 214 | +    echo '        <urAccepted>-1</urAccepted>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 215 | +    echo '        <urUniqueID></urUniqueID>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 216 | +    echo '        <urURL>https://data.syncthing.net/newdata</urURL>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 217 | +    echo '        <urPostInsecurely>false</urPostInsecurely>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 218 | +    echo '        <urInitialDelayS>1800</urInitialDelayS>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 219 | +    echo '        <restartOnWakeup>true</restartOnWakeup>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 220 | +    echo '        <autoUpgradeIntervalH>12</autoUpgradeIntervalH>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 221 | +    echo '        <keepTemporariesH>24</keepTemporariesH>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 222 | +    echo '        <cacheIgnoredFiles>true</cacheIgnoredFiles>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 223 | +    echo '        <progressUpdateIntervalS>5</progressUpdateIntervalS>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 224 | +    echo '        <symlinksEnabled>true</symlinksEnabled>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 225 | +    echo '        <limitBandwidthInLan>false</limitBandwidthInLan>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 226 | +    echo '        <minHomeDiskFreePct>1</minHomeDiskFreePct>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 227 | +    echo "        <releasesURL>$SYNCTHING_RELEASES</releasesURL>" >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 228 | +    echo '    </options>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 229 | +    echo '</configuration>' >> $SYNCTHING_CONFIG_FILE
 | 
	
		
			
			|  | 230 | +
 | 
	
		
			
			|  | 231 | +    # give each user account a file containing the device id for this server
 | 
	
		
			
			|  | 232 | +    # This allows it to appear within the user control panel
 | 
	
		
			
			|  | 233 | +    for d in /home/*/ ; do
 | 
	
		
			
			|  | 234 | +        USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
 | 
	
		
			
			|  | 235 | +        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" ]]; then
 | 
	
		
			
			|  | 236 | +            echo "$SYNCTHING_ID" > /home/$USERNAME/.syncthing-server-id
 | 
	
		
			
			|  | 237 | +            chown $USERNAME:$USERNAME /home/$USERNAME/.syncthing-server-id
 | 
	
		
			
			|  | 238 | +        fi
 | 
	
		
			
			|  | 239 | +    done
 | 
	
		
			
			|  | 240 | +}
 | 
	
		
			
			|  | 241 | +
 | 
	
		
			
			|  | 242 | +function user_devices_changed {
 | 
	
		
			
			|  | 243 | +    CHANGED=
 | 
	
		
			
			|  | 244 | +    if [ ! -f $SYNCTHING_CONFIG_FILE ]; then
 | 
	
		
			
			|  | 245 | +        CHANGED=1
 | 
	
		
			
			|  | 246 | +        return
 | 
	
		
			
			|  | 247 | +    fi
 | 
	
		
			
			|  | 248 | +    
 | 
	
		
			
			|  | 249 | +    for d in /home/*/ ; do
 | 
	
		
			
			|  | 250 | +        USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
 | 
	
		
			
			|  | 251 | +        if [[ $USERNAME != "git" && $USERNAME != "mirrors" && $USERNAME != "sync" ]]; then
 | 
	
		
			
			|  | 252 | +            if [ -f /home/$USERNAME/$SYNCTHING_USER_IDS_FILE ]; then
 | 
	
		
			
			|  | 253 | +                while read -r line || [[ -n "$line" ]]; do
 | 
	
		
			
			|  | 254 | +                    if [[ $line != *"#"* && $line != *"*"* && $line != *'/'*  && $line == *"-"* ]]; then
 | 
	
		
			
			|  | 255 | +                        if [ ${#line} -gt 10 ]; then
 | 
	
		
			
			|  | 256 | +                            if ! grep -q "$line" $SYNCTHING_CONFIG_FILE; then
 | 
	
		
			
			|  | 257 | +                                CHANGED=1
 | 
	
		
			
			|  | 258 | +                            fi
 | 
	
		
			
			|  | 259 | +                        fi
 | 
	
		
			
			|  | 260 | +                    fi
 | 
	
		
			
			|  | 261 | +                done < /home/$USERNAME/$SYNCTHING_USER_IDS_FILE
 | 
	
		
			
			|  | 262 | +            fi
 | 
	
		
			
			|  | 263 | +        fi
 | 
	
		
			
			|  | 264 | +    done
 | 
	
		
			
			|  | 265 | +}
 | 
	
		
			
			|  | 266 | +
 | 
	
		
			
			|  | 267 | +user_devices_changed
 | 
	
		
			
			|  | 268 | +if [ $CHANGED ]; then
 | 
	
		
			
			|  | 269 | +    create_syncthing_config
 | 
	
		
			
			|  | 270 | +    systemctl restart syncthing
 | 
	
		
			
			|  | 271 | +fi
 | 
	
		
			
			|  | 272 | +
 | 
	
		
			
			|  | 273 | +exit 0
 |