Pārlūkot izejas kodu

Add an irc bouncer

Bob Mottram 8 gadus atpakaļ
vecāks
revīzija
299739580f
3 mainītis faili ar 121 papildinājumiem un 8 dzēšanām
  1. 115
    6
      src/freedombone-app-irc
  2. 5
    1
      src/freedombone-utils-cron
  3. 1
    1
      src/freedombone-utils-validation

+ 115
- 6
src/freedombone-app-irc Parādīt failu

@@ -33,8 +33,9 @@ VARIANTS='full full-vim chat'
33 33
 IN_DEFAULT_INSTALL=1
34 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 40
 # An optional password to log into IRC. This applies to all users
40 41
 IRC_PASSWORD=
@@ -42,14 +43,35 @@ IRC_PASSWORD=
42 43
 irc_variables=(MY_USERNAME
43 44
                MY_NAME
44 45
                IRC_PORT
46
+               IRC_BOUNCER_PORT
45 47
                IRC_PASSWORD
48
+               IRC_OPERATOR_PASSWORD
46 49
                DEFAULT_DOMAIN_NAME
47 50
                INSTALLED_WITHIN_DOCKER
48 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 71
 function remove_user_irc {
51 72
     remove_username="$1"
52 73
 
74
+    remove_user_irc_bouncer ${remove_username}
53 75
     if [ -d /home/${remove_username}/.irssi ]; then
54 76
         rm -rf /home/${remove_username}/.irssi
55 77
     fi
@@ -58,6 +80,58 @@ function remove_user_irc {
58 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 135
 function add_user_irc {
62 136
     new_username="$1"
63 137
     new_user_password="$2"
@@ -128,6 +202,7 @@ function add_user_irc {
128 202
 
129 203
     chown -R ${new_username}:${new_username} /home/${new_username}/.irssi
130 204
 
205
+    add_user_irc_bouncer "${new_username}" "${IRC_PASSWORD}"
131 206
     echo '0'
132 207
 }
133 208
 
@@ -245,10 +320,10 @@ function remove_irc {
245 320
         rm -rf /etc/ngircd
246 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 324
     function_check save_firewall_settings
250 325
     save_firewall_settings
251
-    firewall_remove ${IRC_PORT} tcp
326
+    firewall_remove ${IRC_BOUNCER_PORT} tcp
252 327
 
253 328
     function_check remove_onion_service
254 329
     remove_onion_service irc ${IRC_ONION_PORT}
@@ -271,11 +346,11 @@ function configure_firewall_for_irc {
271 346
     if [[ ${ONION_ONLY} != "no" ]]; then
272 347
         return
273 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 350
     function_check save_firewall_settings
276 351
     save_firewall_settings
277 352
 
278
-    firewall_add IRC ${IRC_PORT} tcp
353
+    firewall_add IRC ${IRC_BOUNCER_PORT} tcp
279 354
     echo 'configure_firewall_for_irc' >> ${COMPLETION_FILE}
280 355
 }
281 356
 
@@ -457,9 +532,43 @@ function install_irc_client {
457 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 568
 function install_irc {
461 569
     install_irc_server
462 570
     install_irc_client
571
+    install_irc_bouncer
463 572
     APP_INSTALLED=1
464 573
 }
465 574
 

+ 5
- 1
src/freedombone-utils-cron Parādīt failu

@@ -30,7 +30,11 @@
30 30
 
31 31
 function cron_add_mins {
32 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 38
         systemctl restart cron
35 39
     fi
36 40
 }

+ 1
- 1
src/freedombone-utils-validation Parādīt failu

@@ -62,7 +62,7 @@ function validate_freedns_code {
62 62
 
63 63
 function is_valid_user {
64 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 66
         echo "1"
67 67
     else
68 68
         echo "0"