Ver código fonte

Add an irc bouncer

Bob Mottram 8 anos atrás
pai
commit
299739580f

+ 115
- 6
src/freedombone-app-irc Ver arquivo

33
 IN_DEFAULT_INSTALL=1
33
 IN_DEFAULT_INSTALL=1
34
 SHOW_ON_ABOUT=1
34
 SHOW_ON_ABOUT=1
35
 
35
 
36
-IRC_PORT=6697
37
-IRC_ONION_PORT=6697
36
+IRC_BOUNCER_PORT=6697
37
+IRC_ONION_PORT=$IRC_BOUNCER_PORT
38
+IRC_PORT=6698
38
 
39
 
39
 # An optional password to log into IRC. This applies to all users
40
 # An optional password to log into IRC. This applies to all users
40
 IRC_PASSWORD=
41
 IRC_PASSWORD=
42
 irc_variables=(MY_USERNAME
43
 irc_variables=(MY_USERNAME
43
                MY_NAME
44
                MY_NAME
44
                IRC_PORT
45
                IRC_PORT
46
+               IRC_BOUNCER_PORT
45
                IRC_PASSWORD
47
                IRC_PASSWORD
48
+               IRC_OPERATOR_PASSWORD
46
                DEFAULT_DOMAIN_NAME
49
                DEFAULT_DOMAIN_NAME
47
                INSTALLED_WITHIN_DOCKER
50
                INSTALLED_WITHIN_DOCKER
48
                ONION_ONLY)
51
                ONION_ONLY)
49
 
52
 
53
+function start_irc_bouncer {
54
+    su -c 'znc -p' - znc
55
+}
56
+
57
+function stop_irc_bouncer {
58
+    pkill znc
59
+}
60
+
61
+function remove_user_irc_bouncer {
62
+    remove_username="$1"
63
+
64
+    if [ -f /home/znc/.znc/config/znc.conf ]; then
65
+        stop_irc_bouncer
66
+        sed -i "/<User ${remove_username}>/,/</User>/d" /home/znc/.znc/config/znc.conf
67
+        start_irc_bouncer
68
+    fi
69
+}
70
+
50
 function remove_user_irc {
71
 function remove_user_irc {
51
     remove_username="$1"
72
     remove_username="$1"
52
 
73
 
74
+    remove_user_irc_bouncer ${remove_username}
53
     if [ -d /home/${remove_username}/.irssi ]; then
75
     if [ -d /home/${remove_username}/.irssi ]; then
54
         rm -rf /home/${remove_username}/.irssi
76
         rm -rf /home/${remove_username}/.irssi
55
     fi
77
     fi
58
     fi
80
     fi
59
 }
81
 }
60
 
82
 
83
+function add_user_irc_bouncer {
84
+    new_username="$1"
85
+    new_user_password="$2"
86
+    is_admin='true'
87
+    if [ ! $3 ]; then
88
+        is_admin='false'
89
+    fi
90
+
91
+    read_config_param IRC_PORT
92
+    read_config_param DEFAULT_DOMAIN_NAME
93
+
94
+    stop_irc_bouncer
95
+
96
+    new_user_salt_base1="$(create_password 20)"
97
+    new_user_salt_base2=$(echo "$new_user_salt_base1" | sed "s|#|.|g")
98
+    new_user_salt=$(echo "$new_user_salt_base2" | sed "s|#|.|g")
99
+    new_user_hash=$(echo "${new_user_password}${new_user_salt}" | sha256sum)
100
+    new_user_pass="sha256#${new_user_hash}#${new_user_salt}#"
101
+
102
+    echo "<User ${new_username}>" >> /home/znc/.znc/config/znc.conf
103
+    echo "    Pass       = ${new_user_pass}" >> /home/znc/.znc/config/znc.conf
104
+    echo "    Admin      = ${is_admin}" >> /home/znc/.znc/config/znc.conf
105
+    echo "    Nick       = ${new_username}" >> /home/znc/.znc/config/znc.conf
106
+    echo "    AltNick    = ${new_username}_" >> /home/znc/.znc/config/znc.conf
107
+    echo "    Ident      = ${new_username}" >> /home/znc/.znc/config/znc.conf
108
+    echo "    RealName   = ${new_username}" >> /home/znc/.znc/config/znc.conf
109
+    echo '    Buffer     = 100' >> /home/znc/.znc/config/znc.conf
110
+    echo '    AutoClearChanBuffer = true' >> /home/znc/.znc/config/znc.conf
111
+    echo '    ChanModes  = +stn' >> /home/znc/.znc/config/znc.conf
112
+    echo '' >> /home/znc/.znc/config/znc.conf
113
+    echo '    LoadModule = chansaver' >> /home/znc/.znc/config/znc.conf
114
+    echo '    LoadModule = controlpanel' >> /home/znc/.znc/config/znc.conf
115
+    echo '    LoadModule = perform' >> /home/znc/.znc/config/znc.conf
116
+    echo '' >> /home/znc/.znc/config/znc.conf
117
+    echo "    <Network ${PROJECT_NAME}>" >> /home/znc/.znc/config/znc.conf
118
+    echo '        LoadModule = chansaver' >> /home/znc/.znc/config/znc.conf
119
+    echo '        LoadModule = keepnick' >> /home/znc/.znc/config/znc.conf
120
+    echo '        LoadModule = perform' >> /home/znc/.znc/config/znc.conf
121
+    echo '        LoadModule = simple_away' >> /home/znc/.znc/config/znc.conf
122
+    echo '' >> /home/znc/.znc/config/znc.conf
123
+    echo "        Server     = ${DEFAULT_DOMAIN_NAME} +${IRC_PORT}" >> /home/znc/.znc/config/znc.conf
124
+    echo '' >> /home/znc/.znc/config/znc.conf
125
+    echo "        <Chan ${PROJECT_NAME}>" >> /home/znc/.znc/config/znc.conf
126
+    echo '        </Chan>' >> /home/znc/.znc/config/znc.conf
127
+    echo '    </Network>' >> /home/znc/.znc/config/znc.conf
128
+    echo '</User>' >> /home/znc/.znc/config/znc.conf
129
+
130
+    chown -R znc:znc /home/znc/.znc
131
+
132
+    start_irc_bouncer
133
+}
134
+
61
 function add_user_irc {
135
 function add_user_irc {
62
     new_username="$1"
136
     new_username="$1"
63
     new_user_password="$2"
137
     new_user_password="$2"
128
 
202
 
129
     chown -R ${new_username}:${new_username} /home/${new_username}/.irssi
203
     chown -R ${new_username}:${new_username} /home/${new_username}/.irssi
130
 
204
 
205
+    add_user_irc_bouncer "${new_username}" "${IRC_PASSWORD}"
131
     echo '0'
206
     echo '0'
132
 }
207
 }
133
 
208
 
245
         rm -rf /etc/ngircd
320
         rm -rf /etc/ngircd
246
     fi
321
     fi
247
 
322
 
248
-    iptables -D INPUT -p tcp --dport 1024:65535 --sport ${IRC_PORT} -j ACCEPT
323
+    iptables -D INPUT -p tcp --dport 1024:65535 --sport ${IRC_BOUNCER_PORT} -j ACCEPT
249
     function_check save_firewall_settings
324
     function_check save_firewall_settings
250
     save_firewall_settings
325
     save_firewall_settings
251
-    firewall_remove ${IRC_PORT} tcp
326
+    firewall_remove ${IRC_BOUNCER_PORT} tcp
252
 
327
 
253
     function_check remove_onion_service
328
     function_check remove_onion_service
254
     remove_onion_service irc ${IRC_ONION_PORT}
329
     remove_onion_service irc ${IRC_ONION_PORT}
271
     if [[ ${ONION_ONLY} != "no" ]]; then
346
     if [[ ${ONION_ONLY} != "no" ]]; then
272
         return
347
         return
273
     fi
348
     fi
274
-    iptables -I INPUT -p tcp --dport 1024:65535 --sport ${IRC_PORT} -j ACCEPT
349
+    iptables -I INPUT -p tcp --dport 1024:65535 --sport ${IRC_BOUNCER_PORT} -j ACCEPT
275
     function_check save_firewall_settings
350
     function_check save_firewall_settings
276
     save_firewall_settings
351
     save_firewall_settings
277
 
352
 
278
-    firewall_add IRC ${IRC_PORT} tcp
353
+    firewall_add IRC ${IRC_BOUNCER_PORT} tcp
279
     echo 'configure_firewall_for_irc' >> ${COMPLETION_FILE}
354
     echo 'configure_firewall_for_irc' >> ${COMPLETION_FILE}
280
 }
355
 }
281
 
356
 
457
     install_completed irc_client
532
     install_completed irc_client
458
 }
533
 }
459
 
534
 
535
+function install_irc_bouncer {
536
+    if [[ $(app_is_installed irc_bouncer) == "1" ]]; then
537
+        return
538
+    fi
539
+
540
+    apt-get -yq install znc
541
+
542
+    adduser --disabled-login --gecos 'znc' znc
543
+
544
+    mkdir -p /home/znc/.znc/configs
545
+    mkdir -p /home/znc/.znc/users
546
+
547
+    echo 'Version = 1.4' > /home/znc/.znc/configs/znc.conf
548
+    echo '<Listener l>' >> /home/znc/.znc/configs/znc.conf
549
+    echo "    Port = $IRC_PORT" >> /home/znc/.znc/configs/znc.conf
550
+    echo '    IPv4 = true' >> /home/znc/.znc/configs/znc.conf
551
+    echo '    IPv6 = true' >> /home/znc/.znc/configs/znc.conf
552
+    echo '    SSL = true' >> /home/znc/.znc/configs/znc.conf
553
+    echo '</Listener>' >> /home/znc/.znc/configs/znc.conf
554
+
555
+    chown -R znc:znc /home/znc/.znc
556
+
557
+    # certificate for use with SSL
558
+    start_irc_bouncer
559
+
560
+    function_check cron_add_mins
561
+    cron_add_mins 10 "/usr/bin/znc 2> /dev/null" znc
562
+
563
+    add_user_irc_bouncer "${MY_USERNAME}" "${IRC_PASSWORD}" true
564
+
565
+    install_completed irc_bouncer
566
+}
567
+
460
 function install_irc {
568
 function install_irc {
461
     install_irc_server
569
     install_irc_server
462
     install_irc_client
570
     install_irc_client
571
+    install_irc_bouncer
463
     APP_INSTALLED=1
572
     APP_INSTALLED=1
464
 }
573
 }
465
 
574
 

+ 5
- 1
src/freedombone-utils-cron Ver arquivo

30
 
30
 
31
 function cron_add_mins {
31
 function cron_add_mins {
32
     if ! grep -q "${2}" /etc/crontab; then
32
     if ! grep -q "${2}" /etc/crontab; then
33
-        echo "*/${1}            * *   *   *   root ${2}" >> /etc/crontab
33
+        job_user='root'
34
+        if [ $3 ]; then
35
+            job_user=$3
36
+        fi
37
+        echo "*/${1}            * *   *   *   ${job_user} ${2}" >> /etc/crontab
34
         systemctl restart cron
38
         systemctl restart cron
35
     fi
39
     fi
36
 }
40
 }

+ 1
- 1
src/freedombone-utils-validation Ver arquivo

62
 
62
 
63
 function is_valid_user {
63
 function is_valid_user {
64
     USRNAME="$1"
64
     USRNAME="$1"
65
-    if [[ "$USRNAME" != "pihole" && "$USRNAME" != "fbone" && "$USRNAME" != "go" && "$USRNAME" != "gogs" && "$USRNAME" != "git" && "$USRNAME" != "mirrors" && "$USRNAME" != "sync" && "$USERNAME" != "tahoelafs" ]]; then
65
+    if [[ "$USRNAME" != "znc" && "$USRNAME" != "pihole" && "$USRNAME" != "fbone" && "$USRNAME" != "go" && "$USRNAME" != "gogs" && "$USRNAME" != "git" && "$USRNAME" != "mirrors" && "$USRNAME" != "sync" && "$USERNAME" != "tahoelafs" ]]; then
66
         echo "1"
66
         echo "1"
67
     else
67
     else
68
         echo "0"
68
         echo "0"