From f0cf4d28bd2f4ed5675080989a26003adb49b473 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 24 Feb 2018 14:32:08 +0000 Subject: [PATCH 01/67] wifi type options --- man/freedombone-image.1.gz | Bin 3488 -> 3484 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/man/freedombone-image.1.gz b/man/freedombone-image.1.gz index ebaee07413bbf155d951a49366e92ef0befb57bb..5b33ddc48e80e7fa97c8239383345657c8d58cce 100644 GIT binary patch literal 3484 zcmV;N4P){jiwFQ!cad5E1GQOgkJ~m9{_bBv_{&}oYdhJ#pch;Y=Y2_HT-IK!z0C!C zML|il&8|eMqGYdw{`h-lNJ{cC$6PwWIh}W#>;nNIGAcBv)c>E1`|6Wu9xZ5!TdJxPz-z;lkp}kMqUNa<=^32BTWs*RtBE z`bRNp#C?O)8CfX&D#d*%o!i?g!>^IX@5DX|>{RPi%x;9tvPwDUA6B-hRVD7babedu z7zT~1g?~&_je9BX-{{KK;&Q$e*l&mTW;g!XnYdr7)SB$s!&Ka3e62T4g#%b4);gzS zI&mK?qCe5^(MB0n;e_`G<$g7mh6-&kC+`nAx5fQzRSVM;2_J1I?su|+iOCkDN|hEf zD*LlaYq8O|1C2CQj;DpV58fzrRlx&(*!Fku6RgP({ZY2aTBb_e?{jHhOjMov^XN?6 z!&I>M0}br;TGxk?=9ThnRJsSOU{riWuJH~kx0Q4}E(@bv@8-e(msiV++u6-(wwMnG ztF3k-{R5cVSGp!Z0ZtOPOe?#*6sfGTafH>~&CTL=b#*Du7t`BIzzd7hyLoQ+^k&lN zJQE&W*sG!qN;0|1UJV8U|0GIoaz$|DpJ|h5{K6h*-S4_;(g*%ordgwn{hEKsvlk-^ z#5a!^8s)lBzcGCFnQ^`jkL$0$|ISY+vhTj}e=8gQ|1YX&M(uO{_4xgFKVg=?|7^Zo zP2aztdb?h#QkhJdRKu<*Oq!?|mMRl_U2nskKNEu^r|PB*z8DN(e8BrgRx+`<6mREu zllOG;-+R9dZ-n!$KHkhOrtihwa{3nJGBrXy%A$mO5txhsauWI02Zvv5zt!nBUZ5#+ zD>IxQAgH&h3ulP{Ep4q#t#QGFut_bo!NlYs3TY04c*F_qe*4mO&-)a`-@hFUW;HC8 z=fKPZz+wv}YE6IGfLMPBdjFJt}85A@eUrdu3P z{6&w|SQuOLQoR%C+Npf~)mSV{O20tSsU>Rxt-KGJB(>!M&z{Ew?#r=)HM5LfEa-Uj zABK#`?S^dUjR+DQd#ktxr^fumy?%Ku^!jyi;L8!S!AY+tnc7WU_HQg`cCXi&tff1c z6n0v7mIz_CmO6KgGi)mqlag!TO6dmUb1}T)5m+&!gRU!E1a=*ZTUEf70`L`SZk?hF z7z5S=%MJ&8foK3%s#LEJ9dVR0eV{`G8YGHzy0#U=pkZu$8T-#+K+;oPvaZW< zrpA7+v8^_f7$XZKrd7I~v{8Z(09=LK$*l%-U>{kx$ChbI35jgxQzO9y9*1L6AU`Cm zzE{W!BP~wcuUqSC_iFst@E1-yP86AOKecIPzF56k+|4gvR|v$){3!5L6bE{PlIgFT z6G1#bF-WJnPPb#qWZh;kBCI7w%W!;58_@=yP~$E!uX)2|7N;N_Z{1*K!;{BBkWZZk9bz#{d`vD z<#0WaOM^&z15gCo2^gUL*W~Sg_Rui)j)3Mk!#{(;2f{I}-R^$Un|;C;BUp1DAJ~$& zj-=&0VTDU@OschP@|ySV<$RhIUV!fxyb43M#Z3+*G3iM}!%pE*)F3@B;$=7pWy={6 zXW9q?_QukYH8CQuXNXiO%i@j3)d)tvfR8UY8B4PD4KD4(h&?TzK%jA)tU-*v_bkm09>EIZm0A_!b~to z4&?0(r3L4G&G_TU0@B&S1bgwI4$h~E;K3MPzsmtQ^&!eoLPT+BK@j+1)N_e|*6E2p zW8uguUO%(u1StiIjw8fVQs+=>{N+1Vd#*6Y;$r}Vl1>u7AEK43-4@@_1UT2oGxtV`0o zAp~mEL$Q|xls{b%aep{_|Gvx8r$>F_v+0_uhbIRKUUW_3)GrOh2Fyxo`tf1X4Q{9BWP&06kQJb`PSdbqZNFaxSg4G^Q<732ETkd|>&lPIT>^&lrI) zm%xYd`iZXB>79Ueb0iMAq`_{KP;ti1R;+Aw8u9~{D3s)9(u*vrschrA{6v)iuhDVP zPD>0i_Gv1~E}v8mz8vrx&Z)4_6|T3Bv)ULYeI(^ko+GaVx8oH5-Y$b};%;l#8kwgP(0Cf~9YvYP-5^$qCo#%XU(34HrZ1se283=T| zRw+a%+fGHbY1Me)<=qcq5CMBk_dy}?UAz~)(Tz=PhD%`Iibj0S+S)wxu&u$e%Igg} zz)`IQB;W$HS3v(@@LZApe-sI>OIID@>LZn%ef#apzln>NZ}Ly$@p$+o`*A$|FuPsd zpyAR%6UpjNIM-eOP6^lEcpL88w=6T*A?es#td@DlzIsPTJ zd#Lb_eHjb`P#|(cgrX;>9+q9xSZIrMW%}1=NHGD=kuE;W-pqznxe`(y3|PzyRS$Z~ z2{PYHIB{b`+bJOgmbpEI28yN>OZi-<4P|j^gNe{F6GvrgSw&G5gnHrC0Kd^`BG@;I zg+Mit1B0RZ?K-cukgI#{{es(oqEyYCKEziZ}Ep!O^f9hXLbBzmfo;j2{Wv*s{MGs>< z#e@ce?SH-KTABeNv;jnJ`Y;xECfCeX!CpQyvf?W2j+!R40qnA-3Rhy5fiRaxhuTW& zN^_3wLXR>Q_0*8WQt35{v+J6m&~J9ksA)$RQLHfVemFu{aL@HmWNK!Fr+U#_+ZX1& zV|@wRM2OKNe)b?VgO9;WPA74FdfZ)z(l3+_Ug2}i2z0eb#3F9n)FhR>HDVD;cqPAJ z0-^3p0D6AVrvO@zgA1xG$n)NUMCvfOrev#wtm5t{`I>>#bsHGubc`q=LO<5@rGDtm z(w#X%V<|+aJB2b(vDqw9^%>4Fq?t+x9qn1=50xWcKWWtr8ziWh!%))5buFRD4P*QFB6)4>2d?WlSp*!PvVMU?HdqjJ|LY~g7UG6}e;Q1t$3e8k-% zK+=BStNoJHb;ub4J$}owLF|UJb-VsKK+%;R#3Fp@RxZ3>(6@{E)#}6I_Fsa&j}n7D zsa-F zZH~^VxqgWKSR^NCdsd#l8t<5sjM1(b1KIIcPeMRV^+N2;hg=oA9-rxHh6|B2{ali1 zKSuOxOMZu6xi1dtu@@IfW7+FhQ^82lGP KbrjTtAOHY3h{7!Z literal 3488 zcmV;R4PWvfiwFQ8u#Q>)1GQOgbK5o&{;pqv(HCEDEU9s?onGd0bMi|P&Bc<(lAFu; zIvtRNB-A9p5~O5h^5gH>1wc}ElC~eN)20z$0POCw&px{xuilDvrBr5%#2Piyh1@9d zLJZHo6?3~2XWzc~ekg|c_jUJ_xO1vHapGEMV3hcMTd$SvV?@Zh;RccN4>}D$Naeb{fO@#wkBi1^n zV>)pkJfc6+@6kpXRpEs92jxB)OP305@J!yn4;0xCfAfDU8~*=qs%S>-eg5_M;}5^!DR2L5zFbY;y_$QeIqNG*j$P?^SjAAI{ELt zUxqir`BoopW*5_U;%+&813sA=p&n&XBD}~&MgRqgV(at4FSg(6bQ=w5%G}Bf=LZPt zt?DvZA}32*D^qJ2cn~(Jr8amlIfz1;UH76-iTmT5!C+RyQ+W=|JOC`V zP@>lKhYg7JhoJXQ`3MKw2)DHjV3yGd0d06rid>epEd?BzDfd8sEo8dI0mWbRSdE3T zH80gWfv%m(*WZlA!ld*Itejf%7SPK3kV{fq9&qn@PQYHy6|9+M^kPBBqyKQph}>?- zcixHM&9V22YjA2jpSV{qu7zH|Dh_NMkr{&YYLcnl#AW}%f@b$>oyl6dgGu41b?1qY zW^1W)$2h~bLNO1y2BDO0Fg_QsDaGhYn}CWtr!lLGmnM)jjYUKnX{ z;y!JytKG}-U&CLx(l}9M#{JS(lKEowdT}?ud{rS4EAz9!T~Qq94XU4?HYb9pePU2S zb)9allmL`-c+_xsKvilmPpHvTZBPh99p)Ec+dr$&K(=O+4aRf%o%;n3scjAeRQ2 z_8OoFv=cBu`>!e5|LUP(>;nOrafW{egZG4ETD#r-r1$g*8%D6^(mk*xZyia?dBO@t za89bVZ1S4-?v;6ZD!hQ$FL)J(Y>S&5NMh2H$cCN5ttdNsT*S+863Uh{BF?lC1niBa zBWq$rUe6GzQkBIUjjNH2egU6f2r`yr?;9BH#E2s;pFp5-T&zL42tPRyLX$ZX$k%H& zqF^E=8sPPvD4QhLDeM5!bk6U`m>%GZlsK1?DQ!^x4*=Iku-hr!k#G|nk^^~rLuJAF zSTp`Ovw(E=Fu`6tsDtxmB1ABz*Y9!wPJM{VlMqoHS`Y+&81+ITpmlmW&sYSqison5 zoS>vY#BqjrO6me?jW@nywdbO8EItG=`PHdDRoUD!+A~IAJ%GrzCD@eKd8!?@Wlf@jOZnT)c`*0#=*Q}pr z#w(H(o4Sx(2ahcrr)o%dgrrXtv<9&OWda2Z6s-0L8XqIR+LAW~t+IJXr$=p4ASs`! zmPlhyf`e$x@p`4Iwz70|1mhK5=#=1tEu9#kay1-H?gPtjb)st@e8vcbxdc9p*H2_# zr*{I@&5=0dE(W_%LB$z2Td}g$X{ZlaqEM3WNiVXfjk1mF>JxPWyhg`CJ1udE!RKqS z^5j82qIJe@?IXHHeAY)?jsYJH1%Ve!3E&O&AWS6v}KTp)a$bk6T%#ysP{v{JCP;M|MyV zsWJ}*$lbknMF!Gxc-)B$WF6FJpBW?T1YCJ=j>Y+*t%r0ultMh@cXzEKcu-|4b#a!a z5V=APZ2P~fi@V#|>Vvn8-Qxm6$Sz;z0(uK{5ux@x>m6b}>2(jKvec(EKE1s^B3qD` z{YkyNiPwV&P{yG+_uxmK4qAW}psq-cYjZ4YS~(S+cBH7Hp6u4+pyf0S@D_(zfv=-P z3S%$c61~}wRB8>T3+4Yy*!h1$h^C@5?F2*<>Lb;VRnGvv6#wyKR7 zDPXw3V=Ga#W-dP-h$I?N1E`}=S({hvlYkrD={)C~gPv@{W~(QJ%Rr#xwMrpE*>)0FCTsgg9zATx(^D8ZShg`PB%8O8H~Wb6-^(*JRUx&ew4SII*UsFVQN)gV#p2G_CtZh^`8n^9_VGfzcq2mpIsPrRd#LaaeHjb~ zP$Kd`gt8~6v6WrZwJ;Xx+Vt1q8>-?o1`}aOCXU+FvWlWA2=&6N0e+*?MDTAE3xR4P2L?y= zCv-fZYiDy*IhV`XUB49_p9xI*qgGGtK!k$3!r zK}H)w+VQ@<)ELsv!|3ztEBtx8xI;DK@tl2D(Z4!52JtH-ZqOnA0Ows^oC5+6kT6vS zMe>J}X~&Cp;Oez$epKjf%6OheJ2I!SQi)r!nuV{_BN&FHOxx^t9Z7JM%xDw@cFP+O zF^L|$?48<5H`P%e@x6mOJ|EYg1%{2_%3RF? zi*CkziUkb>+y7wEjWh#7Xak7c^kFRSOs<)&g1>xaWW`n39Su!r1Ndc49j?Sv2Etq( z9cn9SD$O;vOFgPsG*d$nOQqK+&aP{MLVwsXqoExcqF7G5o z;g#Zo2MBdv1JLt>J_XQ%0$fmML6P?!BvOaNH5FSOWED?GDb@^}ZrZ>gr(;A35$3U` zFZIK0mTcw>jja%&?i9*E#bL8V*JrrKkY*|&bifbL4wWY1GZxo9xH?{j`ZG#TcT_r1 zHdLYDQuiuxx~g4EHF-tIiZOdAs=Qt>INM9pc%fh{d6 zMQGYS-$#Wu+#Q+6J_$CG9uC#2)4>2d?WlSp*w2-CM3n8cqjuL9Y~g7UG6}e;(DeRk ze8k-%K+^u)tNoJHO~@GnJ$}owL7axOcf0vHK+&}x#3F2TD;M4^=-b8oYW03``)@&? zM2W$k^e!Q3nDu2@Du@CKakI&3BgFz%s zKUZYhj}iUelHcK1?u!F|;T?3@z}Lf972gptOk+fYKh+}|8s}>k2kd;hoL%@~3F^+} z)%k2X7c@Z`4x;K~Z4)hTXJY5r(*T4DgZB+b{WSD#M-x8OTOEc2 z{i@}^j~#!>@Vx8&(S4nbO02eY=g{Ht{O%0^c&m7PoHQGprlv>eONDzmnQTx^nq&-b zPZH_2RXXWmaH5@S+7dmzTfJS}4hQEp5!bdxK`g{S5}O Date: Sat, 24 Feb 2018 15:51:33 +0000 Subject: [PATCH 02/67] wifi configuration for image builds --- src/freedombone-image-customise | 49 ++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/src/freedombone-image-customise b/src/freedombone-image-customise index 3339b19b..3d490ea6 100755 --- a/src/freedombone-image-customise +++ b/src/freedombone-image-customise @@ -485,19 +485,48 @@ configure_wifi() { return fi + wifi_setup_service=setupwififirstboot + wifi_setup_file=$rootdir/root/setup_wifi_firstboot + echo '#!/bin/bash' > $wifi_setup_file + if [ -f $WIFI_NETWORKS_FILE ]; then - chroot "$rootdir" ${PROJECT_NAME}-wifi --networks $WIFI_NETWORKS_FILE - return + echo "${PROJECT_NAME}-wifi --networks $WIFI_NETWORKS_FILE" >> $wifi_setup_file + else + if [[ $WIFI_TYPE != 'none' ]]; then + if [ ${#WIFI_PASSPHRASE} -lt 2 ]; then + return + fi + echo "${PROJECT_NAME}-wifi -s $WIFI_SSID -t $WIFI_TYPE -p $WIFI_PASSPHRASE --hotspot $WIFI_HOTSPOT" >> $wifi_setup_file + else + echo "${PROJECT_NAME}-wifi -s $WIFI_SSID -t $WIFI_TYPE --hotspot $WIFI_HOTSPOT" >> $wifi_setup_file + fi fi - if [[ $WIFI_TYPE != 'none' ]]; then - if [ ${#WIFI_PASSPHRASE} -lt 2 ]; then - return - fi - chroot "$rootdir" ${PROJECT_NAME}-wifi -s $WIFI_SSID -t $WIFI_TYPE -p $WIFI_PASSPHRASE --hotspot $WIFI_HOTSPOT - else - chroot "$rootdir" ${PROJECT_NAME}-wifi -s $WIFI_SSID -t $WIFI_TYPE --hotspot $WIFI_HOTSPOT - fi + echo "systemctl stop ${wifi_setup_service}" >> $wifi_setup_file + echo "systemctl disable ${wifi_setup_service}" >> $wifi_setup_file + echo "rm /etc/systemd/system/${wifi_setup_service}.service" >> $wifi_setup_file + echo 'systemctl reboot -i' >> $wifi_setup_file + chmod +x $wifi_setup_file + + + echo '[Unit]' > $rootdir/etc/systemd/system/${wifi_setup_service}.service + echo 'Description=Initial wifi configuration' >> $rootdir/etc/systemd/system/${wifi_setup_service}.service + echo 'After=syslog.target' >> $rootdir/etc/systemd/system/${wifi_setup_service}.service + echo 'After=network.target' >> $rootdir/etc/systemd/system/${wifi_setup_service}.service + echo '' >> $rootdir/etc/systemd/system/${wifi_setup_service}.service + echo '[Service]' >> $rootdir/etc/systemd/system/${wifi_setup_service}.service + echo 'Type=simple' >> $rootdir/etc/systemd/system/${wifi_setup_service}.service + echo 'User=root' >> $rootdir/etc/systemd/system/${wifi_setup_service}.service + echo 'Group=root' >> $rootdir/etc/systemd/system/${wifi_setup_service}.service + echo 'WorkingDirectory=/root' >> $rootdir/etc/systemd/system/${wifi_setup_service}.service + echo "ExecStart=/root/setup_wifi_firstboot > /var/log/wifi_setup.log" >> $rootdir/etc/systemd/system/${wifi_setup_service}.service + echo '' >> $rootdir/etc/systemd/system/${wifi_setup_service}.service + echo 'TimeoutSec=99999' >> $rootdir/etc/systemd/system/${wifi_setup_service}.service + echo '' >> $rootdir/etc/systemd/system/${wifi_setup_service}.service + echo '[Install]' >> $rootdir/etc/systemd/system/${wifi_setup_service}.service + echo 'WantedBy=multi-user.target' >> $rootdir/etc/systemd/system/${wifi_setup_service}.service + chmod +x $rootdir/etc/systemd/system/${wifi_setup_service}.service + chroot "$rootdir" systemctl enable ${wifi_setup_service} } ############################################################################## From 6a9bd384403aedbd9777b98ff06593e14338083d Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 25 Feb 2018 10:29:50 +0000 Subject: [PATCH 03/67] Install command to do static analysis on bash scripts --- src/freedombone-image-customise | 1 + src/freedombone-utils-setup | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/freedombone-image-customise b/src/freedombone-image-customise index 3d490ea6..c1fa2de4 100755 --- a/src/freedombone-image-customise +++ b/src/freedombone-image-customise @@ -1699,6 +1699,7 @@ function image_setup_utils { chroot "$rootdir" apt-get -yq dist-upgrade chroot "$rootdir" apt-get -yq install ca-certificates chroot "$rootdir" apt-get -yq install apt-utils + chroot "$rootdir" apt-get -yq install shellcheck if [[ $ARCHITECTURE == 'amd64' ]]; then chroot "$rootdir" apt-get -yq install linux-image-amd64 diff --git a/src/freedombone-utils-setup b/src/freedombone-utils-setup index cf80486f..61869ae3 100755 --- a/src/freedombone-utils-setup +++ b/src/freedombone-utils-setup @@ -787,6 +787,11 @@ function congestion_control { fi } +function install_shellcheck { + # Used by the tests command + apt-get -yq install shellcheck +} + function setup_utils { read_config_param "PROJECT_REPO" write_config_param "PROJECT_REPO" "$PROJECT_REPO" @@ -1006,6 +1011,9 @@ function setup_utils { function_check setup_powerline setup_powerline + + function_check install_shellcheck + install_shellcheck } function setup_email { From 94053f6bedcceaee1a4c0f526dd187439fa04ad2 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 25 Feb 2018 11:04:13 +0000 Subject: [PATCH 04/67] Tidying wifi command --- src/freedombone | 2 +- src/freedombone-addcert | 2 +- src/freedombone-addemail | 2 +- src/freedombone-addlist | 2 +- src/freedombone-clientcert | 2 +- src/freedombone-config | 2 +- src/freedombone-dhparam | 2 +- src/freedombone-ignore | 2 +- src/freedombone-image | 2 +- src/freedombone-keydrive | 2 +- src/freedombone-mesh-install | 2 +- src/freedombone-pass | 2 +- src/freedombone-recoverkey | 2 +- src/freedombone-remote | 2 +- src/freedombone-renew-cert | 2 +- src/freedombone-rmemail | 2 +- src/freedombone-rmlist | 2 +- src/freedombone-sec | 2 +- src/freedombone-splitkey | 2 +- src/freedombone-template | 2 +- src/freedombone-tests | 2 +- src/freedombone-unignore | 2 +- src/freedombone-wifi | 21 ++++++++++----------- 23 files changed, 32 insertions(+), 33 deletions(-) diff --git a/src/freedombone b/src/freedombone index 5e69cc2b..d3ee8164 100755 --- a/src/freedombone +++ b/src/freedombone @@ -117,7 +117,7 @@ if [[ $command_options == "menuconfig"* ]]; then fi rm $interactive_file else - while [[ $# > 1 ]] + while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-addcert b/src/freedombone-addcert index 5b6ee2f9..b37575ef 100755 --- a/src/freedombone-addcert +++ b/src/freedombone-addcert @@ -85,7 +85,7 @@ function show_help { exit 0 } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-addemail b/src/freedombone-addemail index e5ee8080..348f10ce 100755 --- a/src/freedombone-addemail +++ b/src/freedombone-addemail @@ -47,7 +47,7 @@ function show_help { exit 0 } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-addlist b/src/freedombone-addlist index 9bbecd30..3e19c9e9 100755 --- a/src/freedombone-addlist +++ b/src/freedombone-addlist @@ -47,7 +47,7 @@ function show_help { exit 0 } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-clientcert b/src/freedombone-clientcert index 72fda3f8..6c9750e1 100755 --- a/src/freedombone-clientcert +++ b/src/freedombone-clientcert @@ -57,7 +57,7 @@ function show_help { exit 0 } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-config b/src/freedombone-config index 93a4b8d1..70db151c 100755 --- a/src/freedombone-config +++ b/src/freedombone-config @@ -810,7 +810,7 @@ function validate_freedns_code { } # Get the commandline options -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-dhparam b/src/freedombone-dhparam index ff5cc3e9..80392ca4 100755 --- a/src/freedombone-dhparam +++ b/src/freedombone-dhparam @@ -179,7 +179,7 @@ function regenerate_dh_keys { done } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-ignore b/src/freedombone-ignore index d8ba372f..b3817f80 100755 --- a/src/freedombone-ignore +++ b/src/freedombone-ignore @@ -46,7 +46,7 @@ function show_help { exit 0 } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-image b/src/freedombone-image index 9275230e..7d3f1948 100755 --- a/src/freedombone-image +++ b/src/freedombone-image @@ -293,7 +293,7 @@ function mesh_router_setup_script { echo 'WIFI_CHANNEL=9' >> $mesh_script_filename } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-keydrive b/src/freedombone-keydrive index 4a01b9ee..c0b3f6e4 100755 --- a/src/freedombone-keydrive +++ b/src/freedombone-keydrive @@ -48,7 +48,7 @@ function show_help { exit 0 } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-mesh-install b/src/freedombone-mesh-install index 9aef8f97..74145c28 100755 --- a/src/freedombone-mesh-install +++ b/src/freedombone-mesh-install @@ -275,7 +275,7 @@ function mesh_tox_client_toxic_from_repo { echo "Toxic Installed." } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-pass b/src/freedombone-pass index a0ceee80..cbf77d94 100755 --- a/src/freedombone-pass +++ b/src/freedombone-pass @@ -188,7 +188,7 @@ function export_to_keepass { echo $"Exported $filename" } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-recoverkey b/src/freedombone-recoverkey index 22c9b7ae..2c5e3c29 100755 --- a/src/freedombone-recoverkey +++ b/src/freedombone-recoverkey @@ -53,7 +53,7 @@ function show_help { exit 0 } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-remote b/src/freedombone-remote index c3d5708a..8089f82d 100755 --- a/src/freedombone-remote +++ b/src/freedombone-remote @@ -75,7 +75,7 @@ function show_help { } # Get the commandline options -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-renew-cert b/src/freedombone-renew-cert index 3fdc35b3..2bb88dee 100755 --- a/src/freedombone-renew-cert +++ b/src/freedombone-renew-cert @@ -172,7 +172,7 @@ function renew_startssl { ${PROJECT_NAME}-pin-cert $HOSTNAME remove } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-rmemail b/src/freedombone-rmemail index 50c93ecc..848d9ebf 100755 --- a/src/freedombone-rmemail +++ b/src/freedombone-rmemail @@ -43,7 +43,7 @@ function show_help { exit 0 } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-rmlist b/src/freedombone-rmlist index 1e2ce43c..1e0e241e 100755 --- a/src/freedombone-rmlist +++ b/src/freedombone-rmlist @@ -45,7 +45,7 @@ function show_help { exit 0 } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-sec b/src/freedombone-sec index 733028fa..8d0420e1 100755 --- a/src/freedombone-sec +++ b/src/freedombone-sec @@ -1328,7 +1328,7 @@ function show_help { # Get the commandline options -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-splitkey b/src/freedombone-splitkey index 92024835..22270a79 100755 --- a/src/freedombone-splitkey +++ b/src/freedombone-splitkey @@ -55,7 +55,7 @@ function show_help { exit 0 } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-template b/src/freedombone-template index 2fc3c2c8..52728414 100755 --- a/src/freedombone-template +++ b/src/freedombone-template @@ -74,7 +74,7 @@ function show_help { exit 0 } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-tests b/src/freedombone-tests index 6ca1e824..7ab50e9d 100755 --- a/src/freedombone-tests +++ b/src/freedombone-tests @@ -1217,7 +1217,7 @@ function test_stig { fi } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-unignore b/src/freedombone-unignore index 8ef34724..e0cb3c12 100755 --- a/src/freedombone-unignore +++ b/src/freedombone-unignore @@ -46,7 +46,7 @@ function show_help { exit 0 } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" diff --git a/src/freedombone-wifi b/src/freedombone-wifi index 7fb58548..c154f49a 100755 --- a/src/freedombone-wifi +++ b/src/freedombone-wifi @@ -75,7 +75,7 @@ function show_help { exit 0 } -while [[ $# > 1 ]] +while [ $# -gt 1 ] do key="$1" @@ -144,11 +144,11 @@ if [ ${NETWORKS_INTERACTIVE} ]; then fi if [ ! ${wifi_interface_specified} ]; then - if [ ! $WAIT_SEC ]; then - wpa_action ${WIFI_INTERFACE} stop - wpa_cli -i ${WIFI_INTERFACE} terminate + if [ ! "$WAIT_SEC" ]; then + wpa_action "${WIFI_INTERFACE}" stop + wpa_cli -i "${WIFI_INTERFACE}" terminate else - sleep ${WAIT_SEC} + sleep "${WAIT_SEC}" fi update_wifi_adaptors if [ ! $IFACE ]; then @@ -166,7 +166,7 @@ if [ ${WIFI_DISABLE} ]; then fi if [[ ${WIFI_HOTSPOT} == 'no' ]]; then - if [ -f ${WIFI_NETWORKS_FILE} ]; then + if [ -f "${WIFI_NETWORKS_FILE}" ]; then wifi_established= wifi_retry_ctr=0 while [ ! $wifi_established ]; do @@ -184,7 +184,7 @@ if [[ ${WIFI_HOTSPOT} == 'no' ]]; then fi # has the limit of retries been reached? wifi_retry_ctr=$((wifi_retry_ctr+1)) - if [ ${wifi_retry_ctr} -ge ${WIFI_MAX_RETRIES} ]; then + if [ ${wifi_retry_ctr} -ge "${WIFI_MAX_RETRIES}" ]; then break fi done @@ -198,14 +198,13 @@ if [[ ${WIFI_HOTSPOT} == 'no' ]]; then fi fi -if [ ! ${WIFI_SSID} ]; then +if [ ! "${WIFI_SSID}" ]; then echo $'No SSID given' exit 1 fi if [[ ${WIFI_HOTSPOT} != 'no' ]]; then - hotspot_on - if [ ! "$?" = "0" ]; then + if ! hotspot_on; then exit "$?" fi exit 0 @@ -214,7 +213,7 @@ else fi if [[ "$WIFI_TYPE" != 'none' && "$WIFI_TYPE" != 'open' ]]; then - if [ ! $WIFI_PASSPHRASE ]; then + if [ ! "$WIFI_PASSPHRASE" ]; then echo $'No wifi passphrase was given' exit 2 fi From ad8d266452ee3d692ed4b88b2211a4dcbfa49bbf Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 25 Feb 2018 11:27:48 +0000 Subject: [PATCH 05/67] Tidying zram --- src/freedombone-vars | 16 ++++++++-------- src/freedombone-zram | 39 +++++++++++++++++++-------------------- 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/src/freedombone-vars b/src/freedombone-vars index 0f5730cd..4efac588 100755 --- a/src/freedombone-vars +++ b/src/freedombone-vars @@ -28,9 +28,9 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -DEFAULT_LANGUAGE=$(echo $LANG) +DEFAULT_LANGUAGE=$LANG -if [ ! $PROJECT_NAME ]; then +if [ ! "$PROJECT_NAME" ]; then PROJECT_NAME='freedombone' fi @@ -81,24 +81,24 @@ ENABLE_SOCIAL_KEY_MANAGEMENT="no" SOCIALINSTANCE= # include utils -UTILS_FILES=/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-* +UTILS_FILES="/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-*" for f in $UTILS_FILES do - source $f + source "$f" done # include base system apps -BASE_SYSTEM_FILES=/usr/share/${PROJECT_NAME}/base/${PROJECT_NAME}-base-* +BASE_SYSTEM_FILES="/usr/share/${PROJECT_NAME}/base/${PROJECT_NAME}-base-*" for f in $BASE_SYSTEM_FILES do - source $f + source "$f" done #include apps -APP_FILES=/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-* +APP_FILES="/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-*" for f in $APP_FILES do - source $f + source "$f" done # optionally specify your name to appear on the blog diff --git a/src/freedombone-zram b/src/freedombone-zram index 05d9206d..b947112b 100755 --- a/src/freedombone-zram +++ b/src/freedombone-zram @@ -36,20 +36,19 @@ export TEXTDOMAINDIR="/usr/share/locale" DAEMON_FILENAME=/etc/systemd/system/zram.service function zram_daemon { - echo '[Unit]' > $DAEMON_FILENAME - echo 'Description=Zeronet Server' >> $DAEMON_FILENAME - echo 'After=syslog.target' >> $DAEMON_FILENAME - echo 'After=network.target' >> $DAEMON_FILENAME - echo '[Service]' >> $DAEMON_FILENAME - echo 'Type=simple' >> $DAEMON_FILENAME - echo 'User=zram' >> $DAEMON_FILENAME - echo 'Group=zram' >> $DAEMON_FILENAME - echo 'WorkingDirectory=' >> $DAEMON_FILENAME - echo "ExecStart=${PROJECT_NAME}-zram on" >> $DAEMON_FILENAME - echo '' >> $DAEMON_FILENAME - echo '[Install]' >> $DAEMON_FILENAME - echo 'WantedBy=multi-user.target' >> $DAEMON_FILENAME - + { echo '[Unit]'; + echo 'Description=Zeronet Server'; + echo 'After=syslog.target'; + echo 'After=network.target'; + echo '[Service]'; + echo 'Type=simple'; + echo 'User=zram'; + echo 'Group=zram'; + echo 'WorkingDirectory='; + echo "ExecStart=${PROJECT_NAME}-zram on"; + echo ''; + echo '[Install]'; + echo 'WantedBy=multi-user.target'; } >> $DAEMON_FILENAME } function zram_on { @@ -76,17 +75,17 @@ function zram_on { # initialize the devices for i in $(seq 0 $decr_num_cpus); do - echo $((mem_total / num_cpus)) > /sys/block/zram$i/disksize + echo $((mem_total / num_cpus)) > "/sys/block/zram$i/disksize" done # Creating swap filesystems for i in $(seq 0 $decr_num_cpus); do - mkswap /dev/zram$i + mkswap "/dev/zram$i" done # Switch the swaps on for i in $(seq 0 $decr_num_cpus); do - swapon -p 100 /dev/zram$i + swapon -p 100 "/dev/zram$i" done zram_daemon @@ -103,8 +102,8 @@ function zram_off { # Switching off swap for i in $(seq 0 $decr_num_cpus); do - if [ "$(grep /dev/zram$i /proc/swaps)" != "" ]; then - swapoff /dev/zram$i + if [ "$(grep "/dev/zram$i" /proc/swaps)" != "" ]; then + swapoff "/dev/zram$i" sleep 1 fi done @@ -123,7 +122,7 @@ function show_help { exit 0 } -if [ ! $1 ]; then +if [ ! "$1" ]; then show_help else if [[ "$1" == "on" || "$1" == "enable" || "$1" == "yes" ]]; then From 443d7a7913f0592869fcad22bbdf53e426ed738a Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 25 Feb 2018 12:50:46 +0000 Subject: [PATCH 06/67] Function name is an array --- src/freedombone-app-batman | 4 +- src/freedombone-app-dlna | 8 +- src/freedombone-app-ipfs | 8 +- src/freedombone-app-irc | 2 +- src/freedombone-app-keyserver | 2 +- src/freedombone-app-mumble | 4 +- src/freedombone-app-rss | 4 +- src/freedombone-app-syncthing | 4 +- src/freedombone-app-tox | 8 +- src/freedombone-app-xmpp | 4 +- src/freedombone-app-zeronet | 4 +- src/freedombone-base-email | 70 ++++++++--------- src/freedombone-base-tripwire | 4 +- src/freedombone-utils-avahi | 112 ++++++++++++++-------------- src/freedombone-utils-backup | 4 +- src/freedombone-utils-cmake | 4 +- src/freedombone-utils-cron | 4 +- src/freedombone-utils-cryptopp | 4 +- src/freedombone-utils-database | 8 +- src/freedombone-utils-dns | 16 ++-- src/freedombone-utils-filesystem | 4 +- src/freedombone-utils-final | 4 +- src/freedombone-utils-firewall | 28 +++---- src/freedombone-utils-git | 4 +- src/freedombone-utils-go | 2 +- src/freedombone-utils-international | 4 +- src/freedombone-utils-login | 4 +- src/freedombone-utils-mongodb | 4 +- src/freedombone-utils-monkeysphere | 4 +- src/freedombone-utils-network | 4 +- src/freedombone-utils-nodejs | 4 +- src/freedombone-utils-onion | 20 ++--- src/freedombone-utils-passwords | 4 +- src/freedombone-utils-postgresql | 4 +- src/freedombone-utils-repos | 8 +- src/freedombone-utils-rng | 8 +- src/freedombone-utils-setup | 12 +-- src/freedombone-utils-ssh | 16 ++-- src/freedombone-utils-tracker | 4 +- src/freedombone-utils-upgrade | 8 +- src/freedombone-utils-watchdog | 4 +- src/freedombone-utils-web | 16 ++-- src/freedombone-utils-wifi | 10 +-- src/freedombone-utils-zram | 4 +- src/freedombone-zram | 2 +- 45 files changed, 233 insertions(+), 231 deletions(-) diff --git a/src/freedombone-app-batman b/src/freedombone-app-batman index 907ba715..dfe27c37 100755 --- a/src/freedombone-app-batman +++ b/src/freedombone-app-batman @@ -53,7 +53,7 @@ function install_interactive_batman { } function configure_firewall_for_batman { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $ENABLE_BATMAN != "yes" ]]; then @@ -62,7 +62,7 @@ function configure_firewall_for_batman { function_check save_firewall_settings save_firewall_settings - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function reconfigure_batman { diff --git a/src/freedombone-app-dlna b/src/freedombone-app-dlna index 902b3fde..0d44a44f 100755 --- a/src/freedombone-app-dlna +++ b/src/freedombone-app-dlna @@ -84,7 +84,7 @@ function upgrade_dlna { } function configure_firewall_for_dlna { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then @@ -111,7 +111,7 @@ function configure_firewall_for_dlna { systemctl restart avahi-daemon - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function backup_local_dlna { @@ -253,7 +253,7 @@ function install_dlna_main { } function script_for_attaching_usb_drive { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi echo '#!/bin/bash' > /usr/bin/attach-music @@ -289,7 +289,7 @@ function script_for_attaching_usb_drive { echo 'exit 0' >> /usr/bin/remove-music chmod +x /usr/bin/remove-music - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function install_dlna { diff --git a/src/freedombone-app-ipfs b/src/freedombone-app-ipfs index a4bc2b9b..09d9bb5a 100755 --- a/src/freedombone-app-ipfs +++ b/src/freedombone-app-ipfs @@ -205,7 +205,7 @@ function remove_ipfs { } function configure_firewall_for_ipfs { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $ONION_ONLY != "no" ]]; then @@ -213,11 +213,11 @@ function configure_firewall_for_ipfs { fi firewall_add IPFS $IPFS_PORT tcp - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function mesh_install_ipfs_js { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -287,7 +287,7 @@ EOF chroot ${rootdir} systemctl enable ${IPFS_DAEMON_NAME} - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function install_ipfs_js { diff --git a/src/freedombone-app-irc b/src/freedombone-app-irc index cc8bb8aa..90883700 100755 --- a/src/freedombone-app-irc +++ b/src/freedombone-app-irc @@ -481,7 +481,7 @@ function configure_firewall_for_irc { if [ ! -d /etc/ngircd ]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ ${INSTALLED_WITHIN_DOCKER} == "yes" ]]; then diff --git a/src/freedombone-app-keyserver b/src/freedombone-app-keyserver index 65bdd5fb..ca56349e 100755 --- a/src/freedombone-app-keyserver +++ b/src/freedombone-app-keyserver @@ -102,7 +102,7 @@ function configure_firewall_for_keyserver { firewall_add keyserver 11370 tcp firewall_add keyserver 11371 tcp firewall_add keyserver 11372 tcp - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function keyserver_reset_database { diff --git a/src/freedombone-app-mumble b/src/freedombone-app-mumble index 897d264c..c447a308 100755 --- a/src/freedombone-app-mumble +++ b/src/freedombone-app-mumble @@ -225,14 +225,14 @@ function remove_mumble { } function configure_firewall_for_mumble { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $ONION_ONLY != "no" ]]; then return fi firewall_add Mumble ${MUMBLE_PORT} - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function install_mumble { diff --git a/src/freedombone-app-rss b/src/freedombone-app-rss index 6e6ab350..550e6209 100755 --- a/src/freedombone-app-rss +++ b/src/freedombone-app-rss @@ -604,7 +604,7 @@ function install_rss_gnusocial { set_repo_commit $RSS_READER_GNUSOCIAL_PATH "rss reader gnusocial commit" "$RSS_READER_GNUSOCIAL_COMMIT" $RSS_READER_GNUSOCIAL_REPO chown -R www-data:www-data $RSS_READER_GNUSOCIAL_PATH - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -648,7 +648,7 @@ function install_rss_mobile_reader { fi fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi diff --git a/src/freedombone-app-syncthing b/src/freedombone-app-syncthing index 509fae0f..1cebff14 100755 --- a/src/freedombone-app-syncthing +++ b/src/freedombone-app-syncthing @@ -512,12 +512,12 @@ function remove_syncthing { } function configure_firewall_for_syncthing { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi firewall_add Syncthing ${SYNCTHING_PORT} - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function install_syncthing_repo { diff --git a/src/freedombone-app-tox b/src/freedombone-app-tox index 2bc9f1ce..a9c30633 100755 --- a/src/freedombone-app-tox +++ b/src/freedombone-app-tox @@ -318,7 +318,7 @@ function remove_tox { function configure_firewall_for_tox { if [ ! $INSTALLING_MESH ]; then - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi fi @@ -341,11 +341,11 @@ function configure_firewall_for_tox { fi firewall_add Tox ${TOX_PORT} - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function tox_avahi { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -387,7 +387,7 @@ function tox_avahi { systemctl restart avahi-daemon - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function install_tox_node { diff --git a/src/freedombone-app-xmpp b/src/freedombone-app-xmpp index 1c5f8a81..f6616426 100755 --- a/src/freedombone-app-xmpp +++ b/src/freedombone-app-xmpp @@ -573,7 +573,7 @@ function configure_firewall_for_xmpp { if [ ! -d /etc/prosody ]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then @@ -588,7 +588,7 @@ function configure_firewall_for_xmpp { firewall_add XMPP 5269 tcp firewall_add XMPP 5280 tcp firewall_add XMPP 5281 tcp - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function remove_xmpp { diff --git a/src/freedombone-app-zeronet b/src/freedombone-app-zeronet index 56a0d310..3d09cb92 100755 --- a/src/freedombone-app-zeronet +++ b/src/freedombone-app-zeronet @@ -140,13 +140,13 @@ function remove_zeronet { } function configure_firewall_for_zeronet { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi firewall_add ZeroNet ${ZERONET_PORT} firewall_add Tracker ${TRACKER_PORT} firewall_add Tracker 1900 udp - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function install_zeronet_blog { diff --git a/src/freedombone-base-email b/src/freedombone-base-email index d11c24e8..5cd65d3f 100755 --- a/src/freedombone-base-email +++ b/src/freedombone-base-email @@ -120,7 +120,7 @@ function email_create_template { } function configure_email_onion { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $SYSTEM_TYPE == "mesh"* ]]; then @@ -150,7 +150,7 @@ function configure_email_onion { set_completion_param "email onion domain" "${onion_address}" add_email_hostname "$onion_address" - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function check_email_address_exists { @@ -207,7 +207,7 @@ function encrypt_incoming_email { function_check set_repo_commit set_repo_commit $INSTALL_DIR/gpgit "gpgit commit" "$GPGIT_COMMIT" $GPGIT_REPO - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -237,7 +237,7 @@ function encrypt_incoming_email { echo -n '| /usr/bin/gpgit.pl --encrypt-mode prefer-inline --inline-flatten $USER@' >> /etc/skel/.procmailrc echo "$DEFAULT_DOMAIN_NAME" >> /etc/skel/.procmailrc fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function encrypt_outgoing_email { @@ -247,7 +247,7 @@ function encrypt_outgoing_email { if [ ! -d /etc/exim4 ]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $GPG_ENCRYPT_STORED_EMAIL != "yes" ]]; then @@ -287,7 +287,7 @@ function encrypt_outgoing_email { sed -i "s|set pgp_encrypt_sign_command.*|set pgp_encrypt_sign_command=\"/usr/lib/mutt/pgpewrap gpg %?p?--passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --trust-model always --encrypt-to $MY_GPG_PUBLIC_KEY_ID -- -r %r -- %f\"|g" /home/$MY_USERNAME/.muttrc fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function encrypt_all_email { @@ -320,7 +320,7 @@ function encrypt_all_email { fi fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -343,14 +343,14 @@ function encrypt_all_email { chmod 600 /home/$MY_USERNAME/README fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function email_client { if [ ! -d /etc/exim4 ]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi apt-get -yq install lynx abook urlview mutt @@ -475,7 +475,7 @@ function email_client { chown ${GENERIC_IMAGE_USERNAME}:${GENERIC_IMAGE_USERNAME} /home/${GENERIC_IMAGE_USERNAME}/.mutt-alias fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function email_archiving { @@ -519,7 +519,7 @@ function email_archiving { function_check set_repo_commit set_repo_commit $INSTALL_DIR/cleanup-maildir "cleanup-maildir commit" "$CLEANUP_MAILDIR_COMMIT" $CLEANUP_MAILDIR_REPO - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -543,12 +543,12 @@ function email_archiving { fi fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # Ensure that the from field is correct when sending email from Mutt function email_from_address { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -561,14 +561,14 @@ function email_from_address { echo "set from='$MY_NAME <$MY_EMAIL_ADDRESS>'" >> /home/$MY_USERNAME/.muttrc fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function create_public_mailing_list { if [ ! -d /etc/exim4 ]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [ ! $PUBLIC_MAILING_LIST ]; then @@ -658,14 +658,14 @@ function create_public_mailing_list { ${PROJECT_NAME}-addlist -u $MY_USERNAME -l "$PUBLIC_MAILING_LIST" -s "$PUBLIC_MAILING_LIST" - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function create_private_mailing_list { if [ ! -d /etc/exim4 ]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [ ! $PRIVATE_MAILING_LIST ]; then @@ -720,7 +720,7 @@ function create_private_mailing_list { chmod 0000 /etc/shadow chmod 0000 /etc/gshadow #exim -d -bt $PRIVATE_MAILING_LIST@$DEFAULT_DOMAIN_NAME - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function split_gpg_key_into_fragments { @@ -753,7 +753,7 @@ function import_email { Now on your internet router forward ports 25, 587, 465, 993 and 2222 to the ${PROJECT_NAME} " - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then if [[ $SYSTEM_TYPE == "mail"* ]]; then function_check backup_to_friends_servers backup_to_friends_servers @@ -776,7 +776,7 @@ function import_email { fi return fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" if [[ $SYSTEM_TYPE == "mail"* ]]; then function_check backup_to_friends_servers backup_to_friends_servers @@ -886,7 +886,7 @@ function create_procmail { if [ ! -d /etc/exim4 ]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [ ! -f /home/$MY_USERNAME/.procmailrc ]; then @@ -924,7 +924,7 @@ function create_procmail { chmod 6755 /usr/bin/procmail fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function handle_admin_emails { @@ -940,7 +940,7 @@ function spam_filtering { if [ ! -d /etc/exim4 ]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi apt-get -yq install exim4-daemon-heavy @@ -1109,14 +1109,14 @@ function spam_filtering { function_check cron_add_mins cron_add_mins 10 "$script_name 2> /dev/null" - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function configure_imap { if [ ! -d /etc/exim4 ]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -1213,14 +1213,14 @@ function configure_imap { fi systemctl restart dovecot - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function configure_imap_client_certs { if [ ! -d /etc/exim4 ]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi # http://strange.systems/certificate-based-auth-with-dovecot-sendmail/ @@ -1295,7 +1295,7 @@ function configure_imap_client_certs { echo 0001 > /etc/ssl/sslserial #${PROJECT_NAME}-clientcert -u $MY_USERNAME systemctl restart dovecot - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function create_gpg_subkey { @@ -1303,7 +1303,7 @@ function create_gpg_subkey { if [ ! -d /etc/exim4 ]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi apt-get -yq install gnupg @@ -1336,7 +1336,7 @@ function create_gpg_subkey { MY_GPG_SUBKEY_ID=$(gpg_pubkey_from_email "$MY_USERNAME" "$MY_EMAIL_ADDRESS") - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function gpg_key_exists { @@ -1362,7 +1362,7 @@ function configure_gpg { if [ ! -d /etc/exim4 ]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi apt-get -yq install gnupg dirmngr @@ -1395,7 +1395,7 @@ function configure_gpg { if [ -d /home/$MY_USERNAME/.gnupg/crls.d ]; then chmod +x /home/$MY_USERNAME/.gnupg/crls.d fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" return fi fi @@ -1481,7 +1481,7 @@ function configure_gpg { fi fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function refresh_gpg_keys { @@ -1525,7 +1525,7 @@ function install_email { if [[ $SYSTEM_TYPE == "mesh"* ]]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -1533,7 +1533,7 @@ function install_email { install_email_basic configure_email_onion - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # NOTE: deliberately no exit 0 diff --git a/src/freedombone-base-tripwire b/src/freedombone-base-tripwire index ccb0bb28..9769b077 100755 --- a/src/freedombone-base-tripwire +++ b/src/freedombone-base-tripwire @@ -49,7 +49,7 @@ function remove_tripwire { } function install_tripwire { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -146,7 +146,7 @@ function install_tripwire { ' | twadmin --create-polfile -S /etc/tripwire/${HOSTNAME}-site.key /etc/tripwire/twpol.txt - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # NOTE: deliberately no exit 0 diff --git a/src/freedombone-utils-avahi b/src/freedombone-utils-avahi index 6bfe43fa..0e299cc3 100755 --- a/src/freedombone-utils-avahi +++ b/src/freedombone-utils-avahi @@ -40,18 +40,20 @@ function create_avahi_service { exit 52925 fi - echo '' > /etc/avahi/services/${service_name}.service - echo '' >> /etc/avahi/services/${service_name}.service - echo '' >> /etc/avahi/services/${service_name}.service - echo " %h ${service_type}" >> /etc/avahi/services/${service_name}.service - echo ' ' >> /etc/avahi/services/${service_name}.service - echo " _${service_type}._${service_protocol}" >> /etc/avahi/services/${service_name}.service - echo " ${service_port}" >> /etc/avahi/services/${service_name}.service + { echo ''; + echo ''; + echo ''; + echo " %h ${service_type}"; + echo ' '; + echo " _${service_type}._${service_protocol}"; + echo " ${service_port}"; } > "/etc/avahi/services/${service_name}.service" + if [ "$service_description" ]; then - echo " $service_description" >> /etc/avahi/services/${service_name}.service + echo " $service_description" >> "/etc/avahi/services/${service_name}.service" fi - echo ' ' >> /etc/avahi/services/${service_name}.service - echo '' >> /etc/avahi/services/${service_name}.service + + { echo ' '; + echo ''; } >> "/etc/avahi/services/${service_name}.service" } function mesh_avahi { @@ -59,64 +61,64 @@ function mesh_avahi { decarray=( 1 2 3 4 5 6 7 8 9 0 ) PEER_ID=${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}${decarray[$RANDOM%10]} - sed -i "s|#host-name=.*|host-name=P$PEER_ID|g" $rootdir/etc/avahi/avahi-daemon.conf - sed -i "s|use-ipv4=.*|use-ipv4=no|g" $rootdir/etc/avahi/avahi-daemon.conf - sed -i "s|use-ipv6=.*|use-ipv6=yes|g" $rootdir/etc/avahi/avahi-daemon.conf - sed -i "s|#allow-interfaces=.*|allow-interfaces=wlan0, wlan1, wlan2, wlan3, wlan4, wlan5|g" $rootdir/etc/avahi/avahi-daemon.conf - sed -i "s|allow-interfaces=.*|allow-interfaces=wlan0, wlan1, wlan2, wlan3, wlan4, wlan5|g" $rootdir/etc/avahi/avahi-daemon.conf - sed -i "s|#deny-interfaces=.*|deny-interfaces=eth0, eth1, eth2, eth3, eth4, eth5|g" $rootdir/etc/avahi/avahi-daemon.conf - sed -i "s|deny-interfaces=.*|deny-interfaces=eth0, eth1, eth2, eth3, eth4, eth5|g" $rootdir/etc/avahi/avahi-daemon.conf - sed -i "s|#disallow-other-stacks=.*|disallow-other-stacks=yes|g" $rootdir/etc/avahi/avahi-daemon.conf - sed -i "s|disallow-other-stacks=.*|disallow-other-stacks=yes|g" $rootdir/etc/avahi/avahi-daemon.conf - sed -i "s|#publish_addresses=.*|publish_addresses=yes|g" $rootdir/etc/avahi/avahi-daemon.conf - sed -i "s|publish_addresses=.*|publish_addresses=yes|g" $rootdir/etc/avahi/avahi-daemon.conf - sed -i "s|#publish-hinfo=.*|publish-hinfo=no|g" $rootdir/etc/avahi/avahi-daemon.conf - sed -i "s|publish-hinfo=.*|publish-hinfo=no|g" $rootdir/etc/avahi/avahi-daemon.conf - sed -i "s|#publish-workstation=.*|publish-workstation=no|g" $rootdir/etc/avahi/avahi-daemon.conf - sed -i "s|publish-workstation=.*|publish-workstation=no|g" $rootdir/etc/avahi/avahi-daemon.conf - sed -i "s|#publish-domain=.*|publish-domain=yes|g" $rootdir/etc/avahi/avahi-daemon.conf - sed -i "s|publish-domain=.*|publish-domain=yes|g" $rootdir/etc/avahi/avahi-daemon.conf - sed -i "s|#publish-a-on-ipv6=.*|publish-a-on-ipv6=yes|g" $rootdir/etc/avahi/avahi-daemon.conf - sed -i "s|publish-a-on-ipv6=.*|publish-a-on-ipv6=yes|g" $rootdir/etc/avahi/avahi-daemon.conf + sed -i "s|#host-name=.*|host-name=P$PEER_ID|g" "$rootdir/etc/avahi/avahi-daemon.conf" + sed -i "s|use-ipv4=.*|use-ipv4=no|g" "$rootdir/etc/avahi/avahi-daemon.conf" + sed -i "s|use-ipv6=.*|use-ipv6=yes|g" "$rootdir/etc/avahi/avahi-daemon.conf" + sed -i "s|#allow-interfaces=.*|allow-interfaces=wlan0, wlan1, wlan2, wlan3, wlan4, wlan5|g" "$rootdir/etc/avahi/avahi-daemon.conf" + sed -i "s|allow-interfaces=.*|allow-interfaces=wlan0, wlan1, wlan2, wlan3, wlan4, wlan5|g" "$rootdir/etc/avahi/avahi-daemon.conf" + sed -i "s|#deny-interfaces=.*|deny-interfaces=eth0, eth1, eth2, eth3, eth4, eth5|g" "$rootdir/etc/avahi/avahi-daemon.conf" + sed -i "s|deny-interfaces=.*|deny-interfaces=eth0, eth1, eth2, eth3, eth4, eth5|g" "$rootdir/etc/avahi/avahi-daemon.conf" + sed -i "s|#disallow-other-stacks=.*|disallow-other-stacks=yes|g" "$rootdir/etc/avahi/avahi-daemon.conf" + sed -i "s|disallow-other-stacks=.*|disallow-other-stacks=yes|g" "$rootdir/etc/avahi/avahi-daemon.conf" + sed -i "s|#publish_addresses=.*|publish_addresses=yes|g" "$rootdir/etc/avahi/avahi-daemon.conf" + sed -i "s|publish_addresses=.*|publish_addresses=yes|g" "$rootdir/etc/avahi/avahi-daemon.conf" + sed -i "s|#publish-hinfo=.*|publish-hinfo=no|g" "$rootdir/etc/avahi/avahi-daemon.conf" + sed -i "s|publish-hinfo=.*|publish-hinfo=no|g" "$rootdir/etc/avahi/avahi-daemon.conf" + sed -i "s|#publish-workstation=.*|publish-workstation=no|g" "$rootdir/etc/avahi/avahi-daemon.conf" + sed -i "s|publish-workstation=.*|publish-workstation=no|g" "$rootdir/etc/avahi/avahi-daemon.conf" + sed -i "s|#publish-domain=.*|publish-domain=yes|g" "$rootdir/etc/avahi/avahi-daemon.conf" + sed -i "s|publish-domain=.*|publish-domain=yes|g" "$rootdir/etc/avahi/avahi-daemon.conf" + sed -i "s|#publish-a-on-ipv6=.*|publish-a-on-ipv6=yes|g" "$rootdir/etc/avahi/avahi-daemon.conf" + sed -i "s|publish-a-on-ipv6=.*|publish-a-on-ipv6=yes|g" "$rootdir/etc/avahi/avahi-daemon.conf" - if [ ! -d $rootdir/etc/avahi/services ]; then - mkdir -p $rootdir/etc/avahi/services + if [ ! -d "$rootdir/etc/avahi/services" ]; then + mkdir -p "$rootdir/etc/avahi/services" fi # remove an avahi service which isn't used - if [ -f $rootdir/etc/avahi/services/udisks.service ]; then - rm $rootdir/etc/avahi/services/udisks.service + if [ -f "$rootdir/etc/avahi/services/udisks.service" ]; then + rm "$rootdir/etc/avahi/services/udisks.service" fi # Add a mesh routing protocol service - echo '' > $rootdir/etc/avahi/services/routing.service - echo '' >> $rootdir/etc/avahi/services/routing.service - echo '' >> $rootdir/etc/avahi/services/routing.service - echo ' %h routing' >> $rootdir/etc/avahi/services/routing.service - echo ' ' >> $rootdir/etc/avahi/services/routing.service - echo ' _bmx6._tcp' >> $rootdir/etc/avahi/services/routing.service - echo ' ' >> $rootdir/etc/avahi/services/routing.service - echo '' >> $rootdir/etc/avahi/services/routing.service + { echo ''; + echo ''; + echo ''; + echo ' %h routing'; + echo ' '; + echo ' _bmx6._tcp'; + echo ' '; + echo ''; } > "$rootdir/etc/avahi/services/routing.service" # keep the daemon running WATCHDOG_SCRIPT_NAME="keepon" - echo '' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME - echo '# keep avahi daemon running' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME - echo 'AVAHI_RUNNING=$(pgrep avahi-daemon > /dev/null && echo Running)' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME - echo 'if [ ! $AVAHI_RUNNING ]; then' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME - echo ' systemctl start avahi-daemon' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME - echo ' echo -n $CURRENT_DATE >> $LOGFILE' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME - echo ' echo " Avahi daemon restarted" >> $LOGFILE' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME - echo 'fi' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME - chmod +x $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME + { echo ''; + echo '# keep avahi daemon running'; + echo "AVAHI_RUNNING=\$(pgrep avahi-daemon > /dev/null && echo Running)"; + echo "if [ ! \$AVAHI_RUNNING ]; then"; + echo ' systemctl start avahi-daemon'; + echo " echo -n \$CURRENT_DATE >> \$LOGFILE"; + echo " echo \" Avahi daemon restarted\" >> \$LOGFILE"; + echo 'fi'; } >> "$rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME" + chmod +x "$rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME" } function install_avahi { - if [ $INSTALLING_MESH ]; then + if [ "$INSTALLING_MESH" ]; then mesh_avahi return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi # only enable avahi if we're doing mesh networking @@ -140,11 +142,11 @@ function install_avahi { sed -i "s|host-name=.*|host-name=P$PEER_ID|g" /etc/avahi/avahi-daemon.conf fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function configure_firewall_for_avahi { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi iptables -A INPUT -p tcp --dport 548 -j ACCEPT @@ -155,7 +157,7 @@ function configure_firewall_for_avahi { iptables -A INPUT -p udp --dport 5354 -j ACCEPT function_check save_firewall_settings save_firewall_settings - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # NOTE: deliberately there is no "exit 0" diff --git a/src/freedombone-utils-backup b/src/freedombone-utils-backup index a5b1f0d6..4bf0e681 100755 --- a/src/freedombone-utils-backup +++ b/src/freedombone-utils-backup @@ -67,7 +67,7 @@ function restart_site { } function configure_backup_key { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi apt-get -yq install gnupg dirmngr @@ -132,7 +132,7 @@ function configure_backup_key { shred -zu ${MY_BACKUP_KEY}_public.asc shred -zu ${MY_BACKUP_KEY}_private.asc - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function backup_to_friends_servers { diff --git a/src/freedombone-utils-cmake b/src/freedombone-utils-cmake index 1e6829f2..46ef7137 100755 --- a/src/freedombone-utils-cmake +++ b/src/freedombone-utils-cmake @@ -83,7 +83,7 @@ function install_cmake { fi fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -111,7 +111,7 @@ function install_cmake { fi make install - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # NOTE: deliberately there is no "exit 0" diff --git a/src/freedombone-utils-cron b/src/freedombone-utils-cron index e0ab63e9..09b8237d 100755 --- a/src/freedombone-utils-cron +++ b/src/freedombone-utils-cron @@ -43,7 +43,7 @@ function randomize_cron { # The predictable default timing of Debian cron jobs might # be exploitable knowledge. Avoid too much predictability # by randomizing the times when cron jobs run - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -74,7 +74,7 @@ function randomize_cron { systemctl restart cron - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function schedule_stig_tests { diff --git a/src/freedombone-utils-cryptopp b/src/freedombone-utils-cryptopp index 1fc511b3..59f1ac2b 100755 --- a/src/freedombone-utils-cryptopp +++ b/src/freedombone-utils-cryptopp @@ -76,7 +76,7 @@ function install_cryptopp { fi fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -98,7 +98,7 @@ function install_cryptopp { fi make install - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # NOTE: deliberately there is no "exit 0" diff --git a/src/freedombone-utils-database b/src/freedombone-utils-database index 6afebc1c..e3fcf0d4 100755 --- a/src/freedombone-utils-database +++ b/src/freedombone-utils-database @@ -191,7 +191,7 @@ function mariadb_create_root_user { } function install_mariadb { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi apt-get -yq install software-properties-common debconf-utils @@ -237,7 +237,7 @@ function install_mariadb { mariadb_create_root_user - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function backup_databases_script_header { @@ -285,7 +285,7 @@ function repair_databases_script { sed -i "s|/usr/bin/repairdatabase|${PROJECT_NAME}-repair-database|g" /etc/cron.hourly/repair fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -299,7 +299,7 @@ function repair_databases_script { chmod 600 /etc/cron.hourly/repair chmod +x /etc/cron.hourly/repair - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function remove_database { diff --git a/src/freedombone-utils-dns b/src/freedombone-utils-dns index 7dd04fc2..7dc3bb39 100755 --- a/src/freedombone-utils-dns +++ b/src/freedombone-utils-dns @@ -102,7 +102,7 @@ function create_freedns_updater { fi # currently inadyn doesn't work as expected with freeDNS, so this is a workaround - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $DDNS_PROVIDER != *"freedns"* ]]; then @@ -127,7 +127,7 @@ function create_freedns_updater { systemctl restart cron fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function add_ddns_domain { @@ -192,7 +192,7 @@ function remove_ddns_domain { } function configure_dns { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -215,7 +215,7 @@ function configure_dns { # prevent resolv.conf from changing resolvconf -u - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function set_hostname { @@ -233,18 +233,18 @@ function set_hostname { } function set_your_domain_name { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi function_check set_hostname set_hostname $DEFAULT_DOMAIN_NAME - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function configure_firewall_for_dns { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then @@ -254,7 +254,7 @@ function configure_firewall_for_dns { iptables -A INPUT -p udp -m udp --dport 1024:65535 --sport 53 -j ACCEPT function_check save_firewall_settings save_firewall_settings - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # NOTE: deliberately no exit 0 diff --git a/src/freedombone-utils-filesystem b/src/freedombone-utils-filesystem index a8c2bee2..8712abd9 100755 --- a/src/freedombone-utils-filesystem +++ b/src/freedombone-utils-filesystem @@ -70,7 +70,7 @@ function install_tomb { set_repo_commit $INSTALL_DIR/tomb "tomb commit" "$TOMB_COMMIT" $TOMB_REPO if [ -f $COMPLETION_FILE ]; then - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi fi @@ -100,7 +100,7 @@ function install_tomb { exit 93462 fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function defrag_filesystem { diff --git a/src/freedombone-utils-final b/src/freedombone-utils-final index f6f44d9e..7bc32dd6 100755 --- a/src/freedombone-utils-final +++ b/src/freedombone-utils-final @@ -29,7 +29,7 @@ # along with this program. If not, see . function install_final { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi # unmount any attached usb drive @@ -41,7 +41,7 @@ function install_final { split_gpg_key_into_fragments lockdown_permissions - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" clear echo '' diff --git a/src/freedombone-utils-firewall b/src/freedombone-utils-firewall index 2359fbe4..2b70d31a 100755 --- a/src/freedombone-utils-firewall +++ b/src/freedombone-utils-firewall @@ -50,7 +50,7 @@ function firewall_block_bad_ip_ranges { if [ $INSTALLING_MESH ]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -86,7 +86,7 @@ function firewall_block_bad_ip_ranges { iptables -A INPUT -s 215.0.0.0/8 -j DROP iptables -A OUTPUT -s 215.0.0.0/8 -j DROP save_firewall_settings - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function global_rate_limit { @@ -143,7 +143,7 @@ function configure_firewall { # recreate the firewall to remove RELATED sed -i "/firewall/d" $COMPLETION_FILE fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then @@ -200,11 +200,11 @@ function configure_firewall { # Incoming malformed NULL packets: iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function firewall_drop_telnet { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi # telnet isn't enabled as an input and we can also @@ -213,11 +213,11 @@ function firewall_drop_telnet { iptables -A OUTPUT -p udp --dport telnet -j REJECT function_check save_firewall_settings save_firewall_settings - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function configure_firewall_ping { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi # Only allow ping for mesh installs @@ -228,11 +228,11 @@ function configure_firewall_ping { iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT function_check save_firewall_settings save_firewall_settings - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function configure_internet_protocol { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $SYSTEM_TYPE == "mesh"* ]]; then @@ -331,7 +331,7 @@ function configure_internet_protocol { sed -i 's|net.ipv4.tcp_timestamps.*|net.ipv4.tcp_timestamps=0|g' /etc/sysctl.conf fi /sbin/sysctl -p - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function mesh_firewall { @@ -615,7 +615,7 @@ function firewall_unblock_domain { } function firewall_drop_spoofed_packets { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi iptables -t mangle -A PREROUTING -s 224.0.0.0/3 -j DROP @@ -627,11 +627,11 @@ function firewall_drop_spoofed_packets { iptables -t mangle -A PREROUTING -s 127.0.0.0/8 ! -i lo -j DROP function_check save_firewall_settings save_firewall_settings - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function firewall_rate_limits { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -652,7 +652,7 @@ function firewall_rate_limits { function_check save_firewall_settings save_firewall_settings - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # NOTE: deliberately no exit 0 diff --git a/src/freedombone-utils-git b/src/freedombone-utils-git index 9e2c3741..8b87552e 100755 --- a/src/freedombone-utils-git +++ b/src/freedombone-utils-git @@ -134,7 +134,7 @@ function set_repo_commit { } function configure_firewall_for_git { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then @@ -146,7 +146,7 @@ function configure_firewall_for_git { fi firewall_add Git 9418 tcp - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # NOTE: deliberately no exit 0 diff --git a/src/freedombone-utils-go b/src/freedombone-utils-go index bc77da17..4f673f71 100755 --- a/src/freedombone-utils-go +++ b/src/freedombone-utils-go @@ -227,7 +227,7 @@ function upgrade_golang { systemctl restart gogs fi - set_completion_param "$FUNCNAME" "$GO_VERSION" + set_completion_param "${FUNCNAME[0]}" "$GO_VERSION" } # NOTE: deliberately there is no "exit 0" diff --git a/src/freedombone-utils-international b/src/freedombone-utils-international index 35d57ed1..a2baf575 100755 --- a/src/freedombone-utils-international +++ b/src/freedombone-utils-international @@ -29,7 +29,7 @@ # along with this program. If not, see . function locale_setup { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -49,7 +49,7 @@ function locale_setup { update-locale LC_ALL=${DEFAULT_LANGUAGE} update-locale LC_CTYPE=${DEFAULT_LANGUAGE} - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # NOTE: deliberately no exit 0 diff --git a/src/freedombone-utils-login b/src/freedombone-utils-login index aa6e4cee..32cf290a 100755 --- a/src/freedombone-utils-login +++ b/src/freedombone-utils-login @@ -29,7 +29,7 @@ # along with this program. If not, see . function change_login_message { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -46,7 +46,7 @@ function change_login_message { echo "' ' --' --' -' - -' ' ' -' -' -' ' - --'" >> /etc/motd echo $' Freedom in the Cloud' >> /etc/motd echo '' >> /etc/motd - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # NOTE: deliberately no exit 0 diff --git a/src/freedombone-utils-mongodb b/src/freedombone-utils-mongodb index d78d9909..b19e37b4 100755 --- a/src/freedombone-utils-mongodb +++ b/src/freedombone-utils-mongodb @@ -57,7 +57,7 @@ function install_mongodb { exit 7356272 fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -90,7 +90,7 @@ function install_mongodb { fi fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function remove_mongodb { diff --git a/src/freedombone-utils-monkeysphere b/src/freedombone-utils-monkeysphere index 8d32638a..1ca49684 100755 --- a/src/freedombone-utils-monkeysphere +++ b/src/freedombone-utils-monkeysphere @@ -29,7 +29,7 @@ # along with this program. If not, see . function install_monkeysphere { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi apt-get -yq install monkeysphere msva-perl @@ -60,7 +60,7 @@ function install_monkeysphere { fpr=$(gpg --with-colons --fingerprint $MY_GPG_PUBLIC_KEY_ID | grep fpr | head -n 1 | awk -F ':' '{print $10}') monkeysphere-authentication add-identity-certifier $fpr - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # NOTE: deliberately no exit 0 diff --git a/src/freedombone-utils-network b/src/freedombone-utils-network index 39ac6c0b..7b9a5df4 100755 --- a/src/freedombone-utils-network +++ b/src/freedombone-utils-network @@ -48,7 +48,7 @@ ROUTER_IP_ADDRESS="192.168.1.254" MESH_INSTALL_DIR=/var/lib function install_static_network { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $INSTALLING_ON_BBB == "yes" ]]; then @@ -68,7 +68,7 @@ function install_static_network { echo ' netmask 255.255.255.0' >> /etc/network/interfaces.d/static echo " gateway $ROUTER_IP_ADDRESS" >> /etc/network/interfaces.d/static - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function get_external_ipv4_address { diff --git a/src/freedombone-utils-nodejs b/src/freedombone-utils-nodejs index a8ec2935..f83be531 100755 --- a/src/freedombone-utils-nodejs +++ b/src/freedombone-utils-nodejs @@ -222,7 +222,7 @@ function install_nodejs { mesh_install_nodejs return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then upgrade_nodejs return fi @@ -256,7 +256,7 @@ function install_nodejs { fi fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # NOTE: deliberately there is no "exit 0" diff --git a/src/freedombone-utils-onion b/src/freedombone-utils-onion index b511f59a..c1996be0 100755 --- a/src/freedombone-utils-onion +++ b/src/freedombone-utils-onion @@ -221,7 +221,7 @@ function enable_ssh_via_onion { if [[ $SYSTEM_TYPE == "mesh"* ]]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi apt-get -yq install tor connect-proxy @@ -248,11 +248,11 @@ function enable_ssh_via_onion { echo 'Host *.onion' >> /etc/skel/.ssh/config echo 'ProxyCommand connect -R remote -5 -S 127.0.0.1:9050 %h %p' >> /etc/skel/.ssh/config fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function configure_ssh_onion { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $SYSTEM_TYPE == "mesh"* ]]; then @@ -268,14 +268,14 @@ function configure_ssh_onion { set_completion_param "ssh onion domain" "${SSH_ONION_HOSTNAME}" add_email_hostname "${SSH_ONION_HOSTNAME}" - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function install_tor { if [[ $SYSTEM_TYPE == "mesh*" ]]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -296,14 +296,14 @@ function install_tor { sed -i "s|#AccountingMax.*|AccountingMax $TOR_MAX_TRAFFIC_PER_MONTH_GB GBytes|g" /etc/tor/torrc sed -i "s|AccountingMax.*|AccountingMax $TOR_MAX_TRAFFIC_PER_MONTH_GB GBytes|g" /etc/tor/torrc - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function resolve_dns_via_tor { if [[ $SYSTEM_TYPE == "mesh"* ]]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [ ! -f /etc/tor/torrc ]; then @@ -327,13 +327,13 @@ function resolve_dns_via_tor { echo 'nameserver 127.0.0.1:53' > $resolvconf resolvconf -u - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # see https://trac.torproject.org/projects/tor/wiki/doc/TransparentProxy # Local Redirection and Anonymizing Middlebox function route_outgoing_traffic_through_tor { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $ROUTE_THROUGH_TOR != "yes" ]]; then @@ -428,7 +428,7 @@ function route_outgoing_traffic_through_tor { echo "DNSListenAddress $LOCAL_NETWORK_STATIC_IP_ADDRESS" >> /etc/tor/torrc fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function get_app_onion_address { diff --git a/src/freedombone-utils-passwords b/src/freedombone-utils-passwords index 90cc02c7..a4d420ea 100755 --- a/src/freedombone-utils-passwords +++ b/src/freedombone-utils-passwords @@ -41,13 +41,13 @@ DEFAULT_PASSWORD_LENGTH=20 function enforce_good_passwords { # because humans are generally bad at choosing passwords - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi apt-get -yq install libpam-cracklib sed -i 's/password.*requisite.*pam_cracklib.so.*/password required pam_cracklib.so retry=2 dcredit=-4 ucredit=-1 ocredit=-1 lcredit=0 minlen=10 reject_username/g' /etc/pam.d/common-password - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function create_password { diff --git a/src/freedombone-utils-postgresql b/src/freedombone-utils-postgresql index e8be209b..4aa271b8 100755 --- a/src/freedombone-utils-postgresql +++ b/src/freedombone-utils-postgresql @@ -69,7 +69,7 @@ function install_postgresql { return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -101,7 +101,7 @@ function install_postgresql { exit 835290 fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function add_postgresql_user { diff --git a/src/freedombone-utils-repos b/src/freedombone-utils-repos index b7f31f92..2dc70abe 100755 --- a/src/freedombone-utils-repos +++ b/src/freedombone-utils-repos @@ -32,7 +32,7 @@ DEBIAN_REPO="ftp.us.debian.org" function create_repo_sources { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi rm -rf /var/lib/apt/lists/* @@ -53,12 +53,12 @@ function create_repo_sources { apt-get update apt-get -yq install apt-transport-https - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # A command to create a git repository for a project function create_git_project { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi apt-get -yq install git @@ -86,7 +86,7 @@ function create_git_project { echo 'exit 0' >> /usr/bin/$CREATE_GIT_PROJECT_COMMAND chmod +x /usr/bin/$CREATE_GIT_PROJECT_COMMAND - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # NOTE: deliberately no exit 0 diff --git a/src/freedombone-utils-rng b/src/freedombone-utils-rng index 500c4fe0..cb61fb4f 100755 --- a/src/freedombone-utils-rng +++ b/src/freedombone-utils-rng @@ -59,7 +59,7 @@ function check_hwrng { } function check_onerng_verification { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $HWRNG_TYPE != "onerng" ]]; then @@ -78,7 +78,7 @@ function check_onerng_verification { echo $'OneRNG firmware verification passed' # if haveged was previously installed then remove it apt-get -yq remove haveged - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function install_onerng { @@ -131,7 +131,7 @@ function install_onerng { } function random_number_generator { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then @@ -165,7 +165,7 @@ function random_number_generator { ;; esac - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # NOTE: deliberately no exit 0 diff --git a/src/freedombone-utils-setup b/src/freedombone-utils-setup index 61869ae3..77522207 100755 --- a/src/freedombone-utils-setup +++ b/src/freedombone-utils-setup @@ -252,7 +252,7 @@ function turn_off_rsys_logging { } function initial_setup { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -283,7 +283,7 @@ function initial_setup { mkdir -p $INSTALL_DIR fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function turn_off_magic_sysrq { @@ -316,7 +316,7 @@ function admin_user_sudo { function search_for_attached_usb_drive { # If a USB drive is attached then search for email, # gpg, ssh keys and emacs configuration - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi detect_usb_drive @@ -404,7 +404,7 @@ function search_for_attached_usb_drive { fi echo $'No USB drive attached' fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function mark_admin_user_account { @@ -681,14 +681,14 @@ function create_usb_canary { if [[ $SYSTEM_TYPE == "mesh"* ]]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi echo "ACTION==\"add\", KERNEL==\"sd*[!0-9]\", RUN+=\"/usr/local/bin/${PROJECT_NAME}-usb-canary\"" > /etc/udev/rules.d/00-usb-canary.rules udevadm control --reload-rules - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function setup_firewall { diff --git a/src/freedombone-utils-ssh b/src/freedombone-utils-ssh index bab31578..3e1b48ae 100755 --- a/src/freedombone-utils-ssh +++ b/src/freedombone-utils-ssh @@ -37,7 +37,7 @@ SSH_KEX="curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256,diffi SSH_HOST_KEY_ALGORITHMS="ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-ed25519,ssh-rsa" function configure_ssh { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -125,7 +125,7 @@ function configure_ssh { function_check configure_firewall_for_ssh configure_firewall_for_ssh - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # see https://stribika.github.io/2015/01/04/secure-secure-shell.html @@ -135,7 +135,7 @@ function ssh_remove_small_moduli { } function configure_ssh_client { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi #sed -i 's/# PasswordAuthentication.*/ PasswordAuthentication no/g' /etc/ssh/ssh_config @@ -165,11 +165,11 @@ function configure_ssh_client { function_check ssh_remove_small_moduli ssh_remove_small_moduli - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function regenerate_ssh_keys { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi rm -f /etc/ssh/ssh_host_* @@ -179,11 +179,11 @@ function regenerate_ssh_keys { ssh_remove_small_moduli systemctl restart ssh - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function configure_firewall_for_ssh { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then @@ -192,7 +192,7 @@ function configure_firewall_for_ssh { fi firewall_add SSH ${SSH_PORT} tcp - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function get_ssh_server_key { diff --git a/src/freedombone-utils-tracker b/src/freedombone-utils-tracker index 3a19978f..15fcf758 100755 --- a/src/freedombone-utils-tracker +++ b/src/freedombone-utils-tracker @@ -65,7 +65,7 @@ function install_tracker { return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -97,7 +97,7 @@ function install_tracker { systemctl enable tracker.service systemctl start tracker.service - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # NOTE: deliberately no exit 0 diff --git a/src/freedombone-utils-upgrade b/src/freedombone-utils-upgrade index 01ff5f17..e8e5eb4e 100755 --- a/src/freedombone-utils-upgrade +++ b/src/freedombone-utils-upgrade @@ -43,20 +43,20 @@ function create_upgrade_script { fi fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi apt-get -yq install unattended-upgrades - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function upgrade_installation_from_previous_versions { if [ ! -f $COMPLETION_FILE ]; then return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -87,7 +87,7 @@ function upgrade_installation_from_previous_versions { rm /usr/local/bin/zeronetavahi fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # NOTE: deliberately no exit 0 diff --git a/src/freedombone-utils-watchdog b/src/freedombone-utils-watchdog index 00cf2581..8b05cf35 100755 --- a/src/freedombone-utils-watchdog +++ b/src/freedombone-utils-watchdog @@ -34,7 +34,7 @@ WATCHDOG_SCRIPT_NAME="keepon" function install_watchdog_script { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi echo '#!/bin/bash' > /usr/bin/$WATCHDOG_SCRIPT_NAME @@ -46,7 +46,7 @@ function install_watchdog_script { function_check cron_add_mins cron_add_mins 1 "/usr/bin/$WATCHDOG_SCRIPT_NAME" - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function daemon_is_running { diff --git a/src/freedombone-utils-web b/src/freedombone-utils-web index 8457bc58..3cb0d34d 100755 --- a/src/freedombone-utils-web +++ b/src/freedombone-utils-web @@ -437,7 +437,7 @@ function install_dynamicdns { function_check set_repo_commit set_repo_commit $INSTALL_DIR/inadyn "inadyn commit" "$INADYN_COMMIT" $INADYN_REPO - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -512,7 +512,7 @@ function install_dynamicdns { systemctl start inadyn systemctl daemon-reload - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function update_default_search_engine { @@ -539,13 +539,13 @@ function update_default_search_engine { } function install_command_line_browser { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi apt-get -yq install elinks update_default_search_engine - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function mesh_web_server { @@ -572,7 +572,7 @@ function install_web_server { function_check set_repo_commit set_repo_commit $INSTALL_DIR/nginx_ensite "nginx-ensite commit" "$NGINX_ENSITE_COMMIT" $NGINX_ENSITE_REPO - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi # remove apache @@ -714,7 +714,7 @@ function install_web_server { function_check configure_firewall_for_web_access configure_firewall_for_web_access - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function remove_certs { @@ -742,7 +742,7 @@ function remove_certs { } function configure_firewall_for_web_access { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [[ $INSTALLED_WITHIN_DOCKER == "yes" ]]; then @@ -754,7 +754,7 @@ function configure_firewall_for_web_access { fi firewall_add HTTP 80 tcp firewall_add HTTPS 443 tcp - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function update_default_domain { diff --git a/src/freedombone-utils-wifi b/src/freedombone-utils-wifi index 1ecdf813..ecef691e 100755 --- a/src/freedombone-utils-wifi +++ b/src/freedombone-utils-wifi @@ -120,7 +120,7 @@ function setup_wifi { return fi - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -131,7 +131,7 @@ function setup_wifi { if [ -f $WIFI_NETWORKS_FILE ]; then ${PROJECT_NAME}-wifi --networks $WIFI_NETWORKS_FILE - mark_completed $FUNCNAME + mark_complete "${FUNCNAME[0]}" return fi @@ -148,12 +148,12 @@ function setup_wifi { else ${PROJECT_NAME}-wifi -s $WIFI_SSID -t $WIFI_TYPE --hotspot $HOTSPOT --networks $WIFI_NETWORKS_FILE fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # ath9k_htc driver function install_atheros_wifi { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi if [ $INSTALLING_ON_BBB != "yes" ]; then @@ -198,7 +198,7 @@ function install_atheros_wifi { if [ ! "$?" = "0" ]; then exit 74681 fi - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } function update_wifi_adaptors { diff --git a/src/freedombone-utils-zram b/src/freedombone-utils-zram index 55b798d4..1c225804 100755 --- a/src/freedombone-utils-zram +++ b/src/freedombone-utils-zram @@ -29,7 +29,7 @@ # along with this program. If not, see . function enable_zram { - if [[ $(is_completed $FUNCNAME) == "1" ]]; then + if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi @@ -40,7 +40,7 @@ function enable_zram { ${PROJECT_NAME}-zram on - mark_completed $FUNCNAME + mark_completed "${FUNCNAME[0]}" } # NOTE: deliberately no exit 0 diff --git a/src/freedombone-zram b/src/freedombone-zram index b947112b..26cde1ae 100755 --- a/src/freedombone-zram +++ b/src/freedombone-zram @@ -48,7 +48,7 @@ function zram_daemon { echo "ExecStart=${PROJECT_NAME}-zram on"; echo ''; echo '[Install]'; - echo 'WantedBy=multi-user.target'; } >> $DAEMON_FILENAME + echo 'WantedBy=multi-user.target'; } > $DAEMON_FILENAME } function zram_on { From bcf377b9cd82723bee05ca858c6ce62f3d598bba Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 25 Feb 2018 13:49:17 +0000 Subject: [PATCH 07/67] Tidy avahi utils --- src/freedombone-utils-avahi | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/freedombone-utils-avahi b/src/freedombone-utils-avahi index 0e299cc3..7d24de6f 100755 --- a/src/freedombone-utils-avahi +++ b/src/freedombone-utils-avahi @@ -57,6 +57,7 @@ function create_avahi_service { } function mesh_avahi { + # shellcheck disable=SC2154 chroot "$rootdir" apt-get -yq install avahi-utils avahi-dnsconfd decarray=( 1 2 3 4 5 6 7 8 9 0 ) @@ -126,13 +127,12 @@ function install_avahi { return fi - ${PROJECT_NAME}-mesh-install -f avahi - if [ ! "$?" = "0" ]; then + if ! "${PROJECT_NAME}-mesh-install" -f avahi; then echo $'Failed to install avahi' exit 68442 fi - if [ $DEFAULT_DOMAIN_NAME ]; then + if [ "$DEFAULT_DOMAIN_NAME" ]; then sed -i "s|#host-name=.*|host-name=$LOCAL_NAME|g" /etc/avahi/avahi-daemon.conf sed -i "s|host-name=.*|host-name=$LOCAL_NAME|g" /etc/avahi/avahi-daemon.conf else From fee71d392e628e19769f0bfea92b95a2b749b293 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 25 Feb 2018 14:35:20 +0000 Subject: [PATCH 08/67] Tidying backup utils --- src/freedombone-utils-backup | 459 ++++++++++++++++++----------------- 1 file changed, 233 insertions(+), 226 deletions(-) diff --git a/src/freedombone-utils-backup b/src/freedombone-utils-backup index 4bf0e681..5dc94993 100755 --- a/src/freedombone-utils-backup +++ b/src/freedombone-utils-backup @@ -52,16 +52,16 @@ function remove_backups_temp_directory { function suspend_site { # suspends a given website SUSPENDED_SITE="$1" - nginx_dissite $SUSPENDED_SITE + nginx_dissite "$SUSPENDED_SITE" systemctl reload nginx } function restart_site { # restarts a given website - if [ ! $SUSPENDED_SITE ]; then + if [ ! "$SUSPENDED_SITE" ]; then return fi - nginx_ensite $SUSPENDED_SITE + nginx_ensite "$SUSPENDED_SITE" systemctl reload nginx SUSPENDED_SITE= } @@ -79,27 +79,27 @@ function configure_backup_key { fi gpg_agent_setup root - gpg_agent_setup $MY_USERNAME + gpg_agent_setup "$MY_USERNAME" # Generate a GPG key for backups BACKUP_KEY_EXISTS=$(gpg_key_exists "$MY_USERNAME" "$MY_NAME (backup key)") if [[ $BACKUP_KEY_EXISTS == "no" ]]; then - echo 'Key-Type: eddsa' > /home/$MY_USERNAME/gpg-genkey.conf - echo 'Key-Curve: Ed25519' >> /home/$MY_USERNAME/gpg-genkey.conf - echo 'Subkey-Type: eddsa' >> /home/$MY_USERNAME/gpg-genkey.conf - echo 'Subkey-Curve: Ed25519' >> /home/$MY_USERNAME/gpg-genkey.conf - echo "Name-Real: $MY_NAME" >> /home/$MY_USERNAME/gpg-genkey.conf - echo "Name-Email: $MY_EMAIL_ADDRESS" >> /home/$MY_USERNAME/gpg-genkey.conf - echo "Name-Comment: backup key" >> /home/$MY_USERNAME/gpg-genkey.conf - echo 'Expire-Date: 0' >> /home/$MY_USERNAME/gpg-genkey.conf - cat /home/$MY_USERNAME/gpg-genkey.conf - echo "Passphrase: $BACKUP_DUMMY_PASSWORD" >> /home/$MY_USERNAME/gpg-genkey.conf - chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/gpg-genkey.conf + { echo 'Key-Type: eddsa'; + echo 'Key-Curve: Ed25519'; + echo 'Subkey-Type: eddsa'; + echo 'Subkey-Curve: Ed25519'; + echo "Name-Real: $MY_NAME"; + echo "Name-Email: $MY_EMAIL_ADDRESS"; + echo "Name-Comment: backup key"; + echo 'Expire-Date: 0'; } > "/home/$MY_USERNAME/gpg-genkey.conf" + cat "/home/$MY_USERNAME/gpg-genkey.conf" + echo "Passphrase: $BACKUP_DUMMY_PASSWORD" >> "/home/$MY_USERNAME/gpg-genkey.conf" + chown "$MY_USERNAME":"$MY_USERNAME" "/home/$MY_USERNAME/gpg-genkey.conf" echo $'Backup key does not exist. Creating it.' - su -m root -c "gpg --homedir /home/$MY_USERNAME/.gnupg --batch --full-gen-key /home/$MY_USERNAME/gpg-genkey.conf" - $MY_USERNAME - chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.gnupg + su -m root -c "gpg --homedir /home/$MY_USERNAME/.gnupg --batch --full-gen-key /home/$MY_USERNAME/gpg-genkey.conf" - "$MY_USERNAME" + chown -R "$MY_USERNAME":"$MY_USERNAME" "/home/$MY_USERNAME/.gnupg" - shred -zu /home/$MY_USERNAME/gpg-genkey.conf + shred -zu "/home/$MY_USERNAME/gpg-genkey.conf" echo $'Checking that the Backup key was created' BACKUP_KEY_EXISTS=$(gpg_key_exists "$MY_USERNAME" "$MY_NAME (backup key)") if [[ $BACKUP_KEY_EXISTS == "no" ]]; then @@ -108,46 +108,46 @@ function configure_backup_key { fi fi - MY_BACKUP_KEY_ID=$(su -c "gpg --list-keys \"$MY_NAME (backup key)\"" - $MY_USERNAME | sed -n '2p' | sed 's/^[ \t]*//') + MY_BACKUP_KEY_ID=$(su -c "gpg --list-keys \"$MY_NAME (backup key)\"" - "$MY_USERNAME" | sed -n '2p' | sed 's/^[ \t]*//') echo "Backup key: $MY_BACKUP_KEY_ID" MY_BACKUP_KEY=/home/$MY_USERNAME/backup_key - su -m root -c "gpg --homedir /home/$MY_USERNAME/.gnupg --output ${MY_BACKUP_KEY}_public.asc --armor --export $MY_BACKUP_KEY_ID" - $MY_USERNAME + su -m root -c "gpg --homedir /home/$MY_USERNAME/.gnupg --output ${MY_BACKUP_KEY}_public.asc --armor --export $MY_BACKUP_KEY_ID" - "$MY_USERNAME" - if [ ! -f ${MY_BACKUP_KEY}_public.asc ]; then + if [ ! -f "${MY_BACKUP_KEY}_public.asc" ]; then echo 'Public backup key could not be exported' exit 36829 fi - su -m root -c "echo '$BACKUP_DUMMY_PASSWORD' | gpg --homedir /home/$MY_USERNAME/.gnupg --output ${MY_BACKUP_KEY}_private.asc --armor --batch --passphrase-fd 0 --export-secret-key $MY_BACKUP_KEY_ID" - $MY_USERNAME + su -m root -c "echo '$BACKUP_DUMMY_PASSWORD' | gpg --homedir /home/$MY_USERNAME/.gnupg --output ${MY_BACKUP_KEY}_private.asc --armor --batch --passphrase-fd 0 --export-secret-key $MY_BACKUP_KEY_ID" - "$MY_USERNAME" - if [ ! -f ${MY_BACKUP_KEY}_private.asc ]; then + if [ ! -f "${MY_BACKUP_KEY}_private.asc" ]; then echo 'Private backup key could not be exported' exit 29235 fi # import backup key to root user - gpg --import --import ${MY_BACKUP_KEY}_public.asc - echo '$BACKUP_DUMMY_PASSWORD' | gpg --batch --passphrase-fd 0 --allow-secret-key-import --import ${MY_BACKUP_KEY}_private.asc + gpg --import --import "${MY_BACKUP_KEY}_public.asc" + echo "$BACKUP_DUMMY_PASSWORD" | gpg --batch --passphrase-fd 0 --allow-secret-key-import --import "${MY_BACKUP_KEY}_private.asc" - shred -zu ${MY_BACKUP_KEY}_public.asc - shred -zu ${MY_BACKUP_KEY}_private.asc + shred -zu "${MY_BACKUP_KEY}_public.asc" + shred -zu "${MY_BACKUP_KEY}_private.asc" mark_completed "${FUNCNAME[0]}" } function backup_to_friends_servers { # update crontab - echo '#!/bin/bash' > /etc/cron.daily/backuptofriends - echo "if [ -f /usr/local/bin/${PROJECT_NAME}-backup-remote ]; then" >> /etc/cron.daily/backuptofriends - echo " /usr/local/bin/${PROJECT_NAME}-backup-remote" >> /etc/cron.daily/backuptofriends - echo 'else' >> /etc/cron.daily/backuptofriends - echo " /usr/bin/${PROJECT_NAME}-backup-remote" >> /etc/cron.daily/backuptofriends - echo 'fi' >> /etc/cron.daily/backuptofriends + { echo '#!/bin/bash'; + echo "if [ -f /usr/local/bin/${PROJECT_NAME}-backup-remote ]; then"; + echo " /usr/local/bin/${PROJECT_NAME}-backup-remote"; + echo 'else'; + echo " /usr/bin/${PROJECT_NAME}-backup-remote"; + echo 'fi'; } > /etc/cron.daily/backuptofriends chmod +x /etc/cron.daily/backuptofriends } function backup_mount_drive { - if [ $1 ]; then + if [ "$1" ]; then if [[ "$1" == "/dev/"* ]]; then USB_DRIVE=$1 else @@ -157,25 +157,25 @@ function backup_mount_drive { # get the admin user ADMIN_USERNAME=$(get_completion_param "Admin user") - if [ $2 ]; then + if [ "$2" ]; then ADMIN_USERNAME=$2 fi - ADMIN_NAME=$(getent passwd $ADMIN_USERNAME | cut -d: -f5 | cut -d, -f1) + ADMIN_NAME=$(getent passwd "$ADMIN_USERNAME" | cut -d: -f5 | cut -d, -f1) - if [ $3 ]; then + if [ "$3" ]; then RESTORE_APP=$3 fi # check that the backup destination is available - if [ ! -b $USB_DRIVE ]; then + if [ ! -b "$USB_DRIVE" ]; then echo $"Please attach a USB drive" exit 1 fi # unmount if already mounted - umount -f $USB_MOUNT - if [ ! -d $USB_MOUNT ]; then - mkdir $USB_MOUNT + umount -f "$USB_MOUNT" + if [ ! -d "$USB_MOUNT" ]; then + mkdir "$USB_MOUNT" fi if [ -f /dev/mapper/encrypted_usb ]; then rm -rf /dev/mapper/encrypted_usb @@ -183,33 +183,30 @@ function backup_mount_drive { cryptsetup luksClose encrypted_usb # mount the encrypted backup drive - cryptsetup luksOpen $USB_DRIVE encrypted_usb - if [ "$?" = "0" ]; then + if cryptsetup luksOpen "$USB_DRIVE" encrypted_usb; then USB_DRIVE=/dev/mapper/encrypted_usb fi - mount $USB_DRIVE $USB_MOUNT - if [ ! "$?" = "0" ]; then + if ! mount "$USB_DRIVE" "$USB_MOUNT"; then echo $"There was a problem mounting the USB drive to $USB_MOUNT" - rm -rf $USB_MOUNT + rm -rf "$USB_MOUNT" exit 783452 fi } function backup_unmount_drive { - if [ $1 ]; then - USB_DRIVE=${1} - if [ $2 ]; then - USB_MOUNT=${2} - fi - fi + #if [ $1 ]; then + # USB_DRIVE=${1} + # if [ $2 ]; then + # USB_MOUNT=${2} + # fi + #fi sync - umount $USB_MOUNT - if [ ! "$?" = "0" ]; then + if ! umount "$USB_MOUNT"; then echo $"Unable to unmount the drive." - rm -rf $USB_MOUNT + rm -rf "$USB_MOUNT" exit 9 fi - rm -rf $USB_MOUNT + rm -rf "$USB_MOUNT" if [[ $USB_DRIVE == /dev/mapper/encrypted_usb ]]; then echo $"Unmount encrypted USB" cryptsetup luksClose encrypted_usb @@ -226,54 +223,55 @@ function backup_database_local_usb { restart_site exit 10 fi - if [ ! -d $USB_MOUNT/backup/${1} ]; then - mkdir -p $USB_MOUNT/backup/${1} + if [ ! -d "$USB_MOUNT/backup/${1}" ]; then + mkdir -p "$USB_MOUNT/backup/${1}" fi - if [ ! -d $USB_MOUNT/backup/${1}data ]; then - mkdir -p $USB_MOUNT/backup/${1}data + if [ ! -d "$USB_MOUNT/backup/${1}data" ]; then + mkdir -p "$USB_MOUNT/backup/${1}data" fi local_database_dir=/root/temp${1}data - if [ ! -d ${local_database_dir} ]; then - mkdir -p ${local_database_dir} + if [ ! -d "${local_database_dir}" ]; then + mkdir -p "${local_database_dir}" fi echo $"Obtaining ${1} database backup" database_file_extension='sql' - if [ $USE_MONGODB ]; then + if [ "$USE_MONGODB" ]; then database_file_extension='mdb' USE_POSTGRESQL= fi if [ ! $USE_POSTGRESQL ]; then - if [ ! $USE_MONGODB ]; then + if [ ! "$USE_MONGODB" ]; then USE_MONGODB= USE_POSTGRESQL= keep_database_running - mysqldump --lock-tables --password="$DATABASE_PASSWORD" ${1} > ${local_database_dir}/${1}.${database_file_extension} + mysqldump --lock-tables --password="$DATABASE_PASSWORD" "${1}" > "${local_database_dir}/${1}.${database_file_extension}" else USE_MONGODB= USE_POSTGRESQL= - mongodump --db ${1} --archive=${local_database_dir}/${1}.${database_file_extension} --gzip + mongodump --db "${1}" --archive="${local_database_dir}/${1}.${database_file_extension}" --gzip fi else USE_MONGODB= USE_POSTGRESQL= - cd /etc/postgresql - sudo -u postgres pg_dump ${1} > ${local_database_dir}/${1}.${database_file_extension} + cd /etc/postgresql || exit 673852 + # shellcheck disable=2024 + sudo -u postgres pg_dump "${1}" > "${local_database_dir}/${1}.${database_file_extension}" fi - if [ -f ${local_database_dir}/${1}.${database_file_extension} ]; then - if [ ! -s ${local_database_dir}/${1}.${database_file_extension} ]; then + if [ -f "${local_database_dir}/${1}.${database_file_extension}" ]; then + if [ ! -s "${local_database_dir}/${1}.${database_file_extension}" ]; then echo $"${1} database could not be saved" - shred -zu ${local_database_dir}/* - rm -rf ${local_database_dir} - umount $USB_MOUNT - rm -rf $USB_MOUNT + shred -zu "${local_database_dir}/*" + rm -rf "${local_database_dir}" + umount "$USB_MOUNT" + rm -rf "$USB_MOUNT" restart_site exit 6835872 fi else echo $"${1} database could not be dumped" - rm -rf ${local_database_dir} - umount $USB_MOUNT - rm -rf $USB_MOUNT + rm -rf "${local_database_dir}" + umount "$USB_MOUNT" + rm -rf "$USB_MOUNT" restart_site exit 738653 fi @@ -282,13 +280,14 @@ function backup_database_local_usb { function backup_directory_to_usb_duplicity { create_backups_temp_directory - echo "$BACKUP_DUMMY_PASSWORD" | duplicity full --use-agent --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir $BACKUP_TEMP_DIRECTORY --encrypt-key $MY_BACKUP_KEY_ID --full-if-older-than 4W --exclude-other-filesystems ${1} file://$USB_MOUNT/backup/${2} + echo "$BACKUP_DUMMY_PASSWORD" | duplicity full --use-agent --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir "$BACKUP_TEMP_DIRECTORY" --encrypt-key "$MY_BACKUP_KEY_ID" --full-if-older-than 4W --exclude-other-filesystems "${1}" "file://$USB_MOUNT/backup/${2}" + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then - umount $USB_MOUNT - rm -rf $USB_MOUNT + umount "$USB_MOUNT" + rm -rf "$USB_MOUNT" if [[ ${1} == "/root/temp"* || ${1} == *"tempbackup" ]]; then - shred -zu ${1}/* - rm -rf ${1} + shred -zu "${1}/*" + rm -rf "${1}" fi function_check restart_site restart_site @@ -296,13 +295,14 @@ function backup_directory_to_usb_duplicity { exit 8352925 fi if [[ $ENABLE_BACKUP_VERIFICATION == "yes" ]]; then - echo "$BACKUP_DUMMY_PASSWORD" | duplicity verify --use-agent --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir $BACKUP_TEMP_DIRECTORY --encrypt-key $MY_BACKUP_KEY_ID --full-if-older-than 4W --exclude-other-filesystems ${1} file://$USB_MOUNT/backup/${2} + echo "$BACKUP_DUMMY_PASSWORD" | duplicity verify --use-agent --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir "$BACKUP_TEMP_DIRECTORY" --encrypt-key "$MY_BACKUP_KEY_ID" --full-if-older-than 4W --exclude-other-filesystems "${1}" "file://$USB_MOUNT/backup/${2}" + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then - umount $USB_MOUNT - rm -rf $USB_MOUNT + umount "$USB_MOUNT" + rm -rf "$USB_MOUNT" if [[ ${1} == "/root/temp"* || ${1} == *"tempbackup" ]]; then - shred -zu ${1}/* - rm -rf ${1} + shred -zu "${1}/*" + rm -rf "${1}" fi function_check restart_site restart_site @@ -314,10 +314,11 @@ function backup_directory_to_usb_duplicity { } function backup_directory_to_usb { - if [ ! -d ${1} ]; then + if [ ! -d "${1}" ]; then echo $"WARNING: directory does not exist: ${1}" else BACKUP_KEY_EXISTS=$(gpg --list-keys "$ADMIN_NAME (backup key)") + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then echo $"Backup key could not be found" function_check restart_site @@ -326,77 +327,76 @@ function backup_directory_to_usb { fi MY_BACKUP_KEY_ID=$(gpg --list-keys "$ADMIN_NAME (backup key)" | sed -n '2p' | sed 's/^[ \t]*//') - if [ ! -d $USB_MOUNT/backup/${2} ]; then - mkdir -p $USB_MOUNT/backup/${2} + if [ ! -d "$USB_MOUNT/backup/${2}" ]; then + mkdir -p "$USB_MOUNT/backup/${2}" fi - backup_directory_to_usb_duplicity ${1} ${2} + backup_directory_to_usb_duplicity "${1}" "${2}" if [[ ${1} == "/root/temp"* || ${1} == *"tempbackup" ]]; then - shred -zu ${1}/* - rm -rf ${1} + shred -zu "${1}/*" + rm -rf "${1}" fi fi } function restore_directory_from_usb_duplicity { create_backups_temp_directory - PASSPHRASE="$BACKUP_DUMMY_PASSWORD" duplicity restore --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir $BACKUP_TEMP_DIRECTORY --force file://$USB_MOUNT/backup/${2} ${1} + PASSPHRASE="$BACKUP_DUMMY_PASSWORD" duplicity restore --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir "$BACKUP_TEMP_DIRECTORY" --force "file://$USB_MOUNT/backup/${2}" "${1}" + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then echo "WARNING: failed to restore $USB_MOUNT/backup/${2} to ${1}" fi - PASSPHRASE= remove_backups_temp_directory } function restore_directory_from_usb { - if [ ! ${1} ]; then + if [ ! "${1}" ]; then echo "$USB_MOUNT/backup/${2} -> ${1}" echo $'No restore destination given' return fi - if [ ! ${2} ]; then + if [ ! "${2}" ]; then echo "$USB_MOUNT/backup/${2} -> ${1}" echo $'No restore source given' return fi - if [ ! -d ${1} ]; then - mkdir ${1} + if [ ! -d "${1}" ]; then + mkdir "${1}" fi - restore_directory_from_usb_duplicity ${1} ${2} + restore_directory_from_usb_duplicity "${1}" "${2}" } function restore_directory_from_friend_duplicity { create_backups_temp_directory - PASSPHRASE="$BACKUP_DUMMY_PASSWORD" duplicity restore --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir $BACKUP_TEMP_DIRECTORY --force file://$SERVER_DIRECTORY/backup/${2} ${1} - PASSPHRASE= + PASSPHRASE="$BACKUP_DUMMY_PASSWORD" duplicity restore --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir "$BACKUP_TEMP_DIRECTORY" --force "file://$SERVER_DIRECTORY/backup/${2}" "${1}" remove_backups_temp_directory } function restore_directory_from_friend { - if [ ! ${1} ]; then + if [ ! "${1}" ]; then echo $'No restore destination given' return fi - if [ ! ${2} ]; then + if [ ! "${2}" ]; then echo $'No restore source given' return fi - if [ ! -d ${1} ]; then - mkdir ${1} + if [ ! -d "${1}" ]; then + mkdir "${1}" fi - restore_directory_from_friend_duplicity ${1} ${2} + restore_directory_from_friend_duplicity "${1}" "${2}" } function backup_database_to_usb { database_name=$1 local_database_dir=/root/temp${1}data - backup_database_local_usb ${database_name} - if [ ! -f ${local_database_dir}/${1}.sql ]; then + backup_database_local_usb "${database_name}" + if [ ! -f "${local_database_dir}/${1}.sql" ]; then echo $"Error backing up ${1} database to ${local_database_dir}/${1}.sql" exit 62383 fi - backup_directory_to_usb ${local_database_dir} ${database_name}data + backup_directory_to_usb "${local_database_dir}" "${database_name}data" } # after user files have been restored permissions may need to be set @@ -405,18 +405,19 @@ function set_user_permissions { for d in /home/*/ ; do USERNAME=$(echo "$d" | awk -F '/' '{print $3}') if [[ $(is_valid_user "$USERNAME") == "1" ]]; then - chown -R $USERNAME:$USERNAME /home/$USERNAME + chown -R "$USERNAME":"$USERNAME" "/home/$USERNAME" fi done } function backup_directory_to_friend_duplicity { create_backups_temp_directory - echo "$BACKUP_DUMMY_PASSWORD" | duplicity full --use-agent --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir $BACKUP_TEMP_DIRECTORY --ssh-askpass --encrypt-key ${ADMIN_BACKUP_KEY_ID} --full-if-older-than 4W --exclude-other-filesystems ${1} $SERVER_DIRECTORY/backup/${2} + echo "$BACKUP_DUMMY_PASSWORD" | duplicity full --use-agent --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir "$BACKUP_TEMP_DIRECTORY" --ssh-askpass --encrypt-key "${ADMIN_BACKUP_KEY_ID}" --full-if-older-than 4W --exclude-other-filesystems "${1}" "$SERVER_DIRECTORY/backup/${2}" + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then - if [[ ${1} == "/root/temp"* || ${1} == *"tempbackup" ]]; then - shred -zu ${1}/* - rm -rf ${1} + if [[ "${1}" == "/root/temp"* || ${1} == *"tempbackup" ]]; then + shred -zu "${1}/*" + rm -rf "${1}" fi function_check restart_site restart_site @@ -424,11 +425,12 @@ function backup_directory_to_friend_duplicity { exit 5293526 fi if [[ $ENABLE_BACKUP_VERIFICATION == "yes" ]]; then - echo "$BACKUP_DUMMY_PASSWORD" | duplicity verify --use-agent --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir $BACKUP_TEMP_DIRECTORY --ssh-askpass --encrypt-key ${ADMIN_BACKUP_KEY_ID} --full-if-older-than 4W --exclude-other-filesystems ${1} $SERVER_DIRECTORY/backup/${2} + echo "$BACKUP_DUMMY_PASSWORD" | duplicity verify --use-agent --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir "$BACKUP_TEMP_DIRECTORY" --ssh-askpass --encrypt-key "${ADMIN_BACKUP_KEY_ID}" --full-if-older-than 4W --exclude-other-filesystems "${1}" "$SERVER_DIRECTORY/backup/${2}" + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then - if [[ ${1} == "/root/temp"* || ${1} == *"tempbackup" ]]; then - shred -zu ${1}/* - rm -rf ${1} + if [[ "${1}" == "/root/temp"* || ${1} == *"tempbackup" ]]; then + shred -zu "${1}/*" + rm -rf "${1}" fi function_check restart_site restart_site @@ -441,6 +443,7 @@ function backup_directory_to_friend_duplicity { function backup_directory_to_friend { BACKUP_KEY_EXISTS=$(gpg --list-keys "$ADMIN_NAME (backup key)") + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then echo $"Backup key could not be found" function_check restart_site @@ -449,15 +452,15 @@ function backup_directory_to_friend { fi ADMIN_BACKUP_KEY_ID=$(gpg --list-keys "$ADMIN_NAME (backup key)" | sed -n '2p' | sed 's/^[ \t]*//') - if [ ! -d $SERVER_DIRECTORY/backup/${2} ]; then - mkdir -p $SERVER_DIRECTORY/backup/${2} + if [ ! -d "$SERVER_DIRECTORY/backup/${2}" ]; then + mkdir -p "$SERVER_DIRECTORY/backup/${2}" fi - backup_directory_to_friend_duplicity ${1} ${2} + backup_directory_to_friend_duplicity "${1}" "${2}" - if [[ ${1} == "/root/temp"* || ${1} == *"tempbackup" ]]; then - shred -zu /root/temp${2}/* - rm -rf /root/temp${2} + if [[ "${1}" == "/root/temp"* || ${1} == *"tempbackup" ]]; then + shred -zu "/root/temp${2}/*" + rm -rf "/root/temp${2}" fi } @@ -468,15 +471,15 @@ function backup_database_remote { restart_site exit 5783 fi - if [ ! -d $SERVER_DIRECTORY/backup/${1} ]; then - mkdir -p $SERVER_DIRECTORY/backup/${1} + if [ ! -d "$SERVER_DIRECTORY/backup/${1}" ]; then + mkdir -p "$SERVER_DIRECTORY/backup/${1}" fi - if [ ! -d $SERVER_DIRECTORY/backup/${1}data ]; then - mkdir -p $SERVER_DIRECTORY/backup/${1}data + if [ ! -d "$SERVER_DIRECTORY/backup/${1}data" ]; then + mkdir -p "$SERVER_DIRECTORY/backup/${1}data" fi local_database_dir=/root/temp${1}data - if [ ! -d ${local_database_dir} ]; then - mkdir -p ${local_database_dir} + if [ ! -d "${local_database_dir}" ]; then + mkdir -p "${local_database_dir}" fi echo "Obtaining ${1} database backup" @@ -490,35 +493,36 @@ function backup_database_remote { USE_MONGODB= USE_POSTGRESQL= keep_database_running - mysqldump --lock-tables --password="$DATABASE_PASSWORD" ${1} > ${local_database_dir}/${1}.${database_file_extension} + mysqldump --lock-tables --password="$DATABASE_PASSWORD" "${1}" > "${local_database_dir}/${1}.${database_file_extension}" else USE_MONGODB= USE_POSTGRESQL= - mongodump --db ${1} --archive=${local_database_dir}/${1}.${database_file_extension} --gzip + mongodump --db "${1}" --archive="${local_database_dir}/${1}.${database_file_extension}" --gzip fi else USE_MONGODB= USE_POSTGRESQL= - cd /etc/postgresql - sudo -u postgres pg_dump ${1} > ${local_database_dir}/${1}.${database_file_extension} + cd /etc/postgresql || exit 782563472 + # shellcheck disable=SC2024 + sudo -u postgres pg_dump "${1}" > "${local_database_dir}/${1}.${database_file_extension}" fi - if [ -f ${local_database_dir}/${1}.${database_file_extension} ]; then - if [ ! -s ${local_database_dir}/${1}.${database_file_extension} ]; then + if [ -f "${local_database_dir}/${1}.${database_file_extension}" ]; then + if [ ! -s "${local_database_dir}/${1}.${database_file_extension}" ]; then echo $"${1} database could not be saved" - shred -zu ${local_database_dir}/* - rm -rf ${local_database_dir} + shred -zu "${local_database_dir}/*" + rm -rf "${local_database_dir}" # Send a warning email - echo $"Unable to export ${1} database" | mail -s $"${PROJECT_NAME} backup to friends" $ADMIN_EMAIL_ADDRESS + echo $"Unable to export ${1} database" | mail -s $"${PROJECT_NAME} backup to friends" "$ADMIN_EMAIL_ADDRESS" function_check restart_site restart_site exit 57386728 fi else echo $"${1} database could not be dumped" - rm -rf ${local_database_dir} + rm -rf "${local_database_dir}" # Send a warning email - echo $"Unable to dump ${1} database" | mail -s $"${PROJECT_NAME} backup to friends" $ADMIN_EMAIL_ADDRESS + echo $"Unable to dump ${1} database" | mail -s $"${PROJECT_NAME} backup to friends" "$ADMIN_EMAIL_ADDRESS" function_check restart_site restart_site exit 36874289 @@ -527,8 +531,8 @@ function backup_database_remote { function backup_database_to_friend { database_name=$1 - backup_database_remote $database_name - backup_directory_to_friend /root/temp${database_name}data ${database_name}data + backup_database_remote "$database_name" + backup_directory_to_friend "/root/temp${database_name}data" "${database_name}data" } function backup_apps { @@ -542,9 +546,9 @@ function backup_apps { for app_name in "${APPS_INSTALLED_NAMES[@]}" do echo $"Backup ${app_name}" - app_load_variables ${app_name} - function_check backup_${localremote}_${app_name} - backup_${localremote}_${app_name} + app_load_variables "${app_name}" + function_check "backup_${localremote}_${app_name}" + "backup_${localremote}_${app_name}" BACKUP_APPS_COMPLETED+=("${app_name}") echo $"Backup ${app_name} completed" done @@ -562,7 +566,7 @@ function restore_apps { for app_name in "${APPS_INSTALLED_NAMES[@]}" do confirm_restore= - if [ ! $2 ]; then + if [ ! "$2" ]; then confirm_restore=1 else if [[ "$RESTORE_APP" == "$app_name" || "$RESTORE_APP" == "all" ]]; then @@ -571,9 +575,9 @@ function restore_apps { fi if [ $confirm_restore ]; then echo $"Restoring ${app_name}" - app_load_variables ${app_name} - function_check restore_${localremote}_${app_name} - restore_${localremote}_${app_name} + app_load_variables "${app_name}" + function_check "restore_${localremote}_${app_name}" + "restore_${localremote}_${app_name}" RESTORE_APPS_COMPLETED+=("${app_name}") echo $"Restored ${app_name}" fi @@ -584,7 +588,7 @@ function restore_database_from_friend { DATABASE_PASSWORD= RESTORE_SUBDIR="root" - if [ -d $SERVER_DIRECTORY/backup/${1}data ]; then + if [ -d "$SERVER_DIRECTORY/backup/${1}data" ]; then database_file_extension='sql' if [ $USE_MONGODB ]; then database_file_extension='mdb' @@ -592,14 +596,14 @@ function restore_database_from_friend { fi echo $"Restoring ${1} database" local_database_dir=/root/temp${1}data - restore_directory_from_friend ${local_database_dir} ${1}data - database_file=${local_database_dir}/${RESTORE_SUBDIR}/temp${restore_app_name}data/${restore_app_name}.${database_file_extension} - if [ ! -f $database_file ]; then - database_file=${local_database_dir}/${restore_app_name}.${database_file_extension} + restore_directory_from_friend "${local_database_dir}" "${1}data" + database_file="${local_database_dir}/${RESTORE_SUBDIR}/temp${restore_app_name}data/${restore_app_name}.${database_file_extension}" + if [ ! -f "$database_file" ]; then + database_file="${local_database_dir}/${restore_app_name}.${database_file_extension}" fi - if [ ! -f $database_file ]; then + if [ ! -f "$database_file" ]; then echo $"Unable to restore ${1} database" - rm -rf ${local_database_dir} + rm -rf "${local_database_dir}" exit 5289252 fi if [ ! $USE_POSTGRESQL ]; then @@ -607,61 +611,63 @@ function restore_database_from_friend { USE_MONGODB= USE_POSTGRESQL= keep_database_running - mysqlsuccess=$(mysql -u root --password="$DATABASE_PASSWORD" ${restore_app_name} -o < ${database_file}) + mysqlsuccess=$(mysql -u root --password="$DATABASE_PASSWORD" "${restore_app_name}" -o < "${database_file}") else USE_MONGODB= USE_POSTGRESQL= - mongorestore --gzip --archive=${database_file} --db ${restore_app_name} + mongorestore --gzip --archive="${database_file}" --db "${restore_app_name}" fi else USE_MONGODB= USE_POSTGRESQL= - cd /etc/postgresql - mysqlsuccess=$(sudo -u postgres pg_restore ${database_file}) + cd /etc/postgresql || exit 23784634 + mysqlsuccess=$(sudo -u postgres pg_restore "${database_file}") fi + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then echo "$mysqlsuccess" exit 8735271 fi - if [ -d ${local_database_dir}/${RESTORE_SUBDIR}/temp${1}data ]; then - shred -zu ${local_database_dir}/${RESTORE_SUBDIR}/temp${1}data/* + if [ -d "${local_database_dir}/${RESTORE_SUBDIR}/temp${1}data" ]; then + shred -zu "${local_database_dir}/${RESTORE_SUBDIR}/temp${1}data/*" else - shred -zu ${local_database_dir}/*.${database_file_extension} + shred -zu "${local_database_dir}/*.${database_file_extension}" fi - rm -rf ${local_database_dir} + rm -rf "${local_database_dir}" echo $"Restoring ${1} installation" - restore_directory_from_friend /root/temp${1} ${1} + restore_directory_from_friend "/root/temp${1}" "${1}" RESTORE_SUBDIR="var" - if [ ${1} ]; then + if [ "${1}" ]; then # create directory to restore to - if [ ! -d /var/www/${2}/htdocs ]; then - mkdir -p /var/www/${2}/htdocs - chown www-data:www-data /var/www/${2}/htdocs + if [ ! -d "/var/www/${2}/htdocs" ]; then + mkdir -p "/var/www/${2}/htdocs" + chown www-data:www-data "/var/www/${2}/htdocs" fi - if [ -d /var/www/${2}/htdocs ]; then - restore_from_dir=/root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs - if [ ! -d /root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs ]; then - restore_from_dir=/root/temp${1} + if [ -d "/var/www/${2}/htdocs" ]; then + restore_from_dir="/root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs" + if [ ! -d "/root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs" ]; then + restore_from_dir="/root/temp${1}" fi - if [ -d $restore_from_dir ]; then - if [ -d /root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs ]; then - rm -rf /var/www/${2}/htdocs - mv $restore_from_dir /var/www/${2}/ + if [ -d "$restore_from_dir" ]; then + if [ -d "/root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs" ]; then + rm -rf "/var/www/${2}/htdocs" + mv "$restore_from_dir" "/var/www/${2}/" else - cp -r $restore_from_dir/* /var/www/${2}/htdocs/ + cp -r "$restore_from_dir/*" "/var/www/${2}/htdocs/" fi + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then exit 78352682 fi - if [ -d /etc/letsencrypt/live/${2} ]; then - ln -s /etc/letsencrypt/live/${2}/privkey.pem /etc/ssl/private/${2}.key - ln -s /etc/letsencrypt/live/${2}/fullchain.pem /etc/ssl/certs/${2}.pem + if [ -d "/etc/letsencrypt/live/${2}" ]; then + ln -s "/etc/letsencrypt/live/${2}/privkey.pem" "/etc/ssl/private/${2}.key" + ln -s "/etc/letsencrypt/live/${2}/fullchain.pem" "/etc/ssl/certs/${2}.pem" else # Ensure that the bundled SSL cert is being used - if [ -f /etc/ssl/certs/${2}.bundle.crt ]; then - sed -i "s|${2}.crt|${2}.bundle.crt|g" /etc/nginx/sites-available/${2} + if [ -f "/etc/ssl/certs/${2}.bundle.crt" ]; then + sed -i "s|${2}.crt|${2}.bundle.crt|g" "/etc/nginx/sites-available/${2}" fi fi fi @@ -678,11 +684,11 @@ function restore_database { restore_app_name=$1 restore_app_domain=$2 - if [ -d $USB_MOUNT/backup/${restore_app_name}data ]; then + if [ -d "$USB_MOUNT/backup/${restore_app_name}data" ]; then echo $"Restoring ${restore_app_name} database" local_database_dir=/root/temp${restore_app_name}data - if [ -d ${local_database_dir} ]; then - rm -rf ${local_database_dir} + if [ -d "${local_database_dir}" ]; then + rm -rf "${local_database_dir}" fi function_check restore_directory_from_usb restore_directory_from_usb "${local_database_dir}" "${restore_app_name}data" @@ -691,13 +697,13 @@ function restore_database { database_file_extension='mdb' USE_POSTGRESQL= fi - database_file=${local_database_dir}/${RESTORE_SUBDIR}/temp${restore_app_name}data/${restore_app_name}.${database_file_extension} - if [ ! -f $database_file ]; then - database_file=${local_database_dir}/${restore_app_name}.${database_file_extension} + database_file="${local_database_dir}/${RESTORE_SUBDIR}/temp${restore_app_name}data/${restore_app_name}.${database_file_extension}" + if [ ! -f "$database_file" ]; then + database_file="${local_database_dir}/${restore_app_name}.${database_file_extension}" fi - if [ ! -f $database_file ]; then + if [ ! -f "$database_file" ]; then echo $"Unable to restore ${restore_app_name} database" - rm -rf ${local_database_dir} + rm -rf "${local_database_dir}" function_check set_user_permissions set_user_permissions function_check backup_unmount_drive @@ -709,19 +715,20 @@ function restore_database { USE_MONGODB= USE_POSTGRESQL= keep_database_running - cp $database_file ~/test.sql - mysqlsuccess=$(mysql -u root --password="$DATABASE_PASSWORD" ${restore_app_name} -o < $database_file) + cp "$database_file" ~/test.sql + mysqlsuccess=$(mysql -u root --password="$DATABASE_PASSWORD" "${restore_app_name}" -o < "$database_file") else USE_MONGODB= USE_POSTGRESQL= - mongorestore --gzip --archive=$database_file --db ${restore_app_name} + mongorestore --gzip --archive="$database_file" --db "${restore_app_name}" fi else USE_MONGODB= USE_POSTGRESQL= - cd /etc/postgresql - mysqlsuccess=$(sudo -u postgres pg_restore $database_file) + cd /etc/postgresql || exit 638463 + mysqlsuccess=$(sudo -u postgres pg_restore "$database_file") fi + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then echo "$mysqlsuccess" function_check set_user_permissions @@ -730,51 +737,52 @@ function restore_database { backup_unmount_drive exit 482638995 fi - if [ -d ${local_database_dir}/${RESTORE_SUBDIR}/temp${restore_app_name}data ]; then - shred -zu ${local_database_dir}/${RESTORE_SUBDIR}/temp${restore_app_name}data/* + if [ -d "${local_database_dir}/${RESTORE_SUBDIR}/temp${restore_app_name}data" ]; then + shred -zu "${local_database_dir}/${RESTORE_SUBDIR}/temp${restore_app_name}data/*" else - shred -zu ${local_database_dir}/*.${database_file_extension} + shred -zu "${local_database_dir}/*.${database_file_extension}" fi - rm -rf ${local_database_dir} + rm -rf "${local_database_dir}" echo $"Restoring ${restore_app_name} installation" - if [ ! -d /root/temp${restore_app_name} ]; then - mkdir /root/temp${restore_app_name} + if [ ! -d "/root/temp${restore_app_name}" ]; then + mkdir "/root/temp${restore_app_name}" fi function_check restore_directory_from_usb restore_directory_from_usb "/root/temp${restore_app_name}" "${restore_app_name}" RESTORE_SUBDIR="var" - if [ ${restore_app_domain} ]; then + if [ "${restore_app_domain}" ]; then # create directory to restore to - if [ ! -d /var/www/${restore_app_domain}/htdocs ]; then - mkdir -p /var/www/${restore_app_domain}/htdocs - chown www-data:www-data /var/www/${restore_app_domain}/htdocs + if [ ! -d "/var/www/${restore_app_domain}/htdocs" ]; then + mkdir -p "/var/www/${restore_app_domain}/htdocs" + chown www-data:www-data "/var/www/${restore_app_domain}/htdocs" fi - if [ -d /var/www/${restore_app_domain}/htdocs ]; then - restore_from_dir=/root/temp${restore_app_name}/${RESTORE_SUBDIR}/www/${restore_app_domain}/htdocs - if [ ! -d $restore_from_dir ]; then + if [ -d "/var/www/${restore_app_domain}/htdocs" ]; then + restore_from_dir="/root/temp${restore_app_name}/${RESTORE_SUBDIR}/www/${restore_app_domain}/htdocs" + if [ ! -d "$restore_from_dir" ]; then restore_from_dir=/root/temp${restore_app_name} fi - if [ -d $restore_from_dir ]; then - if [ -d /root/temp${restore_app_name}/${RESTORE_SUBDIR}/www/${restore_app_domain}/htdocs ]; then - rm -rf /var/www/${restore_app_domain}/htdocs - mv $restore_from_dir /var/www/${restore_app_domain}/ + if [ -d "$restore_from_dir" ]; then + if [ -d "/root/temp${restore_app_name}/${RESTORE_SUBDIR}/www/${restore_app_domain}/htdocs" ]; then + rm -rf "/var/www/${restore_app_domain}/htdocs" + mv "$restore_from_dir" "/var/www/${restore_app_domain}/" else - cp -r $restore_from_dir/* /var/www/${restore_app_domain}/htdocs/ + cp -r "$restore_from_dir/*" "/var/www/${restore_app_domain}/htdocs/" fi + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then set_user_permissions backup_unmount_drive exit 78252429 fi - if [ -d /etc/letsencrypt/live/${restore_app_domain} ]; then - ln -s /etc/letsencrypt/live/${restore_app_domain}/privkey.pem /etc/ssl/private/${restore_app_domain}.key - ln -s /etc/letsencrypt/live/${restore_app_domain}/fullchain.pem /etc/ssl/certs/${restore_app_domain}.pem + if [ -d "/etc/letsencrypt/live/${restore_app_domain}" ]; then + ln -s "/etc/letsencrypt/live/${restore_app_domain}/privkey.pem" "/etc/ssl/private/${restore_app_domain}.key" + ln -s "/etc/letsencrypt/live/${restore_app_domain}/fullchain.pem" "/etc/ssl/certs/${restore_app_domain}.pem" else # Ensure that the bundled SSL cert is being used - if [ -f /etc/ssl/certs/${restore_app_domain}.bundle.crt ]; then - sed -i "s|${restore_app_domain}.crt|${restore_app_domain}.bundle.crt|g" /etc/nginx/sites-available/${restore_app_domain} + if [ -f "/etc/ssl/certs/${restore_app_domain}.bundle.crt" ]; then + sed -i "s|${restore_app_domain}.crt|${restore_app_domain}.bundle.crt|g" "/etc/nginx/sites-available/${restore_app_domain}" fi fi fi @@ -797,8 +805,7 @@ function valid_backup_destination { available_variants_list=() available_system_variants - item_in_array "${destination_dir}" "${available_variants_list[@]}" - if [[ $? != 0 ]]; then + if ! item_in_array "${destination_dir}" "${available_variants_list[@]}"; then is_valid="no" fi @@ -806,14 +813,14 @@ function valid_backup_destination { } function backup_extra_directories { - if [ ! -f $BACKUP_EXTRA_DIRECTORIES ]; then + if [ ! -f "$BACKUP_EXTRA_DIRECTORIES" ]; then return fi backup_type="$1" echo $"Backing up some additional directories" - while read backup_line + while read -r backup_line do backup_dir=$(echo "$backup_line" | awk -F ',' '{print $1}' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//') if [ -d "$backup_dir" ]; then @@ -831,7 +838,7 @@ function backup_extra_directories { else echo $"WARNING: Directory $backup_dir does not exist" fi - done <$BACKUP_EXTRA_DIRECTORIES + done <"$BACKUP_EXTRA_DIRECTORIES" } # NOTE: deliberately no exit 0 From 229a9c30915c5d4c66f151f321d8b2f0f3e83512 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 25 Feb 2018 14:41:52 +0000 Subject: [PATCH 09/67] Tidying cmake utils --- src/freedombone-utils-cmake | 49 ++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/src/freedombone-utils-cmake b/src/freedombone-utils-cmake index 46ef7137..28231d80 100755 --- a/src/freedombone-utils-cmake +++ b/src/freedombone-utils-cmake @@ -32,25 +32,26 @@ CMAKE_REPO="https://github.com/Kitware/CMake" CMAKE_COMMIT='d6734eeb875ceca5d810e829ca90541918dca2b4' function mesh_install_cmake { - if [ ! -d $rootdir$INSTALL_DIR ]; then - chroot "$rootdir" mkdir -p $INSTALL_DIR + # shellcheck disable=SC2154 + if [ ! -d "$rootdir$INSTALL_DIR" ]; then + chroot "$rootdir" mkdir -p "$INSTALL_DIR" fi chroot "$rootdir" apt-get -yq install build-essential if [ -d /repos/cmake ]; then - mkdir $rootdir$INSTALL_DIR/cmake - cp -r -p /repos/cmake/. $rootdir$INSTALL_DIR/cmake - cd $rootdir$INSTALL_DIR/cmake + mkdir "$rootdir$INSTALL_DIR/cmake" + cp -r -p /repos/cmake/. "$rootdir$INSTALL_DIR/cmake" + cd "$rootdir$INSTALL_DIR/cmake" || exit 678346836 git pull else - git clone $CMAKE_REPO $rootdir$INSTALL_DIR/cmake + git clone "$CMAKE_REPO" "$rootdir$INSTALL_DIR/cmake" fi - cd $rootdir$INSTALL_DIR/cmake + cd "$rootdir$INSTALL_DIR/cmake" || exit 734634684 git checkout $CMAKE_COMMIT -b $CMAKE_COMMIT - cat < $rootdir/root/install_cmake + cat < "$rootdir/root/install_cmake" cd $INSTALL_DIR/cmake ./bootstrap make @@ -65,18 +66,17 @@ EOF } function install_cmake { - if [ $INSTALLING_MESH ]; then + if [ "$INSTALLING_MESH" ]; then mesh_install_cmake return fi - if [ -d $INSTALL_DIR/cmake ]; then - if ! grep -q "CMake commit:$CMAKE_COMMIT" $COMPLETION_FILE; then - set_repo_commit $INSTALL_DIR/cmake "CMake commit" "$CMAKE_COMMIT" $CMAKE_REPO - cd $INSTALL_DIR/cmake + if [ -d "$INSTALL_DIR/cmake" ]; then + if ! grep -q "CMake commit:$CMAKE_COMMIT" "$COMPLETION_FILE"; then + set_repo_commit "$INSTALL_DIR/cmake" "CMake commit" "$CMAKE_COMMIT" "$CMAKE_REPO" + cd "$INSTALL_DIR/cmake" || exit 36873638 ./bootstrap - make - if [ ! "$?" = "0" ]; then + if ! make; then exit 72581 fi make install @@ -87,26 +87,25 @@ function install_cmake { return fi - if [ ! -d $INSTALL_DIR ]; then - mkdir -p $INSTALL_DIR + if [ ! -d "$INSTALL_DIR" ]; then + mkdir -p "$INSTALL_DIR" fi apt-get -yq install build-essential if [ -d /repos/cmake ]; then - mkdir $INSTALL_DIR/cmake - cp -r -p /repos/cmake/. $INSTALL_DIR/cmake - cd $INSTALL_DIR/cmake + mkdir "$INSTALL_DIR/cmake" + cp -r -p /repos/cmake/. "$INSTALL_DIR/cmake" + cd "$INSTALL_DIR/cmake" || exit 374893758 git pull else - git_clone $CMAKE_REPO $INSTALL_DIR/cmake + git_clone "$CMAKE_REPO" "$INSTALL_DIR/cmake" fi - cd $INSTALL_DIR/cmake - git checkout $CMAKE_COMMIT -b $CMAKE_COMMIT + cd "$INSTALL_DIR/cmake" || exit 3467384 + git checkout "$CMAKE_COMMIT" -b "$CMAKE_COMMIT" ./bootstrap - make - if [ ! "$?" = "0" ]; then + if ! make; then exit 72581 fi make install From 34e59ae03075e267e8e9090dde039aefc5a0916b Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 25 Feb 2018 14:51:29 +0000 Subject: [PATCH 10/67] Tidying config utils --- src/freedombone-utils-config | 112 +++++++++++++++++------------------ 1 file changed, 54 insertions(+), 58 deletions(-) diff --git a/src/freedombone-utils-config b/src/freedombone-utils-config index 6851216a..00191c46 100755 --- a/src/freedombone-utils-config +++ b/src/freedombone-utils-config @@ -106,10 +106,10 @@ function get_completion_param { param_name="$1" if [ ${#param_name} -gt 0 ]; then - if [ $COMPLETION_FILE ]; then - if [ -f $COMPLETION_FILE ]; then - if grep -q "${param_name}:" $COMPLETION_FILE; then - param_value=$(cat $COMPLETION_FILE | grep "${param_name}:" | head -n 1 | awk -F ':' '{print $2}') + if [ "$COMPLETION_FILE" ]; then + if [ -f "$COMPLETION_FILE" ]; then + if grep -q "${param_name}:" "$COMPLETION_FILE"; then + param_value=$(grep "${param_name}:" "$COMPLETION_FILE" | head -n 1 | awk -F ':' '{print $2}') echo "$param_value" return fi @@ -123,7 +123,7 @@ function set_completion_param { param_name="$1" param_value="$2" - if [ ! $COMPLETION_FILE ]; then + if [ ! "$COMPLETION_FILE" ]; then COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt fi if [ ${#COMPLETION_FILE} -eq 0 ]; then @@ -132,14 +132,14 @@ function set_completion_param { if [ ${#param_name} -gt 0 ]; then if [ ${#param_value} -gt 0 ]; then - if [ -f $COMPLETION_FILE ]; then - if grep -q "${param_name}:" $COMPLETION_FILE; then - sed -i "s|${param_name}:.*|${param_name}:${param_value}|g" $COMPLETION_FILE + if [ -f "$COMPLETION_FILE" ]; then + if grep -q "${param_name}:" "$COMPLETION_FILE"; then + sed -i "s|${param_name}:.*|${param_name}:${param_value}|g" "$COMPLETION_FILE" else - echo "${param_name}:${param_value}" >> $COMPLETION_FILE + echo "${param_name}:${param_value}" >> "$COMPLETION_FILE" fi else - echo "${param_name}:${param_value}" > $COMPLETION_FILE + echo "${param_name}:${param_value}" > "$COMPLETION_FILE" fi fi fi @@ -148,7 +148,7 @@ function set_completion_param { function mark_completed { param_name="$1" - if [ ! $COMPLETION_FILE ]; then + if [ ! "$COMPLETION_FILE" ]; then COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt fi if [ ${#COMPLETION_FILE} -eq 0 ]; then @@ -156,12 +156,12 @@ function mark_completed { fi if [ ${#param_name} -gt 0 ]; then - if [ -f $COMPLETION_FILE ]; then - if ! grep -Fxq "${param_name}" $COMPLETION_FILE; then - echo "${param_name}" >> $COMPLETION_FILE + if [ -f "$COMPLETION_FILE" ]; then + if ! grep -Fxq "${param_name}" "$COMPLETION_FILE"; then + echo "${param_name}" >> "$COMPLETION_FILE" fi else - echo "${param_name}" > $COMPLETION_FILE + echo "${param_name}" > "$COMPLETION_FILE" fi fi } @@ -169,16 +169,16 @@ function mark_completed { function is_completed { param_name="$1" - if [ ! $COMPLETION_FILE ]; then - COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt + if [ ! "$COMPLETION_FILE" ]; then + COMPLETION_FILE="$HOME/${PROJECT_NAME}-completed.txt" fi if [ ${#COMPLETION_FILE} -eq 0 ]; then - COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt + COMPLETION_FILE="$HOME/${PROJECT_NAME}-completed.txt" fi if [ ${#param_name} -gt 0 ]; then - if [ -f $COMPLETION_FILE ]; then - if grep -Fxq "${param_name}" $COMPLETION_FILE; then + if [ -f "$COMPLETION_FILE" ]; then + if grep -Fxq "${param_name}" "$COMPLETION_FILE"; then echo "1" return fi @@ -191,15 +191,11 @@ function read_config_param { param_name="$1" if [ ${#param_name} -gt 0 ]; then - if [ $CONFIGURATION_FILE ]; then - if [ -f $CONFIGURATION_FILE ]; then - if grep -q "${param_name}=" $CONFIGURATION_FILE; then - param_value=$(cat $CONFIGURATION_FILE | grep "${param_name}=" | head -n 1 | awk -F '=' '{print $2}') - if [[ "${param_value}" != *" "* ]]; then - export ${param_name}=${param_value} - else - export ${param_name}="${param_value}" - fi + if [ "$CONFIGURATION_FILE" ]; then + if [ -f "$CONFIGURATION_FILE" ]; then + if grep -q "${param_name}=" "$CONFIGURATION_FILE"; then + param_value=$(grep "${param_name}=" "$CONFIGURATION_FILE" | head -n 1 | awk -F '=' '{print $2}') + export "${param_name}"="${param_value}" fi fi fi @@ -210,10 +206,10 @@ function config_param_exists { param_name="$1" if [ ${#param_name} -gt 0 ]; then - if [ $CONFIGURATION_FILE ]; then - if [ -f $CONFIGURATION_FILE ]; then - if grep -q "${param_name}=" $CONFIGURATION_FILE; then - param_value=$(cat $CONFIGURATION_FILE | grep "${param_name}=" | head -n 1 | awk -F '=' '{print $2}') + if [ "$CONFIGURATION_FILE" ]; then + if [ -f "$CONFIGURATION_FILE" ]; then + if grep -q "${param_name}=" "$CONFIGURATION_FILE"; then + param_value=$(grep "${param_name}=" "$CONFIGURATION_FILE" | head -n 1 | awk -F '=' '{print $2}') if [ ${#param_value} -gt 0 ]; then echo "1" return @@ -229,7 +225,7 @@ function write_config_param { param_name="$1" param_value="$2" - if [ ! $CONFIGURATION_FILE ]; then + if [ ! "$CONFIGURATION_FILE" ]; then CONFIGURATION_FILE=$HOME/${PROJECT_NAME}.cfg fi if [ ${#CONFIGURATION_FILE} -eq 0 ]; then @@ -238,14 +234,14 @@ function write_config_param { if [ ${#param_name} -gt 0 ]; then if [ ${#param_value} -gt 0 ]; then - if [ -f $CONFIGURATION_FILE ]; then - if grep -q "${param_name}=" $CONFIGURATION_FILE; then - sed -i "s|${param_name}=.*|${param_name}=${param_value}|g" $CONFIGURATION_FILE + if [ -f "$CONFIGURATION_FILE" ]; then + if grep -q "${param_name}=" "$CONFIGURATION_FILE"; then + sed -i "s|${param_name}=.*|${param_name}=${param_value}|g" "$CONFIGURATION_FILE" else - echo "${param_name}=${param_value}" >> $CONFIGURATION_FILE + echo "${param_name}=${param_value}" >> "$CONFIGURATION_FILE" fi else - echo "${param_name}=${param_value}" > $CONFIGURATION_FILE + echo "${param_name}=${param_value}" > "$CONFIGURATION_FILE" fi fi fi @@ -255,10 +251,10 @@ function remove_config_param { param_name="$1" if [ ${#param_name} -gt 0 ]; then - if [ $CONFIGURATION_FILE ]; then - if [ -f $CONFIGURATION_FILE ]; then - if grep -q "${param_name}=" $CONFIGURATION_FILE; then - sed -i "/${param_name}=/d" $CONFIGURATION_FILE + if [ "$CONFIGURATION_FILE" ]; then + if [ -f "$CONFIGURATION_FILE" ]; then + if grep -q "${param_name}=" "$CONFIGURATION_FILE"; then + sed -i "/${param_name}=/d" "$CONFIGURATION_FILE" fi fi fi @@ -269,13 +265,13 @@ function remove_completion_param { param_name="$1" if [ ${#param_name} -gt 0 ]; then - if [ $COMPLETION_FILE ]; then - if [ -f $COMPLETION_FILE ]; then - if grep -Fxq "${param_name}" $COMPLETION_FILE; then - sed -i "/${param_name}/d" $COMPLETION_FILE + if [ "$COMPLETION_FILE" ]; then + if [ -f "$COMPLETION_FILE" ]; then + if grep -Fxq "${param_name}" "$COMPLETION_FILE"; then + sed -i "/${param_name}/d" "$COMPLETION_FILE" fi - if grep -q "${param_name}:" $COMPLETION_FILE; then - sed -i "/${param_name}:/d" $COMPLETION_FILE + if grep -q "${param_name}:" "$COMPLETION_FILE"; then + sed -i "/${param_name}:/d" "$COMPLETION_FILE" fi fi fi @@ -291,16 +287,16 @@ function save_configuration_values { function read_configuration_values { # if not installing on a Beaglebone then use sdb as the USB drive by default - if [ ! $INSTALLING_ON_BBB ]; then + if [ ! "$INSTALLING_ON_BBB" ]; then if [[ $USB_DRIVE == /dev/sda1 ]]; then USB_DRIVE=/dev/sdb1 fi fi - if [ -f $CONFIGURATION_FILE ]; then + if [ -f "$CONFIGURATION_FILE" ]; then # Ensure that a copy of the config exists for upgrade purposes if [[ $CONFIGURATION_FILE != "/root/${PROJECT_NAME}.cfg" ]]; then - cp $CONFIGURATION_FILE /root/${PROJECT_NAME}.cfg + cp "$CONFIGURATION_FILE" "/root/${PROJECT_NAME}.cfg" fi for v in "${configuration_variables[@]}" @@ -308,8 +304,9 @@ function read_configuration_values { read_config_param "$v" done - if grep -q "DEBIAN_REPO" $CONFIGURATION_FILE; then + if grep -q "DEBIAN_REPO" "$CONFIGURATION_FILE"; then read_config_param "DEBIAN_REPO" + # shellcheck disable=SC2034 CHECK_MESSAGE=$"Check your internet connection, /etc/network/interfaces and /etc/resolvconf/resolv.conf.d/head, then delete $COMPLETION_FILE, run 'rm -fR /var/lib/apt/lists/* && apt-get update --fix-missing' and run this script again. If hash sum mismatches persist then try setting $DEBIAN_REPO to a different mirror and also change /etc/apt/sources.list." fi fi @@ -317,7 +314,7 @@ function read_configuration_values { function read_configuration { if [[ $INSTALLING_FROM_CONFIGURATION_FILE == "yes" ]]; then - if [ ! -f $CONFIGURATION_FILE ]; then + if [ ! -f "$CONFIGURATION_FILE" ]; then echo $"The configuration file $CONFIGURATION_FILE was not found" exit 8935 fi @@ -336,8 +333,8 @@ function check_system_type { # check that domain names are valid and that they are unique for each app function check_domains { - specified_domains=$(cat $CONFIGURATION_FILE | grep "_DOMAIN_NAME" | uniq) - domains_array=($specified_domains) + specified_domains=$(grep "_DOMAIN_NAME" "$CONFIGURATION_FILE" | uniq) + domains_array=("$specified_domains") checked_domains=() for d in "${domains_array[@]}" @@ -346,8 +343,7 @@ function check_domains { if [[ "$domain_param" != "DEFAULT_DOMAIN_NAME" ]]; then domain_value=$(echo "$d" | awk -F '=' '{print $2}') if [[ "$domain_value" != "${LOCAL_NAME}.local" ]]; then - item_in_array "${domain_value}" "${checked_domains[@]}" - if [[ $? != 0 ]]; then + if ! item_in_array "${domain_value}" "${checked_domains[@]}"; then # test that this is a valid domain name function_check test_domain_name test_domain_name "$domain_value" From 4e655ae8daddca0282e57cb6499c94af2e4fc7bb Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 25 Feb 2018 15:16:23 +0000 Subject: [PATCH 11/67] Tidying cron utils --- src/freedombone-utils-cron | 52 +++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/freedombone-utils-cron b/src/freedombone-utils-cron index 09b8237d..a041acac 100755 --- a/src/freedombone-utils-cron +++ b/src/freedombone-utils-cron @@ -31,7 +31,7 @@ function cron_add_mins { if ! grep -q "${2}" /etc/crontab; then job_user='root' - if [ $3 ]; then + if [ "$3" ]; then job_user=$3 fi echo "*/${1} * * * * ${job_user} ${2}" >> /etc/crontab @@ -48,29 +48,29 @@ function randomize_cron { fi # randomize the day on which the weekly cron job runs - randdow=$(($RANDOM%6+1)) - sed -i "s|\* \* 7|* * $randdow|g" /etc/crontab + randdow=$((RANDOM%6+1)) + sed -i "s|\\* \\* 7|* * $randdow|g" /etc/crontab # randomize the time when the weekly cron job runs - randmin=$(($RANDOM%60)) - randhr=$(($RANDOM%3+1)) + randmin=$((RANDOM%60)) + randhr=$((RANDOM%3+1)) sed -i "s|47 6|$randmin $randhr|g" /etc/crontab # randomize the time when the daily cron job runs - randmin=$(($RANDOM%60)) - randhr=$(($RANDOM%3+4)) - sed -i "s|25 6\t\* \* \*|$randmin $randhr\t* * *|g" /etc/crontab + randmin=$((RANDOM%60)) + randhr=$((RANDOM%3+4)) + sed -i "s|25 6\\t\\* \\* \\*|$randmin $randhr\\t* * *|g" /etc/crontab # randomize the time when the hourly cron job runs - randmin=$(($RANDOM%60)) - sed -i "s|17 \*\t|$randmin *\t|g" /etc/crontab + randmin=$((RANDOM%60)) + sed -i "s|17 \\*\\t|$randmin *\\t|g" /etc/crontab # randomize monthly cron job time and day - randmin=$(($RANDOM%60)) - randhr=$(($RANDOM%22+1)) - randdom=$(($RANDOM%27+1)) - sed -i "s|52 6\t|$randmin $randhr\t|g" /etc/crontab - sed -i "s|\t1 \* \*|\t$randdom * *|g" /etc/crontab + randmin=$((RANDOM%60)) + randhr=$((RANDOM%22+1)) + randdom=$((RANDOM%27+1)) + sed -i "s|52 6\\t|$randmin $randhr\\t|g" /etc/crontab + sed -i "s|\\t1 \\* \\*|\\t$randdom * *|g" /etc/crontab systemctl restart cron @@ -79,17 +79,17 @@ function randomize_cron { function schedule_stig_tests { stig_tests_script=/tmp/stig_tests_script - echo '#!/bin/bash' > $stig_tests_script - echo "ADMIN_EMAIL_ADDRESS=${MY_USERNAME}@\${HOSTNAME}" >> $stig_tests_script - echo "pkill ${PROJECT_NAME}-tests" >> $stig_tests_script - echo 'rm -rf /tmp/*' >> $stig_tests_script - echo "${PROJECT_NAME}-tests --stig yes > /tmp/daily-stig-tests" >> $stig_tests_script - echo 'if [ ! "$?" = "0" ]; then' >> $stig_tests_script - echo " echo \"\$(cat /tmp/daily-stig-tests)\" | mail -s \"${PROJECT_NAME} STIG test failures\" \$ADMIN_EMAIL_ADDRESS" >> $stig_tests_script - echo 'fi' >> $stig_tests_script - echo 'if [ -f /tmp/daily-stig-tests ]; then' >> $stig_tests_script - echo ' rm /tmp/daily-stig-tests' >> $stig_tests_script - echo 'fi' >> $stig_tests_script + { echo '#!/bin/bash'; + echo "ADMIN_EMAIL_ADDRESS=${MY_USERNAME}@\${HOSTNAME}"; + echo "pkill ${PROJECT_NAME}-tests"; + echo 'rm -rf /tmp/*'; + echo "${PROJECT_NAME}-tests --stig yes > /tmp/daily-stig-tests"; + echo 'if [ ! "$?" = "0" ]; then'; + echo " echo \"\$(cat /tmp/daily-stig-tests)\" | mail -s \"${PROJECT_NAME} STIG test failures\" \$ADMIN_EMAIL_ADDRESS"; + echo 'fi'; + echo 'if [ -f /tmp/daily-stig-tests ]; then'; + echo ' rm /tmp/daily-stig-tests'; + echo 'fi'; } > $stig_tests_script chmod +x $stig_tests_script if [ ! -f /etc/cron.daily/stig_tests ]; then From f2429555a812b61d41fbe5ad913e1d082f519b81 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 25 Feb 2018 15:20:03 +0000 Subject: [PATCH 12/67] Tidying cryptopp utils --- src/freedombone-utils-cryptopp | 42 ++++++++++++++++------------------ 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/src/freedombone-utils-cryptopp b/src/freedombone-utils-cryptopp index 59f1ac2b..4ead2b1c 100755 --- a/src/freedombone-utils-cryptopp +++ b/src/freedombone-utils-cryptopp @@ -32,22 +32,22 @@ CRYPTOPP_REPO="https://github.com/weidai11/cryptopp" CRYPTOPP_COMMIT='65e91a8caa8c1846cb311bc83d8507e12699d6d3' function mesh_install_cryptopp { - if [ ! -d $rootdir$INSTALL_DIR ]; then - chroot "$rootdir" mkdir -p $INSTALL_DIR + # shellcheck disable=SC2154 + if [ ! -d "$rootdir$INSTALL_DIR" ]; then + chroot "$rootdir" mkdir -p "$INSTALL_DIR" fi chroot "$rootdir" apt-get -yq install build-essential - git clone $CRYPTOPP_REPO $rootdir$INSTALL_DIR/cryptopp - cd $rootdir$INSTALL_DIR/cryptopp + git clone "$CRYPTOPP_REPO" "$rootdir$INSTALL_DIR/cryptopp" + cd "$rootdir$INSTALL_DIR/cryptopp" || exit 346873625 git checkout $CRYPTOPP_COMMIT -b $CRYPTOPP_COMMIT - mkdir $rootdir$INSTALL_DIR/cryptopp/build + mkdir "$rootdir$INSTALL_DIR/cryptopp/build" - cat < $rootdir/root/install_cryptopp + cat < "$rootdir/root/install_cryptopp" cd $INSTALL_DIR/cryptopp/build cmake .. -make -if [ ! "$?" = "0" ]; then +if ! make; then exit 62825 fi make install @@ -58,18 +58,17 @@ EOF } function install_cryptopp { - if [ $INSTALLING_MESH ]; then + if [ "$INSTALLING_MESH" ]; then mesh_install_cryptopp return fi - if [ -d $INSTALL_DIR/cryptopp ]; then - if ! grep -q "Crypto++ commit:$CRYPTOPP_COMMIT" $COMPLETION_FILE; then - set_repo_commit $INSTALL_DIR/cryptopp "Crypto++ commit" "$CRYPTOPP_COMMIT" $CRYPTOPP_REPO + if [ -d "$INSTALL_DIR/cryptopp" ]; then + if ! grep -q "Crypto++ commit:$CRYPTOPP_COMMIT" "$COMPLETION_FILE"; then + set_repo_commit "$INSTALL_DIR/cryptopp" "Crypto++ commit" "$CRYPTOPP_COMMIT" "$CRYPTOPP_REPO" cd $INSTALL_DIR/cryptopp/build cmake .. - make - if [ ! "$?" = "0" ]; then + if ! make; then exit 72581 fi make install @@ -80,20 +79,19 @@ function install_cryptopp { return fi - if [ ! -d $INSTALL_DIR ]; then - mkdir -p $INSTALL_DIR + if [ ! -d "$INSTALL_DIR" ]; then + mkdir -p "$INSTALL_DIR" fi apt-get -yq install build-essential - git_clone $CRYPTOPP_REPO $INSTALL_DIR/cryptopp - cd $INSTALL_DIR/cryptopp + git_clone "$CRYPTOPP_REPO" "$INSTALL_DIR/cryptopp" + cd "$INSTALL_DIR/cryptopp" || exit 257478246 git checkout $CRYPTOPP_COMMIT -b $CRYPTOPP_COMMIT - mkdir -p $INSTALL_DIR/cryptopp/build - cd $INSTALL_DIR/cryptopp/build + mkdir -p "$INSTALL_DIR/cryptopp/build" + cd "$INSTALL_DIR/cryptopp/build" || exit 6275425427 cmake .. - make - if [ ! "$?" = "0" ]; then + if ! make; then exit 62826 fi make install From feca89a19fddbdb9b0ab5c0fa82727d0a6ec7763 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 25 Feb 2018 17:28:57 +0000 Subject: [PATCH 13/67] Tidying database utils --- src/freedombone-utils-database | 258 +++++++++++++++++---------------- 1 file changed, 130 insertions(+), 128 deletions(-) diff --git a/src/freedombone-utils-database b/src/freedombone-utils-database index e3fcf0d4..6242c2e7 100755 --- a/src/freedombone-utils-database +++ b/src/freedombone-utils-database @@ -37,14 +37,14 @@ BACKUP_INCLUDES_DATABASES="no" function store_original_mariadb_password { if [ ! -f /root/.mariadboriginal ]; then echo $'Storing original mariadb password' - ORIGINAL_MARIADB_PASSWORD=$(${PROJECT_NAME}-pass -u root -a mariadb) + ORIGINAL_MARIADB_PASSWORD=$("${PROJECT_NAME}-pass" -u root -a mariadb) # We can store this in plaintext because it will soon be of historical interest only echo -n "$ORIGINAL_MARIADB_PASSWORD" > /root/.mariadboriginal fi } function keep_database_running { - if [ ! $(daemon_is_running mariadb) ]; then + if [ ! "$(daemon_is_running mariadb)" ]; then systemctl start mariadb fi } @@ -65,65 +65,65 @@ function backup_database_local { backup_databases_script=/usr/bin/backupdatabases if ! grep -q "# Check database daemon" /usr/bin/backupdatabases; then - echo '' >> /usr/bin/backupdatabases - echo '# Check database daemon is running' >> /usr/bin/backupdatabases - echo 'if [ ! $(systemctl is-active mariadb >/dev/null 2>&1 && echo Running) ]; then' >> /usr/bin/backupdatabases - echo ' systemctl start mariadb' >> /usr/bin/backupdatabases - echo 'fi' >> /usr/bin/backupdatabases - echo '' >> /usr/bin/backupdatabases + { echo ''; + echo '# Check database daemon is running'; + echo "if [ ! \$(systemctl is-active mariadb >/dev/null 2>&1 && echo Running) ]; then"; + echo ' systemctl start mariadb'; + echo 'fi'; + echo ''; } >> /usr/bin/backupdatabases fi if ! grep -q "# Backup the ${database_name} database" $backup_databases_script; then - echo "# Backup the ${database_name} database" >> $backup_databases_script - echo "TEMPFILE=/root/${database_name}.sql" >> $backup_databases_script - echo "DAILYFILE=/var/backups/${database_name}_daily.sql" >> $backup_databases_script - echo "mysqldump --password=\"\$MYSQL_PASSWORD\" ${database_name} > \$TEMPFILE" >> $backup_databases_script - echo 'FILESIZE=$(stat -c%s $TEMPFILE)' >> $backup_databases_script - echo 'if [ "$FILESIZE" -eq "0" ]; then' >> $backup_databases_script - echo ' if [ -f $DAILYFILE ]; then' >> $backup_databases_script - echo ' cp $DAILYFILE $TEMPFILE' >> $backup_databases_script - echo '' >> $backup_databases_script - echo ' # try to restore yesterdays database' >> $backup_databases_script - echo " mysql -u root --password=\"\$MYSQL_PASSWORD\" ${database_name} -o < \$DAILYFILE" >> $backup_databases_script - echo '' >> $backup_databases_script - echo ' # Send a warning email' >> $backup_databases_script - echo " echo \"Unable to create a backup of the ${database_name} database. Attempted to restore from yesterdays backup\" | mail -s \"${database_name} backup\" \$EMAIL" >> $backup_databases_script - echo ' else' >> $backup_databases_script - echo ' # Send a warning email' >> $backup_databases_script - echo " echo \"Unable to create a backup of the ${database_name} database.\" | mail -s \"${database_name} backup\" \$EMAIL" >> $backup_databases_script - echo ' fi' >> $backup_databases_script - echo 'else' >> $backup_databases_script - echo ' chmod 600 $TEMPFILE' >> $backup_databases_script - echo ' mv $TEMPFILE $DAILYFILE' >> $backup_databases_script - echo '' >> $backup_databases_script - echo ' # Make the backup readable only by root' >> $backup_databases_script - echo ' chmod 600 $DAILYFILE' >> $backup_databases_script - echo 'fi' >> $backup_databases_script - echo "# End of ${database_name} database backup" >> $backup_databases_script + { echo "# Backup the ${database_name} database"; + echo "TEMPFILE=/root/${database_name}.sql"; + echo "DAILYFILE=/var/backups/${database_name}_daily.sql"; + echo "mysqldump --password=\"\$MYSQL_PASSWORD\" ${database_name} > \$TEMPFILE"; + echo "FILESIZE=\$(stat -c%s \$TEMPFILE)"; + echo "if [ \"\$FILESIZE\" -eq \"0\" ]; then"; + echo " if [ -f \$DAILYFILE ]; then"; + echo " cp \$DAILYFILE \$TEMPFILE"; + echo ''; + echo ' # try to restore yesterdays database'; + echo " mysql -u root --password=\"\$MYSQL_PASSWORD\" ${database_name} -o < \$DAILYFILE"; + echo ''; + echo ' # Send a warning email'; + echo " echo \"Unable to create a backup of the ${database_name} database. Attempted to restore from yesterdays backup\" | mail -s \"${database_name} backup\" \$EMAIL"; + echo ' else'; + echo ' # Send a warning email'; + echo " echo \"Unable to create a backup of the ${database_name} database.\" | mail -s \"${database_name} backup\" \$EMAIL"; + echo ' fi'; + echo 'else'; + echo " chmod 600 \$TEMPFILE"; + echo " mv \$TEMPFILE \$DAILYFILE"; + echo ''; + echo ' # Make the backup readable only by root'; + echo " chmod 600 \$DAILYFILE"; + echo 'fi'; + echo "# End of ${database_name} database backup"; } >> $backup_databases_script fi weekly_backup_script=/etc/cron.weekly/backupdatabasesweekly if ! grep -q "Backup ${database_name}" ${weekly_backup_script}; then - echo "# Backup ${database_name}" >> ${weekly_backup_script} - echo "if [ -f /var/backups/${database_name}_weekly.sql ]; then" >> ${weekly_backup_script} - echo " cp -f /var/backups/${database_name}_weekly.sql /var/backups/${database_name}_2weekly.sql" >> ${weekly_backup_script} - echo 'fi' >> ${weekly_backup_script} - echo "if [ -f /var/backups/${database_name}_daily.sql ]; then" >> ${weekly_backup_script} - echo " cp -f /var/backups/${database_name}_daily.sql /var/backups/${database_name}_weekly.sql" >> ${weekly_backup_script} - echo 'fi' >> ${weekly_backup_script} - echo "# End of backup for ${database_name}" >> ${weekly_backup_script} + { echo "# Backup ${database_name}"; + echo "if [ -f /var/backups/${database_name}_weekly.sql ]; then"; + echo " cp -f /var/backups/${database_name}_weekly.sql /var/backups/${database_name}_2weekly.sql"; + echo 'fi'; + echo "if [ -f /var/backups/${database_name}_daily.sql ]; then"; + echo " cp -f /var/backups/${database_name}_daily.sql /var/backups/${database_name}_weekly.sql"; + echo 'fi'; + echo "# End of backup for ${database_name}"; } >> ${weekly_backup_script} fi monthly_backup_script=/etc/cron.monthly/backupdatabasesmonthly if ! grep -q "Backup ${database_name}" ${monthly_backup_script}; then - echo "# Backup ${database_name}" >> ${monthly_backup_script} - echo "if [ -f /var/backups/${database_name}_monthly.sql ]; then" >> ${monthly_backup_script} - echo " cp -f /var/backups/${database_name}_monthly.sql /var/backups/${database_name}_2monthly.sql" >> ${monthly_backup_script} - echo 'fi' >> ${monthly_backup_script} - echo "if [ -f /var/backups/${database_name}_weekly.sql ]; then" >> ${monthly_backup_script} - echo " cp -f /var/backups/${database_name}_weekly.sql /var/backups/${database_name}_monthly.sql" >> ${monthly_backup_script} - echo 'fi' >> ${monthly_backup_script} - echo "# End of backup for ${database_name}" >> ${monthly_backup_script} + { echo "# Backup ${database_name}"; + echo "if [ -f /var/backups/${database_name}_monthly.sql ]; then"; + echo " cp -f /var/backups/${database_name}_monthly.sql /var/backups/${database_name}_2monthly.sql"; + echo 'fi'; + echo "if [ -f /var/backups/${database_name}_weekly.sql ]; then"; + echo " cp -f /var/backups/${database_name}_weekly.sql /var/backups/${database_name}_monthly.sql"; + echo 'fi'; + echo "# End of backup for ${database_name}"; } >> ${monthly_backup_script} fi if ! grep -q "${database_name}" /etc/cron.hourly/repair; then @@ -138,15 +138,15 @@ function get_mariadb_password { DATABASE_PASSWORD_FILE=/root/dbpass if [ -f $DATABASE_PASSWORD_FILE ]; then MARIADB_PASSWORD=$(cat $DATABASE_PASSWORD_FILE) - ${PROJECT_NAME}-pass -u root -a mariadb -p "$MARIADB_PASSWORD" - stored_password=$(${PROJECT_NAME}-pass -u root -a mariadb) + "${PROJECT_NAME}-pass" -u root -a mariadb -p "$MARIADB_PASSWORD" + stored_password=$("${PROJECT_NAME}-pass" -u root -a mariadb) if [[ "$stored_password" == "$MARIADB_PASSWORD" ]]; then shred -zu $DATABASE_PASSWORD_FILE echo $'MariaDB password moved into password store' return fi fi - MARIADB_PASSWORD=$(${PROJECT_NAME}-pass -u root -a mariadb) + MARIADB_PASSWORD=$("${PROJECT_NAME}-pass" -u root -a mariadb) if [[ "$MARIADB_PASSWORD" == *'failed'* ]]; then echo $'Could not obtain mariadb password' exit 835225 @@ -155,12 +155,12 @@ function get_mariadb_password { function mariadb_kill_stone_dead { systemctl stop mariadb - kill_pid=$(ps aux | grep mysqld_safe | awk -F ' ' '{print $2}' | head -n 1) - kill -9 $kill_pid - kill_pid=$(ps aux | grep mysqld | awk -F ' ' '{print $2}' | head -n 1) - kill -9 $kill_pid - kill_pid=$(ps aux | grep mysqld | awk -F ' ' '{print $2}' | head -n 1) - kill -9 $kill_pid + kill_pid=$(pgrep mysqld_safe | head -n 1) + kill -9 "$kill_pid" + kill_pid=$(pgrep mysqld | head -n 1) + kill -9 "$kill_pid" + kill_pid=$(pgrep mysqld | head -n 1) + kill -9 "$kill_pid" } function mariadb_fix_authentication { @@ -201,14 +201,15 @@ function install_mariadb { function_check get_mariadb_password get_mariadb_password - if [ ! $MARIADB_PASSWORD ]; then - if [ -f $IMAGE_PASSWORD_FILE ]; then - MARIADB_PASSWORD="$(printf `cat $IMAGE_PASSWORD_FILE`)" + if [ ! "$MARIADB_PASSWORD" ]; then + if [ -f "$IMAGE_PASSWORD_FILE" ]; then + passfile="$(cat "$IMAGE_PASSWORD_FILE")" + MARIADB_PASSWORD="$(printf "%s" "$passfile")" else - MARIADB_PASSWORD="$(openssl rand -base64 32 | cut -c1-${MINIMUM_PASSWORD_LENGTH})" + MARIADB_PASSWORD=$(create_password "${MINIMUM_PASSWORD_LENGTH}") fi fi - ${PROJECT_NAME}-pass -u root -a mariadb -p "$MARIADB_PASSWORD" + "${PROJECT_NAME}-pass" -u root -a mariadb -p "$MARIADB_PASSWORD" debconf-set-selections <<< "mariadb-server mariadb-server/root_password password $MARIADB_PASSWORD" debconf-set-selections <<< "mariadb-server mariadb-server/root_password_again password $MARIADB_PASSWORD" @@ -243,37 +244,37 @@ function install_mariadb { function backup_databases_script_header { if [ ! -f /usr/bin/backupdatabases ]; then # daily - echo '#!/bin/sh' > /usr/bin/backupdatabases - echo '' >> /usr/bin/backupdatabases - echo "EMAIL='$MY_EMAIL_ADDRESS'" >> /usr/bin/backupdatabases - echo '' >> /usr/bin/backupdatabases - echo "MYSQL_PASSWORD=\$(${PROJECT_NAME}-pass -u root -a mariadb)" >> /usr/bin/backupdatabases - echo 'umask 0077' >> /usr/bin/backupdatabases - echo '' >> /usr/bin/backupdatabases - echo '# exit if we are backing up to friends servers' >> /usr/bin/backupdatabases - echo "if [ -f $FRIENDS_SERVERS_LIST ]; then" >> /usr/bin/backupdatabases - echo ' exit 1' >> /usr/bin/backupdatabases - echo 'fi' >> /usr/bin/backupdatabases + { echo '#!/bin/sh'; + echo ''; + echo "EMAIL='$MY_EMAIL_ADDRESS'"; + echo ''; + echo "MYSQL_PASSWORD=\$(${PROJECT_NAME}-pass -u root -a mariadb)"; + echo 'umask 0077'; + echo ''; + echo '# exit if we are backing up to friends servers'; + echo "if [ -f $FRIENDS_SERVERS_LIST ]; then"; + echo ' exit 1'; + echo 'fi'; } > /usr/bin/backupdatabases chmod 600 /usr/bin/backupdatabases chmod +x /usr/bin/backupdatabases - echo '#!/bin/sh' > /etc/cron.daily/backupdatabasesdaily - echo '/usr/bin/backupdatabases' >> /etc/cron.daily/backupdatabasesdaily + { echo '#!/bin/sh'; + echo '/usr/bin/backupdatabases'; } > /etc/cron.daily/backupdatabasesdaily chmod 600 /etc/cron.daily/backupdatabasesdaily chmod +x /etc/cron.daily/backupdatabasesdaily # weekly - echo '#!/bin/sh' > /etc/cron.weekly/backupdatabasesweekly - echo '' >> /etc/cron.weekly/backupdatabasesweekly - echo 'umask 0077' >> /etc/cron.weekly/backupdatabasesweekly + { echo '#!/bin/sh'; + echo ''; + echo 'umask 0077'; } > /etc/cron.weekly/backupdatabasesweekly chmod 600 /etc/cron.weekly/backupdatabasesweekly chmod +x /etc/cron.weekly/backupdatabasesweekly # monthly - echo '#!/bin/sh' > /etc/cron.monthly/backupdatabasesmonthly - echo '' >> /etc/cron.monthly/backupdatabasesmonthly - echo 'umask 0077' >> /etc/cron.monthly/backupdatabasesmonthly + { echo '#!/bin/sh'; + echo ''; + echo 'umask 0077'; } > /etc/cron.monthly/backupdatabasesmonthly chmod 600 /etc/cron.monthly/backupdatabasesmonthly chmod +x /etc/cron.monthly/backupdatabasesmonthly @@ -289,7 +290,7 @@ function repair_databases_script { return fi - db_pass=$(${PROJECT_NAME}-pass -u root -p mariadb) + db_pass=$("${PROJECT_NAME}-pass" -u root -p mariadb) if [[ "$db_pass" == 'Error:'* ]]; then return fi @@ -304,22 +305,23 @@ function repair_databases_script { function remove_database { app_name="$1" - if [ ! -d $INSTALL_DIR ]; then - mkdir $INSTALL_DIR + if [ ! -d "$INSTALL_DIR" ]; then + mkdir "$INSTALL_DIR" fi echo "drop database ${app_name}; -quit" > $INSTALL_DIR/batch.sql - chmod 600 $INSTALL_DIR/batch.sql +quit" > "$INSTALL_DIR/batch.sql" + chmod 600 "$INSTALL_DIR/batch.sql" keep_database_running - mysql -u root --password="$MARIADB_PASSWORD" < $INSTALL_DIR/batch.sql - shred -zu $INSTALL_DIR/batch.sql + mysql -u root --password="$MARIADB_PASSWORD" < "$INSTALL_DIR/batch.sql" + shred -zu "$INSTALL_DIR/batch.sql" } function initialise_database { database_name=$1 database_file=$2 keep_database_running - mysql -u root --password="$MARIADB_PASSWORD" -D $database_name < $database_file + mysql -u root --password="$MARIADB_PASSWORD" -D "$database_name" < "$database_file" + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then exit 62952 fi @@ -329,25 +331,25 @@ function run_query { database_name=$1 database_query=$2 keep_database_running - mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name + mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" "$database_name" } function run_query_root { database_name=$1 database_query=$2 keep_database_running - mysql -e "$database_query" $database_name + mysql -e "$database_query" "$database_name" } function create_database { app_name="$1" app_admin_password="$2" app_admin_username=$3 - if [ ! -d $INSTALL_DIR ]; then - mkdir $INSTALL_DIR + if [ ! -d "$INSTALL_DIR" ]; then + mkdir "$INSTALL_DIR" fi - if [ ! $app_admin_username ]; then - app_admin_username=${app_name}admin + if [ ! "$app_admin_username" ]; then + app_admin_username="${app_name}admin" fi echo "create database ${app_name}; @@ -355,11 +357,11 @@ CREATE USER '$app_admin_username@localhost' IDENTIFIED BY '${app_admin_password} update mysql.user set plugin = '' where User='$app_admin_username@localhost'; GRANT ALL PRIVILEGES ON ${app_name}.* TO '$app_admin_username@localhost'; flush privileges; -quit" > $INSTALL_DIR/batch.sql - chmod 600 $INSTALL_DIR/batch.sql +quit" > "$INSTALL_DIR/batch.sql" + chmod 600 "$INSTALL_DIR/batch.sql" keep_database_running - mysql -u root --password="$MARIADB_PASSWORD" < $INSTALL_DIR/batch.sql - shred -zu $INSTALL_DIR/batch.sql + mysql -u root --password="$MARIADB_PASSWORD" < "$INSTALL_DIR/batch.sql" + shred -zu "$INSTALL_DIR/batch.sql" } function run_query_with_output { @@ -381,11 +383,11 @@ function drop_database { echo "drop database ${app_name}; flush privileges; -quit" > $INSTALL_DIR/batch.sql - chmod 600 $INSTALL_DIR/batch.sql +quit" > "$INSTALL_DIR/batch.sql" + chmod 600 "$INSTALL_DIR/batch.sql" keep_database_running - mysql -u root --password="$MARIADB_PASSWORD" < $INSTALL_DIR/batch.sql - shred -zu $INSTALL_DIR/batch.sql + mysql -u root --password="$MARIADB_PASSWORD" < "$INSTALL_DIR/batch.sql" + shred -zu "$INSTALL_DIR/batch.sql" } @@ -393,7 +395,7 @@ function database_reinstall { apt-get -yq purge mariadb* rm -rf /var/lib/mysql rm -rf /etc/mysql - sed -i '/mariadb/d' ~/${PROJECT_NAME}-completed.txt + sed -i '/mariadb/d' "${HOME}/${PROJECT_NAME}-completed.txt" install_mariadb } @@ -404,11 +406,11 @@ function install_rethinkdb { exit 723723452 fi - if [ ! -d $INSTALL_DIR ]; then - mkdir -p $INSTALL_DIR + if [ ! -d "$INSTALL_DIR" ]; then + mkdir -p "$INSTALL_DIR" fi - cd $INSTALL_DIR + cd "$INSTALL_DIR" || exit 6384684 echo "deb http://download.rethinkdb.com/apt $DEBIAN_VERSION main" | tee /etc/apt/sources.list.d/rethinkdb.list @@ -416,25 +418,25 @@ function install_rethinkdb { apt-get update apt-get -yq install rethinkdb - echo 'runuser=rethinkdb' > /etc/rethinkdb/instances.d/default.conf - echo 'rungroup=rethinkdb' >> /etc/rethinkdb/instances.d/default.conf - echo '# pid-file=/var/run/rethinkdb/rethinkdb.pid' >> /etc/rethinkdb/instances.d/default.conf - echo '# directory=/var/lib/rethinkdb/default' >> /etc/rethinkdb/instances.d/default.conf - echo '# log-file=/var/log/rethinkdb' >> /etc/rethinkdb/instances.d/default.conf - echo 'bind=127.0.0.1' >> /etc/rethinkdb/instances.d/default.conf - echo '# canonical-address=' >> /etc/rethinkdb/instances.d/default.conf - echo '# driver-port=28015' >> /etc/rethinkdb/instances.d/default.conf - echo '# cluster-port=29015' >> /etc/rethinkdb/instances.d/default.conf - echo '# join=example.com:29015' >> /etc/rethinkdb/instances.d/default.conf - echo '# port-offset=0' >> /etc/rethinkdb/instances.d/default.conf - echo '# reql-http-proxy=socks5://example.com:1080' >> /etc/rethinkdb/instances.d/default.conf - echo '# http-port=8091' >> /etc/rethinkdb/instances.d/default.conf - echo '# no-http-admin' >> /etc/rethinkdb/instances.d/default.conf - echo '# cores=2' >> /etc/rethinkdb/instances.d/default.conf - echo '# cache-size=1024' >> /etc/rethinkdb/instances.d/default.conf - echo '# io-threads=64' >> /etc/rethinkdb/instances.d/default.conf - echo '# direct-io' >> /etc/rethinkdb/instances.d/default.conf - echo '# server-name=server1' >> /etc/rethinkdb/instances.d/default.conf + { echo 'runuser=rethinkdb'; + echo 'rungroup=rethinkdb'; + echo '# pid-file=/var/run/rethinkdb/rethinkdb.pid'; + echo '# directory=/var/lib/rethinkdb/default'; + echo '# log-file=/var/log/rethinkdb'; + echo 'bind=127.0.0.1'; + echo '# canonical-address='; + echo '# driver-port=28015'; + echo '# cluster-port=29015'; + echo '# join=example.com:29015'; + echo '# port-offset=0'; + echo '# reql-http-proxy=socks5://example.com:1080'; + echo '# http-port=8091'; + echo '# no-http-admin'; + echo '# cores=2'; + echo '# cache-size=1024'; + echo '# io-threads=64'; + echo '# direct-io'; + echo '# server-name=server1'; } > /etc/rethinkdb/instances.d/default.conf systemctl restart rethinkdb } From 05f39281f2ea06ec11e6a9ed66249ab9048c78e9 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 25 Feb 2018 17:32:57 +0000 Subject: [PATCH 14/67] Tidying function checking utils --- src/freedombone-utils-depends | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/freedombone-utils-depends b/src/freedombone-utils-depends index aee2a609..bb2572ac 100755 --- a/src/freedombone-utils-depends +++ b/src/freedombone-utils-depends @@ -29,14 +29,14 @@ # along with this program. If not, see . function function_check { - if [ ! "$(type ${1} 2>/dev/null)" ]; then + if [ ! "$(type "${1}" 2>/dev/null)" ]; then echo $"Dependency error: The function ${1} has not been defined" exit 72528 fi } function function_exists { - if [ ! "$(type ${1} 2>/dev/null)" ]; then + if [ ! "$(type "${1}" 2>/dev/null)" ]; then echo "0" else echo "1" From 8b4ddff6eb2760b139537c95915cbdeae34a4c36 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sun, 25 Feb 2018 22:15:36 +0000 Subject: [PATCH 15/67] Tidying gnusocial utils --- src/freedombone-utils-dns | 32 +- src/freedombone-utils-filesystem | 43 +- src/freedombone-utils-final | 68 +- src/freedombone-utils-firewall | 261 ++++--- src/freedombone-utils-git | 29 +- src/freedombone-utils-gnusocialtools | 999 +++++++++++++-------------- 6 files changed, 710 insertions(+), 722 deletions(-) diff --git a/src/freedombone-utils-dns b/src/freedombone-utils-dns index 7dc3bb39..cd726d04 100755 --- a/src/freedombone-utils-dns +++ b/src/freedombone-utils-dns @@ -131,7 +131,7 @@ function create_freedns_updater { } function add_ddns_domain { - if [ ! $1 ]; then + if [ ! "$1" ]; then echo $'ddns domain not specified' exit 5638 fi @@ -147,10 +147,10 @@ function add_ddns_domain { exit 5745 fi if ! grep -q "$DDNS_PROVIDER" /etc/inadyn.conf; then - echo '' >> /etc/inadyn.conf - echo "system $DDNS_PROVIDER" >> /etc/inadyn.conf - echo ' ssl' >> /etc/inadyn.conf - echo " checkip-url $GET_IP_ADDRESS_URL /" >> /etc/inadyn.conf + { echo ''; + echo "system $DDNS_PROVIDER"; + echo ' ssl'; + echo " checkip-url $GET_IP_ADDRESS_URL /"; } >> /etc/inadyn.conf if [ $DDNS_USERNAME ]; then echo " username $DDNS_USERNAME" >> /etc/inadyn.conf fi @@ -168,7 +168,7 @@ function add_ddns_domain { } function remove_ddns_domain { - if [ ! $1 ]; then + if [ ! "$1" ]; then echo $'ddns domain not specified' exit 5638 fi @@ -203,14 +203,14 @@ function configure_dns { # allow changes to resolv.conf chattr -i $resolvconf - echo 'domain localdomain' > $resolvconf - echo 'search localdomain' >> $resolvconf - echo "nameserver $NAMESERVER1" >> $resolvconf - echo "nameserver $NAMESERVER2" >> $resolvconf - echo "nameserver $NAMESERVER3" >> $resolvconf - echo "nameserver $NAMESERVER4" >> $resolvconf - echo "nameserver $NAMESERVER5" >> $resolvconf - echo "nameserver $NAMESERVER6" >> $resolvconf + { echo 'domain localdomain'; + echo 'search localdomain'; + echo "nameserver $NAMESERVER1"; + echo "nameserver $NAMESERVER2"; + echo "nameserver $NAMESERVER3"; + echo "nameserver $NAMESERVER4"; + echo "nameserver $NAMESERVER5"; + echo "nameserver $NAMESERVER6"; } > $resolvconf # prevent resolv.conf from changing resolvconf -u @@ -222,7 +222,7 @@ function set_hostname { DEFAULT_DOMAIN_NAME="$1" echo "$DEFAULT_DOMAIN_NAME" > /etc/hostname - hostname $DEFAULT_DOMAIN_NAME + hostname "$DEFAULT_DOMAIN_NAME" echo "$DEFAULT_DOMAIN_NAME" > /etc/mailname if grep -q "127.0.1.1" /etc/hosts; then @@ -238,7 +238,7 @@ function set_your_domain_name { fi function_check set_hostname - set_hostname $DEFAULT_DOMAIN_NAME + set_hostname "$DEFAULT_DOMAIN_NAME" mark_completed "${FUNCNAME[0]}" } diff --git a/src/freedombone-utils-filesystem b/src/freedombone-utils-filesystem index 8712abd9..3a708882 100755 --- a/src/freedombone-utils-filesystem +++ b/src/freedombone-utils-filesystem @@ -32,44 +32,45 @@ TOMB_REPO="https://github.com/dyne/Tomb" TOMB_COMMIT='c80ebd6d6ed77980eb5b559757e03ea13a29bdd1' function mesh_install_tomb { - chroot ${rootdir} apt-get -yq install cryptsetup zsh pinentry-curses + # shellcheck disable=SC2154 + chroot "${rootdir}" apt-get -yq install cryptsetup zsh pinentry-curses - if [ ! -d ${rootdir}/$INSTALL_DIR ]; then - mkdir -p ${rootdir}/$INSTALL_DIR + if [ ! -d "${rootdir}/$INSTALL_DIR" ]; then + mkdir -p "${rootdir}/$INSTALL_DIR" fi if [ -d /repos/tomb ]; then - mkdir ${rootdir}/$INSTALL_DIR/tomb - cp -r -p /repos/tomb/. ${rootdir}/$INSTALL_DIR/tomb - cd ${rootdir}/$INSTALL_DIR/tomb + mkdir "${rootdir}/$INSTALL_DIR/tomb" + cp -r -p /repos/tomb/. "${rootdir}/$INSTALL_DIR/tomb" + cd "${rootdir}/$INSTALL_DIR/tomb" || exit 3648368 git pull else - git_clone $TOMB_REPO ${rootdir}/$INSTALL_DIR/tomb + git_clone "$TOMB_REPO" "${rootdir}/$INSTALL_DIR/tomb" fi - cd ${rootdir}/$INSTALL_DIR/tomb + cd "${rootdir}/$INSTALL_DIR/tomb" || exit 7346384 git checkout $TOMB_COMMIT -b $TOMB_COMMIT - chroot ${rootdir} /bin/bash -x <> /home/$MY_USERNAME/.bashrc + if ! grep -q 'controluser' "/home/$MY_USERNAME/.bashrc"; then + echo 'controluser' >> "/home/$MY_USERNAME/.bashrc" fi - if [ ! -f $IMAGE_PASSWORD_FILE ]; then - if [ -f /root/${PROJECT_NAME}-wifi.cfg ]; then + if [ ! -f "$IMAGE_PASSWORD_FILE" ]; then + if [ -f "/root/${PROJECT_NAME}-wifi.cfg" ]; then create_wifi_startup_script echo '' echo $'Shutting down the system. Detatch the ethernet cable, attach wifi dongle, then power on again.' echo '' - ${PROJECT_NAME}-logging off --restart + "${PROJECT_NAME}-logging" off --restart systemctl poweroff return fi echo $'Turning off logging' - ${PROJECT_NAME}-logging off --restart + "${PROJECT_NAME}-logging" off --restart echo $'Rebooting the system' systemctl reboot -i fi echo $'Turning off logging' - ${PROJECT_NAME}-logging off --restart + "${PROJECT_NAME}-logging" off --restart } function update_installed_apps_list { # Why does this secondary file exist, apart from COMPLETION_FILE ? # It's so that it is visible to unprivileged users from the user control panel - cat $COMPLETION_FILE | grep "install_" > /usr/share/${PROJECT_NAME}/installed.txt + grep "install_" "$COMPLETION_FILE" > "/usr/share/${PROJECT_NAME}/installed.txt" } function create_default_user_removal_daemon { @@ -96,31 +96,31 @@ function create_default_user_removal_daemon { first_start_daemon_filename=/etc/systemd/system/firststart.service first_start_script=/usr/local/bin/firststart - echo '#!/bin/bash' > $first_start_script - echo 'if [ -d /home/fbone]; then' >> $first_start_script - echo ' userdel -r fbone' >> $first_start_script - echo ' if [ -d /home/fbone]; then' >> $first_start_script - echo ' rm -rf /home/fbone' >> $first_start_script - echo ' fi' >> $first_start_script - echo 'fi' >> $first_start_script - echo 'systemctl disable firststart' >> $first_start_script - echo "rm $first_start_daemon_filename" >> $first_start_script + { echo '#!/bin/bash'; + echo 'if [ -d /home/fbone]; then'; + echo ' userdel -r fbone'; + echo ' if [ -d /home/fbone]; then'; + echo ' rm -rf /home/fbone'; + echo ' fi'; + echo 'fi'; + echo 'systemctl disable firststart'; + echo "rm $first_start_daemon_filename"; } > $first_start_script chmod +x $first_start_script - echo '[Unit]' > $first_start_daemon_filename - echo 'Description=Daemon run on first boot' >> $first_start_daemon_filename - echo 'After=syslog.target' >> $first_start_daemon_filename - echo 'After=network.target' >> $first_start_daemon_filename - echo '' >> $first_start_daemon_filename - echo '[Service]' >> $first_start_daemon_filename - echo 'User=root' >> $first_start_daemon_filename - echo 'Group=root' >> $first_start_daemon_filename - echo "ExecStart=$first_start_script" >> $first_start_daemon_filename - echo 'StandardOutput=syslog' >> $first_start_daemon_filename - echo 'StandardError=syslog' >> $first_start_daemon_filename - echo '' >> $first_start_daemon_filename - echo '[Install]' >> $first_start_daemon_filename - echo 'WantedBy=multi-user.target' >> $first_start_daemon_filename + { echo '[Unit]'; + echo 'Description=Daemon run on first boot'; + echo 'After=syslog.target'; + echo 'After=network.target'; + echo ''; + echo '[Service]'; + echo 'User=root'; + echo 'Group=root'; + echo "ExecStart=$first_start_script"; + echo 'StandardOutput=syslog'; + echo 'StandardError=syslog'; + echo ''; + echo '[Install]'; + echo 'WantedBy=multi-user.target'; } > $first_start_daemon_filename systemctl enable firststart } diff --git a/src/freedombone-utils-firewall b/src/freedombone-utils-firewall index 2b70d31a..fc95b87f 100755 --- a/src/freedombone-utils-firewall +++ b/src/freedombone-utils-firewall @@ -47,7 +47,7 @@ function save_firewall_settings { } function firewall_block_bad_ip_ranges { - if [ $INSTALLING_MESH ]; then + if [ "$INSTALLING_MESH" ]; then return fi if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then @@ -135,13 +135,13 @@ function firewall_enable_vpn { } function configure_firewall { - if [ $INSTALLING_MESH ]; then + if [ "$INSTALLING_MESH" ]; then mesh_firewall return fi if grep -q "RELATED" /etc/firewall.conf; then # recreate the firewall to remove RELATED - sed -i "/firewall/d" $COMPLETION_FILE + sed -i "/firewall/d" "$COMPLETION_FILE" fi if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return @@ -276,10 +276,10 @@ function configure_internet_protocol { echo 'net.ipv4.tcp_syn_retries = 1' >> /etc/sysctl.conf fi if ! grep -q "keepalive" /etc/sysctl.conf; then - echo '# keepalive' >> /etc/sysctl.conf - echo 'net.ipv4.tcp_keepalive_probes = 9' >> /etc/sysctl.conf - echo 'net.ipv4.tcp_keepalive_intvl = 75' >> /etc/sysctl.conf - echo 'net.ipv4.tcp_keepalive_time = 7200' >> /etc/sysctl.conf + { echo '# keepalive'; + echo 'net.ipv4.tcp_keepalive_probes = 9'; + echo 'net.ipv4.tcp_keepalive_intvl = 75'; + echo 'net.ipv4.tcp_keepalive_time = 7200'; } >> /etc/sysctl.conf fi if ! grep -q "net.ipv4.conf.default.send_redirects" /etc/sysctl.conf; then echo "net.ipv4.conf.default.send_redirects = 0" >> /etc/sysctl.conf @@ -335,103 +335,100 @@ function configure_internet_protocol { } function mesh_firewall { - FIREWALL_FILENAME=${rootdir}/etc/systemd/system/meshfirewall.service + # shellcheck disable=SC2154 + FIREWALL_FILENAME="${rootdir}/etc/systemd/system/meshfirewall.service" MESH_FIREWALL_SCRIPT=${rootdir}/usr/bin/mesh-firewall - echo '#!/bin/bash' > $MESH_FIREWALL_SCRIPT - echo 'iptables -P INPUT ACCEPT' >> $MESH_FIREWALL_SCRIPT - echo 'ip6tables -P INPUT ACCEPT' >> $MESH_FIREWALL_SCRIPT - echo 'iptables -F' >> $MESH_FIREWALL_SCRIPT - echo 'ip6tables -F' >> $MESH_FIREWALL_SCRIPT - echo 'iptables -t nat -F' >> $MESH_FIREWALL_SCRIPT - echo 'ip6tables -t nat -F' >> $MESH_FIREWALL_SCRIPT - echo 'iptables -X' >> $MESH_FIREWALL_SCRIPT - echo 'ip6tables -X' >> $MESH_FIREWALL_SCRIPT - echo 'iptables -P INPUT DROP' >> $MESH_FIREWALL_SCRIPT - echo 'ip6tables -P INPUT DROP' >> $MESH_FIREWALL_SCRIPT - echo 'iptables -A INPUT -i lo -j ACCEPT' >> $MESH_FIREWALL_SCRIPT - echo 'ip6tables -A INPUT -i lo -j ACCEPT' >> $MESH_FIREWALL_SCRIPT - echo 'iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT' >> $MESH_FIREWALL_SCRIPT - echo 'ip6tables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT' >> $MESH_FIREWALL_SCRIPT - echo '' >> $MESH_FIREWALL_SCRIPT - echo '# Make sure incoming tcp connections are SYN packets' >> $MESH_FIREWALL_SCRIPT - echo 'iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP' >> $MESH_FIREWALL_SCRIPT - echo 'ip6tables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP' >> $MESH_FIREWALL_SCRIPT - echo '' >> $MESH_FIREWALL_SCRIPT - echo '# Drop packets with incoming fragments' >> $MESH_FIREWALL_SCRIPT - echo 'iptables -A INPUT -f -j DROP' >> $MESH_FIREWALL_SCRIPT - echo 'ip6tables -A INPUT -f -j DROP' >> $MESH_FIREWALL_SCRIPT - echo '' >> $MESH_FIREWALL_SCRIPT - echo '# Drop bogons' >> $MESH_FIREWALL_SCRIPT - echo 'iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP' >> $MESH_FIREWALL_SCRIPT - echo 'ip6tables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP' >> $MESH_FIREWALL_SCRIPT - echo 'iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP' >> $MESH_FIREWALL_SCRIPT - echo 'ip6tables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP' >> $MESH_FIREWALL_SCRIPT - echo 'iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP' >> $MESH_FIREWALL_SCRIPT - echo 'ip6tables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP' >> $MESH_FIREWALL_SCRIPT - echo '' >> $MESH_FIREWALL_SCRIPT - echo '# Incoming malformed NULL packets:' >> $MESH_FIREWALL_SCRIPT - echo 'iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP' >> $MESH_FIREWALL_SCRIPT - echo 'ip6tables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP' >> $MESH_FIREWALL_SCRIPT - echo '' >> $MESH_FIREWALL_SCRIPT - echo "iptables -A INPUT -p tcp --dport $TOX_PORT -j ACCEPT" >> $MESH_FIREWALL_SCRIPT - echo "ip6tables -A INPUT -p tcp --dport $TOX_PORT -j ACCEPT" >> $MESH_FIREWALL_SCRIPT - echo "iptables -A INPUT -p udp --dport $ZERONET_PORT -j ACCEPT" >> $MESH_FIREWALL_SCRIPT - echo "ip6tables -A INPUT -p udp --dport $ZERONET_PORT -j ACCEPT" >> $MESH_FIREWALL_SCRIPT - echo "iptables -A INPUT -p tcp --dport $ZERONET_PORT -j ACCEPT" >> $MESH_FIREWALL_SCRIPT - echo "ip6tables -A INPUT -p tcp --dport $ZERONET_PORT -j ACCEPT" >> $MESH_FIREWALL_SCRIPT - echo "iptables -A INPUT -p udp --dport $TRACKER_PORT -j ACCEPT" >> $MESH_FIREWALL_SCRIPT - echo "ip6tables -A INPUT -p udp --dport $TRACKER_PORT -j ACCEPT" >> $MESH_FIREWALL_SCRIPT - echo "iptables -A INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT" >> $MESH_FIREWALL_SCRIPT - echo "ip6tables -A INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT" >> $MESH_FIREWALL_SCRIPT - echo "iptables -A INPUT -p udp --dport 1900 -j ACCEPT" >> $MESH_FIREWALL_SCRIPT - echo "ip6tables -A INPUT -p udp --dport 1900 -j ACCEPT" >> $MESH_FIREWALL_SCRIPT - chmod +x $MESH_FIREWALL_SCRIPT + { echo '#!/bin/bash'; + echo 'iptables -P INPUT ACCEPT'; + echo 'ip6tables -P INPUT ACCEPT'; + echo 'iptables -F'; + echo 'ip6tables -F'; + echo 'iptables -t nat -F'; + echo 'ip6tables -t nat -F'; + echo 'iptables -X'; + echo 'ip6tables -X'; + echo 'iptables -P INPUT DROP'; + echo 'ip6tables -P INPUT DROP'; + echo 'iptables -A INPUT -i lo -j ACCEPT'; + echo 'ip6tables -A INPUT -i lo -j ACCEPT'; + echo 'iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT'; + echo 'ip6tables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT'; + echo ''; + echo '# Make sure incoming tcp connections are SYN packets'; + echo 'iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP'; + echo 'ip6tables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP'; + echo ''; + echo '# Drop packets with incoming fragments'; + echo 'iptables -A INPUT -f -j DROP'; + echo 'ip6tables -A INPUT -f -j DROP'; + echo ''; + echo '# Drop bogons'; + echo 'iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP'; + echo 'ip6tables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP'; + echo 'iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP'; + echo 'ip6tables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP'; + echo 'iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP'; + echo 'ip6tables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP'; + echo ''; + echo '# Incoming malformed NULL packets:'; + echo 'iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP'; + echo 'ip6tables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP'; + echo ''; + echo "iptables -A INPUT -p tcp --dport $TOX_PORT -j ACCEPT"; + echo "ip6tables -A INPUT -p tcp --dport $TOX_PORT -j ACCEPT"; + echo "iptables -A INPUT -p udp --dport $ZERONET_PORT -j ACCEPT"; + echo "ip6tables -A INPUT -p udp --dport $ZERONET_PORT -j ACCEPT"; + echo "iptables -A INPUT -p tcp --dport $ZERONET_PORT -j ACCEPT"; + echo "ip6tables -A INPUT -p tcp --dport $ZERONET_PORT -j ACCEPT"; + echo "iptables -A INPUT -p udp --dport $TRACKER_PORT -j ACCEPT"; + echo "ip6tables -A INPUT -p udp --dport $TRACKER_PORT -j ACCEPT"; + echo "iptables -A INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT"; + echo "ip6tables -A INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT"; + echo "iptables -A INPUT -p udp --dport 1900 -j ACCEPT"; + echo "ip6tables -A INPUT -p udp --dport 1900 -j ACCEPT"; } > "$MESH_FIREWALL_SCRIPT" + chmod +x "$MESH_FIREWALL_SCRIPT" - echo '[Unit]' > $FIREWALL_FILENAME - echo 'Description=Mesh Firewall' >> $FIREWALL_FILENAME - echo '' >> $FIREWALL_FILENAME - echo '[Service]' >> $FIREWALL_FILENAME - echo 'Type=oneshot' >> $FIREWALL_FILENAME - echo 'ExecStart=/usr/bin/mesh-firewall' >> $FIREWALL_FILENAME - echo 'RemainAfterExit=no' >> $FIREWALL_FILENAME - echo '' >> $FIREWALL_FILENAME - echo 'TimeoutSec=30' >> $FIREWALL_FILENAME - echo '' >> $FIREWALL_FILENAME - echo '[Install]' >> $FIREWALL_FILENAME - echo 'WantedBy=multi-user.target' >> $FIREWALL_FILENAME - chmod +x $FIREWALL_FILENAME + { echo '[Unit]'; + echo 'Description=Mesh Firewall'; + echo ''; + echo '[Service]'; + echo 'Type=oneshot'; + echo 'ExecStart=/usr/bin/mesh-firewall'; + echo 'RemainAfterExit=no'; + echo ''; + echo 'TimeoutSec=30'; + echo ''; + echo '[Install]'; + echo 'WantedBy=multi-user.target'; } > "$FIREWALL_FILENAME" + chmod +x "$FIREWALL_FILENAME" chroot "$rootdir" systemctl enable meshfirewall } function firewall_add { - firewall_name=$(echo "$1" | sed "s| |-|g") + firewall_name=$(string="$1" ; echo "${string// /-}") firewall_port=$2 firewall_protocol="$3" - if ! grep -q "${firewall_name}=${firewall_port}" $FIREWALL_CONFIG; then - echo "${firewall_name}=${firewall_port}" >> $FIREWALL_CONFIG - if [ ! ${firewall_protocol} ]; then - iptables -C INPUT -p udp --dport ${firewall_port} -j ACCEPT - if [ ! "$?" = "0" ]; then - iptables -A INPUT -p udp --dport ${firewall_port} -j ACCEPT + if ! grep -q "${firewall_name}=${firewall_port}" "$FIREWALL_CONFIG"; then + echo "${firewall_name}=${firewall_port}" >> "$FIREWALL_CONFIG" + if [ ! "${firewall_protocol}" ]; then + if ! iptables -C INPUT -p udp --dport "${firewall_port}" -j ACCEPT; then + iptables -A INPUT -p udp --dport "${firewall_port}" -j ACCEPT fi - iptables -C INPUT -p tcp --dport ${firewall_port} -j ACCEPT - if [ ! "$?" = "0" ]; then - iptables -A INPUT -p tcp --dport ${firewall_port} -j ACCEPT + if ! iptables -C INPUT -p tcp --dport "${firewall_port}" -j ACCEPT; then + iptables -A INPUT -p tcp --dport "${firewall_port}" -j ACCEPT fi else if [[ "${firewall_protocol}" == *"udp"* ]]; then - iptables -C INPUT -p udp --dport ${firewall_port} -j ACCEPT - if [ ! "$?" = "0" ]; then - iptables -A INPUT -p udp --dport ${firewall_port} -j ACCEPT + if ! iptables -C INPUT -p udp --dport "${firewall_port}" -j ACCEPT; then + iptables -A INPUT -p udp --dport "${firewall_port}" -j ACCEPT fi fi if [[ "${firewall_protocol}" == *"tcp"* ]]; then - iptables -C INPUT -p tcp --dport ${firewall_port} -j ACCEPT - if [ ! "$?" = "0" ]; then - iptables -A INPUT -p tcp --dport ${firewall_port} -j ACCEPT + if ! iptables -C INPUT -p tcp --dport "${firewall_port}" -j ACCEPT; then + iptables -A INPUT -p tcp --dport "${firewall_port}" -j ACCEPT fi fi fi @@ -440,33 +437,29 @@ function firewall_add { } function firewall_add_range { - firewall_name=$(echo "$1" | sed "s| |-|g") + firewall_name=$(string="$1" ; echo "${string// /-}") firewall_port_start=$2 firewall_port_end=$3 firewall_protocol="$4" - if ! grep -q "${firewall_name}=${firewall_port_start}:${firewall_port_end}" $FIREWALL_CONFIG; then - echo "${firewall_name}=${firewall_port_start}:${firewall_port_end}" >> $FIREWALL_CONFIG - if [ ! ${firewall_protocol} ]; then - iptables -C INPUT -p udp --dport ${firewall_port_start}:${firewall_port_end} -j ACCEPT - if [ ! "$?" = "0" ]; then - iptables -A INPUT -p udp --dport ${firewall_port_start}:${firewall_port_end} -j ACCEPT + if ! grep -q "${firewall_name}=${firewall_port_start}:${firewall_port_end}" "$FIREWALL_CONFIG"; then + echo "${firewall_name}=${firewall_port_start}:${firewall_port_end}" >> "$FIREWALL_CONFIG" + if [ ! "${firewall_protocol}" ]; then + if ! iptables -C INPUT -p udp --dport "${firewall_port_start}":"${firewall_port_end}" -j ACCEPT; then + iptables -A INPUT -p udp --dport "${firewall_port_start}":"${firewall_port_end}" -j ACCEPT fi - iptables -C INPUT -p tcp --dport ${firewall_port_start}:${firewall_port_end} -j ACCEPT - if [ ! "$?" = "0" ]; then - iptables -A INPUT -p tcp --dport ${firewall_port_start}:${firewall_port_end} -j ACCEPT + if ! iptables -C INPUT -p tcp --dport "${firewall_port_start}":"${firewall_port_end}" -j ACCEPT; then + iptables -A INPUT -p tcp --dport "${firewall_port_start}":"${firewall_port_end}" -j ACCEPT fi else if [[ "${firewall_protocol}" == *"udp"* ]]; then - iptables -C INPUT -p udp --dport ${firewall_port_start}:${firewall_port_end} -j ACCEPT - if [ ! "$?" = "0" ]; then - iptables -A INPUT -p udp --dport ${firewall_port_start}:${firewall_port_end} -j ACCEPT + if ! iptables -C INPUT -p udp --dport "${firewall_port_start}":"${firewall_port_end}" -j ACCEPT; then + iptables -A INPUT -p udp --dport "${firewall_port_start}":"${firewall_port_end}" -j ACCEPT fi fi if [[ "${firewall_protocol}" == *"tcp"* ]]; then - iptables -C INPUT -p tcp --dport ${firewall_port_start}:${firewall_port_end} -j ACCEPT - if [ ! "$?" = "0" ]; then - iptables -A INPUT -p tcp --dport ${firewall_port_start}:${firewall_port_end} -j ACCEPT + if ! iptables -C INPUT -p tcp --dport "${firewall_port_start}":"${firewall_port_end}" -j ACCEPT; then + iptables -A INPUT -p tcp --dport "${firewall_port_start}":"${firewall_port_end}" -j ACCEPT fi fi fi @@ -479,23 +472,23 @@ function firewall_remove { firewall_port=$1 firewall_protocol="$2" - if [ ! -f $FIREWALL_CONFIG ]; then + if [ ! -f "$FIREWALL_CONFIG" ]; then return fi - if grep -q "=${firewall_port}" $FIREWALL_CONFIG; then - if [ ! ${firewall_protocol} ]; then - iptables -D INPUT -p udp --dport ${firewall_port} -j ACCEPT - iptables -D INPUT -p tcp --dport ${firewall_port} -j ACCEPT + if grep -q "=${firewall_port}" "$FIREWALL_CONFIG"; then + if [ ! "${firewall_protocol}" ]; then + iptables -D INPUT -p udp --dport "${firewall_port}" -j ACCEPT + iptables -D INPUT -p tcp --dport "${firewall_port}" -j ACCEPT else if [[ "${firewall_protocol}" == *"udp"* ]]; then - iptables -D INPUT -p udp --dport ${firewall_port} -j ACCEPT + iptables -D INPUT -p udp --dport "${firewall_port}" -j ACCEPT fi if [[ "${firewall_protocol}" == *"tcp"* ]]; then - iptables -D INPUT -p tcp --dport ${firewall_port} -j ACCEPT + iptables -D INPUT -p tcp --dport "${firewall_port}" -j ACCEPT fi fi - sed -i "/=${firewall_port}/d" $FIREWALL_CONFIG + sed -i "/=${firewall_port}/d" "$FIREWALL_CONFIG" save_firewall_settings fi } @@ -509,7 +502,7 @@ function domain_to_hex_string { characters=$(echo -n "$segment" | wc -c) hexnum=$(echo "obase=16; $characters" | bc) echo -n "|" - if [ $(echo -n "$hexnum" | wc -c) -lt 2 ]; then + if [ "$(echo -n "$hexnum" | wc -c)" -lt 2 ]; then echo -n "0" fi echo -n "$hexnum|$segment" @@ -523,20 +516,19 @@ function firewall_block_domain { blocked_domain="$1" if [[ "$blocked_domain" == *'@'* ]]; then # Don't try to block email/microblog addresses - echo "${blocked_domain}" >> $FIREWALL_DOMAINS + echo "${blocked_domain}" >> "$FIREWALL_DOMAINS" return fi - if ! grep -q "$blocked_domain" $FIREWALL_DOMAINS; then - hexstr=$(domain_to_hex_string $blocked_domain) - iptables -C INPUT -p udp --dport 53 -m string --hex-string "$hexstr" --algo bm -j DROP - if [ ! "$?" = "0" ]; then + if ! grep -q "$blocked_domain" "$FIREWALL_DOMAINS"; then + hexstr=$(domain_to_hex_string "$blocked_domain") + if ! iptables -C INPUT -p udp --dport 53 -m string --hex-string "$hexstr" --algo bm -j DROP; then iptables -A INPUT -p udp --dport 53 -m string --hex-string "$hexstr" --algo bm -j DROP iptables -A INPUT -p tcp --dport 53 -m string --hex-string "$hexstr" --algo bm -j DROP iptables -A OUTPUT -p udp --dport 53 -m string --hex-string "$hexstr" --algo bm -j DROP iptables -A OUTPUT -p tcp --dport 53 -m string --hex-string "$hexstr" --algo bm -j DROP iptables -I FORWARD -p udp --dport 53 -m string --hex-string "$hexstr" --algo bm -j DROP iptables -I FORWARD -p tcp --dport 53 -m string --hex-string "$hexstr" --algo bm -j DROP - echo "${blocked_domain}" >> $FIREWALL_DOMAINS + echo "${blocked_domain}" >> "$FIREWALL_DOMAINS" save_firewall_settings fi @@ -559,13 +551,12 @@ function firewall_block_ip { # Don't try to block email/microblog addresses return fi - if ! grep -q "$blocked_ip" $FIREWALL_DOMAINS; then - iptables -C INPUT -s $blocked_ip -j DROP - if [ ! "$?" = "0" ]; then - iptables -A INPUT -s $blocked_ip -j DROP - iptables -A OUTPUT -s $blocked_ip -j DROP + if ! grep -q "$blocked_ip" "$FIREWALL_DOMAINS"; then + if ! iptables -C INPUT -s "$blocked_ip" -j DROP; then + iptables -A INPUT -s "$blocked_ip" -j DROP + iptables -A OUTPUT -s "$blocked_ip" -j DROP - echo "${blocked_ip}" >> $FIREWALL_DOMAINS + echo "${blocked_ip}" >> "$FIREWALL_DOMAINS" save_firewall_settings fi fi @@ -577,31 +568,31 @@ function firewall_unblock_ip { # Don't try to block email/microblog addresses return fi - if grep -q "$blocked_ip" $FIREWALL_DOMAINS; then - iptables -D INPUT -s $blocked_ip -j DROP - iptables -D OUTPUT -s $blocked_ip -j DROP + if grep -q "$blocked_ip" "$FIREWALL_DOMAINS"; then + iptables -D INPUT -s "$blocked_ip" -j DROP + iptables -D OUTPUT -s "$blocked_ip" -j DROP - sed -i '/$blocked_ip/d' $FIREWALL_DOMAINS - echo "${blocked_ip}" >> $FIREWALL_DOMAINS + sed -i "/$blocked_ip/d" "$FIREWALL_DOMAINS" + echo "${blocked_ip}" >> "$FIREWALL_DOMAINS" save_firewall_settings fi } function firewall_refresh_blocklist { - if [ ! -f /root/${PROJECT_NAME}-firewall-domains.cfg ]; then + if [ ! -f "/root/${PROJECT_NAME}-firewall-domains.cfg" ]; then return fi - while read blocked_domain; do - firewall_block_domain $blocked_domain - done > /var/www/${domain_name}/htdocs/config.php + echo "\$config['site']['qvitter']['sitebackground'] = 'img/bg_custom.${ext}';" >> "/var/www/${domain_name}/htdocs/config.php" fi fi fi @@ -112,86 +112,86 @@ function pleroma_set_background_image_from_url { fi if [ ${#ext} -gt 0 ]; then - cd $basedir + cd "$basedir" || exit 638436783 # remove any existing image - if [ -f bg_custom.${ext} ]; then - rm bg_custom.${ext} + if [ -f "bg_custom.${ext}" ]; then + rm "bg_custom.${ext}" fi # get the new image - wget "$url" -O bg_custom.${ext} - if [ ! -f bg_custom.${ext} ]; then + wget "$url" -O "bg_custom.${ext}" + if [ ! -f "bg_custom.${ext}" ]; then echo "$url" echo $'Custom background image for pleroma could not be downloaded' echo "1" return fi - if [ -d $basedir/static ]; then - cp bg_custom.${ext} static/bg_custom.${ext} - chown www-data:www-data static/bg_custom.${ext} + if [ -d "$basedir/static" ]; then + cp "bg_custom.${ext}" "static/bg_custom.${ext}" + chown www-data:www-data "static/bg_custom.${ext}" sed -i "s|\"background\":.*|\"background\": \"/static/bg_custom.${ext}\",|g" static/config.json fi if [ -d priv/static/static ]; then - cp bg_custom.${ext} priv/static/static/bg_custom.${ext} - chown www-data:www-data priv/static/static/bg_custom.${ext} + cp "bg_custom.${ext}" "priv/static/static/bg_custom.${ext}" + chown www-data:www-data "priv/static/static/bg_custom.${ext}" sed -i "s|\"background\":.*|\"background\": \"/static/bg_custom.${ext}\",|g" priv/static/static/config.json fi - if [[ "$basedir" != $PLEROMA_DIR ]]; then - qvitter_update_background ${domain_name} ${ext} + if [[ "$basedir" != "$PLEROMA_DIR" ]]; then + qvitter_update_background "${domain_name}" "${ext}" fi - rm bg_custom.${ext} + rm "bg_custom.${ext}" else echo "2" return fi # customise the logo - if [ -f $basedir/static/logo.png ]; then - if [ -f ~/freedombone/img/logo_fbone3.png ]; then - cp ~/freedombone/img/logo_fbone3.png $basedir/static/logo.png - if [ -d $basedir/priv/static/static ]; then - cp ~/freedombone/img/logo_fbone3.png $basedir/priv/static/static/logo.png + if [ -f "$basedir/static/logo.png" ]; then + if [ -f "$HOME/${PROJECT_NAME}/img/logo_fbone3.png" ]; then + cp "$HOME/${PROJECT_NAME}/img/logo_fbone3.png" "$basedir/static/logo.png" + if [ -d "$basedir/priv/static/static" ]; then + cp "$HOME/${PROJECT_NAME}/img/logo_fbone3.png" "$basedir/priv/static/static/logo.png" fi else - if [ -f /home/$MY_USERNAME/freedombone/img/logo_fbone3.png ]; then - cp /home/$MY_USERNAME/freedombone/img/logo_fbone3.png $basedir/static/logo.png - if [ -d $basedir/priv/static/static ]; then - cp /home/$MY_USERNAME/freedombone/img/logo_fbone3.png $basedir/priv/static/static/logo.png + if [ -f "/home/$MY_USERNAME/${PROJECT_NAME}/img/logo_fbone3.png" ]; then + cp "/home/$MY_USERNAME/${PROJECT_NAME}/img/logo_fbone3.png" "$basedir/static/logo.png" + if [ -d "$basedir/priv/static/static" ]; then + cp "/home/$MY_USERNAME/${PROJECT_NAME}/img/logo_fbone3.png" "$basedir/priv/static/static/logo.png" fi fi fi fi # customise the title - if [ -f $basedir/static/config.json ]; then - sed -i "s|\"name\":.*|\"name\": \"${title}\",|g" $basedir/static/config.json + if [ -f "$basedir/static/config.json" ]; then + sed -i "s|\"name\":.*|\"name\": \"${title}\",|g" "$basedir/static/config.json" fi - if [ -f $basedir/priv/static/static/config.json ]; then - sed -i "s|\"name\":.*|\"name\": \"${title}\",|g" $basedir/priv/static/static/config.json + if [ -f "$basedir/priv/static/static/config.json" ]; then + sed -i "s|\"name\":.*|\"name\": \"${title}\",|g" "$basedir/priv/static/static/config.json" fi echo "0" } function install_qvitter { - domain_name=$1 - app_name=$2 + domain_name="$1" + app_name="$2" # update to the next commit function_check set_repo_commit - set_repo_commit /var/www/${domain_name}/htdocs/local/plugins/Qvitter "${app_name} theme commit" "$QVITTER_THEME_COMMIT" $QVITTER_THEME_REPO + set_repo_commit "/var/www/${domain_name}/htdocs/local/plugins/Qvitter" "${app_name} theme commit" "$QVITTER_THEME_COMMIT" "$QVITTER_THEME_REPO" # customise with project logo - if [ -f /var/www/${domain_name}/htdocs/local/plugins/Qvitter/img/sprite.png ]; then - if [ -f ~/freedombone/img/logo_fbone3.png ]; then - cp ~/freedombone/img/logo_fbone3.png /var/www/${domain_name}/htdocs/local/plugins/Qvitter/img/sprite.png + if [ -f "/var/www/${domain_name}/htdocs/local/plugins/Qvitter/img/sprite.png" ]; then + if [ -f "$HOME/${PROJECT_NAME}/img/logo_fbone3.png" ]; then + cp "$HOME/${PROJECT_NAME}/img/logo_fbone3.png" "/var/www/${domain_name}/htdocs/local/plugins/Qvitter/img/sprite.png" else - if [ -f /home/$MY_USERNAME/freedombone/img/logo_fbone3.png ]; then - cp /home/$MY_USERNAME/freedombone/img/logo_fbone3.png /var/www/${domain_name}/htdocs/local/plugins/Qvitter/img/sprite.png + if [ -f "/home/$MY_USERNAME/${PROJECT_NAME}/img/logo_fbone3.png" ]; then + cp "/home/$MY_USERNAME/${PROJECT_NAME}/img/logo_fbone3.png" "/var/www/${domain_name}/htdocs/local/plugins/Qvitter/img/sprite.png" fi fi fi @@ -202,101 +202,101 @@ function install_qvitter { apt-get -yq install wget - if [ ! -d /var/www/${domain_name}/htdocs/local/plugins ]; then - mkdir -p /var/www/${domain_name}/htdocs/local/plugins + if [ ! -d "/var/www/${domain_name}/htdocs/local/plugins" ]; then + mkdir -p "/var/www/${domain_name}/htdocs/local/plugins" fi - cd /var/www/${domain_name}/htdocs/local/plugins + cd "/var/www/${domain_name}/htdocs/local/plugins" || exit 64284632 if [ -d /repos/qvitter ]; then mkdir Qvitter cp -r -p /repos/qvitter/. Qvitter - cd Qvitter + cd Qvitter || exit 2648246 git pull else function_check git_clone - git_clone $QVITTER_THEME_REPO Qvitter + git_clone "$QVITTER_THEME_REPO" Qvitter fi - if [ ! -d /var/www/${domain_name}/htdocs/local/plugins/Qvitter ]; then + if [ ! -d "/var/www/${domain_name}/htdocs/local/plugins/Qvitter" ]; then echo $'Qvitter repo was not installed' exit 835638 fi - cd /var/www/${domain_name}/htdocs/local/plugins/Qvitter - git checkout $QVITTER_THEME_COMMIT -b $QVITTER_THEME_COMMIT + cd "/var/www/${domain_name}/htdocs/local/plugins/Qvitter" || exit 7824245 + git checkout "$QVITTER_THEME_COMMIT" -b "$QVITTER_THEME_COMMIT" - config_file=/var/www/${domain_name}/htdocs/config.php - if ! grep -q "addPlugin('Qvitter')" $config_file; then - echo "" >> $config_file - echo "// Qvitter settings" >> $config_file - echo "addPlugin('Qvitter');" >> $config_file - echo "\$config['site']['qvitter']['enabledbydefault'] = true;" >> $config_file - echo "\$config['site']['qvitter']['defaultbackgroundcolor'] = '#f4f4f4';" >> $config_file - echo "\$config['site']['qvitter']['defaultlinkcolor'] = '#0084B4';" >> $config_file - echo "\$config['site']['qvitter']['timebetweenpolling'] = 30000; // 30 secs" >> $config_file + config_file="/var/www/${domain_name}/htdocs/config.php" + if ! grep -q "addPlugin('Qvitter')" "$config_file"; then + { echo ""; + echo "// Qvitter settings"; + echo "addPlugin('Qvitter');"; + echo "\$config['site']['qvitter']['enabledbydefault'] = true;"; + echo "\$config['site']['qvitter']['defaultbackgroundcolor'] = '#f4f4f4';"; + echo "\$config['site']['qvitter']['defaultlinkcolor'] = '#0084B4';"; + echo "\$config['site']['qvitter']['timebetweenpolling'] = 30000; // 30 secs"; } >> "$config_file" if [[ $ONION_ONLY == 'no' ]]; then - echo "\$config['site']['qvitter']['urlshortenerapiurl'] = 'http://qttr.at/shortener.php';" >> $config_file - echo "\$config['site']['qvitter']['urlshortenersignature'] = 'b6afeec983';" >> $config_file + echo "\$config['site']['qvitter']['urlshortenerapiurl'] = 'http://qttr.at/shortener.php';" >> "$config_file" + echo "\$config['site']['qvitter']['urlshortenersignature'] = 'b6afeec983';" >> "$config_file" fi - echo "\$config['site']['qvitter']['favicon'] = 'img/favicon.ico?v=4';" >> $config_file - echo "\$config['site']['qvitter']['sprite'] = Plugin::staticPath('Qvitter', '').'img/sprite.png?v=40';" >> $config_file - echo "\$config['site']['qvitter']['enablewelcometext'] = false;" >> $config_file - echo "\$config['site']['qvitter']['blocked_ips'] = array();" >> $config_file + { echo "\$config['site']['qvitter']['favicon'] = 'img/favicon.ico?v=4';"; + echo "\$config['site']['qvitter']['sprite'] = Plugin::staticPath('Qvitter', '').'img/sprite.png?v=40';"; + echo "\$config['site']['qvitter']['enablewelcometext'] = false;"; + echo "\$config['site']['qvitter']['blocked_ips'] = array();"; } >> "$config_file" fi # customise with project logo - if [ -f /var/www/${domain_name}/htdocs/local/plugins/Qvitter/img/sprite.png ]; then - if [ -f ~/freedombone/img/${app_name}_sprite.png ]; then - cp ~/freedombone/img/${app_name}_sprite.png /var/www/${domain_name}/htdocs/local/plugins/Qvitter/img/sprite.png + if [ -f "/var/www/${domain_name}/htdocs/local/plugins/Qvitter/img/sprite.png" ]; then + if [ -f "$HOME/${PROJECT_NAME}/img/${app_name}_sprite.png" ]; then + cp "$HOME/${PROJECT_NAME}/img/${app_name}_sprite.png" "/var/www/${domain_name}/htdocs/local/plugins/Qvitter/img/sprite.png" fi fi - chown -R www-data:www-data /var/www/${domain_name}/htdocs + chown -R www-data:www-data "/var/www/${domain_name}/htdocs" - cd /var/www/${domain_name}/htdocs + cd "/var/www/${domain_name}/htdocs" || exit 37483673 php scripts/upgrade.php php scripts/checkschema.php - chown -R www-data:www-data /var/www/${domain_name}/htdocs + chown -R www-data:www-data "/var/www/${domain_name}/htdocs" set_completion_param "${app_name} theme commit" "$QVITTER_THEME_COMMIT" - install_completed ${app_name}_theme + install_completed "${app_name}_theme" } function install_gnusocial_default_background { - gnusocial_type=$1 - domain_name=$2 + gnusocial_type="$1" + domain_name="$2" - basedir=/var/www/${domain_name}/htdocs + basedir="/var/www/${domain_name}/htdocs" if [[ "$gnusocial_type" == 'pleroma' ]]; then - basedir=$PLEROMA_DIR/priv/static + basedir="$PLEROMA_DIR/priv/static" fi # customise the logo - if [ -f $basedir/static/logo.png ]; then - if [ -f ~/freedombone/img/logo_fbone3.png ]; then - cp ~/freedombone/img/logo_fbone3.png $basedir/static/logo_custom.png - sed -i "s|\"logo\":.*|\"logo\": \"/static/logo_custom.png\",|g" $basedir/static/config.json + if [ -f "$basedir/static/logo.png" ]; then + if [ -f "$HOME/${PROJECT_NAME}/img/logo_fbone3.png" ]; then + cp "$HOME/${PROJECT_NAME}/img/logo_fbone3.png" "$basedir/static/logo_custom.png" + sed -i "s|\"logo\":.*|\"logo\": \"/static/logo_custom.png\",|g" "$basedir/static/config.json" else - if [ -f /home/$MY_USERNAME/freedombone/img/logo_fbone3.png ]; then - cp /home/$MY_USERNAME/freedombone/img/logo_fbone3.png $basedir/static/logo_custom.png - sed -i "s|\"logo\":.*|\"logo\": \"/static/logo_custom.png\",|g" $basedir/static/config.json + if [ -f "/home/$MY_USERNAME/${PROJECT_NAME}/img/logo_fbone3.png" ]; then + cp "/home/$MY_USERNAME/${PROJECT_NAME}/img/logo_fbone3.png" "$basedir/static/logo_custom.png" + sed -i "s|\"logo\":.*|\"logo\": \"/static/logo_custom.png\",|g" "$basedir/static/config.json" fi fi fi - if [ ! -f $basedir/static/bg.jpg ]; then + if [ ! -f "$basedir/static/bg.jpg" ]; then return fi - if [ -f ~/freedombone/img/backgrounds/${gnusocial_type}.jpg ]; then - cp ~/freedombone/img/backgrounds/${gnusocial_type}.jpg $basedir/static/bg_custom.jpg - sed -i "s|\"background\":.*|\"background\": \"/static/bg_custom.jpg\",|g" $basedir/static/config.json + if [ -f "$HOME/${PROJECT_NAME}/img/backgrounds/${gnusocial_type}.jpg" ]; then + cp "$HOME/${PROJECT_NAME}/img/backgrounds/${gnusocial_type}.jpg" "$basedir/static/bg_custom.jpg" + sed -i "s|\"background\":.*|\"background\": \"/static/bg_custom.jpg\",|g" "$basedir/static/config.json" else - if [ -f /home/$MY_USERNAME/freedombone/img/backgrounds/${gnusocial_type}.jpg ]; then - cp /home/$MY_USERNAME/freedombone/img/backgrounds/${gnusocial_type}.jpg $basedir/static/bg_custom.jpg - sed -i "s|\"background\":.*|\"background\": \"/static/bg_custom.jpg\",|g" $basedir/static/config.json + if [ -f "/home/$MY_USERNAME/${PROJECT_NAME}/img/backgrounds/${gnusocial_type}.jpg" ]; then + cp "/home/$MY_USERNAME/${PROJECT_NAME}/img/backgrounds/${gnusocial_type}.jpg" "$basedir/static/bg_custom.jpg" + sed -i "s|\"background\":.*|\"background\": \"/static/bg_custom.jpg\",|g" "$basedir/static/config.json" fi fi } @@ -308,30 +308,30 @@ function install_pleroma_front_end { background_url="$3" title="$4" - if [ ! -d $INSTALL_DIR/pleroma ]; then + if [ ! -d "$INSTALL_DIR/pleroma" ]; then if [ -d /repos/pleroma-fe ]; then - mkdir -p $INSTALL_DIR/pleroma - cp -r -p /repos/pleroma-fe/. $INSTALL_DIR/pleroma - cd $INSTALL_DIR/pleroma + mkdir -p "$INSTALL_DIR/pleroma" + cp -r -p /repos/pleroma-fe/. "$INSTALL_DIR/pleroma" + cd "$INSTALL_DIR/pleroma" || exit 23468324 git pull else function_check git_clone - git_clone $PLEROMA_FRONTEND_REPO $INSTALL_DIR/pleroma + git_clone "$PLEROMA_FRONTEND_REPO" "$INSTALL_DIR/pleroma" fi - if [ ! -d $INSTALL_DIR/pleroma ]; then + if [ ! -d "$INSTALL_DIR/pleroma" ]; then echo $'Unable to clone pleroma repo' exit 682252 fi fi - cd $INSTALL_DIR/pleroma - git checkout $PLEROMA_FRONTEND_COMMIT -b $PLEROMA_FRONTEND_COMMIT + cd "$INSTALL_DIR/pleroma" || exit 2562844 + git checkout "$PLEROMA_FRONTEND_COMMIT" -b "$PLEROMA_FRONTEND_COMMIT" set_completion_param "${app_name} pleroma commit" "$PLEROMA_FRONTEND_COMMIT" - if [ -d $INSTALL_DIR/pleroma/node_modules ]; then - rm -rf $INSTALL_DIR/pleroma/node_modules + if [ -d "$INSTALL_DIR/pleroma/node_modules" ]; then + rm -rf "$INSTALL_DIR/pleroma/node_modules" fi npm install -g yarn @@ -341,35 +341,35 @@ function install_pleroma_front_end { npm install -g node-sass@4.5.2 npm install -g whatwg-fetch@2.0.3 yarn - if [ -f $INSTALL_DIR/pleroma/dist/index.html ]; then - rm -rf $INSTALL_DIR/pleroma/dist/* + if [ -f "$INSTALL_DIR/pleroma/dist/index.html" ]; then + rm -rf "$INSTALL_DIR/pleroma/dist/*" fi npm run build - if [ ! -d $INSTALL_DIR/pleroma/dist ]; then + if [ ! -d "$INSTALL_DIR/pleroma/dist" ]; then echo 'Unable to build pleroma' exit 7629352 fi - if [ ! -f $INSTALL_DIR/pleroma/dist/index.html ]; then + if [ ! -f "$INSTALL_DIR/pleroma/dist/index.html" ]; then echo $'Unable to build pleroma index.html' exit 5282682 fi if [[ "$app_name" != 'pleroma' ]]; then - cp -r $INSTALL_DIR/pleroma/dist/* /var/www/${pleroma_domain}/htdocs/ - pleroma_set_background_image_from_url /var/www/${pleroma_domain}/htdocs "$pleroma_domain" "$background_url" "$title" + cp -r "$INSTALL_DIR/pleroma/dist/*" "/var/www/${pleroma_domain}/htdocs/" + pleroma_set_background_image_from_url "/var/www/${pleroma_domain}/htdocs" "$pleroma_domain" "$background_url" "$title" else - cp -r $INSTALL_DIR/pleroma/dist/* $PLEROMA_DIR/priv/static - pleroma_set_background_image_from_url $PLEROMA_DIR/priv/static "$pleroma_domain" "$background_url" "$title" + cp -r "$INSTALL_DIR/pleroma/dist/*" "$PLEROMA_DIR/priv/static" + pleroma_set_background_image_from_url "$PLEROMA_DIR/priv/static" "$pleroma_domain" "$background_url" "$title" fi - nginx_site=/etc/nginx/sites-available/${pleroma_domain} - sed -i 's|index index.php;|index index.html;|g' $nginx_site + nginx_site="/etc/nginx/sites-available/${pleroma_domain}" + sed -i 's|index index.php;|index index.html;|g' "$nginx_site" - if [ -f /var/www/${pleroma_domain}/htdocs/index.php ]; then - mv /var/www/${pleroma_domain}/htdocs/index.php /var/www/${pleroma_domain}/htdocs/index_qvitter.php + if [ -f "/var/www/${pleroma_domain}/htdocs/index.php" ]; then + mv "/var/www/${pleroma_domain}/htdocs/index.php" "/var/www/${pleroma_domain}/htdocs/index_qvitter.php" fi - sed -i 's|index.php|index_qvitter.php|g' $nginx_site + sed -i 's|index.php|index_qvitter.php|g' "$nginx_site" # remove any cached yarn files if [ -d /root/.cache/yarn ]; then @@ -377,9 +377,9 @@ function install_pleroma_front_end { fi if [[ "$app_name" != 'pleroma' ]]; then - chown -R www-data:www-data /var/www/${pleroma_domain}/htdocs + chown -R www-data:www-data "/var/www/${pleroma_domain}/htdocs" else - chown -R pleroma:pleroma $PLEROMA_DIR + chown -R pleroma:pleroma "$PLEROMA_DIR" fi } @@ -389,269 +389,267 @@ function upgrade_pleroma_frontend { background_url="$3" title="$4" - if [ -d $INSTALL_DIR/pleroma ]; then - set_repo_commit $INSTALL_DIR/pleroma "${app_name} pleroma commit" "$PLEROMA_FRONTEND_COMMIT" $PLEROMA_FRONTEND_REPO - cd $INSTALL_DIR/pleroma + if [ -d "$INSTALL_DIR/pleroma" ]; then + set_repo_commit "$INSTALL_DIR/pleroma" "${app_name} pleroma commit" "$PLEROMA_FRONTEND_COMMIT" "$PLEROMA_FRONTEND_REPO" + cd "$INSTALL_DIR/pleroma" || exit 3468356385 yarn npm run build - if [ ! -d $INSTALL_DIR/pleroma/dist ]; then + if [ ! -d "$INSTALL_DIR/pleroma/dist" ]; then echo 'Unable to build pleroma' exit 268362 fi - basedir=/var/www/${domain_name}/htdocs + basedir="/var/www/${domain_name}/htdocs" if [[ "$app_name" == 'pleroma' ]]; then - basedir=$PLEROMA_DIR/priv/static + basedir="$PLEROMA_DIR/priv/static" fi - if [ -f $basedir/static/logo.png ]; then - cp $basedir/static/logo.png $basedir/static/logo.png.old + if [ -f "$basedir/static/logo.png" ]; then + cp "$basedir/static/logo.png" "$basedir/static/logo.png.old" fi - if [ -f $basedir/static/bg.jpg ]; then - cp $basedir/static/bg.jpg $basedir/static/bg.jpg.old + if [ -f "$basedir/static/bg.jpg" ]; then + cp "$basedir/static/bg.jpg" "$basedir/static/bg.jpg.old" fi - if [ -f $basedir/static/config.json ]; then - cp $basedir/static/config.json $basedir/static/config.json.old + if [ -f "$basedir/static/config.json" ]; then + cp "$basedir/static/config.json" "$basedir/static/config.json.old" fi - cp -r $INSTALL_DIR/pleroma/dist/* $basedir/ - if [ -f $basedir/static/config.json.old ]; then - mv $basedir/static/config.json.old $basedir/static/config.json + cp -r "$INSTALL_DIR/pleroma/dist/*" "$basedir/" + if [ -f "$basedir/static/config.json.old" ]; then + mv "$basedir/static/config.json.old" "$basedir/static/config.json" fi - sed -i "s|\"name\":.*|\"name\": \"${title}\",|g" $basedir/static/config.json - if [ -f $basedir/static/logo.png.old ]; then - cp $basedir/static/logo.png.old $basedir/static/logo.png + sed -i "s|\"name\":.*|\"name\": \"${title}\",|g" "$basedir/static/config.json" + if [ -f "$basedir/static/logo.png.old" ]; then + cp "$basedir/static/logo.png.old" "$basedir/static/logo.png" fi - if [ -f $basedir/static/bg.jpg.old ]; then - cp $basedir/static/bg.jpg.old $basedir/static/bg.jpg + if [ -f "$basedir/static/bg.jpg.old" ]; then + cp "$basedir/static/bg.jpg.old" "$basedir/static/bg.jpg" fi - if [ -f $basedir/index.php ]; then - mv $basedir/index.php $basedir/index_qvitter.php + if [ -f "$basedir/index.php" ]; then + mv "$basedir/index.php" "$basedir/index_qvitter.php" fi - chown -R www-data:www-data $basedir + chown -R www-data:www-data "$basedir" else install_pleroma_front_end "${app_name}" "${domain_name}" "${background_url}" "${title}" fi } function gnusocial_hourly_script { - gnusocial_type=$1 - domain_name=$2 + gnusocial_type="$1" + domain_name="$2" # check that the daemon is running - echo '#!/bin/bash' > /etc/cron.hourly/${gnusocial_type}-daemons - echo -n 'daemon_lines=$(ps aux | grep "' >> /etc/cron.hourly/${gnusocial_type}-daemons - echo -n "${domain_name}" >> /etc/cron.hourly/${gnusocial_type}-daemons - echo '/htdocs/scripts/queuedaemon.php" | grep "/var/www")' >> /etc/cron.hourly/${gnusocial_type}-daemons - echo "cd /var/www/${domain_name}/htdocs" >> /etc/cron.hourly/${gnusocial_type}-daemons - echo 'if [[ $daemon_lines != *"/var/www/"* ]]; then' >> /etc/cron.hourly/${gnusocial_type}-daemons + { echo '#!/bin/bash'; + echo -n "daemon_lines=\$(ps aux | grep \""; + echo -n "${domain_name}"; + echo '/htdocs/scripts/queuedaemon.php" | grep "/var/www")'; + echo "cd /var/www/${domain_name}/htdocs"; + echo "if [[ \$daemon_lines != *\"/var/www/\"* ]]; then"; + echo " ADMIN_USER=\$(cat $COMPLETION_FILE | grep 'Admin user' | awk -F ':' '{print \$2}')"; + echo " MY_EMAIL_ADDRESS=\$ADMIN_USER@$HOSTNAME"; + echo -n " echo \"Restarting ${gnusocial_type} daemons\" | mail -s \"${gnusocial_type} "; + echo "daemons not found\" \$MY_EMAIL_ADDRESS"; + echo ' su -c "sh scripts/startdaemons.sh" -s /bin/sh www-data'; + echo 'fi'; + echo 'php scripts/delete_orphan_files.php > /dev/null'; + echo 'php scripts/clean_thumbnails.php -y > /dev/null'; + echo 'php scripts/clean_file_table.php -y > /dev/null'; + echo 'php scripts/upgrade.php > /dev/null'; } > "/etc/cron.hourly/${gnusocial_type}-daemons" - echo " ADMIN_USER=\$(cat $COMPLETION_FILE | grep 'Admin user' | awk -F ':' '{print \$2}')" >> /etc/cron.hourly/${gnusocial_type}-daemons - echo ' MY_EMAIL_ADDRESS=$ADMIN_USER@$HOSTNAME' >> /etc/cron.hourly/${gnusocial_type}-daemons - echo -n " echo \"Restarting ${gnusocial_type} daemons\" | mail -s \"${gnusocial_type} " >> /etc/cron.hourly/${gnusocial_type}-daemons - echo 'daemons not found" $MY_EMAIL_ADDRESS' >> /etc/cron.hourly/${gnusocial_type}-daemons - echo ' su -c "sh scripts/startdaemons.sh" -s /bin/sh www-data' >> /etc/cron.hourly/${gnusocial_type}-daemons - echo 'fi' >> /etc/cron.hourly/${gnusocial_type}-daemons - - echo 'php scripts/delete_orphan_files.php > /dev/null' >> /etc/cron.hourly/${gnusocial_type}-daemons - echo 'php scripts/clean_thumbnails.php -y > /dev/null' >> /etc/cron.hourly/${gnusocial_type}-daemons - echo 'php scripts/clean_file_table.php -y > /dev/null' >> /etc/cron.hourly/${gnusocial_type}-daemons - echo 'php scripts/upgrade.php > /dev/null' >> /etc/cron.hourly/${gnusocial_type}-daemons - - chmod +x /etc/cron.hourly/${gnusocial_type}-daemons + chmod +x "/etc/cron.hourly/${gnusocial_type}-daemons" } function gnusocial_block_user_script { - echo '#!/bin/bash' > /usr/bin/gnusocial-delete-user - echo '' >> /usr/bin/gnusocial-delete-user - echo 'database_name=$1' >> /usr/bin/gnusocial-delete-user - echo 'remove_user=$2' >> /usr/bin/gnusocial-delete-user - echo 'domain_name=$3' >> /usr/bin/gnusocial-delete-user - echo 'MARIADB_PASSWORD=$(freedombone-pass -u root -a mariadb)' >> /usr/bin/gnusocial-delete-user - echo '' >> /usr/bin/gnusocial-delete-user - echo 'if [ ${#remove_user} -lt 2 ]; then' >> /usr/bin/gnusocial-delete-user - echo ' echo $"No user was specified"' >> /usr/bin/gnusocial-delete-user - echo ' exit 1' >> /usr/bin/gnusocial-delete-user - echo 'fi' >> /usr/bin/gnusocial-delete-user - echo '' >> /usr/bin/gnusocial-delete-user - echo 'if [[ "$remove_user" != *"."* || "$remove_user" != *"@"* ]]; then' >> /usr/bin/gnusocial-delete-user - echo ' echo $"This doesnt look like a user"' >> /usr/bin/gnusocial-delete-user - echo ' exit 2' >> /usr/bin/gnusocial-delete-user - echo 'fi' >> /usr/bin/gnusocial-delete-user - echo '' >> /usr/bin/gnusocial-delete-user - echo 'if [ ${#database_name} -lt 2 ]; then' >> /usr/bin/gnusocial-delete-user - echo ' echo $"No database was specified"' >> /usr/bin/gnusocial-delete-user - echo ' exit 3' >> /usr/bin/gnusocial-delete-user - echo 'fi' >> /usr/bin/gnusocial-delete-user - echo '' >> /usr/bin/gnusocial-delete-user - echo "nickname=\$(echo \"\$remove_user\" | awk -F '@' '{print \$1}')" >> /usr/bin/gnusocial-delete-user - echo "remove_domain=\$(echo \"\$remove_user\" | awk -F '@' '{print \$2}')" >> /usr/bin/gnusocial-delete-user - echo '' >> /usr/bin/gnusocial-delete-user - echo "database_query=\"delete from notice where content REGEXP '\@\${remove_user}';\"" >> /usr/bin/gnusocial-delete-user - echo 'mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-user - echo '' >> /usr/bin/gnusocial-delete-user - echo 'database_query="select profile.id from profile where nickname = '"'"'${nickname}'"'"' and profileurl like '"'"'%${remove_domain}%'"'"';"' >> /usr/bin/gnusocial-delete-user - echo 'declare -a ids=$(mysql -u root --password="$MARIADB_PASSWORD" << EOF' >> /usr/bin/gnusocial-delete-user - echo 'use $database_name;' >> /usr/bin/gnusocial-delete-user - echo '$database_query' >> /usr/bin/gnusocial-delete-user - echo 'EOF' >> /usr/bin/gnusocial-delete-user - echo ')' >> /usr/bin/gnusocial-delete-user - echo '' >> /usr/bin/gnusocial-delete-user - echo 'ctr=0' >> /usr/bin/gnusocial-delete-user - echo 'for id in $ids' >> /usr/bin/gnusocial-delete-user - echo 'do' >> /usr/bin/gnusocial-delete-user - echo ' if [ $ctr -gt 0 ]; then' >> /usr/bin/gnusocial-delete-user - echo ' #echo "Removing user ID $id on $remove_domain"' >> /usr/bin/gnusocial-delete-user - echo '' >> /usr/bin/gnusocial-delete-user - echo ' database_query="delete from reply where profile_id=${id};"' >> /usr/bin/gnusocial-delete-user - echo ' mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-user - echo '' >> /usr/bin/gnusocial-delete-user - echo ' database_query="delete from reply where replied_id=${id};"' >> /usr/bin/gnusocial-delete-user - echo ' mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-user - echo '' >> /usr/bin/gnusocial-delete-user - echo ' if [ $domain_name ]; then' >> /usr/bin/gnusocial-delete-user - echo ' database_query="select rendered from notice where profile_id=${id} and rendered like '"'"'%/file/%'"'"';"' >> /usr/bin/gnusocial-delete-user - echo ' declare -a stored_files=$(mysql -u root --password="$MARIADB_PASSWORD" << EOF' >> /usr/bin/gnusocial-delete-user - echo 'use $database_name;' >> /usr/bin/gnusocial-delete-user - echo '$database_query' >> /usr/bin/gnusocial-delete-user - echo 'EOF' >> /usr/bin/gnusocial-delete-user - echo ')' >> /usr/bin/gnusocial-delete-user - echo -n " files_to_delete=\$(echo \"\$stored_files\" | " >> /usr/bin/gnusocial-delete-user - echo 'sed -n '"'"'s/.*href="\([^"]*\).*/\1/p'"'"' | awk -F '"'"'file/'"'"' '"'"'{print $2}'"'"')' >> /usr/bin/gnusocial-delete-user - echo ' filectr=0' >> /usr/bin/gnusocial-delete-user - echo ' for f in $files_to_delete' >> /usr/bin/gnusocial-delete-user - echo ' do' >> /usr/bin/gnusocial-delete-user - echo ' if [ $filectr -gt 0 ]; then' >> /usr/bin/gnusocial-delete-user - echo ' if $(ls /var/www/${domain_name}/htdocs/file/*${f}* 1> /dev/null 2>&1); then' >> /usr/bin/gnusocial-delete-user - echo ' rm /var/www/${domain_name}/htdocs/file/*${f}*' >> /usr/bin/gnusocial-delete-user - echo ' fi' >> /usr/bin/gnusocial-delete-user - echo ' fi' >> /usr/bin/gnusocial-delete-user - echo ' filectr=$((filectr + 1))' >> /usr/bin/gnusocial-delete-user - echo ' done' >> /usr/bin/gnusocial-delete-user - echo ' fi' >> /usr/bin/gnusocial-delete-user - echo '' >> /usr/bin/gnusocial-delete-user - echo ' database_query="delete from notice where profile_id=${id};"' >> /usr/bin/gnusocial-delete-user - echo ' mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-user - echo '' >> /usr/bin/gnusocial-delete-user - echo ' database_query="delete from profile where id=${id};"' >> /usr/bin/gnusocial-delete-user - echo ' mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-user - echo '' >> /usr/bin/gnusocial-delete-user - echo ' database_query="delete from qvitternotification where to_profile_id=${id} or from_profile_id=${id};"' >> /usr/bin/gnusocial-delete-user - echo ' mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-user - echo ' fi' >> /usr/bin/gnusocial-delete-user - echo ' ctr=$((ctr + 1))' >> /usr/bin/gnusocial-delete-user - echo 'done' >> /usr/bin/gnusocial-delete-user + { echo '#!/bin/bash'; + echo ''; + echo "database_name=\$1"; + echo "remove_user=\$2"; + echo "domain_name=\$3"; + echo "MARIADB_PASSWORD=\$(freedombone-pass -u root -a mariadb)"; + echo ''; + echo "if [ \${#remove_user} -lt 2 ]; then"; + echo ' echo $"No user was specified"'; + echo ' exit 1'; + echo 'fi'; + echo ''; + echo "if [[ \"\$remove_user\" != *\".\"* || \"\$remove_user\" != *\"@\"* ]]; then"; + echo ' echo $"This doesnt look like a user"'; + echo ' exit 2'; + echo 'fi'; + echo ''; + echo "if [ \${#database_name} -lt 2 ]; then"; + echo ' echo $"No database was specified"'; + echo ' exit 3'; + echo 'fi'; + echo ''; + echo "nickname=\$(echo \"\$remove_user\" | awk -F '@' '{print \$1}')"; + echo "remove_domain=\$(echo \"\$remove_user\" | awk -F '@' '{print \$2}')"; + echo ''; + echo "database_query=\"delete from notice where content REGEXP '\\@\${remove_user}';\""; + echo "mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name"; + echo ''; + echo "database_query=\"select profile.id from profile where nickname = '\${nickname}' and profileurl like '%\${remove_domain}%';\""; + echo "declare -a ids=\$(mysql -u root --password=\"\$MARIADB_PASSWORD\" << EOF"; + echo "use \$database_name;"; + echo "\$database_query"; + echo 'EOF'; + echo ')'; + echo ''; + echo 'ctr=0'; + echo "for id in \$ids"; + echo 'do'; + echo " if [ \$ctr -gt 0 ]; then"; + echo " #echo \"Removing user ID \$id on \$remove_domain\""; + echo ''; + echo " database_query=\"delete from reply where profile_id=\${id};\""; + echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name"; + echo ''; + echo " database_query=\"delete from reply where replied_id=\${id};\""; + echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name"; + echo ''; + echo " if [ \$domain_name ]; then"; + echo " database_query=\"select rendered from notice where profile_id=\${id} and rendered like '%/file/%';\""; + echo " declare -a stored_files=\$(mysql -u root --password=\"\$MARIADB_PASSWORD\" << EOF"; + echo "use \$database_name;"; + echo "\$database_query"; + echo 'EOF'; + echo ')'; + echo -n " files_to_delete=\$(echo \"\$stored_files\" | "; + echo "sed -n 's/.*href=\"\\([^\"]*\\).*/\\1/p' | awk -F 'file/' '{print \$2}')"; + echo ' filectr=0'; + echo " for f in \$files_to_delete"; + echo ' do'; + echo " if [ \$filectr -gt 0 ]; then"; + echo " if \$(ls /var/www/\${domain_name}/htdocs/file/*\${f}* 1> /dev/null 2>&1); then"; + echo " rm /var/www/\${domain_name}/htdocs/file/*\${f}*"; + echo ' fi'; + echo ' fi'; + echo " filectr=\$((filectr + 1))"; + echo ' done'; + echo ' fi'; + echo ''; + echo " database_query=\"delete from notice where profile_id=\${id};\""; + echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name"; + echo ''; + echo " database_query=\"delete from profile where id=\${id};\""; + echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name"; + echo ''; + echo " database_query=\"delete from qvitternotification where to_profile_id=\${id} or from_profile_id=\${id};\""; + echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name"; + echo ' fi'; + echo " ctr=\$((ctr + 1))"; + echo 'done'; } > /usr/bin/gnusocial-delete-user chmod +x /usr/bin/gnusocial-delete-user } function gnusocial_block_domain_script { - database_name=$1 - gnusoc_domain=$2 + database_name="$1" + gnusoc_domain="$2" - echo '#!/bin/bash' > /usr/bin/gnusocial-delete-domain - echo '' >> /usr/bin/gnusocial-delete-domain - echo 'database_name=$1' >> /usr/bin/gnusocial-delete-domain - echo 'remove_domain=$2' >> /usr/bin/gnusocial-delete-domain - echo 'domain_name=$3' >> /usr/bin/gnusocial-delete-domain - echo "MARIADB_PASSWORD=\$(${PROJECT_NAME}-pass -u root -a mariadb)" >> /usr/bin/gnusocial-delete-domain - echo '' >> /usr/bin/gnusocial-delete-domain - echo 'if [ ${#remove_domain} -lt 2 ]; then' >> /usr/bin/gnusocial-delete-domain - echo ' echo $"No domain was specified"' >> /usr/bin/gnusocial-delete-domain - echo ' exit 1' >> /usr/bin/gnusocial-delete-domain - echo 'fi' >> /usr/bin/gnusocial-delete-domain - echo '' >> /usr/bin/gnusocial-delete-domain - echo 'if [[ "$remove_domain" != *"."* ]]; then' >> /usr/bin/gnusocial-delete-domain - echo ' echo $"This doesnt look like a domain"' >> /usr/bin/gnusocial-delete-domain - echo ' exit 2' >> /usr/bin/gnusocial-delete-domain - echo 'fi' >> /usr/bin/gnusocial-delete-domain - echo '' >> /usr/bin/gnusocial-delete-domain - echo 'if [ ${#database_name} -lt 2 ]; then' >> /usr/bin/gnusocial-delete-domain - echo ' echo $"No database was specified"' >> /usr/bin/gnusocial-delete-domain - echo ' exit 3' >> /usr/bin/gnusocial-delete-domain - echo 'fi' >> /usr/bin/gnusocial-delete-domain - echo '' >> /usr/bin/gnusocial-delete-domain - echo "database_query=\"select profile.id from profile where profileurl like '%\${remove_domain}%';\"" >> /usr/bin/gnusocial-delete-domain - echo 'declare -a ids=$(mysql -u root --password="$MARIADB_PASSWORD" << EOF' >> /usr/bin/gnusocial-delete-domain - echo 'use $database_name;' >> /usr/bin/gnusocial-delete-domain - echo '$database_query' >> /usr/bin/gnusocial-delete-domain - echo 'EOF' >> /usr/bin/gnusocial-delete-domain - echo ')' >> /usr/bin/gnusocial-delete-domain - echo '' >> /usr/bin/gnusocial-delete-domain - echo 'ctr=0' >> /usr/bin/gnusocial-delete-domain - echo 'for id in $ids' >> /usr/bin/gnusocial-delete-domain - echo 'do' >> /usr/bin/gnusocial-delete-domain - echo ' if [ $ctr -gt 0 ]; then' >> /usr/bin/gnusocial-delete-domain - echo ' #echo "Removing user ID $id on $remove_domain"' >> /usr/bin/gnusocial-delete-domain - echo '' >> /usr/bin/gnusocial-delete-domain - echo " database_query=\"delete from conversation where uri like '%\${remove_domain}%';\"" >> /usr/bin/gnusocial-delete-domain - echo ' mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-domain - echo '' >> /usr/bin/gnusocial-delete-domain - echo ' database_query="delete from reply where profile_id=${id};"' >> /usr/bin/gnusocial-delete-domain - echo ' mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-domain - echo '' >> /usr/bin/gnusocial-delete-domain - echo ' database_query="delete from reply where replied_id=${id};"' >> /usr/bin/gnusocial-delete-domain - echo ' mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-domain - echo '' >> /usr/bin/gnusocial-delete-domain - echo ' if [ $domain_name ]; then' >> /usr/bin/gnusocial-delete-domain - echo ' database_query="select rendered from notice where profile_id=${id} and rendered like '"'"'%/file/%'"'"';"' >> /usr/bin/gnusocial-delete-domain - echo ' declare -a stored_files=$(mysql -u root --password="$MARIADB_PASSWORD" << EOF' >> /usr/bin/gnusocial-delete-domain - echo 'use $database_name;' >> /usr/bin/gnusocial-delete-domain - echo '$database_query' >> /usr/bin/gnusocial-delete-domain - echo 'EOF' >> /usr/bin/gnusocial-delete-domain - echo ')' >> /usr/bin/gnusocial-delete-domain - echo -n " files_to_delete=\$(echo \"\$stored_files\" | " >> /usr/bin/gnusocial-delete-domain - echo 'sed -n '"'"'s/.*href="\([^"]*\).*/\1/p'"'"' | awk -F '"'"'file/'"'"' '"'"'{print $2}'"'"')' >> /usr/bin/gnusocial-delete-domain - echo ' filectr=0' >> /usr/bin/gnusocial-delete-domain - echo ' for f in $files_to_delete' >> /usr/bin/gnusocial-delete-domain - echo ' do' >> /usr/bin/gnusocial-delete-domain - echo ' if [ $filectr -gt 0 ]; then' >> /usr/bin/gnusocial-delete-domain - echo ' if $(ls /var/www/${domain_name}/htdocs/file/*${f}* 1> /dev/null 2>&1); then' >> /usr/bin/gnusocial-delete-domain - echo ' rm /var/www/${domain_name}/htdocs/file/*${f}*' >> /usr/bin/gnusocial-delete-domain - echo ' fi' >> /usr/bin/gnusocial-delete-domain - echo ' fi' >> /usr/bin/gnusocial-delete-domain - echo ' filectr=$((filectr + 1))' >> /usr/bin/gnusocial-delete-domain - echo ' done' >> /usr/bin/gnusocial-delete-domain - echo ' fi' >> /usr/bin/gnusocial-delete-domain - echo '' >> /usr/bin/gnusocial-delete-domain - echo ' database_query="delete from notice where profile_id=${id};"' >> /usr/bin/gnusocial-delete-domain - echo ' mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-domain - echo '' >> /usr/bin/gnusocial-delete-domain - echo ' database_query="delete from profile where id=${id};"' >> /usr/bin/gnusocial-delete-domain - echo ' mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-domain - echo '' >> /usr/bin/gnusocial-delete-domain - echo ' database_query="delete from qvitternotification where to_profile_id=${id} or from_profile_id=${id};"' >> /usr/bin/gnusocial-delete-domain - echo ' mysql -u root --password="$MARIADB_PASSWORD" -e "$database_query" $database_name' >> /usr/bin/gnusocial-delete-domain - echo ' fi' >> /usr/bin/gnusocial-delete-domain - echo ' ctr=$((ctr + 1))' >> /usr/bin/gnusocial-delete-domain - echo 'done' >> /usr/bin/gnusocial-delete-domain + { echo '#!/bin/bash'; + echo ''; + echo "database_name=\$1"; + echo "remove_domain=\$2"; + echo "domain_name=\$3"; + echo "MARIADB_PASSWORD=\$(${PROJECT_NAME}-pass -u root -a mariadb)"; + echo ''; + echo "if [ \${#remove_domain} -lt 2 ]; then"; + echo ' echo $"No domain was specified"'; + echo ' exit 1'; + echo 'fi'; + echo ''; + echo "if [[ \"\$remove_domain\" != *\".\"* ]]; then"; + echo ' echo $"This doesnt look like a domain"'; + echo ' exit 2'; + echo 'fi'; + echo ''; + echo "if [ \${#database_name} -lt 2 ]; then"; + echo ' echo $"No database was specified"'; + echo ' exit 3'; + echo 'fi'; + echo ''; + echo "database_query=\"select profile.id from profile where profileurl like '%\${remove_domain}%';\""; + echo "declare -a ids=\$(mysql -u root --password=\"\$MARIADB_PASSWORD\" << EOF"; + echo "use \$database_name;"; + echo "\$database_query"; + echo 'EOF'; + echo ')'; + echo ''; + echo 'ctr=0'; + echo "for id in \$ids"; + echo 'do'; + echo " if [ \$ctr -gt 0 ]; then"; + echo " #echo \"Removing user ID \$id on \$remove_domain\""; + echo ''; + echo " database_query=\"delete from conversation where uri like '%\${remove_domain}%';\""; + echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name"; + echo ''; + echo " database_query=\"delete from reply where profile_id=\${id};\""; + echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" $database_name"; + echo ''; + echo " database_query=\"delete from reply where replied_id=\${id};\""; + echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name"; + echo ''; + echo " if [ \$domain_name ]; then"; + echo " database_query=\"select rendered from notice where profile_id=\${id} and rendered like '%/file/%';\""; + echo " declare -a stored_files=\$(mysql -u root --password=\"\$MARIADB_PASSWORD\" << EOF"; + echo "use \$database_name;"; + echo "\$database_query"; + echo 'EOF'; + echo ')'; + echo -n " files_to_delete=\$(echo \"\$stored_files\" | "; + echo "sed -n 's/.*href=\"\\([^\"]*\\).*/\\1/p' | awk -F 'file/' '{print \$2}')"; + echo ' filectr=0'; + echo " for f in \$files_to_delete"; + echo ' do'; + echo " if [ \$filectr -gt 0 ]; then"; + echo " if \$(ls /var/www/\${domain_name}/htdocs/file/*\${f}* 1> /dev/null 2>&1); then"; + echo " rm /var/www/\${domain_name}/htdocs/file/*\${f}*"; + echo ' fi'; + echo ' fi'; + echo " filectr=\$((filectr + 1))"; + echo ' done'; + echo ' fi'; + echo ''; + echo " database_query=\"delete from notice where profile_id=\${id};\""; + echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" $database_name"; + echo ''; + echo " database_query=\"delete from profile where id=\${id};\""; + echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name"; + echo ''; + echo " database_query=\"delete from qvitternotification where to_profile_id=\${id} or from_profile_id=\${id};\""; + echo " mysql -u root --password=\"\$MARIADB_PASSWORD\" -e \"\$database_query\" \$database_name"; + echo ' fi'; + echo " ctr=\$((ctr + 1))"; + echo 'done'; } > /usr/bin/gnusocial-delete-domain chmod +x /usr/bin/gnusocial-delete-domain - echo '#!/bin/bash' > /usr/bin/${database_name}-firewall - echo '' >> /usr/bin/${database_name}-firewall - echo "PROJECT_NAME=$PROJECT_NAME" >> /usr/bin/${database_name}-firewall - echo "GNUSOCIAL_DOMAIN_NAME=$gnusoc_domain" >> /usr/bin/${database_name}-firewall - echo "database_name=$database_name" >> /usr/bin/${database_name}-firewall - echo 'FIREWALL_DOMAINS=$HOME/${PROJECT_NAME}-firewall-domains.cfg' >> /usr/bin/${database_name}-firewall - echo '' >> /usr/bin/${database_name}-firewall - echo 'while read block; do' >> /usr/bin/${database_name}-firewall - echo ' if [[ "$block" != *"@"* ]]; then' >> /usr/bin/${database_name}-firewall - echo ' /usr/bin/gnusocial-delete-domain "$database_name" "$block" "$GNUSOCIAL_DOMAIN_NAME"' >> /usr/bin/${database_name}-firewall - echo ' else' >> /usr/bin/${database_name}-firewall - echo ' /usr/bin/gnusocial-delete-user "$database_name" "$block" "$GNUSOCIAL_DOMAIN_NAME"' >> /usr/bin/${database_name}-firewall - echo ' fi' >> /usr/bin/${database_name}-firewall - echo 'done <$FIREWALL_DOMAINS' >> /usr/bin/${database_name}-firewall - echo '' >> /usr/bin/${database_name}-firewall - echo '# remove any metadata from images uploaded in the last 2 minutes' >> /usr/bin/${database_name}-firewall - echo 'if [ -d /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs ]; then' >> /usr/bin/${database_name}-firewall - echo ' cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs' >> /usr/bin/${database_name}-firewall - echo ' declare -a recent_image=$(find file ! -name thumb-* -mmin -2 -type f -exec ls -l {} + | awk -F '"'"'file/'"'"' '"'"'{print $2}'"'"')' >> /usr/bin/${database_name}-firewall - echo ' for f in ${recent_image[@]}' >> /usr/bin/${database_name}-firewall - echo ' do' >> /usr/bin/${database_name}-firewall - echo ' if [ ${#f} -gt 1 ]; then' >> /usr/bin/${database_name}-firewall - echo ' exiftool -q -all= "file/${f}"' >> /usr/bin/${database_name}-firewall - echo ' fi' >> /usr/bin/${database_name}-firewall - echo ' done' >> /usr/bin/${database_name}-firewall - echo 'fi' >> /usr/bin/${database_name}-firewall - chmod +x /usr/bin/${database_name}-firewall + { echo '#!/bin/bash'; + echo ''; + echo "PROJECT_NAME=$PROJECT_NAME"; + echo "GNUSOCIAL_DOMAIN_NAME=$gnusoc_domain"; + echo "database_name=$database_name"; + echo "FIREWALL_DOMAINS=\$HOME/\${PROJECT_NAME}-firewall-domains.cfg"; + echo ''; + echo 'while read block; do'; + echo " if [[ \"\$block\" != *\"@\"* ]]; then"; + echo " /usr/bin/gnusocial-delete-domain \"\$database_name\" \"\$block\" \"\$GNUSOCIAL_DOMAIN_NAME\""; + echo ' else'; + echo " /usr/bin/gnusocial-delete-user \"\$database_name\" \"\$block\" \"\$GNUSOCIAL_DOMAIN_NAME\""; + echo ' fi'; + echo "done <\$FIREWALL_DOMAINS"; + echo ''; + echo '# remove any metadata from images uploaded in the last 2 minutes'; + echo "if [ -d /var/www/\$GNUSOCIAL_DOMAIN_NAME/htdocs ]; then"; + echo " cd /var/www/\$GNUSOCIAL_DOMAIN_NAME/htdocs"; + echo " declare -a recent_image=\$(find file ! -name thumb-* -mmin -2 -type f -exec ls -l {} + | awk -F 'file/' '{print \$2}')"; + echo " for f in \${recent_image[@]}"; + echo ' do'; + echo " if [ \${#f} -gt 1 ]; then"; + echo " exiftool -q -all= \"file/\${f}\""; + echo ' fi'; + echo ' done'; + echo 'fi'; } > "/usr/bin/${database_name}-firewall" + chmod +x "/usr/bin/${database_name}-firewall" if ! grep -q "${database_name}-firewall" /etc/crontab; then cron_add_mins 1 "/usr/bin/${database_name}-firewall" @@ -659,81 +657,80 @@ function gnusocial_block_domain_script { } function expire_gnusocial_posts { - domain_name=$1 - gnusocial_type=$2 - expire_months=$3 + domain_name="$1" + gnusocial_type="$2" + expire_months="$3" - if [ ! $expire_months ]; then + if [ ! "$expire_months" ]; then expire_months=3 fi - expire_days=$((expire_months * 30)) + #expire_days=$((expire_months * 30)) # files are what take up most of the backup time, so don't keep them for very long expire_days_files=7 # To prevent the database size from growing endlessly this script expires posts # after a number of months - if [ ! -d /var/www/${domain_name}/htdocs ]; then + if [ ! -d "/var/www/${domain_name}/htdocs" ]; then return fi - gnusocial_expire_posts_script=/usr/bin/${gnusocial_type}-expire-posts + gnusocial_expire_posts_script="/usr/bin/${gnusocial_type}-expire-posts" - echo ' $gnusocial_expire_posts_script - echo '' >> $gnusocial_expire_posts_script - echo "// ${gnusocial_type} post expiry script, based on StatExpire by Tony Baldwin" >> $gnusocial_expire_posts_script - echo '// https://github.com/tonybaldwin/statexpire' >> $gnusocial_expire_posts_script - echo '' >> $gnusocial_expire_posts_script - echo "\$oldate=date((\"Y-m-d\"), strtotime(\"-${expire_months} months\"));" >> $gnusocial_expire_posts_script - echo '$username="root";' >> $gnusocial_expire_posts_script - echo "\$password=shell_exec('${PROJECT_NAME}-pass -u root -a mariadb');" >> $gnusocial_expire_posts_script - echo "\$database=\"${gnusocial_type}\";" >> $gnusocial_expire_posts_script - echo '' >> $gnusocial_expire_posts_script - echo 'if (!$link = mysqli_connect("localhost", $username, $password)) {' >> $gnusocial_expire_posts_script - echo ' echo "Could not connect to mariadb";' >> $gnusocial_expire_posts_script - echo ' exit;' >> $gnusocial_expire_posts_script - echo '}' >> $gnusocial_expire_posts_script - echo '' >> $gnusocial_expire_posts_script - echo 'if (!mysqli_select_db($link, $database)) {' >> $gnusocial_expire_posts_script - echo " echo \"Could not select ${gnusocial_type} database\";" >> $gnusocial_expire_posts_script - echo ' exit;' >> $gnusocial_expire_posts_script - echo '}' >> $gnusocial_expire_posts_script - echo '' >> $gnusocial_expire_posts_script - echo "\$notice_query=\"DELETE FROM notice WHERE created <= '\$oldate 01:01:01'\";" >> $gnusocial_expire_posts_script - echo "\$conversation_query=\"DELETE FROM conversation WHERE created <= '$oldate 01:01:01'\";" >> $gnusocial_expire_posts_script - echo "\$reply_query=\"DELETE FROM reply WHERE modified <= '\$oldate 01:01:01'\";" >> $gnusocial_expire_posts_script - echo "\$notification_query=\"DELETE FROM qvitternotification WHERE created <= '\$oldate 01:01:01'\";" >> $gnusocial_expire_posts_script - echo '' >> $gnusocial_expire_posts_script - echo 'mysqli_query($link, $notice_query);' >> $gnusocial_expire_posts_script - echo '$rowaff1=mysqli_affected_rows($link);' >> $gnusocial_expire_posts_script - echo 'mysqli_query($link, $conversation_query);' >> $gnusocial_expire_posts_script - echo '$rowaff2=mysqli_affected_rows($link);' >> $gnusocial_expire_posts_script - echo 'mysqli_query($link, $reply_query);' >> $gnusocial_expire_posts_script - echo '$rowaff3=mysqli_affected_rows($link);' >> $gnusocial_expire_posts_script - echo 'mysqli_query($link, $notification_query);' >> $gnusocial_expire_posts_script - echo '$rowaff4=mysqli_affected_rows($link);' >> $gnusocial_expire_posts_script - echo 'mysqli_close($link);' >> $gnusocial_expire_posts_script - echo '' >> $gnusocial_expire_posts_script - echo -n "echo \"Expire ${gnusocial_type} posts: " >> $gnusocial_expire_posts_script - echo '$rowaff1 notices, $rowaff2 conversations, $rowaff3 replies, and $rowaff4 qvitter notifications deleted from database.\n";' >> $gnusocial_expire_posts_script - chmod +x $gnusocial_expire_posts_script + { echo ' "$gnusocial_expire_posts_script" + chmod +x "$gnusocial_expire_posts_script" - gnusocial_expire_script=/etc/cron.daily/${gnusocial_type}-expire - echo '#!/bin/bash' > $gnusocial_expire_script - echo "find /var/www/${domain_name}/htdocs/file/* -mtime +${expire_days_files} -exec rm {} +" >> $gnusocial_expire_script - echo "/usr/bin/php $gnusocial_expire_posts_script" >> $gnusocial_expire_script - chmod +x $gnusocial_expire_script + gnusocial_expire_script="/etc/cron.daily/${gnusocial_type}-expire" + { echo '#!/bin/bash'; + echo "find /var/www/${domain_name}/htdocs/file/* -mtime +${expire_days_files} -exec rm {} +"; + echo "/usr/bin/php $gnusocial_expire_posts_script"; } > "$gnusocial_expire_script" + chmod +x "$gnusocial_expire_script" # remove any old cron job if grep -q "${gnusocial_type}-expire" /etc/crontab; then sed -i "/${gnusocial_type}-expire/d" /etc/crontab - rm /usr/bin/${gnusocial_type}-expire + rm "/usr/bin/${gnusocial_type}-expire" fi # remove old expire script - if [ -f /etc/cron.weekly/clear-${gnusocial_type}-database ]; then - rm /etc/cron.weekly/clear-${gnusocial_type}-database + if [ -f "/etc/cron.weekly/clear-${gnusocial_type}-database" ]; then + rm "/etc/cron.weekly/clear-${gnusocial_type}-database" fi } @@ -742,20 +739,20 @@ function gnusocial_use_classic { domain_name=$(get_completion_param "$database_name domain") - if [ -f /var/www/$domain_name/htdocs/index_qvitter.php ]; then - mv /var/www/$domain_name/htdocs/index_qvitter.php /var/www/$domain_name/htdocs/index.php + if [ -f "/var/www/$domain_name/htdocs/index_qvitter.php" ]; then + mv "/var/www/$domain_name/htdocs/index_qvitter.php" "/var/www/$domain_name/htdocs/index.php" fi - if [ -f /etc/nginx/sites-available/$domain_name ]; then - sed -i 's|index_qvitter.php|index.php|g' /etc/nginx/sites-available/$domain_name - sed -i 's|index.html|index.php|g' /etc/nginx/sites-available/$domain_name + if [ -f "/etc/nginx/sites-available/$domain_name" ]; then + sed -i 's|index_qvitter.php|index.php|g' "/etc/nginx/sites-available/$domain_name" + sed -i 's|index.html|index.php|g' "/etc/nginx/sites-available/$domain_name" fi - if ! grep -q "//addPlugin('Qvitter')" /var/www/$domain_name/htdocs/config.php; then - sed -i "s|// addPlugin('Qvitter')|addPlugin('Qvitter')|g" /var/www/$domain_name/htdocs/config.php - sed -i "s|addPlugin('Qvitter')|//addPlugin('Qvitter')|g" /var/www/$domain_name/htdocs/config.php + if ! grep -q "//addPlugin('Qvitter')" "/var/www/$domain_name/htdocs/config.php"; then + sed -i "s|// addPlugin('Qvitter')|addPlugin('Qvitter')|g" "/var/www/$domain_name/htdocs/config.php" + sed -i "s|addPlugin('Qvitter')|//addPlugin('Qvitter')|g" "/var/www/$domain_name/htdocs/config.php" fi - chown -R www-data:www-data /var/www/${domain_name}/htdocs + chown -R www-data:www-data "/var/www/${domain_name}/htdocs" systemctl restart nginx } @@ -765,132 +762,132 @@ function gnusocial_use_qvitter { domain_name=$(get_completion_param "$database_name domain") - if [ -f /var/www/$domain_name/htdocs/index_qvitter.php ]; then - mv /var/www/$domain_name/htdocs/index_qvitter.php /var/www/$domain_name/htdocs/index.php + if [ -f "/var/www/$domain_name/htdocs/index_qvitter.php" ]; then + mv "/var/www/$domain_name/htdocs/index_qvitter.php" "/var/www/$domain_name/htdocs/index.php" fi - if [ -f /etc/nginx/sites-available/$domain_name ]; then - sed -i 's|index_qvitter.php|index.php|g' /etc/nginx/sites-available/$domain_name - sed -i 's|index.html|index.php|g' /etc/nginx/sites-available/$domain_name + if [ -f "/etc/nginx/sites-available/$domain_name" ]; then + sed -i 's|index_qvitter.php|index.php|g' "/etc/nginx/sites-available/$domain_name" + sed -i 's|index.html|index.php|g' "/etc/nginx/sites-available/$domain_name" fi - if grep -q "//addPlugin('Qvitter')" /var/www/$domain_name/htdocs/config.php; then - sed -i "s|//addPlugin('Qvitter')|addPlugin('Qvitter')|g" /var/www/$domain_name/htdocs/config.php + if grep -q "//addPlugin('Qvitter')" "/var/www/$domain_name/htdocs/config.php"; then + sed -i "s|//addPlugin('Qvitter')|addPlugin('Qvitter')|g" "/var/www/$domain_name/htdocs/config.php" fi - if grep -q "// addPlugin('Qvitter')" /var/www/$domain_name/htdocs/config.php; then - sed -i "s|// addPlugin('Qvitter')|addPlugin('Qvitter')|g" /var/www/$domain_name/htdocs/config.php + if grep -q "// addPlugin('Qvitter')" "/var/www/$domain_name/htdocs/config.php"; then + sed -i "s|// addPlugin('Qvitter')|addPlugin('Qvitter')|g" "/var/www/$domain_name/htdocs/config.php" fi - chown -R www-data:www-data /var/www/${domain_name}/htdocs + chown -R www-data:www-data "/var/www/${domain_name}/htdocs" systemctl restart nginx systemctl restart php7.0-fpm } function gnusocial_use_pleroma { - database_name=$1 + database_name="$1" domain_name=$(get_completion_param "$database_name domain") - if [ ! -d /var/www/$domain_name/htdocs/static ]; then + if [ ! -d "/var/www/$domain_name/htdocs/static" ]; then return fi - if [ -f /var/www/$domain_name/htdocs/index.php ]; then - mv /var/www/$domain_name/htdocs/index.php /var/www/$domain_name/htdocs/index_qvitter.php + if [ -f "/var/www/$domain_name/htdocs/index.php" ]; then + mv "/var/www/$domain_name/htdocs/index.php" "/var/www/$domain_name/htdocs/index_qvitter.php" fi - if [ -f /etc/nginx/sites-available/$domain_name ]; then - sed -i 's|index.php|index_qvitter.php|g' /etc/nginx/sites-available/$domain_name - sed -i 's|index index_qvitter.php|index index.html|g' /etc/nginx/sites-available/$domain_name + if [ -f "/etc/nginx/sites-available/$domain_name" ]; then + sed -i 's|index.php|index_qvitter.php|g' "/etc/nginx/sites-available/$domain_name" + sed -i 's|index index_qvitter.php|index index.html|g' "/etc/nginx/sites-available/$domain_name" fi - if grep -q "//addPlugin('Qvitter')" /var/www/$domain_name/htdocs/config.php; then - sed -i "s|//addPlugin('Qvitter')|addPlugin('Qvitter')|g" /var/www/$domain_name/htdocs/config.php + if grep -q "//addPlugin('Qvitter')" "/var/www/$domain_name/htdocs/config.php"; then + sed -i "s|//addPlugin('Qvitter')|addPlugin('Qvitter')|g" "/var/www/$domain_name/htdocs/config.php" fi - if grep -q "// addPlugin('Qvitter')" /var/www/$domain_name/htdocs/config.php; then - sed -i "s|// addPlugin('Qvitter')|addPlugin('Qvitter')|g" /var/www/$domain_name/htdocs/config.php + if grep -q "// addPlugin('Qvitter')" "/var/www/$domain_name/htdocs/config.php"; then + sed -i "s|// addPlugin('Qvitter')|addPlugin('Qvitter')|g" "/var/www/$domain_name/htdocs/config.php" fi - cp $INSTALL_DIR/pleroma/dist/index.html /var/www/${domain_name}/htdocs/index.html + cp "$INSTALL_DIR/pleroma/dist/index.html" "/var/www/${domain_name}/htdocs/index.html" chmod +x static/css chmod +x static/font chmod +x static/font/css chmod +x static/font/font chmod +x static/js chmod +x static - chown -R www-data:www-data /var/www/${domain_name}/htdocs + chown -R www-data:www-data "/var/www/${domain_name}/htdocs" systemctl restart nginx } function install_gnusocial_plugin_sharings { - domain_name=$1 - social_app_name=$2 + domain_name="$1" + social_app_name="$2" - if [ ! -d /var/www/$domain_name/htdocs/local/plugins ]; then - mkdir -p /var/www/$domain_name/htdocs/local/plugins + if [ ! -d "/var/www/$domain_name/htdocs/local/plugins" ]; then + mkdir -p "/var/www/$domain_name/htdocs/local/plugins" fi apt-get -yq install liblocale-msgfmt-perl gettext # update to the next commit function_check set_repo_commit - set_repo_commit /var/www/$domain_name/htdocs/local/plugins/Sharings "$social_app_name sharings plugin commit" "$SHARINGS_COMMIT" $SHARINGS_REPO + set_repo_commit "/var/www/$domain_name/htdocs/local/plugins/Sharings" "$social_app_name sharings plugin commit" "$SHARINGS_COMMIT" "$SHARINGS_REPO" - if [[ $(app_is_installed ${social_app_name}_plugin_sharings) == "1" ]]; then + if [[ $(app_is_installed "${social_app_name}_plugin_sharings") == "1" ]]; then return fi - cd /var/www/$domain_name/htdocs/local/plugins + cd "/var/www/$domain_name/htdocs/local/plugins" || exit 28746245 if [ -d /repos/sharings ]; then mkdir Sharings cp -r -p /repos/sharings/. Sharings - cd Sharings + cd Sharings || exit 25762454 git pull else function_check git_clone - git_clone $SHARINGS_REPO Sharings + git_clone "$SHARINGS_REPO" Sharings fi - if [ ! -d /var/www/$domain_name/htdocs/local/plugins/Sharings ]; then + if [ ! -d "/var/www/$domain_name/htdocs/local/plugins/Sharings" ]; then echo $"Unable to clone $social_app_name sharings plugin" exit 36738 fi - cd /var/www/$domain_name/htdocs/local/plugins/Sharings + cd "/var/www/$domain_name/htdocs/local/plugins/Sharings" || exit 2846244 git stash git checkout master - git branch -D $SHARINGS_COMMIT - git checkout $SHARINGS_COMMIT -b $SHARINGS_COMMIT + git branch -D "$SHARINGS_COMMIT" + git checkout "$SHARINGS_COMMIT" -b "$SHARINGS_COMMIT" # enable the plugin - if ! grep -q "addPlugin('Sharings');" /var/www/$domain_name/htdocs/config.php; then - echo "addPlugin('Sharings');" >> /var/www/$domain_name/htdocs/config.php + if ! grep -q "addPlugin('Sharings');" "/var/www/$domain_name/htdocs/config.php"; then + echo "addPlugin('Sharings');" >> "/var/www/$domain_name/htdocs/config.php" fi - cd /var/www/$domain_name/htdocs + cd "/var/www/$domain_name/htdocs" || exit 2684624874 php scripts/checkschema.php - cd /var/www/$domain_name/htdocs/local/plugins/Sharings + cd "/var/www/$domain_name/htdocs/local/plugins/Sharings" || exit 246824684 php scripts/seedsharings.php - cd /var/www/$domain_name/htdocs + cd "/var/www/$domain_name/htdocs" || exit 23524584 php scripts/upgrade.php php scripts/checkschema.php # Languages - cd /var/www/$domain_name/htdocs/local/plugins/Sharings/locale/en/LC_MESSAGES + cd "/var/www/$domain_name/htdocs/local/plugins/Sharings/locale/en/LC_MESSAGES" || exit 53825488 msgfmt -o Sharings.mo Sharings.po if [ ! -f Sharings.po ]; then echo $"English translations for $social_app_name sharings plugin were not created" exit 782923 fi - cd /var/www/$domain_name/htdocs/local/plugins/Sharings/locale/en_GB/LC_MESSAGES + cd "/var/www/$domain_name/htdocs/local/plugins/Sharings/locale/en_GB/LC_MESSAGES" || exit 268442845 msgfmt -o Sharings.mo Sharings.po if [ ! -f Sharings.po ]; then echo $"English (GB) translations for $social_app_name sharings plugin were not created" exit 23528 fi - cd /var/www/$domain_name/htdocs/local/plugins/Sharings/locale/en_US/LC_MESSAGES + cd "/var/www/$domain_name/htdocs/local/plugins/Sharings/locale/en_US/LC_MESSAGES" || exit 264824628 msgfmt -o Sharings.mo Sharings.po if [ ! -f Sharings.po ]; then echo $"English (US) translations for $social_app_name sharings plugin were not created" @@ -898,107 +895,107 @@ function install_gnusocial_plugin_sharings { fi # Looks like this update function isn't supported by the current php version - sed -i 's|ActivityVerb::UPDATE, ||g' /var/www/$domain_name/htdocs/local/plugins/Sharings/SharingsPlugin.php + sed -i 's|ActivityVerb::UPDATE, ||g' "/var/www/$domain_name/htdocs/local/plugins/Sharings/SharingsPlugin.php" - chown -R www-data:www-data /var/www/$domain_name/htdocs + chown -R www-data:www-data "/var/www/$domain_name/htdocs" set_completion_param gnusocial "$social_app_name sharings plugin commit" "$SHARINGS_COMMIT" - install_completed ${social_app_name}_plugin_sharings + install_completed "${social_app_name}_plugin_sharings" } function install_gnusocial_plugin_sharings_theme { - domain_name=$1 - social_app_name=$2 + domain_name="$1" + social_app_name="$2" - if [ ! -d /var/www/$domain_name/htdocs/local/plugins ]; then - mkdir -p /var/www/$domain_name/htdocs/local/plugins + if [ ! -d "/var/www/$domain_name/htdocs/local/plugins" ]; then + mkdir -p "/var/www/$domain_name/htdocs/local/plugins" fi # update to the next commit function_check set_repo_commit - set_repo_commit /var/www/$domain_name/htdocs/local/plugins/SharingsTheme "$social_app_name sharings theme plugin commit" "$SHARINGS_THEME_COMMIT" $SHARINGS_THEME_REPO + set_repo_commit "/var/www/$domain_name/htdocs/local/plugins/SharingsTheme" "$social_app_name sharings theme plugin commit" "$SHARINGS_THEME_COMMIT" "$SHARINGS_THEME_REPO" - if [[ $(app_is_installed ${social_app_name}_plugin_sharings_theme) == "1" ]]; then + if [[ $(app_is_installed "${social_app_name}_plugin_sharings_theme") == "1" ]]; then return fi - cd /var/www/$domain_name/htdocs/local/plugins + cd "/var/www/$domain_name/htdocs/local/plugins" || exit 682425642 function_check git_clone - git_clone $SHARINGS_THEME_REPO SharingsTheme - if [ ! -d /var/www/$domain_name/htdocs/local/plugins/SharingsTheme ]; then + git_clone "$SHARINGS_THEME_REPO" SharingsTheme + if [ ! -d "/var/www/$domain_name/htdocs/local/plugins/SharingsTheme" ]; then echo $"Unable to clone $social_app_name sharings plugin theme" exit 639253 fi - cd /var/www/$domain_name/htdocs/local/plugins/SharingsTheme + cd "/var/www/$domain_name/htdocs/local/plugins/SharingsTheme" || exit 2648724684 git stash git checkout master - git branch -D $SHARINGS_THEME_COMMIT - git checkout $SHARINGS_THEME_COMMIT -b $SHARINGS_THEME_COMMIT + git branch -D "$SHARINGS_THEME_COMMIT" + git checkout "$SHARINGS_THEME_COMMIT" -b "$SHARINGS_THEME_COMMIT" # enable the plugin - if ! grep -q "addPlugin('SharingsTheme');" /var/www/$domain_name/htdocs/config.php; then - echo "addPlugin('SharingsTheme');" >> /var/www/$domain_name/htdocs/config.php + if ! grep -q "addPlugin('SharingsTheme');" "/var/www/$domain_name/htdocs/config.php"; then + echo "addPlugin('SharingsTheme');" >> "/var/www/$domain_name/htdocs/config.php" fi - cd /var/www/$domain_name/htdocs + cd "/var/www/$domain_name/htdocs" || exit 246824624 php scripts/checkschema.php - chown -R www-data:www-data /var/www/$domain_name/htdocs + chown -R www-data:www-data "/var/www/$domain_name/htdocs" set_completion_param "$social_app_name sharings plugin theme commit" "$SHARINGS_THEME_COMMIT" - install_completed ${social_app_name}_plugin_sharings_theme + install_completed "${social_app_name}_plugin_sharings_theme" } function install_gnusocial_markdown { - domain_name=$1 - social_app_name=$2 + domain_name="$1" + social_app_name="$2" - GNUSOCIAL_PATH=/var/www/$domain_name/htdocs + GNUSOCIAL_PATH="/var/www/$domain_name/htdocs" # update to the next commit function_check set_repo_commit - set_repo_commit $GNUSOCIAL_PATH/local/plugins/Markdown "$social_app_name Markdown commit" "$GNUSOCIAL_MARKDOWN_COMMIT" $GNUSOCIAL_MARKDOWN_REPO + set_repo_commit "$GNUSOCIAL_PATH/local/plugins/Markdown" "$social_app_name Markdown commit" "$GNUSOCIAL_MARKDOWN_COMMIT" "$GNUSOCIAL_MARKDOWN_REPO" - if [[ $(app_is_installed ${social_app_name}_markdown) == "1" ]]; then + if [[ $(app_is_installed "${social_app_name}_markdown") == "1" ]]; then return fi - if [ -d $GNUSOCIAL_PATH/local/plugins/Markdown ]; then - rm -rf $GNUSOCIAL_PATH/local/plugins/Markdown + if [ -d "$GNUSOCIAL_PATH/local/plugins/Markdown" ]; then + rm -rf "$GNUSOCIAL_PATH/local/plugins/Markdown" fi - if [ ! -d $GNUSOCIAL_PATH/local/plugins ]; then - mkdir -p $GNUSOCIAL_PATH/local/plugins + if [ ! -d "$GNUSOCIAL_PATH/local/plugins" ]; then + mkdir -p "$GNUSOCIAL_PATH/local/plugins" fi - cd $GNUSOCIAL_PATH/local/plugins + cd "$GNUSOCIAL_PATH/local/plugins" || exit 268476248 if [ -d /repos/gnusocial-markdown ]; then mkdir Markdown cp -r -p /repos/gnusocial-markdown/. Markdown - cd Markdown + cd Markdown || exit 62847524 git pull else function_check git_clone - git_clone $GNUSOCIAL_MARKDOWN_REPO Markdown + git_clone "$GNUSOCIAL_MARKDOWN_REPO" Markdown fi - cd $GNUSOCIAL_PATH/local/plugins/Markdown - git checkout $GNUSOCIAL_MARKDOWN_COMMIT -b $GNUSOCIAL_MARKDOWN_COMMIT + cd "$GNUSOCIAL_PATH/local/plugins/Markdown" || exit 26584526745 + git checkout "$GNUSOCIAL_MARKDOWN_COMMIT" -b "$GNUSOCIAL_MARKDOWN_COMMIT" - gnusocial_config_file=$GNUSOCIAL_PATH/config.php - if ! grep -q "addPlugin('Markdown'" $gnusocial_config_file; then - echo "" >> $gnusocial_config_file - echo "// Markdown settings" >> $gnusocial_config_file - echo "addPlugin('Markdown');" >> $gnusocial_config_file + gnusocial_config_file="$GNUSOCIAL_PATH/config.php" + if ! grep -q "addPlugin('Markdown'" "$gnusocial_config_file"; then + { echo ""; + echo "// Markdown settings"; + echo "addPlugin('Markdown');"; } >> "$gnusocial_config_file" fi set_completion_param "$social_app_name markdown commit" "$GNUSOCIAL_MARKDOWN_COMMIT" - chown -R www-data:www-data $GNUSOCIAL_PATH + chown -R www-data:www-data "$GNUSOCIAL_PATH" - install_completed ${social_app_name}_markdown + install_completed "${social_app_name}_markdown" } # NOTE: deliberately there is no "exit 0" From 8848ea40ef2729e8b5e8b0940274ac82554eff8b Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Mon, 26 Feb 2018 13:50:40 +0000 Subject: [PATCH 16/67] Tidying --- src/cronic | 8 +- src/freedombone | 97 +++-- src/freedombone-addcert | 115 +++--- src/freedombone-addemail | 135 ++++--- src/freedombone-addlist | 153 ++++---- src/freedombone-addremove | 62 +-- src/freedombone-adduser | 185 +++++---- src/freedombone-app-akaunting | 303 +++++++-------- src/freedombone-app-batman | 53 ++- src/freedombone-app-bdsmail | 244 ++++++------ src/freedombone-app-cryptpad | 594 ++++++++++++++--------------- src/freedombone-app-dlna | 109 +++--- src/freedombone-app-dokuwiki | 500 ++++++++++++------------ src/freedombone-app-edith | 267 ++++++------- src/freedombone-app-emacs | 292 +++++++------- src/freedombone-utils-go | 76 ++-- src/freedombone-utils-gpg | 245 ++++++------ src/freedombone-utils-guile | 34 +- src/freedombone-utils-i2p | 8 +- src/freedombone-utils-interactive | 119 +++--- src/freedombone-utils-keys | 154 ++++---- src/freedombone-utils-login | 15 +- src/freedombone-utils-mesh | 192 +++++----- src/freedombone-utils-meteor | 31 +- src/freedombone-utils-mongodb | 51 +-- src/freedombone-utils-monkeysphere | 20 +- src/freedombone-utils-network | 28 +- 27 files changed, 2047 insertions(+), 2043 deletions(-) diff --git a/src/cronic b/src/cronic index 2e8e9b27..385979f2 100755 --- a/src/cronic +++ b/src/cronic @@ -12,14 +12,14 @@ ERR=$TMP/cronic.err TRACE=$TMP/cronic.trace set +e -"$@" >$OUT 2>$TRACE +"$@" >"$OUT" 2>"$TRACE" RESULT=$? set -e PATTERN="^${PS4:0:1}\\+${PS4:1}" -if grep -aq "$PATTERN" $TRACE +if grep -aq "$PATTERN" "$TRACE" then - ! grep -av "$PATTERN" $TRACE > $ERR + ! grep -av "$PATTERN" "$TRACE" > "$ERR" else ERR=$TRACE fi @@ -33,7 +33,7 @@ if [ $RESULT -ne 0 ] echo echo "STANDARD OUTPUT:" cat "$OUT" - if [ $TRACE != $ERR ] + if [ "$TRACE" != "$ERR" ] then echo echo "TRACE-ERROR OUTPUT:" diff --git a/src/freedombone b/src/freedombone index d3ee8164..0549bcf4 100755 --- a/src/freedombone +++ b/src/freedombone @@ -42,61 +42,61 @@ fi source $PROJECT_INSTALL_DIR/${PROJECT_NAME}-vars -UTILS_FILES=/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-* +UTILS_FILES="/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-*" for f in $UTILS_FILES do - source $f + source "$f" done -APP_FILES=/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-* +APP_FILES="/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-*" for f in $APP_FILES do - source $f + source "$f" done -command_options=$1 +command_options="$1" -if [[ $command_options == "menuconfig-full" ]]; then +if [[ "$command_options" == "menuconfig-full" ]]; then MINIMAL_INSTALL="no" fi -if [[ $command_options == "menuconfig-onion" ]]; then +if [[ "$command_options" == "menuconfig-onion" ]]; then MINIMAL_INSTALL="yes" ONION_ONLY="yes" fi -if [[ $command_options == "menuconfig-gnusocial" ]]; then +if [[ "$command_options" == "menuconfig-gnusocial" ]]; then MINIMAL_INSTALL="yes" ONION_ONLY="no" SOCIALINSTANCE='gnusocial' fi -if [[ $command_options == "menuconfig-postactiv" ]]; then +if [[ "$command_options" == "menuconfig-postactiv" ]]; then MINIMAL_INSTALL="yes" ONION_ONLY="no" SOCIALINSTANCE='postactiv' fi -if [ ! $CONFIGURATION_FILE ]; then - CONFIGURATION_FILE=$HOME/${PROJECT_NAME}.cfg +if [ ! "$CONFIGURATION_FILE" ]; then + CONFIGURATION_FILE="$HOME/${PROJECT_NAME}.cfg" fi -if [ ! $COMPLETION_FILE ]; then - COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt +if [ ! "$COMPLETION_FILE" ]; then + COMPLETION_FILE="$HOME/${PROJECT_NAME}-completed.txt" fi # before the interactive config so that wifi adaptors may be detected setup_wifi_atheros -if [[ $command_options == "menuconfig"* ]]; then +if [[ "$command_options" == "menuconfig"* ]]; then if [[ "$2" == "--reset" ]]; then - if [ -f $CONFIGURATION_FILE ]; then - rm $CONFIGURATION_FILE + if [ -f "$CONFIGURATION_FILE" ]; then + rm "$CONFIGURATION_FILE" fi - if [ -f $COMPLETION_FILE ]; then - rm $COMPLETION_FILE + if [ -f "$COMPLETION_FILE" ]; then + rm "$COMPLETION_FILE" fi - if [ -f /usr/share/${PROJECT_NAME}/installed.txt ]; then - rm /usr/share/${PROJECT_NAME}/installed.txt + if [ -f "/usr/share/${PROJECT_NAME}/installed.txt" ]; then + rm "/usr/share/${PROJECT_NAME}/installed.txt" fi if [ -f /root/removed ]; then rm /root/removed @@ -104,18 +104,18 @@ if [[ $command_options == "menuconfig"* ]]; then fi # clear the interactive file which indicates configuration success - interactive_file=$HOME/.${PROJECT_NAME}-interactive - if [ -f $interactive_file ]; then - rm $interactive_file + interactive_file="$HOME/.${PROJECT_NAME}-interactive" + if [ -f "$interactive_file" ]; then + rm "$interactive_file" fi interactive_configuration # check that the interactive file was created - if [ ! -f $interactive_file ]; then + if [ ! -f "$interactive_file" ]; then exit 6393562 fi - rm $interactive_file + rm "$interactive_file" else while [ $# -gt 1 ] do @@ -169,12 +169,12 @@ else # Static IP address for the system --ip) shift - LOCAL_NETWORK_STATIC_IP_ADDRESS=$1 + LOCAL_NETWORK_STATIC_IP_ADDRESS="$1" ;; # IP address for the internet router --iprouter) shift - ROUTER_IP_ADDRESS=$1 + ROUTER_IP_ADDRESS="$1" ;; # ssh port --ssh) @@ -214,61 +214,61 @@ else # Mumble server password --vpass) shift - MUMBLE_SERVER_PASSWORD=$1 + MUMBLE_SERVER_PASSWORD="$1" ;; # Mumble server port --vport) shift - MUMBLE_PORT=$1 + MUMBLE_PORT="$1" ;; # DNS Nameserver 1 --ns1) shift - NAMESERVER1=$1 + NAMESERVER1="$1" ;; # DNS Nameserver 2 --ns2) shift - NAMESERVER2=$1 + NAMESERVER2="$1" ;; # DNS Nameserver 3 --ns3) shift - NAMESERVER3=$1 + NAMESERVER3="$1" ;; # DNS Nameserver 4 --ns4) shift - NAMESERVER4=$1 + NAMESERVER4="$1" ;; # DNS Nameserver 5 --ns5) shift - NAMESERVER5=$1 + NAMESERVER5="$1" ;; # DNS Nameserver 6 --ns6) shift - NAMESERVER6=$1 + NAMESERVER6="$1" ;; # Debian repository --repo) shift - DEBIAN_REPO=$1 + DEBIAN_REPO="$1" ;; # clear the config file --reset) - if [ -f $CONFIGURATION_FILE ]; then - rm $CONFIGURATION_FILE + if [ -f "$CONFIGURATION_FILE" ]; then + rm "$CONFIGURATION_FILE" fi - if [ -f $COMPLETION_FILE ]; then - rm $COMPLETION_FILE + if [ -f "$COMPLETION_FILE" ]; then + rm "$COMPLETION_FILE" fi ;; # minimal install --minimal) shift - MINIMAL_INSTALL=$1 + MINIMAL_INSTALL="$1" ;; *) # unknown option @@ -293,7 +293,7 @@ function parse_args { read_config_param 'DDNS_USERNAME' read_config_param 'DDNS_PASSWORD' - if [ ! -d /home/$MY_USERNAME ]; then + if [ ! -d "/home/$MY_USERNAME" ]; then echo $"There is no user '$MY_USERNAME' on the system. Use 'adduser $MY_USERNAME' to create the user." exit 1 fi @@ -304,7 +304,7 @@ function parse_args { exit 2 fi fi - if [ ! $MY_USERNAME ]; then + if [ ! "$MY_USERNAME" ]; then echo 'No username specified' show_help exit 3 @@ -312,11 +312,11 @@ function parse_args { if [[ $SYSTEM_TYPE != "mesh"* ]]; then if [[ "$DDNS_PROVIDER" != 'none' ]]; then if [[ $ONION_ONLY == "no" ]]; then - if [ ! $DDNS_USERNAME ]; then + if [ ! "$DDNS_USERNAME" ]; then echo $'Please provide the username for your dynamic DNS provider with the --ddnsuser option' exit 7823 fi - if [ ! $DDNS_PASSWORD ]; then + if [ ! "$DDNS_PASSWORD" ]; then echo $'Please provide the password for your dynamic DNS provider with the --ddnspass option' exit 6382 fi @@ -324,7 +324,7 @@ function parse_args { fi fi - if [ ! $SYSTEM_TYPE ]; then + if [ ! "$SYSTEM_TYPE" ]; then SYSTEM_TYPE=$'full' write_config_param "SYSTEM_TYPE" "$SYSTEM_TYPE" fi @@ -338,8 +338,7 @@ function parse_args { # run some initial tests clear -${PROJECT_NAME}-tests -if [ ! "$?" = "0" ]; then +if ! "${PROJECT_NAME}-tests"; then exit 768252 fi @@ -354,7 +353,7 @@ upgrade_installation_from_previous_versions setup_utils setup_email setup_web -setup_apps $command_options +setup_apps "$command_options" setup_final echo '' diff --git a/src/freedombone-addcert b/src/freedombone-addcert index b37575ef..ffcd9709 100755 --- a/src/freedombone-addcert +++ b/src/freedombone-addcert @@ -36,10 +36,10 @@ export TEXTDOMAINDIR="/usr/share/locale" CONFIGURATION_FILE=$HOME/${PROJECT_NAME}.cfg COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt -UTILS_FILES=/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-* +UTILS_FILES="/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-*" for f in $UTILS_FILES do - source $f + source "$f" done # Don't pin certs by default @@ -145,11 +145,11 @@ do ;; --dhkey) shift - DH_KEYLENGTH=${1} + DH_KEYLENGTH="${1}" ;; --pin) shift - PIN_CERTS=${1} + PIN_CERTS="${1}" ;; *) # unknown option @@ -158,8 +158,8 @@ do shift done -if [ ! $HOSTNAME ]; then - if [ ! $LETSENCRYPT_HOSTNAME ]; then +if [ ! "$HOSTNAME" ]; then + if [ ! "$LETSENCRYPT_HOSTNAME" ]; then echo $'No hostname specified' exit 5748 fi @@ -180,16 +180,16 @@ function remove_cert_letsencrypt { CERTFILE=$LETSENCRYPT_HOSTNAME # disable the site if needed - if [ -f /etc/nginx/sites-available/${LETSENCRYPT_HOSTNAME} ]; then - if grep -q "443" /etc/nginx/sites-available/${LETSENCRYPT_HOSTNAME}; then - nginx_dissite ${LETSENCRYPT_HOSTNAME} + if [ -f "/etc/nginx/sites-available/${LETSENCRYPT_HOSTNAME}" ]; then + if grep -q "443" "/etc/nginx/sites-available/${LETSENCRYPT_HOSTNAME}"; then + nginx_dissite "${LETSENCRYPT_HOSTNAME}" fi fi # remove the cert - rm -rf /etc/letsencrypt/live/${LETSENCRYPT_HOSTNAME}* - rm -rf /etc/letsencrypt/archive/${LETSENCRYPT_HOSTNAME}* - rm /etc/letsencrypt/renewal/${LETSENCRYPT_HOSTNAME}.conf + rm -rf "/etc/letsencrypt/live/${LETSENCRYPT_HOSTNAME}*" + rm -rf "/etc/letsencrypt/archive/${LETSENCRYPT_HOSTNAME}*" + rm "/etc/letsencrypt/renewal/${LETSENCRYPT_HOSTNAME}.conf" # restart the web server systemctl restart nginx @@ -199,14 +199,14 @@ function add_cert_letsencrypt { CERTFILE=$LETSENCRYPT_HOSTNAME # obtain the email address for the admin user - if [ ! $MY_EMAIL_ADDRESS ]; then - if [ -f $CONFIGURATION_FILE ]; then + if [ ! "$MY_EMAIL_ADDRESS" ]; then + if [ -f "$CONFIGURATION_FILE" ]; then read_config_param MY_EMAIL_ADDRESS fi fi - if [ ! $MY_EMAIL_ADDRESS ]; then - if [ -f $COMPLETION_FILE ]; then - if grep -q "Admin user:" $COMPLETION_FILE; then + if [ ! "$MY_EMAIL_ADDRESS" ]; then + if [ -f "$COMPLETION_FILE" ]; then + if grep -q "Admin user:" "$COMPLETION_FILE"; then function_check get_completion_param ADMIN_USER=$(get_completion_param "Admin user") if [ ${#ADMIN_USER} -eq 0 ]; then @@ -232,8 +232,7 @@ function add_cert_letsencrypt { chgrp -R root /etc/letsencrypt chmod -R 777 /etc/letsencrypt - certbot certonly -n --server $LETSENCRYPT_SERVER --standalone -d $LETSENCRYPT_HOSTNAME --renew-by-default --agree-tos --email $MY_EMAIL_ADDRESS - if [ ! "$?" = "0" ]; then + if ! certbot certonly -n --server "$LETSENCRYPT_SERVER" --standalone -d "$LETSENCRYPT_HOSTNAME" --renew-by-default --agree-tos --email "$MY_EMAIL_ADDRESS"; then echo $"Failed to install letsencrypt for domain $LETSENCRYPT_HOSTNAME" echo $'Also see https://letsencrypt.status.io to check for any service outages' chgrp -R ssl-cert /etc/letsencrypt @@ -245,42 +244,42 @@ function add_cert_letsencrypt { fi # replace some legacy filenames - if [ -f /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.bundle.crt ]; then - mv /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.bundle.crt /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem + if [ -f "/etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.bundle.crt" ]; then + mv "/etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.bundle.crt" "/etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem" fi - if [ -f /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.crt ]; then - mv /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.crt /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem + if [ -f "/etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.crt" ]; then + mv "/etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.crt" "/etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem" fi - sed -i "s|ssl_certificate /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.bundle.crt|ssl_certificate /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem|g" /etc/nginx/sites-available/$LETSENCRYPT_HOSTNAME - sed -i "s|ssl_certificate /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.crt|ssl_certificate /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem|g" /etc/nginx/sites-available/$LETSENCRYPT_HOSTNAME + sed -i "s|ssl_certificate /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.bundle.crt|ssl_certificate /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem|g" "/etc/nginx/sites-available/$LETSENCRYPT_HOSTNAME" + sed -i "s|ssl_certificate /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.crt|ssl_certificate /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem|g" "/etc/nginx/sites-available/$LETSENCRYPT_HOSTNAME" # link the private key - if [ -f /etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key ]; then - if [ ! -f /etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key.old ]; then - mv /etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key /etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key.old + if [ -f "/etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key" ]; then + if [ ! -f "/etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key.old" ]; then + mv "/etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key" "/etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key.old" else - rm -f /etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key + rm -f "/etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key" fi fi - if [ -L /etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key ]; then - rm /etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key + if [ -L "/etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key" ]; then + rm "/etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key" fi - ln -s /etc/letsencrypt/live/${LETSENCRYPT_HOSTNAME}/privkey.pem /etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key + ln -s "/etc/letsencrypt/live/${LETSENCRYPT_HOSTNAME}/privkey.pem" "/etc/ssl/private/${LETSENCRYPT_HOSTNAME}.key" # link the public key - if [ -f /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem ]; then - if [ ! -f /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem.old ]; then - mv /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem.old + if [ -f "/etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem" ]; then + if [ ! -f "/etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem.old" ]; then + mv "/etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem" "/etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem.old" else - rm -f /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem + rm -f "/etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem" fi fi - if [ -L /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem ]; then - rm /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem + if [ -L "/etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem" ]; then + rm "/etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem" fi - ln -s /etc/letsencrypt/live/${LETSENCRYPT_HOSTNAME}/fullchain.pem /etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem + ln -s "/etc/letsencrypt/live/${LETSENCRYPT_HOSTNAME}/fullchain.pem" "/etc/ssl/certs/${LETSENCRYPT_HOSTNAME}.pem" - cp /etc/letsencrypt/live/${LETSENCRYPT_HOSTNAME}/fullchain.pem /etc/ssl/mycerts/${LETSENCRYPT_HOSTNAME}.pem + cp "/etc/letsencrypt/live/${LETSENCRYPT_HOSTNAME}/fullchain.pem" "/etc/ssl/mycerts/${LETSENCRYPT_HOSTNAME}.pem" update_default_domain @@ -291,12 +290,11 @@ function add_cert_letsencrypt { chmod -R g=rX /etc/letsencrypt chown -R root:ssl-cert /etc/letsencrypt - nginx_ensite ${LETSENCRYPT_HOSTNAME} + nginx_ensite "${LETSENCRYPT_HOSTNAME}" systemctl start nginx - if [ $PIN_CERTS ]; then - ${PROJECT_NAME}-pin-cert $LETSENCRYPT_HOSTNAME - if [ ! "$?" = "0" ]; then + if [ "$PIN_CERTS" ]; then + if ! "${PROJECT_NAME}-pin-cert" "$LETSENCRYPT_HOSTNAME"; then echo $"Certificate for $LETSENCRYPT_HOSTNAME could not be pinned" exit 62878 fi @@ -304,21 +302,20 @@ function add_cert_letsencrypt { } function add_cert_selfsigned { - if [[ $ORGANISATION == "Freedombone-CA" ]]; then + if [[ "$ORGANISATION" == "Freedombone-CA" ]]; then CERTFILE="ca-$HOSTNAME" fi - openssl req -x509 ${EXTENSIONS} -nodes -days 3650 -sha256 \ + openssl req -x509 "${EXTENSIONS}" -nodes -days 3650 -sha256 \ -subj "/O=$ORGANISATION/OU=$UNIT/C=$COUNTRY_CODE/ST=$AREA/L=$LOCATION/CN=$HOSTNAME" \ - -newkey rsa:2048 -keyout /etc/ssl/private/${CERTFILE}.key \ - -out /etc/ssl/certs/${CERTFILE}.crt - chmod 400 /etc/ssl/private/${CERTFILE}.key - chmod 640 /etc/ssl/certs/${CERTFILE}.crt - cp /etc/ssl/certs/${CERTFILE}.crt /etc/ssl/mycerts + -newkey rsa:2048 -keyout "/etc/ssl/private/${CERTFILE}.key" \ + -out "/etc/ssl/certs/${CERTFILE}.crt" + chmod 400 "/etc/ssl/private/${CERTFILE}.key" + chmod 640 "/etc/ssl/certs/${CERTFILE}.crt" + cp "/etc/ssl/certs/${CERTFILE}.crt" "/etc/ssl/mycerts" - if [ $PIN_CERTS ]; then - ${PROJECT_NAME}-pin-cert $CERTFILE - if [ ! "$?" = "0" ]; then + if [ "$PIN_CERTS" ]; then + if ! "${PROJECT_NAME}-pin-cert" "$CERTFILE"; then echo $"Certificate for $CERTFILE could not be pinned" exit 62879 fi @@ -326,9 +323,9 @@ function add_cert_selfsigned { } function generate_dh_params { - if [ ! $NODH ]; then - if [ ! -f /etc/ssl/certs/${CERTFILE}.dhparam ]; then - ${PROJECT_NAME}-dhparam -h ${CERTFILE} --fast yes + if [ ! "$NODH" ]; then + if [ ! -f "/etc/ssl/certs/${CERTFILE}.dhparam" ]; then + "${PROJECT_NAME}-dhparam" -h "${CERTFILE}" --fast yes fi fi } @@ -346,12 +343,12 @@ function make_cert_bundle { } function create_cert { - if [ $remove_cert ]; then + if [ "$remove_cert" ]; then remove_cert_letsencrypt return fi - if [ $LETSENCRYPT_HOSTNAME ]; then + if [ "$LETSENCRYPT_HOSTNAME" ]; then add_cert_letsencrypt else add_cert_selfsigned diff --git a/src/freedombone-addemail b/src/freedombone-addemail index 348f10ce..bf2926a2 100755 --- a/src/freedombone-addemail +++ b/src/freedombone-addemail @@ -52,49 +52,49 @@ do key="$1" case $key in - -h|--help) - show_help - ;; - -u|--user) - shift - MYUSERNAME="$1" - ;; - -e|--email) - shift - EMAILADDRESS="$1" - ;; - -s|--subject) - shift - SUBJECT_TEXT="$1" - ;; - -g|--group) - shift - GROUP_NAME="$1" - ;; - -p|--public) - shift - PUBLIC="$1" - ;; - *) - # unknown option - ;; + -h|--help) + show_help + ;; + -u|--user) + shift + MYUSERNAME="$1" + ;; + -e|--email) + shift + EMAILADDRESS="$1" + ;; + -s|--subject) + shift + SUBJECT_TEXT="$1" + ;; + -g|--group) + shift + GROUP_NAME="$1" + ;; + -p|--public) + shift + PUBLIC="$1" + ;; + *) + # unknown option + ;; esac shift done -if ! [[ $MYUSERNAME && $GROUP_NAME ]]; then +if ! [[ "$MYUSERNAME" && "$GROUP_NAME" ]]; then show_help fi -if [ ${#EMAILADDRESS} -lt 2 ]; then +if [ "${#EMAILADDRESS}" -lt 2 ]; then if [ ${#SUBJECT_TEXT} -lt 2 ]; then - show_help + show_help fi fi -MUTTRC=/home/$MYUSERNAME/.muttrc -PM=/home/$MYUSERNAME/.procmailrc -LISTDIR=/home/$MYUSERNAME/Maildir/$GROUP_NAME +MUTTRC="/home/$MYUSERNAME/.muttrc" +PM="/home/$MYUSERNAME/.procmailrc" +LISTDIR="/home/$MYUSERNAME/Maildir/$GROUP_NAME" proc_rule=" * ^From:.*$EMAILADDRESS" proc_comment="# Email rule for $EMAILADDRESS -> $GROUP_NAME" @@ -104,54 +104,53 @@ if [ ${#SUBJECT_TEXT} -gt 0 ]; then fi if [ ! -d "$LISTDIR" ]; then - mkdir -m 700 $LISTDIR - mkdir -m 700 $LISTDIR/tmp - mkdir -m 700 $LISTDIR/new - mkdir -m 700 $LISTDIR/cur + mkdir -m 700 "$LISTDIR" + mkdir -m 700 "$LISTDIR/tmp" + mkdir -m 700 "$LISTDIR/new" + mkdir -m 700 "$LISTDIR/cur" fi -chown -R $MYUSERNAME:$MYUSERNAME $LISTDIR -if ! grep -q "$proc_comment" $PM; then +chown -R "$MYUSERNAME":"$MYUSERNAME" "$LISTDIR" +if ! grep -q "$proc_comment" "$PM"; then if [[ $PUBLIC != "yes" ]]; then - # private emails go after the encryption stage - echo '' >> $PM - echo "$proc_comment" >> $PM - echo ":0" >> $PM - echo "$proc_rule" >> $PM - echo "$LISTDIR/new" >> $PM - echo "# End of rule" >> $PM + # private emails go after the encryption stage + { echo ''; + echo "$proc_comment"; + echo ":0"; + echo "$proc_rule"; + echo "$LISTDIR/new"; + echo "# End of rule"; } >> "$PM" else - # public emails are copied before the encryption stage - if ! grep -q '# encrypt' $PM; then - echo '' >> $PM - echo "$proc_comment" >> $PM - echo ":0" >> $PM - echo "$proc_rule" >> $PM - echo "$LISTDIR/new" >> $PM - echo "# End of rule" >> $PM - else - filter=$(echo "$proc_comment\n:0\n${proc_rule}\n$LISTDIR/new\n# End of rule\n") - sed -i "/# encrypt/i ${filter}" $PM + # public emails are copied before the encryption stage + if ! grep -q '# encrypt' "$PM"; then + { echo ''; + echo "$proc_comment"; + echo ":0"; + echo "$proc_rule"; + echo "$LISTDIR/new"; + echo "# End of rule"; } >> "$PM" + else + sed -i "/# encrypt/i $proc_comment\\n:0\\n${proc_rule}\\n$LISTDIR/new\\n# End of rule\\n" "$PM" + fi fi - fi - chown $MYUSERNAME:$MYUSERNAME $PM + chown "$MYUSERNAME":"$MYUSERNAME" "$PM" fi if [ ! -f "$MUTTRC" ]; then - cp /etc/Muttrc $MUTTRC - chown $MYUSERNAME:$MYUSERNAME $MUTTRC + cp /etc/Muttrc "$MUTTRC" + chown "$MYUSERNAME":"$MYUSERNAME" "$MUTTRC" fi PROCMAILLOG=/home/$MYUSERNAME/log -if [ ! -d $PROCMAILLOG ]; then - mkdir $PROCMAILLOG - chown -R $MYUSERNAME:$MYUSERNAME $PROCMAILLOG +if [ ! -d "$PROCMAILLOG" ]; then + mkdir "$PROCMAILLOG" + chown -R "$MYUSERNAME":"$MYUSERNAME" "$PROCMAILLOG" fi -MUTT_MAILBOXES=$(grep "mailboxes =" $MUTTRC) -if [[ $MUTT_MAILBOXES != *$GROUP_NAME* ]]; then - if ! grep -q "=$GROUP_NAME" $MUTTRC; then - sed -i "s|$MUTT_MAILBOXES|$MUTT_MAILBOXES =$GROUP_NAME|g" $MUTTRC - chown $MYUSERNAME:$MYUSERNAME $MUTTRC +MUTT_MAILBOXES=$(grep "mailboxes =" "$MUTTRC") +if [[ "$MUTT_MAILBOXES" != *$GROUP_NAME* ]]; then + if ! grep -q "=$GROUP_NAME" "$MUTTRC"; then + sed -i "s|$MUTT_MAILBOXES|$MUTT_MAILBOXES =$GROUP_NAME|g" "$MUTTRC" + chown "$MYUSERNAME":"$MYUSERNAME" "$MUTTRC" fi fi diff --git a/src/freedombone-addlist b/src/freedombone-addlist index 3e19c9e9..d76d4cd0 100755 --- a/src/freedombone-addlist +++ b/src/freedombone-addlist @@ -52,119 +52,114 @@ do key="$1" case $key in - -h|--help) - show_help - ;; - -u|--user) - shift - MYUSERNAME="$1" - ;; - -l|--list) - shift - MAILINGLIST="$1" - ;; - -s|--subject) - shift - SUBJECTTAG="$1" - ;; - -e|--email) - shift - LIST_ADDRESS="$1" - ;; - -p|--public) - shift - PUBLIC="$1" - ;; - *) - # unknown option - ;; + -h|--help) + show_help + ;; + -u|--user) + shift + MYUSERNAME="$1" + ;; + -l|--list) + shift + MAILINGLIST="$1" + ;; + -s|--subject) + shift + SUBJECTTAG="$1" + ;; + -e|--email) + shift + LIST_ADDRESS="$1" + ;; + -p|--public) + shift + PUBLIC="$1" + ;; + *) + # unknown option + ;; esac shift done -if [ ! $MYUSERNAME ]; then +if [ ! "$MYUSERNAME" ]; then show_help fi -if [[ ! $MAILINGLIST && ! $SUBJECTTAG ]]; then +if [[ ! "$MAILINGLIST" && ! "$SUBJECTTAG" ]]; then show_help fi -MUTTRC=/home/$MYUSERNAME/.muttrc -PM=/home/$MYUSERNAME/.procmailrc -LISTDIR=/home/$MYUSERNAME/Maildir/$MAILINGLIST +MUTTRC="/home/$MYUSERNAME/.muttrc" +PM="/home/$MYUSERNAME/.procmailrc" +LISTDIR="/home/$MYUSERNAME/Maildir/$MAILINGLIST" -if grep -q "=$MAILINGLIST" $MUTTRC; then +if grep -q "=$MAILINGLIST" "$MUTTRC"; then echo $"Mailing list $MAILINGLIST was already added" fi if [ ! -d "$LISTDIR" ]; then - mkdir -m 700 $LISTDIR - mkdir -m 700 $LISTDIR/tmp - mkdir -m 700 $LISTDIR/new - mkdir -m 700 $LISTDIR/cur + mkdir -m 700 "$LISTDIR" + mkdir -m 700 "$LISTDIR/tmp" + mkdir -m 700 "$LISTDIR/new" + mkdir -m 700 "$LISTDIR/cur" fi -chown -R $MYUSERNAME:$MYUSERNAME $LISTDIR +chown -R "$MYUSERNAME":"$MYUSERNAME" "$LISTDIR" if [ ${#SUBJECTTAG} -gt 0 ]; then # use the subject tag - if ! grep -q "Subject:.*()\[$SUBJECTTAG\]" $PM; then - if [[ $PUBLIC != "yes" ]]; then - # private emails go after the encryption stage - filter=" -# Email rule for $MAILINGLIST subject [$SUBJECTTAG] -:0 - * ^Subject:.*()\[$SUBJECTTAG\] -$LISTDIR/new -# End of rule -" - echo "$filter" >> $PM - else - # public emails are copied before hte encryption stage - if ! grep -q '# encrypt' $PM; then - filter=" -# Email rule for $MAILINGLIST subject [$SUBJECTTAG] -:0 - * ^Subject:.*()\[$SUBJECTTAG\] -$LISTDIR/new -# End of rule -" - echo "$filter" >> $PM + if ! grep -q "Subject:.*()\\[$SUBJECTTAG\\]" "$PM"; then + if [[ $PUBLIC != "yes" ]]; then + # private emails go after the encryption stage + { echo "# Email rule for $MAILINGLIST subject [$SUBJECTTAG]"; + echo ":0"; + echo " * ^Subject:.*()\\[$SUBJECTTAG\\]"; + echo "$LISTDIR/new"; + echo "# End of rule"; + echo ""; } >> "$PM" else - filter=$(echo "# Email rule for $MAILINGLIST subject [$SUBJECTTAG]\n:0\n * ^Subject:.*()\\\[$SUBJECTTAG\\\]\n$LISTDIR/new\n# End of rule\n") - sed -i "/# encrypt/i ${filter}" $PM + # public emails are copied before hte encryption stage + if ! grep -q '# encrypt' "$PM"; then + { echo "# Email rule for $MAILINGLIST subject [$SUBJECTTAG]"; + echo ":0"; + echo " * ^Subject:.*()\\[$SUBJECTTAG\\]"; + echo "$LISTDIR/new"; + echo "# End of rule"; + echo ""; } >> "$PM" + else + sed -i "/# encrypt/i # Email rule for $MAILINGLIST subject [$SUBJECTTAG]\\n:0\\n * ^Subject:.*()\\\\[$SUBJECTTAG\\\\]\\n$LISTDIR/new\\n# End of rule\\n" "$PM" + fi fi - fi - chown $MYUSERNAME:$MYUSERNAME $PM + chown "$MYUSERNAME":"$MYUSERNAME" "$PM" fi else - exit $(${PROJECT_NAME}-addemail -u $MYUSERNAME -e $LIST_ADDRESS -g $MAILINGLIST --public $PUBLIC) + exit "$("${PROJECT_NAME}-addemail" -u "$MYUSERNAME" -e "$LIST_ADDRESS" -g "$MAILINGLIST" --public "$PUBLIC")" fi if [ ! -f "$MUTTRC" ]; then - cp /etc/Muttrc $MUTTRC - chown $MYUSERNAME:$MYUSERNAME $MUTTRC + cp /etc/Muttrc "$MUTTRC" + chown "$MYUSERNAME":"$MYUSERNAME" "$MUTTRC" fi -PROCMAILLOG=/home/$MYUSERNAME/log -if [ ! -d $PROCMAILLOG ]; then - mkdir $PROCMAILLOG - chown -R $MYUSERNAME:$MYUSERNAME $PROCMAILLOG +PROCMAILLOG="/home/$MYUSERNAME/log" +if [ ! -d "$PROCMAILLOG" ]; then + mkdir "$PROCMAILLOG" + chown -R "$MYUSERNAME":"$MYUSERNAME" "$PROCMAILLOG" fi -MUTT_MAILBOXES=$(grep "mailboxes =" $MUTTRC) -if [[ $MUTT_MAILBOXES != *$MAILINGLIST* ]]; then - if ! grep -q "=$MAILINGLIST" $MUTTRC; then - sed -i "s|$MUTT_MAILBOXES|$MUTT_MAILBOXES =$MAILINGLIST|g" $MUTTRC - chown $MYUSERNAME:$MYUSERNAME $MUTTRC +MUTT_MAILBOXES=$(grep "mailboxes =" "$MUTTRC") +if [[ "$MUTT_MAILBOXES" != *$MAILINGLIST* ]]; then + if ! grep -q "=$MAILINGLIST" "$MUTTRC"; then + sed -i "s|$MUTT_MAILBOXES|$MUTT_MAILBOXES =$MAILINGLIST|g" "$MUTTRC" + chown "$MYUSERNAME":"$MYUSERNAME" "$MUTTRC" fi fi -if [ $LIST_ADDRESS ]; then - sed -i "s|unsubscribe $LIST_ADDRESS|subscribe $LIST_ADDRESS|g" $MUTTRC - if ! grep -q "subscribe $LIST_ADDRESS" $MUTTRC; then - echo "subscribe $LIST_ADDRESS" >> $MUTTRC +if [ "$LIST_ADDRESS" ]; then + sed -i "s|unsubscribe $LIST_ADDRESS|subscribe $LIST_ADDRESS|g" "$MUTTRC" + if ! grep -q "subscribe $LIST_ADDRESS" "$MUTTRC"; then + echo "subscribe $LIST_ADDRESS" >> "$MUTTRC" fi fi diff --git a/src/freedombone-addremove b/src/freedombone-addremove index 2c8f8c5f..219d45d8 100755 --- a/src/freedombone-addremove +++ b/src/freedombone-addremove @@ -34,27 +34,27 @@ export TEXTDOMAIN=${PROJECT_NAME}-addremove export TEXTDOMAINDIR="/usr/share/locale" PROJECT_INSTALL_DIR=/usr/local/bin -if [ -f /usr/bin/${PROJECT_NAME} ]; then +if [ -f "/usr/bin/${PROJECT_NAME}" ]; then PROJECT_INSTALL_DIR=/usr/bin fi -COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt -CONFIGURATION_FILE=$HOME/${PROJECT_NAME}.cfg +COMPLETION_FILE="$HOME/${PROJECT_NAME}-completed.txt" +CONFIGURATION_FILE="$HOME/${PROJECT_NAME}.cfg" # Start including files -source $PROJECT_INSTALL_DIR/${PROJECT_NAME}-vars +source "$PROJECT_INSTALL_DIR/${PROJECT_NAME}-vars" -UTILS_FILES=/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-* +UTILS_FILES="/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-*" for f in $UTILS_FILES do - source $f + source "$f" done -APP_FILES=/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-* +APP_FILES="/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-*" for f in $APP_FILES do - source $f + source "$f" done # End including files @@ -67,17 +67,17 @@ function mark_unselected_apps_as_removed { return fi - if [ -f $REMOVED_APPS_FILE ]; then - rm $REMOVED_APPS_FILE + if [ -f "$REMOVED_APPS_FILE" ]; then + rm "$REMOVED_APPS_FILE" fi app_index=0 for app_name in "${APPS_AVAILABLE[@]}" do if [[ ${APPS_CHOSEN[$app_index]} == "0" ]]; then - echo "_${app_name}_" >> $REMOVED_APPS_FILE + echo "_${app_name}_" >> "$REMOVED_APPS_FILE" fi - app_index=$[app_index+1] + app_index=$((app_index+1)) done } @@ -93,7 +93,7 @@ function app_expected_to_be_installed { echo "0" return fi - if ! grep -q "IN_DEFAULT_INSTALL=1" /usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}; then + if ! grep -q "IN_DEFAULT_INSTALL=1" "/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-${app_name}"; then echo "0" return fi @@ -102,7 +102,7 @@ function app_expected_to_be_installed { } function show_apps { - select_all_apps=$1 + select_all_apps="$1" applist="" n=1 app_index=0 @@ -117,19 +117,20 @@ function show_apps { applist="$applist $n $a on" fi fi - n=$[n+1] - app_index=$[app_index+1] + n=$((n+1)) + app_index=$((app_index+1)) done choices=$(dialog --stdout --backtitle $"Freedombone" \ --title $"Add/Remove Applications" \ --checklist $'Choose:' \ - 27 40 20 $applist) + 27 40 20 "$applist") + # shellcheck disable=SC2181 if [ $? -eq 0 ]; then for choice in $choices do - app_index=$[choice-1] + app_index=$((choice-1)) APPS_CHOSEN[$app_index]="1" done else @@ -151,10 +152,10 @@ function remove_apps_selected { else removals="${APPS_AVAILABLE[$app_index]}" fi - n=$[n+1] + n=$((n+1)) fi fi - app_index=$[app_index+1] + app_index=$((app_index+1)) done # if no apps to be removed then don't do anything @@ -166,7 +167,7 @@ function remove_apps_selected { dialog --title $"Remove applications" \ --backtitle $"Freedombone" \ --defaultno \ - --yesno $"\nYou have chosen to remove $n apps.\n\n $removals\n\nIf you choose 'yes' then this will remove both the applications and their data/messages. If you don't have a backup then you will not be able to recover the data for these applications.\n\nAre you sure that you wish to continue?" 15 60 + --yesno $"\\nYou have chosen to remove $n apps.\\n\\n $removals\\n\\nIf you choose 'yes' then this will remove both the applications and their data/messages. If you don't have a backup then you will not be able to recover the data for these applications.\\n\\nAre you sure that you wish to continue?" 15 60 sel=$? case $sel in 1) return;; @@ -195,10 +196,10 @@ function install_apps_selected { else installs="${APPS_AVAILABLE[$app_index]}" fi - n=$[n+1] + n=$((n+1)) fi fi - app_index=$[app_index+1] + app_index=$((app_index+1)) done # if no apps to be installed then don't do anything @@ -212,13 +213,13 @@ function install_apps_selected { dialog --title $"$installs" \ --backtitle $"Freedombone" \ --defaultno \ - --yesno $"\nThis will install the $installs app\n\nProceed?" 9 40 + --yesno $"\\nThis will install the $installs app\\n\\nProceed?" 9 40 else - dialog_height=$((15 + $n)) + dialog_height=$((15 + "$n")) dialog --title $"Add applications" \ --backtitle $"Freedombone" \ --defaultno \ - --yesno $"\nYou have chosen to install $n apps\n\n $installs\n\nProceed?" $dialog_height 60 + --yesno $"\\nYou have chosen to install $n apps\\n\\n $installs\\n\\nProceed?" $dialog_height 60 fi sel=$? case $sel in @@ -232,14 +233,13 @@ function install_apps_selected { # install the apps read_configuration install_apps interactive - if [ ! $APP_INSTALLED_SUCCESS ]; then + if [ ! "$APP_INSTALLED_SUCCESS" ]; then echo $'One or more apps failed to install' fi } if [[ $1 == "test"* ]]; then - ${PROJECT_NAME}-tests - if [ ! "$?" = "0" ]; then + if ! ${PROJECT_NAME}-tests; then exit 2 fi fi @@ -251,8 +251,8 @@ if [[ ${#APPS_AVAILABLE[@]} == 0 ]]; then exit 1 fi -show_apps $1 -mark_unselected_apps_as_removed $1 +show_apps "$1" +mark_unselected_apps_as_removed "$1" clear diff --git a/src/freedombone-adduser b/src/freedombone-adduser index 9271fca4..9dfb9178 100755 --- a/src/freedombone-adduser +++ b/src/freedombone-adduser @@ -34,18 +34,18 @@ PROJECT_NAME='freedombone' export TEXTDOMAIN=${PROJECT_NAME}-adduser export TEXTDOMAINDIR="/usr/share/locale" -CONFIGURATION_FILE=$HOME/${PROJECT_NAME}.cfg +CONFIGURATION_FILE="$HOME/${PROJECT_NAME}.cfg" -UTILS_FILES=/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-* +UTILS_FILES="/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-*" for f in $UTILS_FILES do - source $f + source "$f" done -APP_FILES=/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-* +APP_FILES="/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-*" for f in $APP_FILES do - source $f + source "$f" done ADD_USERNAME=$1 @@ -55,35 +55,35 @@ SSH_PORT=2222 COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt DEFAULT_DOMAIN_NAME= -if [ ! $ADD_USERNAME ]; then +if [ ! "$ADD_USERNAME" ]; then echo $'No username was given' exit 1 fi -if [ -d /home/$ADD_USERNAME ]; then +if [ -d "/home/$ADD_USERNAME" ]; then echo $"The user $ADD_USERNAME already exists" exit 2 fi -if [ ! -f $COMPLETION_FILE ]; then +if [ ! -f "$COMPLETION_FILE" ]; then echo $"$COMPLETION_FILE not found" - userdel -r $ADD_USERNAME + userdel -r "$ADD_USERNAME" exit 3 fi # Minimum number of characters in a password -MINIMUM_PASSWORD_LENGTH=$(cat /usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-passwords | grep 'MINIMUM_PASSWORD_LENGTH=' | head -n 1 | awk -F '=' '{print $2}') +MINIMUM_PASSWORD_LENGTH=$(grep 'MINIMUM_PASSWORD_LENGTH=' "/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-passwords" | head -n 1 | awk -F '=' '{print $2}') -NEW_USER_PASSWORD="$(openssl rand -base64 30 | cut -c1-${MINIMUM_PASSWORD_LENGTH})" +NEW_USER_PASSWORD="$(create_password "${MINIMUM_PASSWORD_LENGTH}")" chmod 600 /etc/shadow chmod 600 /etc/gshadow -useradd -m -p "$NEW_USER_PASSWORD" -s /bin/bash $ADD_USERNAME -adduser $ADD_USERNAME sasl -groupadd $ADD_USERNAME +useradd -m -p "$NEW_USER_PASSWORD" -s /bin/bash "$ADD_USERNAME" +adduser "$ADD_USERNAME" sasl +groupadd "$ADD_USERNAME" chmod 0000 /etc/shadow chmod 0000 /etc/gshadow -if [ ! -d /home/$ADD_USERNAME ]; then +if [ ! -d "/home/$ADD_USERNAME" ]; then echo $'Home directory was not created' exit 4 fi @@ -91,15 +91,15 @@ fi if [ "$SSH_PUBLIC_KEY" ]; then if [ ${#SSH_PUBLIC_KEY} -gt 5 ]; then if [ -f "$SSH_PUBLIC_KEY" ]; then - mkdir /home/$ADD_USERNAME/.ssh - cp $SSH_PUBLIC_KEY /home/$ADD_USERNAME/.ssh/authorized_keys - chown -R $ADD_USERNAME:$ADD_USERNAME /home/$ADD_USERNAME/.ssh + mkdir "/home/$ADD_USERNAME/.ssh" + cp "$SSH_PUBLIC_KEY" "/home/$ADD_USERNAME/.ssh/authorized_keys" + chown -R "$ADD_USERNAME":"$ADD_USERNAME" "/home/$ADD_USERNAME/.ssh" echo $'ssh public key installed' else if [[ "$SSH_PUBLIC_KEY" == "ssh-"* ]]; then - mkdir /home/$ADD_USERNAME/.ssh - echo "$SSH_PUBLIC_KEY" > /home/$ADD_USERNAME/.ssh/authorized_keys - chown -R $ADD_USERNAME:$ADD_USERNAME /home/$ADD_USERNAME/.ssh + mkdir "/home/$ADD_USERNAME/.ssh" + echo "$SSH_PUBLIC_KEY" > "/home/$ADD_USERNAME/.ssh/authorized_keys" + chown -R "$ADD_USERNAME":"$ADD_USERNAME" "/home/$ADD_USERNAME/.ssh" echo $'ssh public key installed' else echo $'The second parameter does not look like an ssh key' @@ -109,55 +109,54 @@ if [ "$SSH_PUBLIC_KEY" ]; then fi fi -if [ -d /home/$ADD_USERNAME/Maildir ]; then - if grep -q "set from=" /home/$ADD_USERNAME/.muttrc; then - sed -i "s|set from=.*|set from='$ADD_USERNAME <$ADD_USERNAME@$HOSTNAME>'|g" /home/$ADD_USERNAME/.muttrc +if [ -d "/home/$ADD_USERNAME/Maildir" ]; then + if grep -q "set from=" "/home/$ADD_USERNAME/.muttrc"; then + sed -i "s|set from=.*|set from='$ADD_USERNAME <$ADD_USERNAME@$HOSTNAME>'|g" "/home/$ADD_USERNAME/.muttrc" else - echo "set from='$ADD_USERNAME <$ADD_USERNAME@$HOSTNAME>'" >> /home/$ADD_USERNAME/.muttrc + echo "set from='$ADD_USERNAME <$ADD_USERNAME@$HOSTNAME>'" >> "/home/$ADD_USERNAME/.muttrc" fi - USERN='$USER@' - sed -i "s|$USERN|$ADD_USERNAME@|g" /home/$ADD_USERNAME/.procmailrc + sed -i "s|\$USER@|$ADD_USERNAME@|g" "/home/$ADD_USERNAME/.procmailrc" fi # generate a gpg key echo "Making a GPG key for $ADD_USERNAME@$HOSTNAME" -mkdir /home/$ADD_USERNAME/.gnupg -echo "keyserver $GPG_KEYSERVER" >> /home/$ADD_USERNAME/.gnupg/gpg.conf -echo 'keyserver-options auto-key-retrieve' >> /home/$ADD_USERNAME/.gnupg/gpg.conf -echo '' >> /home/$ADD_USERNAME/.gnupg/gpg.conf -echo '# default preferences' >> /home/$ADD_USERNAME/.gnupg/gpg.conf -echo 'personal-digest-preferences SHA256' >> /home/$ADD_USERNAME/.gnupg/gpg.conf -echo 'cert-digest-algo SHA256' >> /home/$ADD_USERNAME/.gnupg/gpg.conf -echo 'default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed' >> /home/$ADD_USERNAME/.gnupg/gpg.conf +mkdir "/home/$ADD_USERNAME/.gnupg" +{ echo "keyserver $GPG_KEYSERVER"; + echo 'keyserver-options auto-key-retrieve'; + echo ''; + echo '# default preferences'; + echo 'personal-digest-preferences SHA256'; + echo 'cert-digest-algo SHA256'; + echo 'default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed'; } >> "/home/$ADD_USERNAME/.gnupg/gpg.conf" -chown -R $ADD_USERNAME:$ADD_USERNAME /home/$ADD_USERNAME/.gnupg -chmod 700 /home/$ADD_USERNAME/.gnupg -chmod 600 /home/$ADD_USERNAME/.gnupg/* +chown -R "$ADD_USERNAME":"$ADD_USERNAME" "/home/$ADD_USERNAME/.gnupg" +chmod 700 "/home/$ADD_USERNAME/.gnupg" +chmod 600 "/home/$ADD_USERNAME/.gnupg/*" # Generate a GPG key -echo 'Key-Type: eddsa' > /home/$ADD_USERNAME/gpg-genkey.conf -echo 'Key-Curve: Ed25519' >> /home/$ADD_USERNAME/gpg-genkey.conf -echo 'Subkey-Type: eddsa' >> /home/$ADD_USERNAME/gpg-genkey.conf -echo "Name-Real: $ADD_USERNAME" >> /home/$ADD_USERNAME/gpg-genkey.conf -echo "Name-Email: $ADD_USERNAME@$HOSTNAME" >> /home/$ADD_USERNAME/gpg-genkey.conf -echo 'Expire-Date: 0' >> /home/$ADD_USERNAME/gpg-genkey.conf -echo "Passphrase: $NEW_USER_PASSWORD" >> /home/$ADD_USERNAME/gpg-genkey.conf -chown $ADD_USERNAME:$ADD_USERNAME /home/$ADD_USERNAME/gpg-genkey.conf -su -m root -c "gpg --homedir /home/$ADD_USERNAME/.gnupg --batch --full-gen-key /home/$ADD_USERNAME/gpg-genkey.conf" - $ADD_USERNAME -chown -R $ADD_USERNAME:$ADD_USERNAME /home/$ADD_USERNAME/.gnupg -shred -zu /home/$ADD_USERNAME/gpg-genkey.conf +{ echo 'Key-Type: eddsa'; + echo 'Key-Curve: Ed25519'; + echo 'Subkey-Type: eddsa'; + echo "Name-Real: $ADD_USERNAME"; + echo "Name-Email: $ADD_USERNAME@$HOSTNAME"; + echo 'Expire-Date: 0'; + echo "Passphrase: $NEW_USER_PASSWORD"; } > "/home/$ADD_USERNAME/gpg-genkey.conf" +chown "$ADD_USERNAME":"$ADD_USERNAME" "/home/$ADD_USERNAME/gpg-genkey.conf" +su -m root -c "gpg --homedir /home/$ADD_USERNAME/.gnupg --batch --full-gen-key /home/$ADD_USERNAME/gpg-genkey.conf" - "$ADD_USERNAME" +chown -R "$ADD_USERNAME":"$ADD_USERNAME" "/home/$ADD_USERNAME/.gnupg" +shred -zu "/home/$ADD_USERNAME/gpg-genkey.conf" MY_GPG_PUBLIC_KEY_ID=$(gpg_pubkey_from_email "$ADD_USERNAME" "$ADD_USERNAME@$HOSTNAME") -MY_GPG_PUBLIC_KEY=/home/$ADD_USERNAME/public_key.gpg -su -m root -c "gpg --output $MY_GPG_PUBLIC_KEY --armor --export $MY_GPG_PUBLIC_KEY_ID" - $ADD_USERNAME +MY_GPG_PUBLIC_KEY="/home/$ADD_USERNAME/public_key.gpg" +su -m root -c "gpg --output $MY_GPG_PUBLIC_KEY --armor --export $MY_GPG_PUBLIC_KEY_ID" - "$ADD_USERNAME" -if [ ! -f $MY_GPG_PUBLIC_KEY ]; then +if [ ! -f "$MY_GPG_PUBLIC_KEY" ]; then echo "GPG public key was not generated for $ADD_USERNAME@$HOSTNAME $MY_GPG_PUBLIC_KEY_ID" - userdel -r $ADD_USERNAME + userdel -r "$ADD_USERNAME" exit 7 fi -gpg_agent_setup $ADD_USERNAME +gpg_agent_setup "$ADD_USERNAME" # add a monkeysphere subkey #echo $'Adding monkeysphere subkey' @@ -173,82 +172,82 @@ gpg_agent_setup $ADD_USERNAME #echo $'Updating monkeysphere users' #monkeysphere-authentication update-users -if [ -f /home/$ADD_USERNAME/.muttrc ]; then +if [ -f "/home/$ADD_USERNAME/.muttrc" ]; then # encrypt outgoing mail to the "sent" folder - if ! grep -q "pgp_encrypt_only_command" /home/$ADD_USERNAME/.muttrc; then - echo '' >> /home/$ADD_USERNAME/.muttrc - echo $'# Encrypt items in the Sent folder' >> /home/$ADD_USERNAME/.muttrc - echo "set pgp_encrypt_only_command=\"/usr/lib/mutt/pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to $MY_GPG_PUBLIC_KEY_ID -- -r %r -- %f\"" >> /home/$ADD_USERNAME/.muttrc + if ! grep -q "pgp_encrypt_only_command" "/home/$ADD_USERNAME/.muttrc"; then + { echo ''; + echo $'# Encrypt items in the Sent folder'; + echo "set pgp_encrypt_only_command=\"/usr/lib/mutt/pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to $MY_GPG_PUBLIC_KEY_ID -- -r %r -- %f\""; } >> "/home/$ADD_USERNAME/.muttrc" else - sed -i "s|set pgp_encrypt_only_command.*|set pgp_encrypt_only_command=\"/usr/lib/mutt/pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to $MY_GPG_PUBLIC_KEY_ID -- -r %r -- %f\"|g" /home/$ADD_USERNAME/.muttrc + sed -i "s|set pgp_encrypt_only_command.*|set pgp_encrypt_only_command=\"/usr/lib/mutt/pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to $MY_GPG_PUBLIC_KEY_ID -- -r %r -- %f\"|g" "/home/$ADD_USERNAME/.muttrc" fi - if ! grep -q "pgp_encrypt_sign_command" /home/$ADD_USERNAME/.muttrc; then - echo "set pgp_encrypt_sign_command=\"/usr/lib/mutt/pgpewrap gpg %?p?--passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to $MY_GPG_PUBLIC_KEY_ID -- -r %r -- %f\"" >> /home/$ADD_USERNAME/.muttrc + if ! grep -q "pgp_encrypt_sign_command" "/home/$ADD_USERNAME/.muttrc"; then + echo "set pgp_encrypt_sign_command=\"/usr/lib/mutt/pgpewrap gpg %?p?--passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to $MY_GPG_PUBLIC_KEY_ID -- -r %r -- %f\"" >> "/home/$ADD_USERNAME/.muttrc" else - sed -i "s|set pgp_encrypt_sign_command.*|set pgp_encrypt_sign_command=\"/usr/lib/mutt/pgpewrap gpg %?p?--passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to $MY_GPG_PUBLIC_KEY_ID -- -r %r -- %f\"|g" /home/$ADD_USERNAME/.muttrc + sed -i "s|set pgp_encrypt_sign_command.*|set pgp_encrypt_sign_command=\"/usr/lib/mutt/pgpewrap gpg %?p?--passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to $MY_GPG_PUBLIC_KEY_ID -- -r %r -- %f\"|g" "/home/$ADD_USERNAME/.muttrc" fi fi -if ! grep -q "Change your GPG password" /home/$ADD_USERNAME/README; then - echo '' >> /home/$ADD_USERNAME/README - echo '' >> /home/$ADD_USERNAME/README - echo $'# Change your GPG password' >> /home/$ADD_USERNAME/README - echo $"It's very important to add a password to your GPG key so that" >> /home/$ADD_USERNAME/README - echo $"if anyone does get access to your email they still won't be able" >> /home/$ADD_USERNAME/README - echo $'to read them without knowning the GPG password.' >> /home/$ADD_USERNAME/README - echo $'You can change the it with:' >> /home/$ADD_USERNAME/README - echo '' >> /home/$ADD_USERNAME/README - echo " gpg --edit-key $MY_GPG_PUBLIC_KEY_ID" >> /home/$ADD_USERNAME/README - echo ' passwd' >> /home/$ADD_USERNAME/README - echo ' save' >> /home/$ADD_USERNAME/README - echo ' quit' >> /home/$ADD_USERNAME/README +if ! grep -q "Change your GPG password" "/home/$ADD_USERNAME/README"; then + { echo ''; + echo ''; + echo $'# Change your GPG password'; + echo $"It's very important to add a password to your GPG key so that"; + echo $"if anyone does get access to your email they still won't be able"; + echo $'to read them without knowning the GPG password.'; + echo $'You can change the it with:'; + echo ''; + echo " gpg --edit-key $MY_GPG_PUBLIC_KEY_ID"; + echo ' passwd'; + echo ' save'; + echo ' quit'; } >> "/home/$ADD_USERNAME/README" fi -chown $ADD_USERNAME:$ADD_USERNAME /home/$ADD_USERNAME/README -chown $ADD_USERNAME:$ADD_USERNAME $MY_GPG_PUBLIC_KEY -chmod 600 /home/$ADD_USERNAME/README +chown "$ADD_USERNAME":"$ADD_USERNAME" "/home/$ADD_USERNAME/README" +chown "$ADD_USERNAME":"$ADD_USERNAME" "$MY_GPG_PUBLIC_KEY" +chmod 600 "/home/$ADD_USERNAME/README" echo $'Detecting installed apps...' detect_apps get_apps_installed_names for app_name in "${APPS_INSTALLED_NAMES[@]}" do - if [[ $(function_exists add_user_${app_name}) == "1" ]]; then + if [[ $(function_exists "add_user_${app_name}") == "1" ]]; then echo $"Adding user to ${app_name}" - app_load_variables ${app_name} - retval=$(add_user_${app_name} "$ADD_USERNAME" "$NEW_USER_PASSWORD" | tail -n 1) + app_load_variables "${app_name}" + retval=$("add_user_${app_name}" "$ADD_USERNAME" "$NEW_USER_PASSWORD" | tail -n 1) if [[ $retval != '0' ]]; then echo $"Failed with error code ${retval}" - ${PROJECT_NAME}-rmuser $ADD_USERNAME --force + "${PROJECT_NAME}-rmuser" "$ADD_USERNAME" --force exit 672392 fi - if ! grep -q "${app_name}_${ADD_USERNAME}" $APP_USERS_FILE; then - echo "${app_name}_${ADD_USERNAME}" >> $APP_USERS_FILE + if ! grep -q "${app_name}_${ADD_USERNAME}" "$APP_USERS_FILE"; then + echo "${app_name}_${ADD_USERNAME}" >> "$APP_USERS_FILE" fi fi done if [ -f /etc/nginx/.htpasswd ]; then if ! grep -q "${ADD_USERNAME}:" /etc/nginx/.htpasswd; then - echo "$NEW_USER_PASSWORD" | htpasswd -i -s /etc/nginx/.htpasswd $ADD_USERNAME + echo "$NEW_USER_PASSWORD" | htpasswd -i -s /etc/nginx/.htpasswd "$ADD_USERNAME" fi fi # add user menu on ssh login -if ! grep -q 'controluser' /home/$ADD_USERNAME/.bashrc; then - echo 'controluser' >> /home/$ADD_USERNAME/.bashrc +if ! grep -q 'controluser' "/home/$ADD_USERNAME/.bashrc"; then + echo 'controluser' >> "/home/$ADD_USERNAME/.bashrc" fi # fix some gpg strangeness when searching for keys -printf '%%Assuan%%\nsocket=/dev/shm/S.dirmngr\n' > /home/$ADD_USERNAME/.gnupg/S.dirmngr -if [ -d /home/$ADD_USERNAME/.gnupg/crls.d ]; then - chmod +x /home/$ADD_USERNAME/.gnupg/crls.d +printf '%%Assuan%%\nsocket=/dev/shm/S.dirmngr\n' > "/home/$ADD_USERNAME/.gnupg/S.dirmngr" +if [ -d "/home/$ADD_USERNAME/.gnupg/crls.d" ]; then + chmod +x "/home/$ADD_USERNAME/.gnupg/crls.d" fi -${PROJECT_NAME}-pass -u $ADD_USERNAME -a login -p "$NEW_USER_PASSWORD" +"${PROJECT_NAME}-pass" -u "$ADD_USERNAME" -a login -p "$NEW_USER_PASSWORD" -gpg_agent_enable $ADD_USERNAME +gpg_agent_enable "$ADD_USERNAME" clear diff --git a/src/freedombone-app-akaunting b/src/freedombone-app-akaunting index 82fbc44d..6887c7a4 100755 --- a/src/freedombone-app-akaunting +++ b/src/freedombone-app-akaunting @@ -49,12 +49,12 @@ akaunting_variables=(ONION_ONLY MY_USERNAME) function akaunting_remove_bad_links { - cd /var/www/$AKAUNTING_DOMAIN_NAME/htdocs + cd "/var/www/$AKAUNTING_DOMAIN_NAME/htdocs" || exit 365873658 # copy jquery locally jquery_version='1.12.4' if [ ! -f jquery-${jquery_version}.js ]; then - cd /var/www/$GHOST_DOMAIN_NAME/htdocs + cd "/var/www/$GHOST_DOMAIN_NAME/htdocs" || exit 3276324 wget https://code.jquery.com/jquery-${jquery_version}.js jquery_hash=$(sha256sum jquery-${jquery_version}.js | awk -F ' ' '{print $1}') if [[ "$jquery_hash" != '430f36f9b5f21aae8cc9dca6a81c4d3d84da5175eaedcf2fdc2c226302cb3575' ]]; then @@ -74,7 +74,7 @@ function akaunting_remove_bad_links { sed -i '/googleapi/d' vendor/almasaeed2010/adminlte/dist/css/alt/AdminLTE-without-plugins.min.css sed -i "s|ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js|$AKAUNTING_DOMAIN_NAME/jquery-${jquery_version}.js|g" vendor/almasaeed2010/adminlte/plugins/ckeditor/samples/old/jquery.html - chown -R www-data:www-data /var/www/$AKAUNTING_DOMAIN_NAME/htdocs + chown -R www-data:www-data "/var/www/$AKAUNTING_DOMAIN_NAME/htdocs" } function logging_on_akaunting { @@ -88,65 +88,66 @@ function logging_off_akaunting { function remove_user_akaunting { remove_username="$1" - ${PROJECT_NAME}-pass -u $remove_username --rmapp akaunting + "${PROJECT_NAME}-pass" -u "$remove_username" --rmapp akaunting } function add_user_akaunting { new_username="$1" new_user_password="$2" - ${PROJECT_NAME}-pass -u $new_username -a akaunting -p "$new_user_password" + "${PROJECT_NAME}-pass" -u "$new_username" -a akaunting -p "$new_user_password" echo '0' } function install_interactive_akaunting { - if [ ! $ONION_ONLY ]; then + if [ ! "$ONION_ONLY" ]; then ONION_ONLY='no' fi - if [[ $ONION_ONLY != "no" ]]; then + if [[ "$ONION_ONLY" != "no" ]]; then AKAUNTING_DOMAIN_NAME='akaunting.local' else AKAUNTING_DETAILS_COMPLETE= while [ ! $AKAUNTING_DETAILS_COMPLETE ] do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 + data=$(mktemp 2>/dev/null) if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then dialog --backtitle $"Freedombone Configuration" \ --title $"Akaunting Configuration" \ - --form $"\nPlease enter your Akaunting details.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 14 65 2 \ + --form $"\\nPlease enter your Akaunting details.\\n\\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 14 65 2 \ $"Domain:" 1 1 "$(grep 'AKAUNTING_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \ $"Code:" 2 1 "$(grep 'AKAUNTING_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 25 33 255 \ - 2> $data + 2> "$data" else dialog --backtitle $"Freedombone Configuration" \ --title $"Akaunting Configuration" \ - --form $"\nPlease enter your Akaunting details.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 14 65 2 \ + --form $"\\nPlease enter your Akaunting details.\\n\\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 14 65 2 \ $"Domain:" 1 1 "$(grep 'AKAUNTING_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \ - 2> $data + 2> "$data" fi sel=$? case $sel in - 1) exit 1;; - 255) exit 1;; + 1) rm -f "$data" + exit 1;; + 255) rm -f "$data" + exit 1;; esac - AKAUNTING_DOMAIN_NAME=$(cat $data | sed -n 1p) - if [ $AKAUNTING_DOMAIN_NAME ]; then + AKAUNTING_DOMAIN_NAME=$(sed -n 1p < "$data") + if [ "$AKAUNTING_DOMAIN_NAME" ]; then if [[ $AKAUNTING_DOMAIN_NAME == "$HUBZILLA_DOMAIN_NAME" ]]; then AKAUNTING_DOMAIN_NAME="" fi TEST_DOMAIN_NAME=$AKAUNTING_DOMAIN_NAME validate_domain_name - if [[ $TEST_DOMAIN_NAME != $AKAUNTING_DOMAIN_NAME ]]; then + if [[ "$TEST_DOMAIN_NAME" != "$AKAUNTING_DOMAIN_NAME" ]]; then AKAUNTING_DOMAIN_NAME= dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50 else if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then - AKAUNTING_CODE=$(cat $data | sed -n 2p) + AKAUNTING_CODE=$(sed -n 2p < "$data") validate_freedns_code "$AKAUNTING_CODE" - if [ ! $VALID_CODE ]; then + if [ ! "$VALID_CODE" ]; then AKAUNTING_DOMAIN_NAME= fi fi @@ -155,6 +156,7 @@ function install_interactive_akaunting { if [ $AKAUNTING_DOMAIN_NAME ]; then AKAUNTING_DETAILS_COMPLETE="yes" fi + rm -f "$data" done write_config_param "AKAUNTING_CODE" "$AKAUNTING_CODE" @@ -169,23 +171,23 @@ function change_password_akaunting { read_config_param 'AKAUNTING_DOMAIN_NAME' - ${PROJECT_NAME}-pass -u "$curr_username" -a akaunting -p "$new_user_password" + "${PROJECT_NAME}-pass" -u "$curr_username" -a akaunting -p "$new_user_password" } function akaunting_create_database { - if [ -f $IMAGE_PASSWORD_FILE ]; then - AKAUNTING_ADMIN_PASSWORD="$(printf `cat $IMAGE_PASSWORD_FILE`)" + if [ -f "$IMAGE_PASSWORD_FILE" ]; then + AKAUNTING_ADMIN_PASSWORD="$(printf "%s" "$(cat "$IMAGE_PASSWORD_FILE")")" else - if [ ! $AKAUNTING_ADMIN_PASSWORD ]; then - AKAUNTING_ADMIN_PASSWORD="$(create_password ${MINIMUM_PASSWORD_LENGTH})" + if [ ! "$AKAUNTING_ADMIN_PASSWORD" ]; then + AKAUNTING_ADMIN_PASSWORD="$(create_password "${MINIMUM_PASSWORD_LENGTH}")" fi fi - if [ ! $AKAUNTING_ADMIN_PASSWORD ]; then + if [ ! "$AKAUNTING_ADMIN_PASSWORD" ]; then return fi function_check create_database - create_database akaunting "$AKAUNTING_ADMIN_PASSWORD" $MY_USERNAME + create_database akaunting "$AKAUNTING_ADMIN_PASSWORD" "$MY_USERNAME" } function reconfigure_akaunting { @@ -198,70 +200,69 @@ function upgrade_akaunting { return fi - if grep -q "akaunting domain" $COMPLETION_FILE; then + if grep -q "akaunting domain" "$COMPLETION_FILE"; then AKAUNTING_DOMAIN_NAME=$(get_completion_param "akaunting domain") fi # update to the next commit function_check set_repo_commit - set_repo_commit /var/www/$AKAUNTING_DOMAIN_NAME/htdocs "akaunting commit" "$AKAUNTING_COMMIT" $AKAUNTING_REPO + set_repo_commit "/var/www/$AKAUNTING_DOMAIN_NAME/htdocs" "akaunting commit" "$AKAUNTING_COMMIT" "$AKAUNTING_REPO" - cd /var/www/$AKAUNTING_DOMAIN_NAME/htdocs + cd "/var/www/$AKAUNTING_DOMAIN_NAME/htdocs" || exit 367835 install_composer akaunting_remove_bad_links - chown -R www-data:www-data /var/www/${AKAUNTING_DOMAIN_NAME}/htdocs + chown -R www-data:www-data "/var/www/${AKAUNTING_DOMAIN_NAME}/htdocs" } function backup_local_akaunting { - akaunting_path=/var/www/${AKAUNTING_DOMAIN_NAME}/htdocs - if [ -d $akaunting_path ]; then - suspend_site ${AKAUNTING_DOMAIN_NAME} + akaunting_path="/var/www/${AKAUNTING_DOMAIN_NAME}/htdocs" + if [ -d "$akaunting_path" ]; then + suspend_site "${AKAUNTING_DOMAIN_NAME}" function_check backup_database_to_usb backup_database_to_usb akaunting - backup_directory_to_usb $akaunting_path akaunting + backup_directory_to_usb "$akaunting_path" akaunting restart_site fi } function restore_local_akaunting { temp_restore_dir=/root/tempakaunting - akaunting_dir=/var/www/${AKAUNTING_DOMAIN_NAME}/htdocs + akaunting_dir="/var/www/${AKAUNTING_DOMAIN_NAME}/htdocs" - suspend_site ${AKAUNTING_DOMAIN_NAME} + suspend_site "${AKAUNTING_DOMAIN_NAME}" function_check akaunting_create_database akaunting_create_database - restore_database akaunting ${AKAUNTING_DOMAIN_NAME} - chown www-data:www-data $akaunting_dir + restore_database akaunting "${AKAUNTING_DOMAIN_NAME}" + chown www-data:www-data "$akaunting_dir" restart_site } function backup_remote_akaunting { - akaunting_path=/var/www/${AKAUNTING_DOMAIN_NAME}/htdocs - if [ -d $akaunting_path ]; then - suspend_site ${AKAUNTING_DOMAIN_NAME} + akaunting_path="/var/www/${AKAUNTING_DOMAIN_NAME}/htdocs" + if [ -d "$akaunting_path" ]; then + suspend_site "${AKAUNTING_DOMAIN_NAME}" function_check backup_database_to_friend backup_database_to_friend akaunting - backup_directory_to_friend $akaunting_path akaunting + backup_directory_to_friend "$akaunting_path" akaunting restart_site fi } function restore_remote_akaunting { - temp_restore_dir=/root/tempakaunting - akaunting_dir=/var/www/${AKAUNTING_DOMAIN_NAME}/htdocs + akaunting_dir="/var/www/${AKAUNTING_DOMAIN_NAME}/htdocs" - suspend_site ${AKAUNTING_DOMAIN_NAME} + suspend_site "${AKAUNTING_DOMAIN_NAME}" function_check akaunting_create_database akaunting_create_database - restore_database_from_friend akaunting ${AKAUNTING_DOMAIN_NAME} - chown www-data:www-data $akaunting_dir + restore_database_from_friend akaunting "${AKAUNTING_DOMAIN_NAME}" + chown www-data:www-data "$akaunting_dir" restart_site } @@ -274,28 +275,28 @@ function remove_akaunting { read_config_param "AKAUNTING_DOMAIN_NAME" read_config_param "MY_USERNAME" echo "Removing $AKAUNTING_DOMAIN_NAME" - nginx_dissite $AKAUNTING_DOMAIN_NAME - remove_certs $AKAUNTING_DOMAIN_NAME + nginx_dissite "$AKAUNTING_DOMAIN_NAME" + remove_certs "$AKAUNTING_DOMAIN_NAME" - if [ -d /var/www/$AKAUNTING_DOMAIN_NAME ]; then - rm -rf /var/www/$AKAUNTING_DOMAIN_NAME + if [ -d "/var/www/$AKAUNTING_DOMAIN_NAME" ]; then + rm -rf "/var/www/$AKAUNTING_DOMAIN_NAME" fi - if [ -f /etc/nginx/sites-available/$AKAUNTING_DOMAIN_NAME ]; then - rm /etc/nginx/sites-available/$AKAUNTING_DOMAIN_NAME + if [ -f "/etc/nginx/sites-available/$AKAUNTING_DOMAIN_NAME" ]; then + rm "/etc/nginx/sites-available/$AKAUNTING_DOMAIN_NAME" fi function_check drop_database drop_database akaunting function_check remove_onion_service - remove_onion_service akaunting ${AKAUNTING_ONION_PORT} + remove_onion_service akaunting "${AKAUNTING_ONION_PORT}" if grep -q "akaunting" /etc/crontab; then sed -i "/akaunting/d" /etc/crontab fi remove_app akaunting remove_completion_param install_akaunting - sed -i '/akaunting/d' $COMPLETION_FILE + sed -i '/akaunting/d' "$COMPLETION_FILE" function_check remove_ddns_domain - remove_ddns_domain $AKAUNTING_DOMAIN_NAME + remove_ddns_domain "$AKAUNTING_DOMAIN_NAME" } function install_akaunting { @@ -303,7 +304,7 @@ function install_akaunting { ONION_ONLY='no' fi - if [ ! $AKAUNTING_DOMAIN_NAME ]; then + if [ ! "$AKAUNTING_DOMAIN_NAME" ]; then echo $'No domain name was given for akaunting' exit 89353 fi @@ -317,142 +318,142 @@ function install_akaunting { apt-get -yq install php-gettext php-curl php-gd php-mysql git curl apt-get -yq install memcached php-memcached php-intl exiftool libfcgi0ldbl - if [ ! -d /var/www/$AKAUNTING_DOMAIN_NAME ]; then - mkdir /var/www/$AKAUNTING_DOMAIN_NAME + if [ ! -d "/var/www/$AKAUNTING_DOMAIN_NAME" ]; then + mkdir "/var/www/$AKAUNTING_DOMAIN_NAME" fi - if [ ! -d /var/www/$AKAUNTING_DOMAIN_NAME/htdocs ]; then + if [ ! -d "/var/www/$AKAUNTING_DOMAIN_NAME/htdocs" ]; then if [ -d /repos/akaunting ]; then - mkdir /var/www/$AKAUNTING_DOMAIN_NAME/htdocs - cp -r -p /repos/akaunting/. /var/www/$AKAUNTING_DOMAIN_NAME/htdocs - cd /var/www/$AKAUNTING_DOMAIN_NAME/htdocs + mkdir "/var/www/$AKAUNTING_DOMAIN_NAME/htdocs" + cp -r -p /repos/akaunting/. "/var/www/$AKAUNTING_DOMAIN_NAME/htdocs" + cd "/var/www/$AKAUNTING_DOMAIN_NAME/htdocs" || exit 23458735 git pull else function_check git_clone - git_clone $AKAUNTING_REPO /var/www/$AKAUNTING_DOMAIN_NAME/htdocs + git_clone "$AKAUNTING_REPO" "/var/www/$AKAUNTING_DOMAIN_NAME/htdocs" fi - if [ ! -d /var/www/$AKAUNTING_DOMAIN_NAME/htdocs ]; then + if [ ! -d "/var/www/$AKAUNTING_DOMAIN_NAME/htdocs" ]; then echo $'Unable to clone akaunting repo' exit 2589389 fi fi - cd /var/www/$AKAUNTING_DOMAIN_NAME/htdocs - git checkout $AKAUNTING_COMMIT -b $AKAUNTING_COMMIT + cd "/var/www/$AKAUNTING_DOMAIN_NAME/htdocs" || exit 23468724527 + git checkout "$AKAUNTING_COMMIT" -b "$AKAUNTING_COMMIT" set_completion_param "akaunting commit" "$AKAUNTING_COMMIT" - chmod g+w /var/www/$AKAUNTING_DOMAIN_NAME/htdocs - chown -R www-data:www-data /var/www/$AKAUNTING_DOMAIN_NAME/htdocs + chmod g+w "/var/www/$AKAUNTING_DOMAIN_NAME/htdocs" + chown -R www-data:www-data "/var/www/$AKAUNTING_DOMAIN_NAME/htdocs" - cd /var/www/$AKAUNTING_DOMAIN_NAME/htdocs + cd "/var/www/$AKAUNTING_DOMAIN_NAME/htdocs" || exit 34783524 install_composer function_check akaunting_create_database akaunting_create_database function_check add_ddns_domain - add_ddns_domain $AKAUNTING_DOMAIN_NAME + add_ddns_domain "$AKAUNTING_DOMAIN_NAME" AKAUNTING_ONION_HOSTNAME=$(add_onion_service akaunting 80 ${AKAUNTING_ONION_PORT}) akaunting_nginx_site=/etc/nginx/sites-available/$AKAUNTING_DOMAIN_NAME if [[ $ONION_ONLY == "no" ]]; then function_check nginx_http_redirect - nginx_http_redirect $AKAUNTING_DOMAIN_NAME "index index.php" - echo 'server {' >> $akaunting_nginx_site - echo ' listen 443 ssl;' >> $akaunting_nginx_site - echo ' #listen [::]:443 ssl;' >> $akaunting_nginx_site - echo " server_name $AKAUNTING_DOMAIN_NAME;" >> $akaunting_nginx_site - echo '' >> $akaunting_nginx_site + nginx_http_redirect "$AKAUNTING_DOMAIN_NAME" "index index.php" + { echo 'server {'; + echo ' listen 443 ssl;'; + echo ' #listen [::]:443 ssl;'; + echo " server_name $AKAUNTING_DOMAIN_NAME;"; + echo ''; } >> "$akaunting_nginx_site" function_check nginx_compress - nginx_compress $AKAUNTING_DOMAIN_NAME - echo '' >> $akaunting_nginx_site - echo ' # Security' >> $akaunting_nginx_site + nginx_compress "$AKAUNTING_DOMAIN_NAME" + echo '' >> "$akaunting_nginx_site" + echo ' # Security' >> "$akaunting_nginx_site" function_check nginx_ssl - nginx_ssl $AKAUNTING_DOMAIN_NAME + nginx_ssl "$AKAUNTING_DOMAIN_NAME" function_check nginx_disable_sniffing - nginx_disable_sniffing $AKAUNTING_DOMAIN_NAME + nginx_disable_sniffing "$AKAUNTING_DOMAIN_NAME" - echo ' add_header Strict-Transport-Security max-age=15768000;' >> $akaunting_nginx_site - echo '' >> $akaunting_nginx_site - echo ' access_log /dev/null;' >> $akaunting_nginx_site - echo ' error_log /dev/null;' >> $akaunting_nginx_site - echo '' >> $akaunting_nginx_site - echo " root /var/www/$AKAUNTING_DOMAIN_NAME/htdocs;" >> $akaunting_nginx_site - echo '' >> $akaunting_nginx_site - echo ' index index.php;' >> $akaunting_nginx_site - echo '' >> $akaunting_nginx_site - echo ' location ~ \.php {' >> $akaunting_nginx_site - echo ' include snippets/fastcgi-php.conf;' >> $akaunting_nginx_site - echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> $akaunting_nginx_site - echo ' fastcgi_read_timeout 30;' >> $akaunting_nginx_site - echo ' }' >> $akaunting_nginx_site - echo '' >> $akaunting_nginx_site - echo ' location / {' >> $akaunting_nginx_site + { echo ' add_header Strict-Transport-Security max-age=15768000;'; + echo ''; + echo ' access_log /dev/null;'; + echo ' error_log /dev/null;'; + echo ''; + echo " root /var/www/$AKAUNTING_DOMAIN_NAME/htdocs;"; + echo ''; + echo ' index index.php;'; + echo ''; + echo ' location ~ \.php {'; + echo ' include snippets/fastcgi-php.conf;'; + echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;'; + echo ' fastcgi_read_timeout 30;'; + echo ' }'; + echo ''; + echo ' location / {'; } >> "$akaunting_nginx_site" function_check nginx_limits - nginx_limits $AKAUNTING_DOMAIN_NAME '15m' - echo ' try_files $uri $uri/ @akaunting;' >> $akaunting_nginx_site - echo ' }' >> $akaunting_nginx_site - echo '' >> $akaunting_nginx_site - echo ' location @akaunting {' >> $akaunting_nginx_site - echo ' rewrite ^(.*)$ /index.php?p=$1 last;' >> $akaunting_nginx_site - echo ' }' >> $akaunting_nginx_site - echo '' >> $akaunting_nginx_site - echo ' location ~ /\.(ht|git) {' >> $akaunting_nginx_site - echo ' deny all;' >> $akaunting_nginx_site - echo ' }' >> $akaunting_nginx_site - echo '' >> $akaunting_nginx_site - echo '}' >> $akaunting_nginx_site + nginx_limits "$AKAUNTING_DOMAIN_NAME" '15m' + { echo " try_files \$uri \$uri/ @akaunting;"; + echo ' }'; + echo ''; + echo ' location @akaunting {'; + echo " rewrite ^(.*)\$ /index.php?p=\$1 last;"; + echo ' }'; + echo ''; + echo ' location ~ /\.(ht|git) {'; + echo ' deny all;'; + echo ' }'; + echo ''; + echo '}'; } >> "$akaunting_nginx_site" else - echo -n '' > $akaunting_nginx_site + echo -n '' > "$akaunting_nginx_site" fi - echo 'server {' >> $akaunting_nginx_site - echo " listen 127.0.0.1:$AKAUNTING_ONION_PORT default_server;" >> $akaunting_nginx_site - echo " server_name $AKAUNTING_ONION_HOSTNAME;" >> $akaunting_nginx_site - echo '' >> $akaunting_nginx_site - function_check nginx_compress - nginx_compress $AKAUNTING_DOMAIN_NAME - echo '' >> $akaunting_nginx_site + { echo 'server {'; + echo " listen 127.0.0.1:$AKAUNTING_ONION_PORT default_server;"; + echo " server_name $AKAUNTING_ONION_HOSTNAME;"; + echo ''; } >> "$akaunting_nginx_site" + function_check nginx_compress + nginx_compress "$AKAUNTING_DOMAIN_NAME" + echo '' >> "$akaunting_nginx_site" function_check nginx_disable_sniffing - nginx_disable_sniffing $AKAUNTING_DOMAIN_NAME - echo '' >> $akaunting_nginx_site - echo ' access_log /dev/null;' >> $akaunting_nginx_site - echo ' error_log /dev/null;' >> $akaunting_nginx_site - echo '' >> $akaunting_nginx_site - echo " root /var/www/$AKAUNTING_DOMAIN_NAME/htdocs;" >> $akaunting_nginx_site - echo '' >> $akaunting_nginx_site - echo ' index index.php;' >> $akaunting_nginx_site - echo '' >> $akaunting_nginx_site - echo ' location ~ \.php {' >> $akaunting_nginx_site - echo ' include snippets/fastcgi-php.conf;' >> $akaunting_nginx_site - echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> $akaunting_nginx_site - echo ' fastcgi_read_timeout 30;' >> $akaunting_nginx_site - echo ' }' >> $akaunting_nginx_site - echo '' >> $akaunting_nginx_site - echo ' location / {' >> $akaunting_nginx_site + nginx_disable_sniffing "$AKAUNTING_DOMAIN_NAME" + { echo ''; + echo ' access_log /dev/null;'; + echo ' error_log /dev/null;'; + echo ''; + echo " root /var/www/$AKAUNTING_DOMAIN_NAME/htdocs;"; + echo ''; + echo ' index index.php;'; + echo ''; + echo ' location ~ \.php {'; + echo ' include snippets/fastcgi-php.conf;'; + echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;'; + echo ' fastcgi_read_timeout 30;'; + echo ' }'; + echo ''; + echo ' location / {'; } >> "$akaunting_nginx_site" function_check nginx_limits - nginx_limits $AKAUNTING_DOMAIN_NAME '15m' - echo ' try_files $uri $uri/ @akaunting;' >> $akaunting_nginx_site - echo ' }' >> $akaunting_nginx_site - echo '' >> $akaunting_nginx_site - echo ' location @akaunting {' >> $akaunting_nginx_site - echo ' rewrite ^(.*)$ /index.php?p=$1 last;' >> $akaunting_nginx_site - echo ' }' >> $akaunting_nginx_site - echo '' >> $akaunting_nginx_site - echo ' location ~ /\.(ht|git) {' >> $akaunting_nginx_site - echo ' deny all;' >> $akaunting_nginx_site - echo ' }' >> $akaunting_nginx_site - echo '}' >> $akaunting_nginx_site + nginx_limits "$AKAUNTING_DOMAIN_NAME" '15m' + { echo " try_files \$uri \$uri/ @akaunting;"; + echo ' }'; + echo ''; + echo ' location @akaunting {'; + echo " rewrite ^(.*)\$ /index.php?p=\$1 last;"; + echo ' }'; + echo ''; + echo ' location ~ /\.(ht|git) {'; + echo ' deny all;'; + echo ' }'; + echo '}'; } >> "$akaunting_nginx_site" function_check configure_php configure_php function_check create_site_certificate - create_site_certificate $AKAUNTING_DOMAIN_NAME 'yes' + create_site_certificate "$AKAUNTING_DOMAIN_NAME" 'yes' function_check nginx_ensite - nginx_ensite $AKAUNTING_DOMAIN_NAME + nginx_ensite "$AKAUNTING_DOMAIN_NAME" akaunting_remove_bad_links @@ -460,7 +461,7 @@ function install_akaunting { systemctl restart php7.0-fpm systemctl restart nginx - ${PROJECT_NAME}-pass -u $MY_USERNAME -a akaunting -p "$AKAUNTING_ADMIN_PASSWORD" + "${PROJECT_NAME}-pass" -u "$MY_USERNAME" -a akaunting -p "$AKAUNTING_ADMIN_PASSWORD" set_completion_param "akaunting domain" "$AKAUNTING_DOMAIN_NAME" diff --git a/src/freedombone-app-batman b/src/freedombone-app-batman index dfe27c37..22c64170 100755 --- a/src/freedombone-app-batman +++ b/src/freedombone-app-batman @@ -90,8 +90,7 @@ function restore_remote_batman { } function remove_batman { - ${PROJECT_NAME}-mesh-install -f batman --remove yes - if [ ! "$?" = "0" ]; then + if ! "${PROJECT_NAME}-mesh-install" -f batman --remove yes; then echo $'Failed to remove batman' exit 79353 fi @@ -100,45 +99,46 @@ function remove_batman { } function mesh_install_batman { + # shellcheck disable=SC2154 chroot "$rootdir" apt-get -yq install iproute bridge-utils libnetfilter-conntrack3 batctl chroot "$rootdir" apt-get -yq install python-dev libevent-dev ebtables python-pip git chroot "$rootdir" apt-get -yq install wireless-tools rfkill - if ! grep -q "batman_adv" $rootdir/etc/modules; then - echo 'batman_adv' >> $rootdir/etc/modules + if ! grep -q "batman_adv" "$rootdir/etc/modules"; then + echo 'batman_adv' >> "$rootdir/etc/modules" fi BATMAN_SCRIPT=$rootdir/var/lib/batman - if [ -f /usr/local/bin/${PROJECT_NAME}-mesh-batman ]; then - cp /usr/local/bin/${PROJECT_NAME}-mesh-batman $BATMAN_SCRIPT + if [ -f "/usr/local/bin/${PROJECT_NAME}-mesh-batman" ]; then + cp "/usr/local/bin/${PROJECT_NAME}-mesh-batman" "$BATMAN_SCRIPT" else - cp /usr/bin/${PROJECT_NAME}-mesh-batman $BATMAN_SCRIPT + cp "/usr/bin/${PROJECT_NAME}-mesh-batman" "$BATMAN_SCRIPT" fi BATMAN_DAEMON=$rootdir/etc/systemd/system/batman.service - echo '[Unit]' > $BATMAN_DAEMON - echo 'Description=B.A.T.M.A.N. Advanced' >> $BATMAN_DAEMON - echo 'After=network.target' >> $BATMAN_DAEMON - echo '' >> $BATMAN_DAEMON - echo '[Service]' >> $BATMAN_DAEMON - echo 'RemainAfterExit=yes' >> $BATMAN_DAEMON - echo "ExecStart=/var/lib/batman start" >> $BATMAN_DAEMON - echo "ExecStop=/var/lib/batman stop" >> $BATMAN_DAEMON - echo 'Restart=on-failure' >> $BATMAN_DAEMON - echo 'SuccessExitStatus=3 4' >> $BATMAN_DAEMON - echo 'RestartForceExitStatus=3 4' >> $BATMAN_DAEMON - echo '' >> $BATMAN_DAEMON - echo '# Allow time for the server to start/stop' >> $BATMAN_DAEMON - echo 'TimeoutSec=300' >> $BATMAN_DAEMON - echo '' >> $BATMAN_DAEMON - echo '[Install]' >> $BATMAN_DAEMON - echo 'WantedBy=multi-user.target' >> $BATMAN_DAEMON + { echo '[Unit]'; + echo 'Description=B.A.T.M.A.N. Advanced'; + echo 'After=network.target'; + echo ''; + echo '[Service]'; + echo 'RemainAfterExit=yes'; + echo "ExecStart=/var/lib/batman start"; + echo "ExecStop=/var/lib/batman stop"; + echo 'Restart=on-failure'; + echo 'SuccessExitStatus=3 4'; + echo 'RestartForceExitStatus=3 4'; + echo ''; + echo '# Allow time for the server to start/stop'; + echo 'TimeoutSec=300'; + echo ''; + echo '[Install]'; + echo 'WantedBy=multi-user.target'; } > "$BATMAN_DAEMON" chroot "$rootdir" systemctl enable batman } function install_batman { - if [ $INSTALLING_MESH ]; then + if [ "$INSTALLING_MESH" ]; then mesh_install_batman return fi @@ -146,8 +146,7 @@ function install_batman { return fi - ${PROJECT_NAME}-mesh-install -f batman - if [ ! "$?" = "0" ]; then + if ! "${PROJECT_NAME}-mesh-install" -f batman; then echo $'Failed to install batman' exit 72524 fi diff --git a/src/freedombone-app-bdsmail b/src/freedombone-app-bdsmail index 20ae44f1..1c9163da 100755 --- a/src/freedombone-app-bdsmail +++ b/src/freedombone-app-bdsmail @@ -49,29 +49,29 @@ function bdsmail_configure_users { if [[ $(is_valid_user "$USERNAME") == "1" ]]; then # Add the user to the i2p group - usermod -a -G i2psvc $USERNAME + usermod -a -G i2psvc "$USERNAME" - if [ -f /home/$USERNAME/.muttrc ]; then + if [ -f "/home/$USERNAME/.muttrc" ]; then # Create a mutt i2p folder - if ! grep -q ' =i2p' /home/$USERNAME/.muttrc; then - MUTT_MAILBOXES=$(grep "mailboxes =" /home/$USERNAME/.muttrc) - sed -i "s|$MUTT_MAILBOXES|$MUTT_MAILBOXES =i2p|g" /home/$USERNAME/.muttrc + if ! grep -q ' =i2p' "/home/$USERNAME/.muttrc"; then + MUTT_MAILBOXES=$(grep "mailboxes =" "/home/$USERNAME/.muttrc") + sed -i "s|$MUTT_MAILBOXES|$MUTT_MAILBOXES =i2p|g" "/home/$USERNAME/.muttrc" fi # Create a mutt folder hook to the i2p config - if ! grep -q 'folder-hook !i2p' /home/$USERNAME/.muttrc; then - echo 'folder-hook !i2p/* source ~/.muttrc' >> /home/$USERNAME/.muttrc + if ! grep -q 'folder-hook !i2p' "/home/$USERNAME/.muttrc"; then + echo 'folder-hook !i2p/* source ~/.muttrc' >> "/home/$USERNAME/.muttrc" fi - if ! grep -q 'folder-hook i2p' /home/$USERNAME/.muttrc; then - echo 'folder-hook i2p/* source ~/.mutt/bdsmail' >> /home/$USERNAME/.muttrc + if ! grep -q 'folder-hook i2p' "/home/$USERNAME/.muttrc"; then + echo 'folder-hook i2p/* source ~/.mutt/bdsmail' >> "/home/$USERNAME/.muttrc" fi fi # Create a directory where i2p mail will be stored - if [ ! -d /home/$USERNAME/Maildir/i2p/new ]; then - mkdir -p /home/$USERNAME/Maildir/i2p/cur - mkdir -p /home/$USERNAME/Maildir/i2p/new - chown -R $USERNAME:$USERNAME /home/$USERNAME/Maildir/i2p + if [ ! -d "/home/$USERNAME/Maildir/i2p/new" ]; then + mkdir -p "/home/$USERNAME/Maildir/i2p/cur" + mkdir -p "/home/$USERNAME/Maildir/i2p/new" + chown -R "$USERNAME":"$USERNAME" "/home/$USERNAME/Maildir/i2p" fi fi done @@ -93,18 +93,18 @@ function add_user_bdsmail { new_username="$1" new_user_password="$2" - if [ ! -d /home/$new_username/.mutt ]; then - mkdir /home/$new_username/.mutt - cp /etc/skel/.mutt/bdsmail /home/$new_username/.mutt + if [ ! -d "/home/$new_username/.mutt" ]; then + mkdir "/home/$new_username/.mutt" + cp /etc/skel/.mutt/bdsmail "/home/$new_username/.mutt" fi read_config_param MY_USERNAME - BDSMAIL_PASSWORD=$(${PROJECT_NAME}-pass -u $MY_USERNAME -a bdsmail) - sed -i "s|username|$new_username|g" /home/$new_username/.mutt/bdsmail - sed -i "s|password|$BDSMAIL_PASSWORD|g" /home/$new_username/.mutt/bdsmail + BDSMAIL_PASSWORD=$("${PROJECT_NAME}-pass" -u "$MY_USERNAME" -a bdsmail) + sed -i "s|username|$new_username|g" "/home/$new_username/.mutt/bdsmail" + sed -i "s|password|$BDSMAIL_PASSWORD|g" "/home/$new_username/.mutt/bdsmail" bdsmail_configure_users - cd $BDSMAIL_DIR - $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini $new_username /home/$new_username/Maildir/i2p "$BDSMAIL_PASSWORD" - chown -R $new_username:$new_username /home/$new_username/.mutt + cd $BDSMAIL_DIR || exit 57247684234 + $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini "$new_username" "/home/$new_username/Maildir/i2p" "$BDSMAIL_PASSWORD" + chown -R "$new_username":"$new_username" "/home/$new_username/.mutt" echo '0' } @@ -117,16 +117,16 @@ function change_password_bdsmail { curr_username="$1" new_user_password="$2" - ${PROJECT_NAME}-pass -u $MY_USERNAME -a bdsmail -p "$new_user_password" + "${PROJECT_NAME}-pass" -u "$MY_USERNAME" -a bdsmail -p "$new_user_password" for d in /home/*/ ; do USERNAME=$(echo "$d" | awk -F '/' '{print $3}') if [[ $(is_valid_user "$USERNAME") == "1" ]]; then - sed -i "s|set smtp_url=.*|set smtp_url=smtp://${curr_username}:${new_user_password}@127.0.0.1:$I2P_SMTP_PORT/" /home/${USERNAME}/.mutt/bdsmail - sed -i "s|set from=.*|set from=${USERNAME}@$(bdsmail_domain)|g" /home/${USERNAME}/.mutt/bdsmail - chown ${USERNAME}:${USERNAME} /home/${USERNAME}/.mutt/bdsmail + sed -i "s|set smtp_url=.*|set smtp_url=smtp://${curr_username}:${new_user_password}@127.0.0.1:$I2P_SMTP_PORT/" "/home/${USERNAME}/.mutt/bdsmail" + sed -i "s|set from=.*|set from=${USERNAME}@$(bdsmail_domain)|g" "/home/${USERNAME}/.mutt/bdsmail" + chown "${USERNAME}":"${USERNAME}" "/home/${USERNAME}/.mutt/bdsmail" cd $BDSMAIL_DIR - $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini $curr_username /home/$curr_username/Maildir/i2p "$new_user_password" + $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini "$curr_username" "/home/$curr_username/Maildir/i2p" "$new_user_password" fi done } @@ -136,9 +136,9 @@ function bdsmail_update_domain { for d in /home/*/ ; do USERNAME=$(echo "$d" | awk -F '/' '{print $3}') if [[ $(is_valid_user "$USERNAME") == "1" ]]; then - cp /etc/skel/.mutt/bdsmail /home/${USERNAME}/.mutt/bdsmail - sed -i "s|set from=.*|set from=${USERNAME}@$(bdsmail_domain)|g" /home/${USERNAME}/.mutt/bdsmail - chown ${USERNAME}:${USERNAME} /home/${USERNAME}/.mutt/bdsmail + cp /etc/skel/.mutt/bdsmail "/home/${USERNAME}/.mutt/bdsmail" + sed -i "s|set from=.*|set from=${USERNAME}@$(bdsmail_domain)|g" "/home/${USERNAME}/.mutt/bdsmail" + chown "${USERNAME}":"${USERNAME}" "/home/${USERNAME}/.mutt/bdsmail" fi done } @@ -154,7 +154,7 @@ function bdsmail_wait_for_key_generation { sleep 30 bds_domain=$(bdsmail_domain) sleep_ctr=$((sleep_ctr + 1)) - if [ $sleep_ctr -gt 100 ]; then + if [ "$sleep_ctr" -gt 100 ]; then break fi done @@ -178,9 +178,9 @@ function upgrade_bdsmail { fi # update to the next commit - set_repo_commit $BDSMAIL_DIR "bdsmail commit" "$BDSMAIL_COMMIT" $BDSMAIL_REPO - cd $BDSMAIL_DIR - make GOROOT=/home/go/go${GO_VERSION} + set_repo_commit $BDSMAIL_DIR "bdsmail commit" "$BDSMAIL_COMMIT" "$BDSMAIL_REPO" + cd $BDSMAIL_DIR || exit 2457245 + make GOROOT="/home/go/go${GO_VERSION}" chown -R i2psvc:i2psvc $BDSMAIL_DIR systemctl restart bdsmail @@ -210,7 +210,7 @@ function restore_local_bdsmail { function_check restore_directory_from_usb restore_directory_from_usb $temp_restore_dir bdsmail if [ -d $temp_restore_dir ]; then - if [ -d cp $temp_restore_dir$bdsmail_dir ]; then + if [ -d $temp_restore_dir$bdsmail_dir ]; then cp -rp $temp_restore_dir$bdsmail_dir $bdsmail_dir/ else if [ ! -d $bdsmail_dir ]; then @@ -246,7 +246,7 @@ function restore_remote_bdsmail { function_check restore_directory_from_friend restore_directory_from_friend $temp_restore_dir bdsmail if [ -d $temp_restore_dir ]; then - if [ -d cp $temp_restore_dir$bdsmail_dir ]; then + if [ -d $temp_restore_dir$bdsmail_dir ]; then cp -rp $temp_restore_dir$bdsmail_dir $bdsmail_dir/ else if [ ! -d $bdsmail_dir ]; then @@ -272,33 +272,33 @@ function remove_bdsmail { USERNAME=$(echo "$d" | awk -F '/' '{print $3}') if [[ $(is_valid_user "$USERNAME") == "1" ]]; then # remove the user from the i2p group - deluser $USERNAME i2psvc + deluser "$USERNAME" i2psvc # Remove mutt folder hook to the i2p config - if [ -f /home/$USERNAME/.muttrc ]; then - if grep -q 'folder-hook !i2p' /home/$USERNAME/.muttrc; then - sed -i '/folder-hook !i2p/d' /home/$USERNAME/.muttrc + if [ -f "/home/$USERNAME/.muttrc" ]; then + if grep -q 'folder-hook !i2p' "/home/$USERNAME/.muttrc"; then + sed -i '/folder-hook !i2p/d' "/home/$USERNAME/.muttrc" fi - if grep -q 'folder-hook i2p' /home/$USERNAME/.muttrc; then - sed -i '/folder-hook i2p/d' /home/$USERNAME/.muttrc + if grep -q 'folder-hook i2p' "/home/$USERNAME/.muttrc"; then + sed -i '/folder-hook i2p/d' "/home/$USERNAME/.muttrc" fi fi # Remove folder - if grep -q ' =i2p' /home/$USERNAME/.muttrc; then - sed -i 's| =i2p||g' /home/$USERNAME/.muttrc + if grep -q ' =i2p' "/home/$USERNAME/.muttrc"; then + sed -i 's| =i2p||g' "/home/$USERNAME/.muttrc" fi # NOTE: leave Maildir/i2p/cur. We might want to archive that # or just be reinstalling the system without losing mail - rm -rf /home/$USERNAME/Maildir/i2p/new + rm -rf "/home/$USERNAME/Maildir/i2p/new" fi done remove_i2p remove_app bdsmail remove_completion_param install_bdsmail - sed -i '/bdsmail/d' $COMPLETION_FILE + sed -i '/bdsmail/d' "$COMPLETION_FILE" rm -rf /etc/skel/.mutt if [ -d $BDSMAIL_DIR ]; then rm -rf $BDSMAIL_DIR @@ -322,7 +322,7 @@ function install_bdsmail { cd $BDSMAIL_DIR git pull else - git_clone $BDSMAIL_REPO $BDSMAIL_DIR + git_clone "$BDSMAIL_REPO" "$BDSMAIL_DIR" fi if [ ! -d $BDSMAIL_DIR ]; then @@ -331,13 +331,13 @@ function install_bdsmail { fi cd $BDSMAIL_DIR - git checkout $BDSMAIL_COMMIT -b $BDSMAIL_COMMIT + git checkout "$BDSMAIL_COMMIT" -b "$BDSMAIL_COMMIT" set_completion_param "bdsmail commit" "$BDSMAIL_COMMIT" mkdir -p $BDSMAIL_DIR/Maildir/i2p chmod -R 700 $BDSMAIL_DIR/Maildir - make GOROOT=/home/go/go${GO_VERSION} + make GOROOT="/home/go/go${GO_VERSION}" if [ ! -f $BDSMAIL_DIR/bin/bdsconfig ]; then echo $'Unable to make bdsmail' exit 87923567842 @@ -347,72 +347,72 @@ function install_bdsmail { i2p_enable_sam # create configuration file - $BDSMAIL_DIR/bin/bdsconfig > $BDSMAIL_DIR/config.ini - echo '[maild]' > $BDSMAIL_DIR/config.ini - echo "i2paddr = 127.0.0.1:$I2P_SAM_PORT" >> $BDSMAIL_DIR/config.ini - echo 'i2pkeyfile = bdsmail-privkey.dat' >> $BDSMAIL_DIR/config.ini - echo "bindmail = 127.0.0.1:$I2P_SMTP_PORT" >> $BDSMAIL_DIR/config.ini - echo "bindweb = 127.0.0.1:$I2P_WEB_PORT" >> $BDSMAIL_DIR/config.ini - echo "bindpop3 = 127.0.0.1:$I2P_POP3_PORT" >> $BDSMAIL_DIR/config.ini - echo 'domain = localhost' >> $BDSMAIL_DIR/config.ini - echo 'maildir = Maildir/i2p' >> $BDSMAIL_DIR/config.ini - echo 'database = localhost.sqlite' >> $BDSMAIL_DIR/config.ini - echo 'assets = contrib/assets/web' >> $BDSMAIL_DIR/config.ini + #$BDSMAIL_DIR/bin/bdsconfig > $BDSMAIL_DIR/config.ini + { echo '[maild]': + echo "i2paddr = 127.0.0.1:$I2P_SAM_PORT"; + echo 'i2pkeyfile = bdsmail-privkey.dat'; + echo "bindmail = 127.0.0.1:$I2P_SMTP_PORT"; + echo "bindweb = 127.0.0.1:$I2P_WEB_PORT"; + echo "bindpop3 = 127.0.0.1:$I2P_POP3_PORT"; + echo 'domain = localhost'; + echo 'maildir = Maildir/i2p'; + echo 'database = localhost.sqlite'; + echo 'assets = contrib/assets/web'; } > $BDSMAIL_DIR/config.ini - echo '[Unit]' > /etc/systemd/system/bdsmail.service - echo 'Description=bdsmail' >> /etc/systemd/system/bdsmail.service - echo 'After=syslog.target' >> /etc/systemd/system/bdsmail.service - echo 'After=network.target' >> /etc/systemd/system/bdsmail.service - echo '' >> /etc/systemd/system/bdsmail.service - echo '[Service]' >> /etc/systemd/system/bdsmail.service - echo 'Type=simple' >> /etc/systemd/system/bdsmail.service - echo 'User=i2psvc' >> /etc/systemd/system/bdsmail.service - echo 'Group=i2psvc' >> /etc/systemd/system/bdsmail.service - echo "WorkingDirectory=$BDSMAIL_DIR" >> /etc/systemd/system/bdsmail.service - echo "ExecStart=$BDSMAIL_DIR/bin/maild $BDSMAIL_DIR/config.ini" >> /etc/systemd/system/bdsmail.service - echo 'Restart=always' >> /etc/systemd/system/bdsmail.service - echo 'Environment="USER=i2psvc"' >> /etc/systemd/system/bdsmail.service - echo '' >> /etc/systemd/system/bdsmail.service - echo '[Install]' >> /etc/systemd/system/bdsmail.service - echo 'WantedBy=multi-user.target' >> /etc/systemd/system/bdsmail.service + { echo '[Unit]'; + echo 'Description=bdsmail'; + echo 'After=syslog.target'; + echo 'After=network.target'; + echo ''; + echo '[Service]'; + echo 'Type=simple'; + echo 'User=i2psvc'; + echo 'Group=i2psvc'; + echo "WorkingDirectory=$BDSMAIL_DIR"; + echo "ExecStart=$BDSMAIL_DIR/bin/maild $BDSMAIL_DIR/config.ini"; + echo 'Restart=always'; + echo 'Environment="USER=i2psvc"'; + echo ''; + echo '[Install]'; + echo 'WantedBy=multi-user.target'; } > /etc/systemd/system/bdsmail.service - echo '#!/usr/bin/env python2' > $BDSMAIL_DIR/get_address - echo 'import base64, hashlib, sys' >> $BDSMAIL_DIR/get_address - echo 'with open(sys.argv[1]) as f:' >> $BDSMAIL_DIR/get_address - echo " print(base64.b32encode(hashlib.sha256(base64.b64decode(f.read(516), '-~')).digest()).strip('=')+\".b32.i2p\")" >> $BDSMAIL_DIR/get_address + { echo '#!/usr/bin/env python2'; + echo 'import base64, hashlib, sys'; + echo 'with open(sys.argv[1]) as f:'; + echo " print(base64.b32encode(hashlib.sha256(base64.b64decode(f.read(516), '-~')).digest()).strip('=')+\".b32.i2p\")"; } > $BDSMAIL_DIR/get_address chmod +x $BDSMAIL_DIR/get_address chown -R i2psvc:i2psvc $BDSMAIL_DIR systemctl enable bdsmail systemctl start bdsmail - echo '#!/bin/bash' > /usr/bin/bdsmail_distribute - echo "BDSMAIL_DIR=$BDSMAIL_DIR" >> /usr/bin/bdsmail_distribute - echo "MAIL_DIR=\$BDSMAIL_DIR/\$(cat \$BDSMAIL_DIR/config.ini | grep 'maildir =' | awk -F ' ' '{print \$3}')" >> /usr/bin/bdsmail_distribute - echo 'if [ ! -d $MAIL_DIR/postmaster/new ]; then' >> /usr/bin/bdsmail_distribute - echo ' exit 0' >> /usr/bin/bdsmail_distribute - echo 'fi' >> /usr/bin/bdsmail_distribute - echo 'for filename in $MAIL_DIR/postmaster/new/*; do' >> /usr/bin/bdsmail_distribute - echo ' to_line=$(cat $filename | grep "To: " | head -n 1)' >> /usr/bin/bdsmail_distribute - echo " to_username=\$(echo \"\$to_line\" | awk -F ' ' '{print \$2}' | awk -F '@' '{print \$1}')" >> /usr/bin/bdsmail_distribute - echo ' if [ -d /home/$to_username/Maildir/i2p/new ]; then' >> /usr/bin/bdsmail_distribute - echo ' chown $to_username:$to_username $filename' >> /usr/bin/bdsmail_distribute - echo ' chmod 600 $filename' >> /usr/bin/bdsmail_distribute - echo ' mv $filename /home/$to_username/Maildir/i2p/new' >> /usr/bin/bdsmail_distribute - echo ' fi' >> /usr/bin/bdsmail_distribute - echo 'done' >> /usr/bin/bdsmail_distribute + { echo '#!/bin/bash'; + echo "BDSMAIL_DIR=$BDSMAIL_DIR"; + echo "MAIL_DIR=\$BDSMAIL_DIR/\$(cat \$BDSMAIL_DIR/config.ini | grep 'maildir =' | awk -F ' ' '{print \$3}')"; + echo "if [ ! -d \$MAIL_DIR/postmaster/new ]; then"; + echo ' exit 0'; + echo 'fi'; + echo "for filename in \$MAIL_DIR/postmaster/new/*; do"; + echo " to_line=\$(cat \$filename | grep \"To: \" | head -n 1)"; + echo " to_username=\$(echo \"\$to_line\" | awk -F ' ' '{print \$2}' | awk -F '@' '{print \$1}')"; + echo " if [ -d /home/\$to_username/Maildir/i2p/new ]; then"; + echo " chown \$to_username:\$to_username \$filename"; + echo " chmod 600 \$filename"; + echo " mv \$filename /home/\$to_username/Maildir/i2p/new"; + echo ' fi'; + echo 'done'; } > /usr/bin/bdsmail_distribute chmod +x /usr/bin/bdsmail_distribute if ! grep -q 'bdsmail_distribute' /etc/crontab; then cron_add_mins 1 '/usr/bin/bdsmail_distribute 2> /dev/null' fi - echo '#!/bin/bash' > /usr/bin/bdsmail_domain - echo "cd $BDSMAIL_DIR" >> /usr/bin/bdsmail_domain - echo 'if [ ! -f bdsmail-privkey.dat ]; then' >> /usr/bin/bdsmail_domain - echo ' exit 1' >> /usr/bin/bdsmail_domain - echo 'fi' >> /usr/bin/bdsmail_domain - echo "python2 get_address bdsmail-privkey.dat | tr '[:upper:]' '[:lower:]'" >> /usr/bin/bdsmail_domain + { echo '#!/bin/bash'; + echo "cd $BDSMAIL_DIR"; + echo 'if [ ! -f bdsmail-privkey.dat ]; then'; + echo ' exit 1'; + echo 'fi'; + echo "python2 get_address bdsmail-privkey.dat | tr '[:upper:]' '[:lower:]'"; } > /usr/bin/bdsmail_domain chmod +x /usr/bin/bdsmail_domain echo '' @@ -422,7 +422,7 @@ function install_bdsmail { bdsmail_wait_for_key_generation - if [ ! $bds_domain ]; then + if [ ! "$bds_domain" ]; then systemctl stop bdsmail systemctl disable bdsmail remove_i2p @@ -430,38 +430,38 @@ function install_bdsmail { exit 8934638 fi - BDSMAIL_PASSWORD="$(create_password ${MINIMUM_PASSWORD_LENGTH})" - ${PROJECT_NAME}-pass -u $MY_USERNAME -a bdsmail -p "$BDSMAIL_PASSWORD" - cd $BDSMAIL_DIR + BDSMAIL_PASSWORD="$(create_password "${MINIMUM_PASSWORD_LENGTH}")" + "${PROJECT_NAME}-pass" -u "$MY_USERNAME" -a bdsmail -p "$BDSMAIL_PASSWORD" + cd $BDSMAIL_DIR || exit 2346872427 $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini admin $BDSMAIL_DIR/Maildir/i2p/admin "$BDSMAIL_PASSWORD" # Create mutt configuration if [ ! -d /etc/skel/.mutt ]; then mkdir /etc/skel/.mutt fi - echo 'set mbox_type=Maildir' > /etc/skel/.mutt/bdsmail - echo "set smtp_url=smtp://username:password@127.0.0.1:$I2P_SMTP_PORT/" >> /etc/skel/.mutt/bdsmail - echo 'set use_from=yes' >> /etc/skel/.mutt/bdsmail - echo "set from=username@${bds_domain}" >> /etc/skel/.mutt/bdsmail - echo "set spoolfile=~/Maildir/i2p" >> /etc/skel/.mutt/bdsmail - echo 'set pgp_autoencrypt=no' >> /etc/skel/.mutt/bdsmail - echo 'set pgp_replyencrypt=no' >> /etc/skel/.mutt/bdsmail - echo 'set pgp_autosign=no' >> /etc/skel/.mutt/bdsmail - echo 'set pgp_replysign=no' >> /etc/skel/.mutt/bdsmail + { echo 'set mbox_type=Maildir'; + echo "set smtp_url=smtp://username:password@127.0.0.1:$I2P_SMTP_PORT/"; + echo 'set use_from=yes'; + echo "set from=username@${bds_domain}"; + echo "set spoolfile=~/Maildir/i2p"; + echo 'set pgp_autoencrypt=no'; + echo 'set pgp_replyencrypt=no'; + echo 'set pgp_autosign=no'; + echo 'set pgp_replysign=no'; } > /etc/skel/.mutt/bdsmail # mutt configuration for the admin user - if [ ! -d /home/$MY_USERNAME/.mutt ]; then - mkdir /home/$MY_USERNAME/.mutt + if [ ! -d "/home/$MY_USERNAME/.mutt" ]; then + mkdir "/home/$MY_USERNAME/.mutt" fi - cp /etc/skel/.mutt/bdsmail /home/$MY_USERNAME/.mutt - sed -i "s|username|$MY_USERNAME|g" /home/$MY_USERNAME/.mutt/bdsmail - sed -i "s|password|$BDSMAIL_PASSWORD|g" /home/$MY_USERNAME/.mutt/bdsmail - chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.mutt + cp /etc/skel/.mutt/bdsmail "/home/$MY_USERNAME/.mutt" + sed -i "s|username|$MY_USERNAME|g" "/home/$MY_USERNAME/.mutt/bdsmail" + sed -i "s|password|$BDSMAIL_PASSWORD|g" "/home/$MY_USERNAME/.mutt/bdsmail" + chown -R "$MY_USERNAME":"$MY_USERNAME" "/home/$MY_USERNAME/.mutt" bdsmail_configure_users - cd $BDSMAIL_DIR - $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini $MY_USERNAME /home/$MY_USERNAME/Maildir/i2p "$BDSMAIL_PASSWORD" + cd $BDSMAIL_DIR || exit 2457245 + $BDSMAIL_DIR/bin/mailtool $BDSMAIL_DIR/config.ini "$MY_USERNAME" "/home/$MY_USERNAME/Maildir/i2p" "$BDSMAIL_PASSWORD" APP_INSTALLED=1 } diff --git a/src/freedombone-app-cryptpad b/src/freedombone-app-cryptpad index 1a3d7c4b..4f0731ca 100755 --- a/src/freedombone-app-cryptpad +++ b/src/freedombone-app-cryptpad @@ -101,7 +101,7 @@ function upgrade_cryptpad { function_check set_repo_commit set_repo_commit $CRYPTPAD_DIR "cryptpad commit" "$CRYPTPAD_COMMIT" $CRYPTPAD_REPO - cd $CRYPTPAD_DIR + cd $CRYPTPAD_DIR || exit 254724 cryptpad_create_config npm upgrade npm install @@ -156,7 +156,7 @@ function restore_local_cryptpad { } function backup_remote_cryptpad { - if grep -q "cryptpad domain" $COMPLETION_FILE; then + if grep -q "cryptpad domain" "$COMPLETION_FILE"; then temp_backup_dir=$CRYPTPAD_DIR/datastore if [ -d $temp_backup_dir ]; then systemctl stop cryptpad @@ -226,7 +226,7 @@ function remove_cryptpad { remove_onion_service cryptpad ${CRYPTPAD_ONION_PORT} remove_app cryptpad remove_completion_param install_cryptpad - sed -i '/cryptpad/d' $COMPLETION_FILE + sed -i '/cryptpad/d' "$COMPLETION_FILE" userdel -r cryptpad } @@ -236,123 +236,123 @@ function cryptpad_create_config { cryptpad_prefix= if [[ "$cryptpad_install_type" == "mesh" ]]; then - cryptpad_prefix=$rootdir + # shellcheck disable=SC2154 + cryptpad_prefix="$rootdir" fi - echo '/*@flow*/' > $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '/*' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' globals module' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '*/' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo "var domain = ' http://localhost:${CRYPTPAD_PORT}/';" >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo 'module.exports = {' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " httpAddress: '::'," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' httpHeaders: {' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' "X-XSS-Protection": "1; mode=block",' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' "X-Content-Type-Options": "nosniff",' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' "Access-Control-Allow-Origin": "*"' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' },' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' contentSecurity: [' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " \"default-src 'none'\"," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " \"style-src 'unsafe-inline' 'self' \" + domain," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " \"script-src 'self'\" + domain," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " \"font-src 'self' data:\" + domain," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' "child-src blob: *",' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' "frame-src blob: *",' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' "media-src * blob:",' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " \"connect-src 'self' ws: wss: blob:\" + domain," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " \"img-src 'self' data: blob:\" + domain," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' "frame-ancestors *",' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " ].join('; ')," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' padContentSecurity: [' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " \"default-src 'none'\"," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " \"style-src 'unsafe-inline' 'self'\" + domain," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " \"script-src 'self' 'unsafe-eval' 'unsafe-inline'\" + domain," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " \"font-src 'self'\" + domain," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' "child-src *",' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' "frame-src *",' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " \"connect-src 'self' ws: wss:\" + domain," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' "img-src * blob:",' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " ].join('; ')," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " httpPort: ${CRYPTPAD_PORT}," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' // This is for allowing the cross-domain iframe to function when developing' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " httpSafePort: ${CRYPTPAD_PORT2}," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " websocketPath: '/cryptpad_websocket'," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' logToStdout: false,' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' verbose: false,' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' mainPages: [' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " 'index'" >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' ],' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' removeDonateButton: true,' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' allowSubscriptions: false,' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js + { echo '/*@flow*/'; + echo '/*'; + echo ' globals module'; + echo '*/'; + echo "var domain = ' http://localhost:${CRYPTPAD_PORT}/';"; + echo 'module.exports = {'; + echo " httpAddress: '::',"; + echo ' httpHeaders: {'; + echo ' "X-XSS-Protection": "1; mode=block",'; + echo ' "X-Content-Type-Options": "nosniff",'; + echo ' "Access-Control-Allow-Origin": "*"'; + echo ' },'; + echo ''; + echo ' contentSecurity: ['; + echo " \"default-src 'none'\","; + echo " \"style-src 'unsafe-inline' 'self' \" + domain,"; + echo " \"script-src 'self'\" + domain,"; + echo " \"font-src 'self' data:\" + domain,"; + echo ''; + echo ' "child-src blob: *",'; + echo ' "frame-src blob: *",'; + echo ' "media-src * blob:",'; + echo ''; + echo " \"connect-src 'self' ws: wss: blob:\" + domain,"; + echo ''; + echo " \"img-src 'self' data: blob:\" + domain,"; + echo ''; + echo ' "frame-ancestors *",'; + echo " ].join('; '),"; + echo ''; + echo ' padContentSecurity: ['; + echo " \"default-src 'none'\","; + echo " \"style-src 'unsafe-inline' 'self'\" + domain,"; + echo " \"script-src 'self' 'unsafe-eval' 'unsafe-inline'\" + domain,"; + echo " \"font-src 'self'\" + domain,"; + echo ''; + echo ' "child-src *",'; + echo ' "frame-src *",'; + echo ''; + echo " \"connect-src 'self' ws: wss:\" + domain,"; + echo ''; + echo ' "img-src * blob:",'; + echo " ].join('; '),"; + echo ''; + echo " httpPort: ${CRYPTPAD_PORT},"; + echo ''; + echo ' // This is for allowing the cross-domain iframe to function when developing'; + echo " httpSafePort: ${CRYPTPAD_PORT2},"; + echo ''; + echo " websocketPath: '/cryptpad_websocket',"; + echo ''; + echo ' logToStdout: false,'; + echo ''; + echo ' verbose: false,'; + echo ''; + echo ' mainPages: ['; + echo " 'index'"; + echo ' ],'; + echo ''; + echo ' removeDonateButton: true,'; + echo ' allowSubscriptions: false,'; } > "$cryptpad_prefix$CRYPTPAD_DIR/config.js" if [[ "$cryptpad_install_type" == "mesh" ]]; then - echo " myDomain: 'http://P${PEER_ID}.local'," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js + echo " myDomain: 'http://P${PEER_ID}.local'," >> "$cryptpad_prefix$CRYPTPAD_DIR/config.js" else CRYPTPAD_ONION_HOSTNAME=$(cat /var/lib/tor/hidden_service_cryptpad/hostname) - echo " myDomain: 'http://${CRYPTPAD_ONION_HOSTNAME}'," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js + echo " myDomain: 'http://${CRYPTPAD_ONION_HOSTNAME}'," >> "$cryptpad_prefix$CRYPTPAD_DIR/config.js" fi - echo ' defaultStorageLimit: 50 * 1024 * 1024,' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' customLimits: {' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' },' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' adminEmail: false,' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " storage: './storage/file'," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " filePath: './datastore/'," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " pinPath: './pins'," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " blobPath: './blob'," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " blobStagingPath: './blobstage'," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' channelExpirationMs: 30000,' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' openFileLimit: 1024,' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo " rpc: './rpc.js'," >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' suppressRPCErrors: false,' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' enableUploads: true,' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' //restrictUploads: false,' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' maxUploadSize: 20 * 1024 * 1024,' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' //logFeedback: true,' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo ' //logRPC: true,' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js - echo '};' >> $cryptpad_prefix$CRYPTPAD_DIR/config.js + { echo ' defaultStorageLimit: 50 * 1024 * 1024,'; + echo ''; + echo ' customLimits: {'; + echo ' },'; + echo ''; + echo ' adminEmail: false,'; + echo ''; + echo " storage: './storage/file',"; + echo ''; + echo " filePath: './datastore/',"; + echo " pinPath: './pins',"; + echo " blobPath: './blob',"; + echo " blobStagingPath: './blobstage',"; + echo ' channelExpirationMs: 30000,'; + echo ' openFileLimit: 1024,'; + echo " rpc: './rpc.js',"; + echo ' suppressRPCErrors: false,'; + echo ' enableUploads: true,'; + echo ' //restrictUploads: false,'; + echo ' maxUploadSize: 20 * 1024 * 1024,'; + echo ' //logFeedback: true,'; + echo ' //logRPC: true,'; + echo '};'; } >> "$cryptpad_prefix$CRYPTPAD_DIR/config.js" if [[ "$cryptpad_install_type" != "mesh" ]]; then - chown cryptpad:cryptpad $cryptpad_prefix$CRYPTPAD_DIR/config.js + chown cryptpad:cryptpad "$cryptpad_prefix$CRYPTPAD_DIR/config.js" else chroot "$rootdir" chown cryptpad:cryptpad $CRYPTPAD_DIR/config.js fi } function mesh_install_cryptpad { - if [[ $VARIANT != "meshclient" && $VARIANT != "meshusb" ]]; then + if [[ "$VARIANT" != "meshclient" && "$VARIANT" != "meshusb" ]]; then return fi - if [ ! -d $rootdir/var/www/cryptpad ]; then - mkdir $rootdir/var/www/cryptpad + if [ ! -d "$rootdir/var/www/cryptpad" ]; then + mkdir "$rootdir/var/www/cryptpad" fi - if [ -d $rootdir$CRYPTPAD_DIR ]; then - rm -rf $rootdir$CRYPTPAD_DIR + if [ -d "$rootdir$CRYPTPAD_DIR" ]; then + rm -rf "$rootdir$CRYPTPAD_DIR" fi - git_clone $CRYPTPAD_REPO $rootdir$CRYPTPAD_DIR + git_clone "$CRYPTPAD_REPO" "$rootdir$CRYPTPAD_DIR" - if [ ! -d $rootdir$CRYPTPAD_DIR ]; then + if [ ! -d "$rootdir$CRYPTPAD_DIR" ]; then echo $'Unable to clone cryptpad repo' exit 783251 fi @@ -360,94 +360,94 @@ function mesh_install_cryptpad { # an unprivileged user to run as chroot "$rootdir" useradd -d $CRYPTPAD_DIR/ cryptpad - cd $rootdir$CRYPTPAD_DIR - git checkout $CRYPTPAD_COMMIT -b $CRYPTPAD_COMMIT + cd "$rootdir$CRYPTPAD_DIR" || exit 34683568 + git checkout "$CRYPTPAD_COMMIT" -b "$CRYPTPAD_COMMIT" chroot "$rootdir" chown -R cryptpad:cryptpad $CRYPTPAD_DIR cryptpad_nginx_site=$rootdir/etc/nginx/sites-available/cryptpad - echo 'server {' > $cryptpad_nginx_site - echo " listen 80 default_server;" >> $cryptpad_nginx_site - echo " server_name P${PEER_ID}.local;" >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' # Logs' >> $cryptpad_nginx_site - echo ' access_log /dev/null;' >> $cryptpad_nginx_site - echo ' error_log /dev/null;' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' # Root' >> $cryptpad_nginx_site - echo " root $CRYPTPAD_DIR;" >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' index index.html;' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' add_header X-XSS-Protection "1; mode=block";' >> $cryptpad_nginx_site - echo ' add_header X-Content-Type-Options nosniff;' >> $cryptpad_nginx_site - echo ' add_header X-Frame-Options SAMEORIGIN;' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' if ($uri = /pad/inner.html) {' >> $cryptpad_nginx_site - echo " set \$scriptSrc \"'self' 'unsafe-eval' 'unsafe-inline'\";" >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' location = /cryptpad_websocket {' >> $cryptpad_nginx_site - echo " proxy_pass http://localhost:$CRYPTPAD_PORT;" >> $cryptpad_nginx_site - echo ' proxy_set_header X-Real-IP $remote_addr;' >> $cryptpad_nginx_site - echo ' proxy_set_header Host $host;' >> $cryptpad_nginx_site - echo ' proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' # WebSocket support (nginx 1.4)' >> $cryptpad_nginx_site - echo ' proxy_http_version 1.1;' >> $cryptpad_nginx_site - echo ' proxy_set_header Upgrade $http_upgrade;' >> $cryptpad_nginx_site - echo ' proxy_set_header Connection upgrade;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site + { echo 'server {'; + echo " listen 80 default_server;"; + echo " server_name P${PEER_ID}.local;"; + echo ''; + echo ' # Logs'; + echo ' access_log /dev/null;'; + echo ' error_log /dev/null;'; + echo ''; + echo ' # Root'; + echo " root $CRYPTPAD_DIR;"; + echo ''; + echo ' index index.html;'; + echo ''; + echo ' add_header X-XSS-Protection "1; mode=block";'; + echo ' add_header X-Content-Type-Options nosniff;'; + echo ' add_header X-Frame-Options SAMEORIGIN;'; + echo ''; + echo " if (\$uri = /pad/inner.html) {"; + echo " set \$scriptSrc \"'self' 'unsafe-eval' 'unsafe-inline'\";"; + echo ' }'; + echo ''; + echo ' location = /cryptpad_websocket {'; + echo " proxy_pass http://localhost:$CRYPTPAD_PORT;"; + echo " proxy_set_header X-Real-IP \$remote_addr;"; + echo " proxy_set_header Host \$host;"; + echo " proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;"; + echo ''; + echo ' # WebSocket support (nginx 1.4)'; + echo ' proxy_http_version 1.1;'; + echo " proxy_set_header Upgrade \$http_upgrade;"; + echo ' proxy_set_header Connection upgrade;'; + echo ' }'; + echo ''; - echo ' location ^~ /customize.dist/ {' >> $cryptpad_nginx_site - echo ' # This is needed in order to prevent infinite recursion between /customize/ and the root' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo ' location ^~ /customize/ {' >> $cryptpad_nginx_site - echo ' rewrite ^/customize/(.*)$ $1 break;' >> $cryptpad_nginx_site - echo ' try_files /customize/$uri /customize.dist/$uri;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo ' location = /api/config {' >> $cryptpad_nginx_site - echo ' default_type text/javascript;' >> $cryptpad_nginx_site - echo ' rewrite ^.*$ /customize/api/config break;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' location ^~ /blob/ {' >> $cryptpad_nginx_site - echo ' try_files $uri =404;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' location ^~ /register/ {' >> $cryptpad_nginx_site - echo ' try_files $uri =404;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' location ^~ /login/ {' >> $cryptpad_nginx_site - echo ' try_files $uri =404;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' location ^~ /about.html {' >> $cryptpad_nginx_site - echo ' try_files $uri =404;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' location ^~ /contact.html {' >> $cryptpad_nginx_site - echo ' try_files $uri =404;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' location ^~ /what-is-cryptpad.html {' >> $cryptpad_nginx_site - echo ' try_files $uri =404;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' location ~ ^/(register|login|settings|user|pad|drive|poll|slide|code|whiteboard|file|media)$ {' >> $cryptpad_nginx_site - echo ' rewrite ^(.*)$ $1/ redirect;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' try_files /www/$uri /www/$uri/index.html /customize/$uri;' >> $cryptpad_nginx_site - echo '}' >> $cryptpad_nginx_site + echo ' location ^~ /customize.dist/ {'; + echo ' # This is needed in order to prevent infinite recursion between /customize/ and the root'; + echo ' }'; + echo ' location ^~ /customize/ {'; + echo " rewrite ^/customize/(.*)\$ \$1 break;"; + echo " try_files /customize/\$uri /customize.dist/\$uri;"; + echo ' }'; + echo ' location = /api/config {'; + echo ' default_type text/javascript;'; + echo ' rewrite ^.*$ /customize/api/config break;'; + echo ' }'; + echo ''; + echo ' location ^~ /blob/ {'; + echo " try_files \$uri =404;"; + echo ' }'; + echo ''; + echo ' location ^~ /register/ {'; + echo " try_files \$uri =404;"; + echo ' }'; + echo ''; + echo ' location ^~ /login/ {'; + echo " try_files \$uri =404;"; + echo ' }'; + echo ''; + echo ' location ^~ /about.html {'; + echo " try_files \$uri =404;"; + echo ' }'; + echo ''; + echo ' location ^~ /contact.html {'; + echo " try_files \$uri =404;"; + echo ' }'; + echo ''; + echo ' location ^~ /what-is-cryptpad.html {'; + echo " try_files \$uri =404;"; + echo ' }'; + echo ''; + echo ' location ~ ^/(register|login|settings|user|pad|drive|poll|slide|code|whiteboard|file|media)$ {'; + echo " rewrite ^(.*)\$ \$1/ redirect;"; + echo ' }'; + echo ''; + echo " try_files /www/\$uri /www/\$uri/index.html /customize/\$uri;"; + echo '}'; } > "$cryptpad_nginx_site" - cd $rootdir$CRYPTPAD_DIR + cd "$rootdir$CRYPTPAD_DIR" || exit 6246824624527 get_npm_arch - cat < $rootdir/usr/bin/install_cryptpad + cat < "$rootdir/usr/bin/install_cryptpad" #!/bin/bash cd $CRYPTPAD_DIR npm install --arch=$NPM_ARCH --build-from-source @@ -456,37 +456,37 @@ chown -R cryptpad:cryptpad $CRYPTPAD_DIR su -c 'bower install' - cryptpad cp config.example.js config.js EOF - chmod +x $rootdir/usr/bin/install_cryptpad + chmod +x "$rootdir/usr/bin/install_cryptpad" chroot "$rootdir" /usr/bin/install_cryptpad - if [ ! -f $rootdir$CRYPTPAD_DIR/config.js ]; then + if [ ! -f "$rootdir$CRYPTPAD_DIR/config.js" ]; then echo $'Cryptpad config file not found' exit 628252 fi - rm $rootdir/usr/bin/install_cryptpad + rm "$rootdir/usr/bin/install_cryptpad" cryptpad_create_config mesh chroot "$rootdir" chown -R cryptpad:cryptpad $CRYPTPAD_DIR # daemon - echo '[Unit]' > $rootdir/etc/systemd/system/cryptpad.service - echo 'Description=Cryptpad' >> $rootdir/etc/systemd/system/cryptpad.service - echo 'After=syslog.target' >> $rootdir/etc/systemd/system/cryptpad.service - echo 'After=network.target' >> $rootdir/etc/systemd/system/cryptpad.service - echo '' >> $rootdir/etc/systemd/system/cryptpad.service - echo '[Service]' >> $rootdir/etc/systemd/system/cryptpad.service - echo 'User=cryptpad' >> $rootdir/etc/systemd/system/cryptpad.service - echo 'Group=cryptpad' >> $rootdir/etc/systemd/system/cryptpad.service - echo "WorkingDirectory=$CRYPTPAD_DIR" >> $rootdir/etc/systemd/system/cryptpad.service - echo "ExecStart=/usr/local/bin/node $CRYPTPAD_DIR/server.js" >> $rootdir/etc/systemd/system/cryptpad.service - echo 'Environment=PATH=/usr/bin:/usr/local/bin' >> $rootdir/etc/systemd/system/cryptpad.service - echo 'Environment=NODE_ENV=production' >> $rootdir/etc/systemd/system/cryptpad.service - echo 'Restart=on-failure' >> $rootdir/etc/systemd/system/cryptpad.service - echo '' >> $rootdir/etc/systemd/system/cryptpad.service - echo '[Install]' >> $rootdir/etc/systemd/system/cryptpad.service - echo 'WantedBy=multi-user.target' >> $rootdir/etc/systemd/system/cryptpad.service + { echo '[Unit]'; + echo 'Description=Cryptpad'; + echo 'After=syslog.target'; + echo 'After=network.target'; + echo ''; + echo '[Service]'; + echo 'User=cryptpad'; + echo 'Group=cryptpad'; + echo "WorkingDirectory=$CRYPTPAD_DIR"; + echo "ExecStart=/usr/local/bin/node $CRYPTPAD_DIR/server.js"; + echo 'Environment=PATH=/usr/bin:/usr/local/bin'; + echo 'Environment=NODE_ENV=production'; + echo 'Restart=on-failure'; + echo ''; + echo '[Install]'; + echo 'WantedBy=multi-user.target'; } > "$rootdir/etc/systemd/system/cryptpad.service" chroot "$rootdir" systemctl enable cryptpad.service } @@ -505,7 +505,7 @@ function install_cryptpad_main { if [ -d /repos/cryptpad ]; then mkdir $CRYPTPAD_DIR cp -r -p /repos/cryptpad/. $CRYPTPAD_DIR - cd $CRYPTPAD_DIR + cd $CRYPTPAD_DIR || exit 3468356385 git pull else function_check git_clone @@ -520,7 +520,7 @@ function install_cryptpad_main { # an unprivileged user to run as useradd -d $CRYPTPAD_DIR/ cryptpad - cd $CRYPTPAD_DIR + cd $CRYPTPAD_DIR || exit 34683655 git checkout $CRYPTPAD_COMMIT -b $CRYPTPAD_COMMIT set_completion_param "cryptpad commit" "$CRYPTPAD_COMMIT" @@ -529,87 +529,87 @@ function install_cryptpad_main { CRYPTPAD_ONION_HOSTNAME=$(add_onion_service cryptpad 80 ${CRYPTPAD_ONION_PORT}) cryptpad_nginx_site=/etc/nginx/sites-available/cryptpad - echo 'server {' > $cryptpad_nginx_site - echo " listen 127.0.0.1:$CRYPTPAD_ONION_PORT default_server;" >> $cryptpad_nginx_site - echo " server_name $CRYPTPAD_ONION_HOSTNAME;" >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' # Logs' >> $cryptpad_nginx_site - echo ' access_log /dev/null;' >> $cryptpad_nginx_site - echo ' error_log /dev/null;' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' # Root' >> $cryptpad_nginx_site - echo " root $CRYPTPAD_DIR;" >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' index index.html;' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' if ($args ~ ver=) {' >> $cryptpad_nginx_site - echo ' set $cacheControl max-age=31536000;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo ' add_header Cache-Control $cacheControl;' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' add_header X-XSS-Protection "1; mode=block";' >> $cryptpad_nginx_site - echo ' add_header X-Content-Type-Options nosniff;' >> $cryptpad_nginx_site - echo ' add_header X-Frame-Options SAMEORIGIN;' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' if ($uri = /pad/inner.html) {' >> $cryptpad_nginx_site - echo " set \$scriptSrc \"'self' 'unsafe-eval' 'unsafe-inline'\";" >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' location = /cryptpad_websocket {' >> $cryptpad_nginx_site - echo " proxy_pass http://localhost:$CRYPTPAD_PORT;" >> $cryptpad_nginx_site - echo ' proxy_set_header X-Real-IP $remote_addr;' >> $cryptpad_nginx_site - echo ' proxy_set_header Host $host;' >> $cryptpad_nginx_site - echo ' proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' # WebSocket support (nginx 1.4)' >> $cryptpad_nginx_site - echo ' proxy_http_version 1.1;' >> $cryptpad_nginx_site - echo ' proxy_set_header Upgrade $http_upgrade;' >> $cryptpad_nginx_site - echo ' proxy_set_header Connection upgrade;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site + { echo 'server {'; + echo " listen 127.0.0.1:$CRYPTPAD_ONION_PORT default_server;"; + echo " server_name $CRYPTPAD_ONION_HOSTNAME;"; + echo ''; + echo ' # Logs'; + echo ' access_log /dev/null;'; + echo ' error_log /dev/null;'; + echo ''; + echo ' # Root'; + echo " root $CRYPTPAD_DIR;"; + echo ''; + echo ' index index.html;'; + echo ''; + echo " if (\$args ~ ver=) {"; + echo " set \$cacheControl max-age=31536000;"; + echo ' }'; + echo " add_header Cache-Control \$cacheControl;"; + echo ''; + echo ' add_header X-XSS-Protection "1; mode=block";'; + echo ' add_header X-Content-Type-Options nosniff;'; + echo ' add_header X-Frame-Options SAMEORIGIN;'; + echo ''; + echo " if (\$uri = /pad/inner.html) {"; + echo " set \$scriptSrc \"'self' 'unsafe-eval' 'unsafe-inline'\";"; + echo ' }'; + echo ''; + echo ' location = /cryptpad_websocket {'; + echo " proxy_pass http://localhost:$CRYPTPAD_PORT;"; + echo " proxy_set_header X-Real-IP \$remote_addr;"; + echo " proxy_set_header Host \$host;"; + echo " proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;"; + echo ''; + echo ' # WebSocket support (nginx 1.4)'; + echo ' proxy_http_version 1.1;'; + echo " proxy_set_header Upgrade \$http_upgrade;"; + echo ' proxy_set_header Connection upgrade;'; + echo ' }'; + echo ''; - echo ' location ^~ /customize.dist/ {' >> $cryptpad_nginx_site - echo ' # This is needed in order to prevent infinite recursion between /customize/ and the root' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo ' location ^~ /customize/ {' >> $cryptpad_nginx_site - echo ' rewrite ^/customize/(.*)$ $1 break;' >> $cryptpad_nginx_site - echo ' try_files /customize/$uri /customize.dist/$uri;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo ' location = /api/config {' >> $cryptpad_nginx_site - echo ' default_type text/javascript;' >> $cryptpad_nginx_site - echo ' rewrite ^.*$ /customize/api/config break;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' location ^~ /blob/ {' >> $cryptpad_nginx_site - echo ' try_files $uri =404;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' location ^~ /register/ {' >> $cryptpad_nginx_site - echo ' try_files $uri =404;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' location ^~ /login/ {' >> $cryptpad_nginx_site - echo ' try_files $uri =404;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' location ^~ /about.html {' >> $cryptpad_nginx_site - echo ' try_files $uri =404;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' location ^~ /contact.html {' >> $cryptpad_nginx_site - echo ' try_files $uri =404;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' location ^~ /what-is-cryptpad.html {' >> $cryptpad_nginx_site - echo ' try_files $uri =404;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' location ~ ^/(register|login|settings|user|pad|drive|poll|slide|code|whiteboard|file|media)$ {' >> $cryptpad_nginx_site - echo ' rewrite ^(.*)$ $1/ redirect;' >> $cryptpad_nginx_site - echo ' }' >> $cryptpad_nginx_site - echo '' >> $cryptpad_nginx_site - echo ' try_files /www/$uri /www/$uri/index.html /customize/$uri;' >> $cryptpad_nginx_site - echo '}' >> $cryptpad_nginx_site + echo ' location ^~ /customize.dist/ {'; + echo ' # This is needed in order to prevent infinite recursion between /customize/ and the root'; + echo ' }'; + echo ' location ^~ /customize/ {'; + echo " rewrite ^/customize/(.*)\$ \$1 break;"; + echo " try_files /customize/\$uri /customize.dist/\$uri;"; + echo ' }'; + echo ' location = /api/config {'; + echo ' default_type text/javascript;'; + echo ' rewrite ^.*$ /customize/api/config break;'; + echo ' }'; + echo ''; + echo ' location ^~ /blob/ {'; + echo " try_files \$uri =404;"; + echo ' }'; + echo ''; + echo ' location ^~ /register/ {'; + echo " try_files \$uri =404;"; + echo ' }'; + echo ''; + echo ' location ^~ /login/ {'; + echo " try_files \$uri =404;"; + echo ' }'; + echo ''; + echo ' location ^~ /about.html {'; + echo " try_files \$uri =404;"; + echo ' }'; + echo ''; + echo ' location ^~ /contact.html {'; + echo " try_files \$uri =404;"; + echo ' }'; + echo ''; + echo ' location ^~ /what-is-cryptpad.html {'; + echo " try_files \$uri =404;"; + echo ' }'; + echo ''; + echo ' location ~ ^/(register|login|settings|user|pad|drive|poll|slide|code|whiteboard|file|media)$ {'; + echo " rewrite ^(.*)\$ \$1/ redirect;"; + echo ' }'; + echo ''; + echo " try_files /www/\$uri /www/\$uri/index.html /customize/\$uri;"; + echo '}'; } > $cryptpad_nginx_site function_check nginx_ensite nginx_ensite cryptpad @@ -623,7 +623,7 @@ function install_cryptpad { install_cryptpad_main - cd $CRYPTPAD_DIR + cd $CRYPTPAD_DIR || exit 35483548 npm install npm install -g bower@1.8.0 @@ -639,22 +639,22 @@ function install_cryptpad { chown -R cryptpad:cryptpad $CRYPTPAD_DIR # daemon - echo '[Unit]' > /etc/systemd/system/cryptpad.service - echo 'Description=Cryptpad' >> /etc/systemd/system/cryptpad.service - echo 'After=syslog.target' >> /etc/systemd/system/cryptpad.service - echo 'After=network.target' >> /etc/systemd/system/cryptpad.service - echo '' >> /etc/systemd/system/cryptpad.service - echo '[Service]' >> /etc/systemd/system/cryptpad.service - echo 'User=cryptpad' >> /etc/systemd/system/cryptpad.service - echo 'Group=cryptpad' >> /etc/systemd/system/cryptpad.service - echo "WorkingDirectory=$CRYPTPAD_DIR" >> /etc/systemd/system/cryptpad.service - echo "ExecStart=/usr/local/bin/node $CRYPTPAD_DIR/server.js" >> /etc/systemd/system/cryptpad.service - echo 'Environment=PATH=/usr/bin:/usr/local/bin' >> /etc/systemd/system/cryptpad.service - echo 'Environment=NODE_ENV=production' >> /etc/systemd/system/cryptpad.service - echo 'Restart=on-failure' >> /etc/systemd/system/cryptpad.service - echo '' >> /etc/systemd/system/cryptpad.service - echo '[Install]' >> /etc/systemd/system/cryptpad.service - echo 'WantedBy=multi-user.target' >> /etc/systemd/system/cryptpad.service + { echo '[Unit]'; + echo 'Description=Cryptpad'; + echo 'After=syslog.target'; + echo 'After=network.target'; + echo ''; + echo '[Service]'; + echo 'User=cryptpad'; + echo 'Group=cryptpad'; + echo "WorkingDirectory=$CRYPTPAD_DIR"; + echo "ExecStart=/usr/local/bin/node $CRYPTPAD_DIR/server.js"; + echo 'Environment=PATH=/usr/bin:/usr/local/bin'; + echo 'Environment=NODE_ENV=production'; + echo 'Restart=on-failure'; + echo ''; + echo '[Install]'; + echo 'WantedBy=multi-user.target'; } > /etc/systemd/system/cryptpad.service systemctl enable cryptpad.service systemctl daemon-reload systemctl start cryptpad.service @@ -664,7 +664,7 @@ function install_cryptpad { cryptpad_generate_api_config # install again - cd $CRYPTPAD_DIR + cd $CRYPTPAD_DIR || exit 73537453 su -c 'bower install' - cryptpad systemctl restart nginx diff --git a/src/freedombone-app-dlna b/src/freedombone-app-dlna index 0d44a44f..ab06378f 100755 --- a/src/freedombone-app-dlna +++ b/src/freedombone-app-dlna @@ -49,24 +49,27 @@ function logging_off_dlna { function configure_interactive_dlna { while true do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 + data=$(mktemp 2>/dev/null) dialog --backtitle $"Freedombone Control Panel" \ --title $"Media Menu" \ --radiolist $"Choose an operation:" 13 70 3 \ 1 $"Attach a drive containing playable media" off \ 2 $"Remove a drive containing playable media" off \ - 3 $"Exit" on 2> $data + 3 $"Exit" on 2> "$data" sel=$? case $sel in - 1) break;; - 255) break;; + 1) rm -f "$data" + break;; + 255) rm -f "$data" + break;; esac case $(cat $data) in 1) attach-music;; 2) remove-music;; - 3) break;; + 3) rm -f "$data" + break;; esac + rm -f "$data" done } @@ -95,19 +98,19 @@ function configure_firewall_for_dlna { firewall_add DLNA 1900 udp firewall_add DLNA 8200 tcp - echo '' > /etc/avahi/services/dlna.service - echo '' >> /etc/avahi/services/dlna.service - echo '' >> /etc/avahi/services/dlna.service - echo ' %h DLNA' >> /etc/avahi/services/dlna.service - echo ' ' >> /etc/avahi/services/dlna.service - echo ' _dlna._tcp' >> /etc/avahi/services/dlna.service - echo " 8200" >> /etc/avahi/services/dlna.service - echo ' ' >> /etc/avahi/services/dlna.service - echo ' ' >> /etc/avahi/services/dlna.service - echo ' _dlna._udp' >> /etc/avahi/services/dlna.service - echo " 1900" >> /etc/avahi/services/dlna.service - echo ' ' >> /etc/avahi/services/dlna.service - echo '' >> /etc/avahi/services/dlna.service + { echo ''; + echo ''; + echo ''; + echo ' %h DLNA'; + echo ' '; + echo ' _dlna._tcp'; + echo " 8200"; + echo ' '; + echo ' '; + echo ' _dlna._udp'; + echo " 1900"; + echo ' '; + echo ''; } > /etc/avahi/services/dlna.service systemctl restart avahi-daemon @@ -125,7 +128,7 @@ function backup_local_dlna { function restore_local_dlna { if [ -d /var/cache/minidlna ]; then - if [ -d $USB_MOUNT_DLNA/backup/dlna ]; then + if [ -d "$USB_MOUNT_DLNA/backup/dlna" ]; then echo $"Restoring DLNA cache" temp_restore_dir=/root/tempdlna function_check restore_directory_from_usb @@ -135,6 +138,7 @@ function restore_local_dlna { else cp -r $temp_restore_dir/* /var/cache/minidlna/ fi + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then rm -rf $temp_restore_dir function_check set_user_permissions @@ -156,7 +160,7 @@ function backup_remote_dlna { function restore_remote_dlna { if [ -d /var/cache/minidlna ]; then - if [ -d $SERVER_DIRECTORY/backup/dlna ]; then + if [ -d "$SERVER_DIRECTORY/backup/dlna" ]; then temp_restore_dir=/root/tempdlna function_check restore_directory_from_friend restore_directory_from_friend $temp_restore_dir dlna @@ -165,6 +169,7 @@ function restore_remote_dlna { else cp -r $temp_restore_dir/* /var/cache/minidlna/ fi + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then exit 982 fi @@ -201,7 +206,7 @@ function install_dlna_main { exit 55 fi - if [ ! $USB_MOUNT_DLNA ]; then + if [ ! "$USB_MOUNT_DLNA" ]; then USB_MOUNT_DLNA=/mnt/dlna fi if [ ${#USB_MOUNT_DLNA} -eq 0 ]; then @@ -242,7 +247,7 @@ function install_dlna_main { systemctl reload minidlna sed -i 's/fs.inotify.max_user_watches*/fs.inotify.max_user_watches=65536/g' /etc/sysctl.conf - if ! grep -q "max_user_watches" $COMPLETION_FILE; then + if ! grep -q "max_user_watches" "$COMPLETION_FILE"; then echo 'fs.inotify.max_user_watches=65536' >> /etc/sysctl.conf fi /sbin/sysctl -p -q @@ -256,37 +261,37 @@ function script_for_attaching_usb_drive { if [[ $(is_completed "${FUNCNAME[0]}") == "1" ]]; then return fi - echo '#!/bin/bash' > /usr/bin/attach-music - echo "source /usr/local/bin/${PROJECT_NAME}-vars" >> /usr/bin/attach-music - echo "UTILS_FILES=/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-*" >> /usr/bin/attach-music - echo '' >> /usr/bin/attach-music - echo 'for f in $UTILS_FILES' >> /usr/bin/attach-music - echo 'do' >> /usr/bin/attach-music - echo ' source $f' >> /usr/bin/attach-music - echo 'done' >> /usr/bin/attach-music - echo '' >> /usr/bin/attach-music - echo 'USB_DRIVE=/dev/sda1' >> /usr/bin/attach-music - echo 'detect_usb_drive' >> /usr/bin/attach-music - echo '' >> /usr/bin/attach-music - echo 'remove-music' >> /usr/bin/attach-music - echo "if [ ! -d $USB_MOUNT_DLNA ]; then" >> /usr/bin/attach-music - echo " mkdir $USB_MOUNT_DLNA" >> /usr/bin/attach-music - echo 'fi' >> /usr/bin/attach-music - echo -n 'mount $USB_DRIVE ' >> /usr/bin/attach-music - echo "$USB_MOUNT_DLNA" >> /usr/bin/attach-music - echo "chown root:root $USB_MOUNT_DLNA" >> /usr/bin/attach-music - echo "chown -R minidlna:minidlna $USB_MOUNT_DLNA/*" >> /usr/bin/attach-music - echo 'systemctl restart minidlna' >> /usr/bin/attach-music - echo 'minidlnad -R' >> /usr/bin/attach-music - echo 'exit 0' >> /usr/bin/attach-music + { echo '#!/bin/bash'; + echo "source /usr/local/bin/${PROJECT_NAME}-vars"; + echo "UTILS_FILES=/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-*"; + echo ''; + echo "for f in \$UTILS_FILES"; + echo 'do'; + echo " source \$f"; + echo 'done'; + echo ''; + echo 'USB_DRIVE=/dev/sda1'; + echo 'detect_usb_drive'; + echo ''; + echo 'remove-music'; + echo "if [ ! -d $USB_MOUNT_DLNA ]; then"; + echo " mkdir $USB_MOUNT_DLNA"; + echo 'fi'; + echo -n "mount \$USB_DRIVE "; + echo "$USB_MOUNT_DLNA"; + echo "chown root:root $USB_MOUNT_DLNA"; + echo "chown -R minidlna:minidlna $USB_MOUNT_DLNA/*"; + echo 'systemctl restart minidlna'; + echo 'minidlnad -R'; + echo 'exit 0'; } > /usr/bin/attach-music chmod +x /usr/bin/attach-music - echo '#!/bin/bash' > /usr/bin/remove-music - echo "if [ -d $USB_MOUNT_DLNA ]; then" >> /usr/bin/remove-music - echo " umount $USB_MOUNT_DLNA" >> /usr/bin/remove-music - echo " rm -rf $USB_MOUNT_DLNA" >> /usr/bin/remove-music - echo 'fi' >> /usr/bin/remove-music - echo 'exit 0' >> /usr/bin/remove-music + { echo '#!/bin/bash'; + echo "if [ -d $USB_MOUNT_DLNA ]; then"; + echo " umount $USB_MOUNT_DLNA"; + echo " rm -rf $USB_MOUNT_DLNA"; + echo 'fi'; + echo 'exit 0'; } > /usr/bin/remove-music chmod +x /usr/bin/remove-music mark_completed "${FUNCNAME[0]}" diff --git a/src/freedombone-app-dokuwiki b/src/freedombone-app-dokuwiki index 3258cf2c..c998fbe7 100755 --- a/src/freedombone-app-dokuwiki +++ b/src/freedombone-app-dokuwiki @@ -75,18 +75,18 @@ function change_password_dokuwiki { new_user_password="$2" DOKUWIKI_DOMAIN_NAME=$(get_completion_param "dokuwiki domain") - if grep -q "$curr_username:" /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php; then + if grep -q "$curr_username:" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php"; then HASHED_DOKUWIKI_PASSWORD=$(echo -n "$new_user_password" | md5sum | awk -F ' ' '{print $1}') - existing_user=$(cat /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php | grep "$curr_username:" | hean -n 1) + existing_user=$(grep "$curr_username:" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php" | hean -n 1) if [[ "$existing_user" == *":admin,"* ]]; then sed -i "s|$curr_username:.*|$curr_username:$HASHED_DOKUWIKI_PASSWORD:$curr_username:$curr_username@$HOSTNAME:admin,user,upload|g" /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php else sed -i "s|$curr_username:.*|$curr_username:$HASHED_DOKUWIKI_PASSWORD:$curr_username:$curr_username@$HOSTNAME:user,upload|g" /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php fi - cp /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php - chmod 640 /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php - chmod 640 /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php - ${PROJECT_NAME}-pass -u $curr_username -a dokuwiki -p "$new_user_password" + cp "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php" + chmod 640 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php" + chmod 640 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php" + "${PROJECT_NAME}-pass" -u "$curr_username" -a dokuwiki -p "$new_user_password" fi } @@ -96,21 +96,21 @@ function add_user_dokuwiki { DOKUWIKI_DOMAIN_NAME=$(get_completion_param "dokuwiki domain") HASHED_DOKUWIKI_PASSWORD=$(echo -n "$new_user_password" | md5sum | awk -F ' ' '{print $1}') - echo "$new_username:$HASHED_DOKUWIKI_PASSWORD:$new_username:$new_username@$HOSTNAME:user,upload" >> /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php - cp /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php - chmod 640 /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php - chmod 640 /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php - ${PROJECT_NAME}-pass -u "$new_username" -a dokuwiki -p "$new_user_password" + echo "$new_username:$HASHED_DOKUWIKI_PASSWORD:$new_username:$new_username@$HOSTNAME:user,upload" >> "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php" + cp "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php" + chmod 640 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php" + chmod 640 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php" + "${PROJECT_NAME}-pass" -u "$new_username" -a dokuwiki -p "$new_user_password" } function remove_user_dokuwiki { remove_username="$1" read_config_param "DOKUWIKI_DOMAIN_NAME" - if grep -q "$remove_username:" /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php; then - sed -i "/$remove_username:/d" /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php - sed -i "/$remove_username:/d" /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php - ${PROJECT_NAME}-pass -u "$remove_username" --rmapp dokuwiki + if grep -q "$remove_username:" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php"; then + sed -i "/$remove_username:/d" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php" + sed -i "/$remove_username:/d" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php" + "${PROJECT_NAME}-pass" -u "$remove_username" --rmapp dokuwiki fi } @@ -120,7 +120,7 @@ function reconfigure_dokuwiki { function upgrade_dokuwiki { function_check set_repo_commit - set_repo_commit /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs "dokuwiki commit" "$DOKUWIKI_COMMIT" $DOKUWIKI_REPO + set_repo_commit "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs" "dokuwiki commit" "$DOKUWIKI_COMMIT" $DOKUWIKI_REPO } function backup_local_dokuwiki { @@ -129,18 +129,18 @@ function backup_local_dokuwiki { function_check backup_directory_to_usb # backup the data - source_directory=/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data - if [ -d $source_directory ]; then + source_directory="/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data" + if [ -d "$source_directory" ]; then dest_directory=dokuwikidat - backup_directory_to_usb $source_directory $dest_directory + backup_directory_to_usb "$source_directory" "$dest_directory" fi # backup the users - source_directory=/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl - if [ -d $source_directory ]; then + source_directory="/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl" + if [ -d "$source_directory" ]; then dest_directory=dokuwikiacl - cp /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users*.php /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/ - backup_directory_to_usb $source_directory $dest_directory + cp "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users*.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/" + backup_directory_to_usb "$source_directory" "$dest_directory" fi } @@ -153,11 +153,12 @@ function restore_local_dokuwiki { temp_restore_dir=/root/tempdokuwikidat function_check restore_directory_from_usb restore_directory_from_usb ${temp_restore_dir} dokuwikidat - if [ -d ${temp_restore_dir}/var/www/${DOKUWIKI_DOMAIN_NAME}/htdocs/data ]; then - cp -r ${temp_restore_dir}/var/www/${DOKUWIKI_DOMAIN_NAME}/htdocs/data/* /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data + if [ -d "${temp_restore_dir}/var/www/${DOKUWIKI_DOMAIN_NAME}/htdocs/data" ]; then + cp -r "${temp_restore_dir}/var/www/${DOKUWIKI_DOMAIN_NAME}/htdocs/data/*" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data" else - cp -r ${temp_restore_dir}/* /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data + cp -r "${temp_restore_dir}/*" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data" fi + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then function_check restore_directory_from_usb set_user_permissions @@ -172,13 +173,14 @@ function restore_local_dokuwiki { temp_restore_dir=/root/tempdokuwikiacl function_check restore_directory_from_usb restore_directory_from_usb ${temp_restore_dir} dokuwikiacl - if [ -d ${temp_restore_dir}/var/www/${DOKUWIKI_DOMAIN_NAME}/htdocs/lib/plugins/acl ]; then - cp ${temp_restore_dir}/var/www/${DOKUWIKI_DOMAIN_NAME}/htdocs/lib/plugins/acl/users.auth.php /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/ - cp ${temp_restore_dir}/var/www/${DOKUWIKI_DOMAIN_NAME}/htdocs/lib/plugins/acl/users.auth.php /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/ + if [ -d "${temp_restore_dir}/var/www/${DOKUWIKI_DOMAIN_NAME}/htdocs/lib/plugins/acl" ]; then + cp "${temp_restore_dir}/var/www/${DOKUWIKI_DOMAIN_NAME}/htdocs/lib/plugins/acl/users.auth.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/" + cp "${temp_restore_dir}/var/www/${DOKUWIKI_DOMAIN_NAME}/htdocs/lib/plugins/acl/users.auth.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/" else - cp ${temp_restore_dir}/users.auth.php /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/ - cp ${temp_restore_dir}/users.auth.php /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/ + cp "${temp_restore_dir}/users.auth.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/" + cp "${temp_restore_dir}/users.auth.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/" fi + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then function_check restore_directory_from_usb set_user_permissions @@ -189,21 +191,21 @@ function restore_local_dokuwiki { fi rm -rf ${temp_restore_dir} - chmod 640 /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php - chmod 640 /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php - chmod -R 755 /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data - chmod -R 755 /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib - chown -R www-data:www-data /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs + chmod 640 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php" + chmod 640 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php" + chmod -R 755 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data" + chmod -R 755 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib" + chown -R www-data:www-data "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs" echo $"Restore of Dokuwiki complete" } function backup_remote_dokuwiki { DOKUWIKI_DOMAIN_NAME=$(get_completion_param "dokuwiki domain") - if [ -d /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs ]; then + if [ -d "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs" ]; then echo $"Backing up dokuwiki" - backup_directory_to_friend /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data dokuwikidat - cp /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users*.php /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/ - backup_directory_to_friend /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl dokuwikiacl + backup_directory_to_friend "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data" dokuwikidat + cp "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users*.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/" + backup_directory_to_friend "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl" dokuwikiacl fi } @@ -212,15 +214,16 @@ function restore_remote_dokuwiki { function_check get_completion_param function_check restore_directory_from_friend - if [ -d $SERVER_DIRECTORY/backup/dokuwikidat ]; then + if [ -d "$SERVER_DIRECTORY/backup/dokuwikidat" ]; then echo $"Restoring Dokuwiki data for $DOKUWIKI_DOMAIN_NAME" temp_restore_dir=/root/tempdokuwikidat restore_directory_from_friend $temp_restore_dir dokuwikidat - if [ -d $temp_restore_dir/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data ]; then - cp -r $temp_restore_dir/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data/* /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data/ + if [ -d "$temp_restore_dir/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data" ]; then + cp -r "$temp_restore_dir/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data/*" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data/" else - cp -r $temp_restore_dir/* /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data/ + cp -r $temp_restore_dir/* "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data/" fi + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then exit 92634 fi @@ -229,15 +232,16 @@ function restore_remote_dokuwiki { echo $"Restore of Dokuwiki data complete" fi - if [ -d $SERVER_DIRECTORY/backup/dokuwikiacl ]; then + if [ -d "$SERVER_DIRECTORY/backup/dokuwikiacl" ]; then echo $"Restoring Dokuwiki users for $DOKUWIKI_DOMAIN_NAME" temp_restore_dir=/root/tempdokuwikiacl restore_directory_from_friend $temp_restore_dir dokuwikiacl - if [ -d $temp_restore_dir/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl ]; then - cp -r $temp_restore_dir/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/* /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/ + if [ -d "$temp_restore_dir/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl" ]; then + cp -r "$temp_restore_dir/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/*" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/" else - cp -r $temp_restore_dir/* /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/ + cp -r $temp_restore_dir/* "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/" fi + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then exit 735287 fi @@ -246,11 +250,11 @@ function restore_remote_dokuwiki { echo $"Restore of Dokuwiki users complete" fi - chmod 640 /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php - chmod 640 /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php - chmod -R 755 /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data/data - chmod -R 755 /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data/lib - chown -R www-data:www-data /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs + chmod 640 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php" + chmod 640 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php" + chmod -R 755 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data/data" + chmod -R 755 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data/lib" + chown -R www-data:www-data "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs" } function remove_dokuwiki { @@ -259,13 +263,13 @@ function remove_dokuwiki { fi function_check remove_onion_service remove_onion_service dokuwiki ${DOKUWIKI_ONION_PORT} - nginx_dissite $DOKUWIKI_DOMAIN_NAME - remove_certs $DOKUWIKI_DOMAIN_NAME - if [ -f /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME ]; then - rm /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME + nginx_dissite "$DOKUWIKI_DOMAIN_NAME" + remove_certs "$DOKUWIKI_DOMAIN_NAME" + if [ -f "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME" ]; then + rm "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME" fi - if [ ! -d /var/www/$DOKUWIKI_DOMAIN_NAME ]; then - rm -rf /var/www/$DOKUWIKI_DOMAIN_NAME + if [ ! -d "/var/www/$DOKUWIKI_DOMAIN_NAME" ]; then + rm -rf "/var/www/$DOKUWIKI_DOMAIN_NAME" fi if [ -d /var/lib/dokuwiki ]; then rm -rf /var/lib/dokuwiki @@ -278,14 +282,14 @@ function remove_dokuwiki { fi remove_completion_param "install_dokuwiki" remove_completion_param "dokuwiki domain" - sed -i '/dokuwiki/d' $COMPLETION_FILE + sed -i '/dokuwiki/d' "$COMPLETION_FILE" function_check remove_ddns_domain - remove_ddns_domain $DOKUWIKI_DOMAIN_NAME + remove_ddns_domain "$DOKUWIKI_DOMAIN_NAME" } function install_dokuwiki { - if [ ! $DOKUWIKI_DOMAIN_NAME ]; then + if [ ! "$DOKUWIKI_DOMAIN_NAME" ]; then return fi @@ -293,25 +297,25 @@ function install_dokuwiki { apt-get -yq install php-dev imagemagick php-imagick libfcgi0ldbl apt-get -yq install php-memcached memcached - if [ ! -d /var/www/$DOKUWIKI_DOMAIN_NAME ]; then - mkdir /var/www/$DOKUWIKI_DOMAIN_NAME + if [ ! -d "/var/www/$DOKUWIKI_DOMAIN_NAME" ]; then + mkdir "/var/www/$DOKUWIKI_DOMAIN_NAME" fi - if [ ! -f /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/install.php ]; then - cd /var/www/$DOKUWIKI_DOMAIN_NAME + if [ ! -f "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/install.php" ]; then + cd "/var/www/$DOKUWIKI_DOMAIN_NAME" || exit 23468246824 if [ -d /repos/dokuwiki ]; then - mkdir /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs - cp -r -p /repos/dokuwiki/. /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs - cd /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs + mkdir "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs" + cp -r -p /repos/dokuwiki/. "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs" + cd "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs" || exit 24687462 git pull else function_check git_clone - git_clone $DOKUWIKI_REPO /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs + git_clone "$DOKUWIKI_REPO" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs" fi - cd /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs - git checkout $DOKUWIKI_COMMIT -b $DOKUWIKI_COMMIT + cd "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs" || exit 38368832 + git checkout "$DOKUWIKI_COMMIT" -b "$DOKUWIKI_COMMIT" set_completion_param "dokuwiki commit" "$DOKUWIKI_COMMIT" fi @@ -322,40 +326,40 @@ function install_dokuwiki { echo $'Removed Apache installation after Dokuwiki install' fi - echo ' /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/local.php - echo "\$conf['title'] = '${DOKUWIKI_TITLE}';" >> /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/local.php - echo "\$conf['lang'] = 'en';" >> /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/local.php - echo "\$conf['license'] = 'cc-by-sa';" >> /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/local.php - echo "\$conf['useacl'] = 1;" >> /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/local.php - echo "\$conf['superuser'] = '@admin';" >> /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/local.php - echo "\$conf['disableactions'] = 'register';" >> /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/local.php - ln -s /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/local.php /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/local.php + { echo ' "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/local.php" + ln -s "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/local.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/local.php" - chmod 600 /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/local.php - chown -R www-data:www-data /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs - chmod -R 755 /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib - chmod -R 755 /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data + chmod 600 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/local.php" + chown -R www-data:www-data "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs" + chmod -R 755 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib" + chmod -R 755 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/data" - if [ -f $IMAGE_PASSWORD_FILE ]; then - DOKUWIKI_ADMIN_PASSWORD="$(printf `cat $IMAGE_PASSWORD_FILE`)" + if [ -f "$IMAGE_PASSWORD_FILE" ]; then + DOKUWIKI_ADMIN_PASSWORD="$(printf "%s" "$(cat "$IMAGE_PASSWORD_FILE")")" else - if [ ! $DOKUWIKI_ADMIN_PASSWORD ]; then - DOKUWIKI_ADMIN_PASSWORD="$(create_password ${MINIMUM_PASSWORD_LENGTH})" + if [ ! "$DOKUWIKI_ADMIN_PASSWORD" ]; then + DOKUWIKI_ADMIN_PASSWORD="$(create_password "${MINIMUM_PASSWORD_LENGTH}")" fi fi HASHED_DOKUWIKI_PASSWORD=$(echo -n "$DOKUWIKI_ADMIN_PASSWORD" | md5sum | awk -F ' ' '{print $1}') - echo -n "$MY_USERNAME:$HASHED_DOKUWIKI_PASSWORD:$MY_NAME:$MY_EMAIL:admin,user,upload" > /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php - cp /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php - chmod 640 /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php + echo -n "$MY_USERNAME:$HASHED_DOKUWIKI_PASSWORD:$MY_NAME:$MY_EMAIL:admin,user,upload" > "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php" + cp "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/users.auth.php" + chmod 640 "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/lib/plugins/acl/users.auth.php" - if ! grep -q "video/ogg" /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/mime.conf; then - echo 'ogv video/ogg' >> /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/mime.conf + if ! grep -q "video/ogg" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/mime.conf"; then + echo 'ogv video/ogg' >> "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/mime.conf" fi - if ! grep -q "video/mp4" /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/mime.conf; then - echo 'mp4 video/mp4' >> /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/mime.conf + if ! grep -q "video/mp4" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/mime.conf"; then + echo 'mp4 video/mp4' >> "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/mime.conf" fi - if ! grep -q "video/webm" /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/mime.conf; then - echo 'webm video/webm' >> /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/mime.conf + if ! grep -q "video/webm" "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/mime.conf"; then + echo 'webm video/webm' >> "/var/www/$DOKUWIKI_DOMAIN_NAME/htdocs/conf/mime.conf" fi DOKUWIKI_ONION_HOSTNAME=$(add_onion_service dokuwiki 80 ${DOKUWIKI_ONION_PORT}) @@ -363,178 +367,178 @@ function install_dokuwiki { if [[ $ONION_ONLY == "no" ]]; then function_check nginx_http_redirect - nginx_http_redirect $DOKUWIKI_DOMAIN_NAME - echo 'server {' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' listen 443 ssl;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' #listen [::]:443 ssl;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo " root /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo " server_name $DOKUWIKI_DOMAIN_NAME;" >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' access_log /dev/null;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo " error_log /dev/null;" >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' index index.php;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' charset utf-8;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' proxy_read_timeout 86400s;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME + nginx_http_redirect "$DOKUWIKI_DOMAIN_NAME" + { echo 'server {'; + echo ' listen 443 ssl;'; + echo ' #listen [::]:443 ssl;'; + echo " root /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs;"; + echo " server_name $DOKUWIKI_DOMAIN_NAME;"; + echo ' access_log /dev/null;'; + echo " error_log /dev/null;"; + echo ' index index.php;'; + echo ' charset utf-8;'; + echo ' proxy_read_timeout 86400s;'; } >> "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME" function_check nginx_ssl - nginx_ssl $DOKUWIKI_DOMAIN_NAME + nginx_ssl "$DOKUWIKI_DOMAIN_NAME" function_check nginx_disable_sniffing - nginx_disable_sniffing $DOKUWIKI_DOMAIN_NAME - echo ' add_header Strict-Transport-Security "max-age=0;";' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # rewrite to front controller as default rule' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' location / {' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME + nginx_disable_sniffing "$DOKUWIKI_DOMAIN_NAME" + { echo ' add_header Strict-Transport-Security "max-age=0;";'; + echo ''; + echo ' # rewrite to front controller as default rule'; + echo ' location / {'; } >> "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME" function_check nginx_limits - nginx_limits $DOKUWIKI_DOMAIN_NAME - echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # statically serve these file types when possible' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # otherwise fall back to front controller' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # allow browser to cache them' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # added .htm for advanced source code editor library' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' expires 30d;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' try_files $uri /index.php?q=$uri&$args;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # block these file types' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' deny all;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # or a unix socket' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME + nginx_limits "$DOKUWIKI_DOMAIN_NAME" + { echo " rewrite ^/(.*) /index.php?q=\$uri&\$args last;"; + echo ' }'; + echo ''; + echo ' # statically serve these file types when possible'; + echo ' # otherwise fall back to front controller'; + echo ' # allow browser to cache them'; + echo ' # added .htm for advanced source code editor library'; + echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {'; + echo ' expires 30d;'; + echo " try_files \$uri /index.php?q=\$uri&\$args;"; + echo ' }'; + echo ''; + echo ' # block these file types'; + echo ' location ~* \.(tpl|md|tgz|log|out)$ {'; + echo ' deny all;'; + echo ' }'; + echo ''; + echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000'; + echo ' # or a unix socket'; + echo ' location ~* \.php$ {'; } >> "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME" function_check nginx_limits - nginx_limits $DOKUWIKI_DOMAIN_NAME - echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo " # Won't work properly (404 error) if the file is not stored on this" >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo " # server, which is entirely possible with php-fpm/php-fcgi." >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on" >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo " # another machine. And then cross your fingers that you won't get hacked." >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # With php-cgi alone:' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # fastcgi_pass 127.0.0.1:9000;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # With php-fpm:' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' fastcgi_read_timeout 30;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # deny access to all dot files' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' location ~ /\. {' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' deny all;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' #deny access to store' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' location ~ /store {' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' deny all;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' location ~ /(data|conf|bin|inc)/ {' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' deny all;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' location ~ /\.ht {' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' deny all;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo '}' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME + nginx_limits "$DOKUWIKI_DOMAIN_NAME" + { echo ' # Zero-day exploit defense.'; + echo ' # http://forum.nginx.org/read.php?2,88845,page=3'; + echo " # Won't work properly (404 error) if the file is not stored on this"; + echo " # server, which is entirely possible with php-fpm/php-fcgi."; + echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on"; + echo " # another machine. And then cross your fingers that you won't get hacked."; + echo " try_files \$uri \$uri/ /index.php;"; + echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini'; + echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;'; + echo ' # With php-cgi alone:'; + echo ' # fastcgi_pass 127.0.0.1:9000;'; + echo ' # With php-fpm:'; + echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;'; + echo ' fastcgi_read_timeout 30;'; + echo ' include fastcgi_params;'; + echo ' fastcgi_index index.php;'; + echo " fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;"; + echo ' }'; + echo ''; + echo ' # deny access to all dot files'; + echo ' location ~ /\. {'; + echo ' deny all;'; + echo ' }'; + echo ''; + echo ' #deny access to store'; + echo ' location ~ /store {'; + echo ' deny all;'; + echo ' }'; + echo ' location ~ /(data|conf|bin|inc)/ {'; + echo ' deny all;'; + echo ' }'; + echo ' location ~ /\.ht {'; + echo ' deny all;'; + echo ' }'; + echo '}'; + echo ''; } >> "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME" else - echo -n '' > /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME + echo -n '' > "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME" fi - echo 'server {' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo " listen 127.0.0.1:${DOKUWIKI_ONION_PORT} default_server;" >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo " root /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs;" >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo " server_name $DOKUWIKI_ONION_HOSTNAME;" >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' access_log /dev/null;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo " error_log /dev/null;" >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' index index.php;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' charset utf-8;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' proxy_read_timeout 86400s;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME + { echo 'server {'; + echo " listen 127.0.0.1:${DOKUWIKI_ONION_PORT} default_server;"; + echo " root /var/www/$DOKUWIKI_DOMAIN_NAME/htdocs;"; + echo " server_name $DOKUWIKI_ONION_HOSTNAME;"; + echo ' access_log /dev/null;'; + echo " error_log /dev/null;"; + echo ' index index.php;'; + echo ' charset utf-8;'; + echo ' proxy_read_timeout 86400s;'; } >> "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME" function_check nginx_disable_sniffing - nginx_disable_sniffing $DOKUWIKI_DOMAIN_NAME - echo ' add_header Strict-Transport-Security "max-age=0;";' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # rewrite to front controller as default rule' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' location / {' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME + nginx_disable_sniffing "$DOKUWIKI_DOMAIN_NAME" + { echo ' add_header Strict-Transport-Security "max-age=0;";'; + echo ''; + echo ' # rewrite to front controller as default rule'; + echo ' location / {'; } >> "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME" function_check nginx_limits - nginx_limits $DOKUWIKI_DOMAIN_NAME - echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # statically serve these file types when possible' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # otherwise fall back to front controller' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # allow browser to cache them' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # added .htm for advanced source code editor library' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' expires 30d;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' try_files $uri /index.php?q=$uri&$args;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # block these file types' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' deny all;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # or a unix socket' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME + nginx_limits "$DOKUWIKI_DOMAIN_NAME" + { echo " rewrite ^/(.*) /index.php?q=\$uri&\$args last;"; + echo ' }'; + echo ''; + echo ' # statically serve these file types when possible'; + echo ' # otherwise fall back to front controller'; + echo ' # allow browser to cache them'; + echo ' # added .htm for advanced source code editor library'; + echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {'; + echo ' expires 30d;'; + echo " try_files \$uri /index.php?q=\$uri&\$args;"; + echo ' }'; + echo ''; + echo ' # block these file types'; + echo ' location ~* \.(tpl|md|tgz|log|out)$ {'; + echo ' deny all;'; + echo ' }'; + echo ''; + echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000'; + echo ' # or a unix socket'; + echo ' location ~* \.php$ {'; } >> "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME" function_check nginx_limits - nginx_limits $DOKUWIKI_DOMAIN_NAME - echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo " # Won't work properly (404 error) if the file is not stored on this" >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo " # server, which is entirely possible with php-fpm/php-fcgi." >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on" >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo " # another machine. And then cross your fingers that you won't get hacked." >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # With php-cgi alone:' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # fastcgi_pass 127.0.0.1:9000;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # With php-fpm:' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' fastcgi_read_timeout 30;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' # deny access to all dot files' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' location ~ /\. {' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' deny all;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' #deny access to store' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' location ~ /store {' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' deny all;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' location ~ /(data|conf|bin|inc)/ {' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' deny all;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' location ~ /\.ht {' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' deny all;' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME - echo '}' >> /etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME + nginx_limits "$DOKUWIKI_DOMAIN_NAME" + { echo ' # Zero-day exploit defense.'; + echo ' # http://forum.nginx.org/read.php?2,88845,page=3'; + echo " # Won't work properly (404 error) if the file is not stored on this"; + echo " # server, which is entirely possible with php-fpm/php-fcgi."; + echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on"; + echo " # another machine. And then cross your fingers that you won't get hacked."; + echo " try_files \$uri \$uri/ /index.php;"; + echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini'; + echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;'; + echo ' # With php-cgi alone:'; + echo ' # fastcgi_pass 127.0.0.1:9000;'; + echo ' # With php-fpm:'; + echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;'; + echo ' fastcgi_read_timeout 30;'; + echo ' include fastcgi_params;'; + echo ' fastcgi_index index.php;'; + echo " fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;"; + echo ' }'; + echo ''; + echo ' # deny access to all dot files'; + echo ' location ~ /\. {'; + echo ' deny all;'; + echo ' }'; + echo ''; + echo ' #deny access to store'; + echo ' location ~ /store {'; + echo ' deny all;'; + echo ' }'; + echo ' location ~ /(data|conf|bin|inc)/ {'; + echo ' deny all;'; + echo ' }'; + echo ' location ~ /\.ht {'; + echo ' deny all;'; + echo ' }'; + echo '}'; } >> "/etc/nginx/sites-available/$DOKUWIKI_DOMAIN_NAME" function_check create_site_certificate - create_site_certificate $DOKUWIKI_DOMAIN_NAME 'yes' + create_site_certificate "$DOKUWIKI_DOMAIN_NAME" 'yes' function_check configure_php configure_php - nginx_ensite $DOKUWIKI_DOMAIN_NAME + nginx_ensite "$DOKUWIKI_DOMAIN_NAME" systemctl restart php7.0-fpm systemctl restart nginx function_check add_ddns_domain - add_ddns_domain $DOKUWIKI_DOMAIN_NAME + add_ddns_domain "$DOKUWIKI_DOMAIN_NAME" - ${PROJECT_NAME}-pass -u $MY_USERNAME -a dokuwiki -p "$DOKUWIKI_ADMIN_PASSWORD" + "${PROJECT_NAME}-pass" -u "$MY_USERNAME" -a dokuwiki -p "$DOKUWIKI_ADMIN_PASSWORD" APP_INSTALLED=1 } diff --git a/src/freedombone-app-edith b/src/freedombone-app-edith index 89b4e829..7abd6cbb 100755 --- a/src/freedombone-app-edith +++ b/src/freedombone-app-edith @@ -50,12 +50,12 @@ edith_variables=(MY_USERNAME function remove_bad_links_edith { read_config_param EDITH_DOMAIN_NAME - edith_dir=/var/www/$EDITH_DOMAIN_NAME/htdocs + edith_dir="/var/www/$EDITH_DOMAIN_NAME/htdocs" # copy jquery locally jquery_version='1.12.4' if [ ! -f $edith_dir/jquery-${jquery_version}.js ]; then - cd $edith_dir + cd $edith_dir || exit 246824628 wget https://code.jquery.com/jquery-${jquery_version}.js if [ -f $edith_dir/jquery-${jquery_version}.js ]; then jquery_hash=$(sha256sum $edith_dir/jquery-${jquery_version}.js | awk -F ' ' '{print $1}') @@ -79,9 +79,9 @@ function change_password_edith { new_user_password="$2" sed -i "/${curr_username}:/d" /etc/nginx/.edithpasswd - echo -n "$new_user_password" | htpasswd -i -s -c /etc/nginx/.edithpasswd ${curr_username} + echo -n "$new_user_password" | htpasswd -i -s -c /etc/nginx/.edithpasswd "${curr_username}" - ${PROJECT_NAME}-pass -u $MY_USERNAME -a ${curr_username} -p "$new_user_password" + "${PROJECT_NAME}-pass" -u "$MY_USERNAME" -a "${curr_username}" -p "$new_user_password" } function logging_on_edith { @@ -102,21 +102,20 @@ function edith_enable_login { dialog --title $"Enable Edith login" \ --backtitle $"Freedombone Control Panel" \ --defaultno \ - --yesno $"\nDo you want to add a login so that random web users can't access your notes?" 10 60 + --yesno $"\\nDo you want to add a login so that random web users can't access your notes?" 10 60 sel=$? case $sel in - 0) if grep -q '#auth_basic' /etc/nginx/sites-available/$EDITH_DOMAIN_NAME; then - sed -i 's|#auth_basic|auth_basic|g' /etc/nginx/sites-available/$EDITH_DOMAIN_NAME + 0) if grep -q '#auth_basic' "/etc/nginx/sites-available/$EDITH_DOMAIN_NAME"; then + sed -i 's|#auth_basic|auth_basic|g' "/etc/nginx/sites-available/$EDITH_DOMAIN_NAME" systemctl restart nginx fi - read_config_param $MY_USERNAME - EDITH_PASSWORD=$(${PROJECT_NAME}-pass -u $MY_USERNAME -a edith) + read_config_param "$MY_USERNAME" + EDITH_PASSWORD=$("${PROJECT_NAME}-pass" -u "$MY_USERNAME" -a edith) dialog --title $"Enable Edith login" \ --msgbox $"Edith logins are now enabled with the password $EDITH_PASSWORD" 6 65 - EDITH__PASSWORD= ;; - 1) if ! grep -q '#auth_basic' /etc/nginx/sites-available/$EDITH_DOMAIN_NAME; then - sed -i 's|auth_basic|#auth_basic|g' /etc/nginx/sites-available/$EDITH_DOMAIN_NAME + 1) if ! grep -q '#auth_basic' "/etc/nginx/sites-available/$EDITH_DOMAIN_NAME"; then + sed -i 's|auth_basic|#auth_basic|g' "/etc/nginx/sites-available/$EDITH_DOMAIN_NAME" systemctl restart nginx fi dialog --title $"Disable Edith login" \ @@ -127,31 +126,34 @@ function edith_enable_login { function edith_browse { read_config_param EDITH_DOMAIN_NAME - cd /var/www/$EDITH_DOMAIN_NAME/htdocs/data - editor /var/www/$EDITH_DOMAIN_NAME/htdocs/data + cd "/var/www/$EDITH_DOMAIN_NAME/htdocs/data" || exit 24682642 + editor "/var/www/$EDITH_DOMAIN_NAME/htdocs/data" } function configure_interactive_edith { while true do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 + data=$(mktemp 2>/dev/null) dialog --backtitle $"Freedombone Control Panel" \ --title $"Edith" \ --radiolist $"Choose an operation:" 10 50 3 \ 1 $"Enable login" off \ 2 $"Browse notes" off \ - 3 $"Exit" on 2> $data + 3 $"Exit" on 2> "$data" sel=$? case $sel in - 1) break;; - 255) break;; + 1) rm -f "$data" + break;; + 255) rm -f "$data" + break;; esac - case $(cat $data) in + case $(cat "$data") in 1) edith_enable_login;; 2) edith_browse;; - 3) break;; + 3) rm -f "$data" + break;; esac + rm -f "$data" done } @@ -165,24 +167,24 @@ function upgrade_edith { # update to the next commit function_check set_repo_commit - set_repo_commit /var/www/$EDITH_DOMAIN_NAME/htdocs "edith commit" "$EDITH_COMMIT" $EDITH_REPO + set_repo_commit "/var/www/$EDITH_DOMAIN_NAME/htdocs" "edith commit" "$EDITH_COMMIT" "$EDITH_REPO" remove_bad_links_edith - chown -R www-data:www-data /var/www/$EDITH_DOMAIN_NAME/htdocs - chmod a+w /var/www/$EDITH_DOMAIN_NAME/htdocs/data + chown -R www-data:www-data "/var/www/$EDITH_DOMAIN_NAME/htdocs" + chmod a+w "/var/www/$EDITH_DOMAIN_NAME/htdocs/data" } function backup_local_edith { read_config_param EDITH_DOMAIN_NAME function_check suspend_site - suspend_site ${EDITH_DOMAIN_NAME} + suspend_site "${EDITH_DOMAIN_NAME}" - source_directory=/var/www/${EDITH_DOMAIN_NAME}/htdocs/data + source_directory="/var/www/${EDITH_DOMAIN_NAME}/htdocs/data" function_check backup_directory_to_usb dest_directory=edith - backup_directory_to_usb $source_directory $dest_directory + backup_directory_to_usb "$source_directory" "$dest_directory" function_check restart_site restart_site @@ -192,12 +194,12 @@ function restore_local_edith { read_config_param EDITH_DOMAIN_NAME temp_restore_dir=/root/tempedith - edith_dir=/var/www/${EDITH_DOMAIN_NAME}/htdocs/data + edith_dir="/var/www/${EDITH_DOMAIN_NAME}/htdocs/data" function_check restore_directory_from_usb restore_directory_from_usb $temp_restore_dir edith if [ -d $temp_restore_dir ]; then - if [ -d cp $temp_restore_dir$edith_dir ]; then + if [ -d $temp_restore_dir$edith_dir ]; then cp -rp $temp_restore_dir$edith_dir $edith_dir/ else if [ ! -d $edith_dir ]; then @@ -215,13 +217,13 @@ function backup_remote_edith { read_config_param EDITH_DOMAIN_NAME function_check suspend_site - suspend_site ${EDITH_DOMAIN_NAME} + suspend_site "${EDITH_DOMAIN_NAME}" - source_directory=/var/www/${EDITH_DOMAIN_NAME}/htdocs/data + source_directory="/var/www/${EDITH_DOMAIN_NAME}/htdocs/data" function_check backup_directory_to_friend dest_directory=edith - backup_directory_to_friend $source_directory $dest_directory + backup_directory_to_friend "$source_directory" "$dest_directory" function_check restart_site restart_site @@ -231,12 +233,12 @@ function restore_remote_edith { read_config_param EDITH_DOMAIN_NAME temp_restore_dir=/root/tempedith - edith_dir=/var/www/${EDITH_DOMAIN_NAME}/htdocs/data + edith_dir="/var/www/${EDITH_DOMAIN_NAME}/htdocs/data" function_check restore_directory_from_friend restore_directory_from_friend $temp_restore_dir edith if [ -d $temp_restore_dir ]; then - if [ -d cp $temp_restore_dir$edith_dir ]; then + if [ -d $temp_restore_dir$edith_dir ]; then cp -rp $temp_restore_dir$edith_dir $edith_dir/ else if [ ! -d $edith_dir ]; then @@ -253,17 +255,17 @@ function restore_remote_edith { function remove_edith { nginx_dissite $EDITH_DOMAIN_NAME - if [ -f /etc/nginx/sites-available/$EDITH_DOMAIN_NAME ]; then - rm /etc/nginx/sites-available/$EDITH_DOMAIN_NAME + if [ -f "/etc/nginx/sites-available/$EDITH_DOMAIN_NAME" ]; then + rm "/etc/nginx/sites-available/$EDITH_DOMAIN_NAME" fi - if [ -d /var/www/$EDITH_DOMAIN_NAME ]; then - rm -rf /var/www/$EDITH_DOMAIN_NAME + if [ -d "/var/www/$EDITH_DOMAIN_NAME" ]; then + rm -rf "/var/www/$EDITH_DOMAIN_NAME" fi function_check remove_onion_service remove_onion_service edith ${EDITH_ONION_PORT} - sed -i '/edith/d' $COMPLETION_FILE + sed -i '/edith/d' "$COMPLETION_FILE" if [ -f /etc/nginx/.edithpasswd ]; then rm /etc/nginx/.edithpasswd @@ -286,26 +288,26 @@ function install_edith { function_check install_nodejs install_nodejs edith - if [ ! ${EDITH_PASSWORD} ]; then - if [ -f ${IMAGE_PASSWORD_FILE} ]; then - EDITH_PASSWORD="$(printf `cat $IMAGE_PASSWORD_FILE`)" + if [ ! "${EDITH_PASSWORD}" ]; then + if [ -f "${IMAGE_PASSWORD_FILE}" ]; then + EDITH_PASSWORD="$(printf "%s" "$(cat "$IMAGE_PASSWORD_FILE")")" else - EDITH_PASSWORD="$(create_password ${MINIMUM_PASSWORD_LENGTH})" + EDITH_PASSWORD="$(create_password "${MINIMUM_PASSWORD_LENGTH}")" fi fi - if [ -d /var/www/$EDITH_DOMAIN_NAME/htdocs ]; then - rm -rf /var/www/$EDITH_DOMAIN_NAME/htdocs + if [ -d "/var/www/$EDITH_DOMAIN_NAME/htdocs" ]; then + rm -rf "/var/www/$EDITH_DOMAIN_NAME/htdocs" fi if [ -d /repos/edith ]; then - mkdir /var/www/$EDITH_DOMAIN_NAME/htdocs - cp -r -p /repos/edith/. /var/www/$EDITH_DOMAIN_NAME/htdocs - cd /var/www/$EDITH_DOMAIN_NAME/htdocs + mkdir "/var/www/$EDITH_DOMAIN_NAME/htdocs" + cp -r -p /repos/edith/. "/var/www/$EDITH_DOMAIN_NAME/htdocs" + cd "/var/www/$EDITH_DOMAIN_NAME/htdocs" || exit 24682462 git pull else function_check git_clone - git_clone $EDITH_REPO /var/www/$EDITH_DOMAIN_NAME/htdocs + git_clone "$EDITH_REPO" "/var/www/$EDITH_DOMAIN_NAME/htdocs" fi if [ ! -d /var/www/$EDITH_DOMAIN_NAME/htdocs ]; then @@ -313,102 +315,102 @@ function install_edith { exit 537593569 fi - cd /var/www/$EDITH_DOMAIN_NAME/htdocs - git checkout $EDITH_COMMIT -b $EDITH_COMMIT + cd "/var/www/$EDITH_DOMAIN_NAME/htdocs" || exit 2648248 + git checkout "$EDITH_COMMIT" -b "$EDITH_COMMIT" set_completion_param "edith commit" "$EDITH_COMMIT" - if [ ! -d /var/www/$EDITH_DOMAIN_NAME/htdocs/data ]; then - mkdir -p /var/www/$EDITH_DOMAIN_NAME/htdocs/data + if [ ! -d "/var/www/$EDITH_DOMAIN_NAME/htdocs/data" ]; then + mkdir -p "/var/www/$EDITH_DOMAIN_NAME/htdocs/data" fi EDITH_ONION_HOSTNAME=$(add_onion_service edith 80 ${EDITH_ONION_PORT}) - edith_nginx_site=/etc/nginx/sites-available/$EDITH_DOMAIN_NAME - if [[ $ONION_ONLY == "no" ]]; then + edith_nginx_site="/etc/nginx/sites-available/$EDITH_DOMAIN_NAME" + if [[ "$ONION_ONLY" == "no" ]]; then function_check nginx_http_redirect - nginx_http_redirect $EDITH_DOMAIN_NAME "index index.php" - echo 'server {' >> $edith_nginx_site - echo ' listen 443 ssl;' >> $edith_nginx_site - echo ' #listen [::]:443 ssl;' >> $edith_nginx_site - echo " server_name $EDITH_DOMAIN_NAME;" >> $edith_nginx_site - echo '' >> $edith_nginx_site + nginx_http_redirect "$EDITH_DOMAIN_NAME" "index index.php" + { echo 'server {'; + echo ' listen 443 ssl;'; + echo ' #listen [::]:443 ssl;'; + echo " server_name $EDITH_DOMAIN_NAME;"; + echo ''; } >> "$edith_nginx_site" function_check nginx_compress - nginx_compress $EDITH_DOMAIN_NAME - echo '' >> $edith_nginx_site - echo ' # Security' >> $edith_nginx_site + nginx_compress "$EDITH_DOMAIN_NAME" + echo '' >> "$edith_nginx_site" + echo ' # Security' >> "$edith_nginx_site" function_check nginx_ssl - nginx_ssl $EDITH_DOMAIN_NAME + nginx_ssl "$EDITH_DOMAIN_NAME" function_check nginx_disable_sniffing - nginx_disable_sniffing $EDITH_DOMAIN_NAME + nginx_disable_sniffing "$EDITH_DOMAIN_NAME" - echo ' add_header Strict-Transport-Security max-age=15768000;' >> $edith_nginx_site - echo '' >> $edith_nginx_site - echo ' access_log /dev/null;' >> $edith_nginx_site - echo ' error_log /dev/null;' >> $edith_nginx_site - echo '' >> $edith_nginx_site - echo " root /var/www/$EDITH_DOMAIN_NAME/htdocs;" >> $edith_nginx_site - echo '' >> $edith_nginx_site - echo ' index index.php;' >> $edith_nginx_site - echo '' >> $edith_nginx_site - echo ' # PHP' >> $edith_nginx_site - echo ' location ~ \.php {' >> $edith_nginx_site - echo ' include snippets/fastcgi-php.conf;' >> $edith_nginx_site - echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> $edith_nginx_site - echo ' fastcgi_read_timeout 30;' >> $edith_nginx_site - echo ' }' >> $edith_nginx_site - echo '' >> $edith_nginx_site - echo ' # Location' >> $edith_nginx_site - echo ' location / {' >> $edith_nginx_site + { echo ' add_header Strict-Transport-Security max-age=15768000;'; + echo ''; + echo ' access_log /dev/null;'; + echo ' error_log /dev/null;'; + echo ''; + echo " root /var/www/$EDITH_DOMAIN_NAME/htdocs;"; + echo ''; + echo ' index index.php;'; + echo ''; + echo ' # PHP'; + echo ' location ~ \.php {'; + echo ' include snippets/fastcgi-php.conf;'; + echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;'; + echo ' fastcgi_read_timeout 30;'; + echo ' }'; + echo ''; + echo ' # Location'; + echo ' location / {'; } >> "$edith_nginx_site" function_check nginx_limits - nginx_limits $EDITH_DOMAIN_NAME '15m' - echo ' try_files $uri $uri/ /index.php?$args;' >> $edith_nginx_site - echo " auth_basic \"${EDITH_LOGIN_TEXT}\";" >> $edith_nginx_site - echo ' auth_basic_user_file /etc/nginx/.edithpasswd;' >> $edith_nginx_site - echo ' }' >> $edith_nginx_site - echo '}' >> $edith_nginx_site + nginx_limits "$EDITH_DOMAIN_NAME" '15m' + { echo " try_files \$uri \$uri/ /index.php?\$args;"; + echo " auth_basic \"${EDITH_LOGIN_TEXT}\";"; + echo ' auth_basic_user_file /etc/nginx/.edithpasswd;'; + echo ' }'; + echo '}'; } >> "$edith_nginx_site" else - echo -n '' > $edith_nginx_site + echo -n '' > "$edith_nginx_site" fi - echo 'server {' >> $edith_nginx_site - echo " listen 127.0.0.1:$EDITH_ONION_PORT default_server;" >> $edith_nginx_site - echo " server_name $EDITH_ONION_HOSTNAME;" >> $edith_nginx_site - echo '' >> $edith_nginx_site + { echo 'server {'; + echo " listen 127.0.0.1:$EDITH_ONION_PORT default_server;"; + echo " server_name $EDITH_ONION_HOSTNAME;"; + echo ''; } >> "$edith_nginx_site" function_check nginx_compress - nginx_compress $EDITH_DOMAIN_NAME - echo '' >> $edith_nginx_site + nginx_compress "$EDITH_DOMAIN_NAME" + echo '' >> "$edith_nginx_site" function_check nginx_disable_sniffing - nginx_disable_sniffing $EDITH_DOMAIN_NAME - echo '' >> $edith_nginx_site - echo ' access_log /dev/null;' >> $edith_nginx_site - echo ' error_log /dev/null;' >> $edith_nginx_site - echo '' >> $edith_nginx_site - echo " root /var/www/$EDITH_DOMAIN_NAME/htdocs;" >> $edith_nginx_site - echo '' >> $edith_nginx_site - echo ' index index.php;' >> $edith_nginx_site - echo '' >> $edith_nginx_site - echo ' # PHP' >> $edith_nginx_site - echo ' location ~ \.php {' >> $edith_nginx_site - echo ' include snippets/fastcgi-php.conf;' >> $edith_nginx_site - echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> $edith_nginx_site - echo ' fastcgi_read_timeout 30;' >> $edith_nginx_site - echo ' }' >> $edith_nginx_site - echo '' >> $edith_nginx_site - echo ' # Location' >> $edith_nginx_site - echo ' location / {' >> $edith_nginx_site + nginx_disable_sniffing "$EDITH_DOMAIN_NAME" + { echo ''; + echo ' access_log /dev/null;'; + echo ' error_log /dev/null;'; + echo ''; + echo " root /var/www/$EDITH_DOMAIN_NAME/htdocs;"; + echo ''; + echo ' index index.php;'; + echo ''; + echo ' # PHP'; + echo ' location ~ \.php {'; + echo ' include snippets/fastcgi-php.conf;'; + echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;'; + echo ' fastcgi_read_timeout 30;'; + echo ' }'; + echo ''; + echo ' # Location'; + echo ' location / {'; } >> "$edith_nginx_site" function_check nginx_limits nginx_limits $EDITH_DOMAIN_NAME '15m' - echo ' try_files $uri $uri/ /index.php?$args;' >> $edith_nginx_site - echo " auth_basic \"${EDITH_LOGIN_TEXT}\";" >> $edith_nginx_site - echo ' auth_basic_user_file /etc/nginx/.edithpasswd;' >> $edith_nginx_site - echo ' }' >> $edith_nginx_site - echo '}' >> $edith_nginx_site + { echo " try_files \$uri \$uri/ /index.php?\$args;"; + echo " auth_basic \"${EDITH_LOGIN_TEXT}\";"; + echo ' auth_basic_user_file /etc/nginx/.edithpasswd;'; + echo ' }'; + echo '}'; } >> "$edith_nginx_site" function_check configure_php configure_php function_check create_site_certificate - create_site_certificate $EDITH_DOMAIN_NAME 'yes' + create_site_certificate "$EDITH_DOMAIN_NAME" 'yes' # create a password for users if [ ! -f /etc/nginx/.edithpasswd ]; then @@ -417,24 +419,23 @@ function install_edith { if grep -q "$MY_USERNAME:" /etc/nginx/.edithpasswd; then sed -i "/$MY_USERNAME:/d" /etc/nginx/.edithpasswd fi - echo -n "$EDITH_PASSWORD" | htpasswd -i -s -c /etc/nginx/.edithpasswd $MY_USERNAME + echo -n "$EDITH_PASSWORD" | htpasswd -i -s -c /etc/nginx/.edithpasswd "$MY_USERNAME" if [ ! -f /etc/nginx/.edithpasswd ]; then echo $'/etc/nginx/.edithpasswd not found' exit 6537683563 fi - ${PROJECT_NAME}-pass -u $MY_USERNAME -a edith -p "$EDITH_PASSWORD" + "${PROJECT_NAME}-pass" -u "$MY_USERNAME" -a edith -p "$EDITH_PASSWORD" - cp /var/www/$EDITH_DOMAIN_NAME/htdocs/htaccess.example /var/www/$EDITH_DOMAIN_NAME/htdocs/.htaccess - cd /var/www/$EDITH_DOMAIN_NAME/htdocs + cp "/var/www/$EDITH_DOMAIN_NAME/htdocs/htaccess.example" "/var/www/$EDITH_DOMAIN_NAME/htdocs/.htaccess" + cd "/var/www/$EDITH_DOMAIN_NAME/htdocs" || exit 26482468 npm install -g coffeescript uglify-js - cake build - if [ ! "$?" = "0" ]; then + if ! cake build; then echo $'Unable to build Edith' exit 7396483635 fi cp config.example.php config.php - if [[ $ONION_ONLY == "no" ]]; then + if [[ "$ONION_ONLY" == "no" ]]; then sed -i "s|define('EDITH_URI'.*|define('EDITH_URI', 'https://$EDITH_DOMAIN_NAME');|g" config.php else sed -i "s|define('EDITH_URI'.*|define('EDITH_URI', 'http://$EDITH_ONION_HOSTNAME');|g" config.php @@ -445,20 +446,20 @@ function install_edith { remove_bad_links_edith - chown -R www-data:www-data /var/www/$EDITH_DOMAIN_NAME/htdocs - chmod a+w /var/www/$EDITH_DOMAIN_NAME/htdocs/data - nginx_ensite $EDITH_DAEMON_NAME + chown -R www-data:www-data "/var/www/$EDITH_DOMAIN_NAME/htdocs" + chmod a+w "/var/www/$EDITH_DOMAIN_NAME/htdocs/data" + nginx_ensite "$EDITH_DAEMON_NAME" systemctl restart nginx APP_INSTALLED=1 } function install_interactive_edith { - if [ ! $ONION_ONLY ]; then + if [ ! "$ONION_ONLY" ]; then ONION_ONLY='no' fi - if [[ $ONION_ONLY != "no" ]]; then + if [[ "$ONION_ONLY" != "no" ]]; then GHOST_DOMAIN_NAME='edith.local' write_config_param "EDITH_DOMAIN_NAME" "$EDITH_DOMAIN_NAME" else diff --git a/src/freedombone-app-emacs b/src/freedombone-app-emacs index 8bb7207a..1056c3e3 100755 --- a/src/freedombone-app-emacs +++ b/src/freedombone-app-emacs @@ -57,13 +57,13 @@ function backup_local_emacs { for d in /home/*/ ; do USERNAME=$(echo "$d" | awk -F '/' '{print $3}') if [[ $(is_valid_user "$USERNAME") == "1" ]]; then - if [ -d /home/$USERNAME/.emacs.d ]; then + if [ -d "/home/$USERNAME/.emacs.d" ]; then echo $"Backing up Emacs config for $USERNAME" - if [ -f /home/$USERNAME/.emacs ]; then - cp /home/$USERNAME/.emacs /home/$USERNAME/.emacs.d/dotemacs + if [ -f "/home/$USERNAME/.emacs" ]; then + cp "/home/$USERNAME/.emacs" "/home/$USERNAME/.emacs.d/dotemacs" fi function_check backup_directory_to_usb - backup_directory_to_usb /home/$USERNAME/.emacs.d emacs/$USERNAME + backup_directory_to_usb "/home/$USERNAME/.emacs.d" "emacs/$USERNAME" fi fi done @@ -71,24 +71,25 @@ function backup_local_emacs { function restore_local_emacs { temp_restore_dir=/root/tempemacs - if [ -d $USB_MOUNT/backup/emacs ]; then + if [ -d "$USB_MOUNT/backup/emacs" ]; then for d in $USB_MOUNT/backup/emacs/*/ ; do USERNAME=$(echo "$d" | awk -F '/' '{print $6}') if [[ $(is_valid_user "$USERNAME") == "1" ]]; then - if [ ! -d /home/$USERNAME ]; then - ${PROJECT_NAME}-adduser $USERNAME + if [ ! -d "/home/$USERNAME" ]; then + "${PROJECT_NAME}-adduser" "$USERNAME" fi echo $"Restoring Emacs config for $USERNAME" function_check restore_directory_from_usb - restore_directory_from_usb $temp_restore_dir emacs/$USERNAME - if [ -d $temp_restore_dir/home/$USERNAME/.emacs.d ]; then - cp -r $temp_restore_dir/home/$USERNAME/.emacs.d /home/$USERNAME/ + restore_directory_from_usb "$temp_restore_dir" "emacs/$USERNAME" + if [ -d "$temp_restore_dir/home/$USERNAME/.emacs.d" ]; then + cp -r "$temp_restore_dir/home/$USERNAME/.emacs.d" "/home/$USERNAME/" else - if [ ! -d /home/$USERNAME/.emacs.d ]; then - mkdir /home/$USERNAME/.emacs.d + if [ ! -d "/home/$USERNAME/.emacs.d" ]; then + mkdir "/home/$USERNAME/.emacs.d" fi - cp -r $temp_restore_dir/* /home/$USERNAME/.emacs.d + cp -r "$temp_restore_dir/*" "/home/$USERNAME/.emacs.d" fi + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then rm -rf $temp_restore_dir function_check set_user_permissions @@ -97,10 +98,10 @@ function restore_local_emacs { backup_unmount_drive exit 664 fi - if [ -d $temp_restore_dir/home/$USERNAME/.emacs.d ]; then - cp -f $temp_restore_dir/home/$USERNAME/.emacs.d/dotemacs /home/$USERNAME/.emacs + if [ -d "$temp_restore_dir/home/$USERNAME/.emacs.d" ]; then + cp -f "$temp_restore_dir/home/$USERNAME/.emacs.d/dotemacs" "/home/$USERNAME/.emacs" else - cp -f $temp_restore_dir/dotemacs /home/$USERNAME/.emacs + cp -f "$temp_restore_dir/dotemacs" "/home/$USERNAME/.emacs" fi rm -rf $temp_restore_dir fi @@ -112,13 +113,13 @@ function backup_remote_emacs { for d in /home/*/ ; do USERNAME=$(echo "$d" | awk -F '/' '{print $3}') if [[ $(is_valid_user "$USERNAME") == "1" ]]; then - if [ -d /home/$USERNAME/.emacs.d ]; then + if [ -d "/home/$USERNAME/.emacs.d" ]; then echo $"Backing up Emacs config for $USERNAME" - if [ -f /home/$USERNAME/.emacs ]; then - cp /home/$USERNAME/.emacs /home/$USERNAME/.emacs.d/dotemacs + if [ -f "/home/$USERNAME/.emacs" ]; then + cp "/home/$USERNAME/.emacs" "/home/$USERNAME/.emacs.d/dotemacs" fi function_check backup_directory_to_friend - backup_directory_to_friend /home/$USERNAME/.emacs.d emacs/$USERNAME + backup_directory_to_friend "/home/$USERNAME/.emacs.d" "emacs/$USERNAME" fi fi done @@ -126,24 +127,25 @@ function backup_remote_emacs { function restore_remote_emacs { temp_restore_dir=/root/tempemacs - if [ -d $USB_MOUNT/backup/emacs ]; then + if [ -d "$USB_MOUNT/backup/emacs" ]; then for d in $USB_MOUNT/backup/emacs/*/ ; do USERNAME=$(echo "$d" | awk -F '/' '{print $6}') if [[ $(is_valid_user "$USERNAME") == "1" ]]; then - if [ ! -d /home/$USERNAME ]; then - ${PROJECT_NAME}-adduser $USERNAME + if [ ! -d "/home/$USERNAME" ]; then + "${PROJECT_NAME}-adduser" "$USERNAME" fi echo $"Restoring Emacs config for $USERNAME" function_check restore_directory_from_friend - restore_directory_from_friend $temp_restore_dir emacs/$USERNAME - if [ -d $temp_restore_dir/home/$USERNAME/.emacs.d ]; then - cp -r $temp_restore_dir/home/$USERNAME/.emacs.d /home/$USERNAME/ + restore_directory_from_friend "$temp_restore_dir" "emacs/$USERNAME" + if [ -d "$temp_restore_dir/home/$USERNAME/.emacs.d" ]; then + cp -r "$temp_restore_dir/home/$USERNAME/.emacs.d" "/home/$USERNAME/" else - if [ ! -d /home/$USERNAME/.emacs.d ]; then - mkdir /home/$USERNAME/.emacs.d + if [ ! -d "/home/$USERNAME/.emacs.d" ]; then + mkdir "/home/$USERNAME/.emacs.d" fi - cp -r $temp_restore_dir/* /home/$USERNAME/.emacs.d/* + cp -r "$temp_restore_dir/*" "/home/$USERNAME/.emacs.d/*" fi + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then rm -rf $temp_restore_dir function_check set_user_permissions @@ -152,10 +154,10 @@ function restore_remote_emacs { backup_unmount_drive exit 664 fi - if [ -d $temp_restore_dir/home/$USERNAME/.emacs.d ]; then - cp -f $temp_restore_dir/home/$USERNAME/.emacs.d/dotemacs /home/$USERNAME/.emacs + if [ -d "$temp_restore_dir/home/$USERNAME/.emacs.d" ]; then + cp -f "$temp_restore_dir/home/$USERNAME/.emacs.d/dotemacs" "/home/$USERNAME/.emacs" else - cp -f $temp_restore_dir/dotemacs /home/$USERNAME/.emacs + cp -f "$temp_restore_dir/dotemacs" "/home/$USERNAME/.emacs" fi rm -rf $temp_restore_dir fi @@ -166,7 +168,7 @@ function restore_remote_emacs { function remove_emacs { apt-get -yq remove --purge emacs update-alternatives --set editor /usr/bin/nano - sed -i '/install_emacs/d' $COMPLETION_FILE + sed -i '/install_emacs/d' "$COMPLETION_FILE" # remove emacs as the mutt email editor if [ -f /etc/Muttrc ]; then @@ -176,9 +178,9 @@ function remove_emacs { for d in /home/*/ ; do USERNAME=$(echo "$d" | awk -F '/' '{print $3}') if [[ $(is_valid_user "$USERNAME") == "1" ]]; then - if [ -f /home/$USERNAME/.muttrc ]; then - if grep -q "set editor=" /home/$USERNAME/.muttrc; then - sed -i '/set editor=/d' /home/$USERNAME/.muttrc + if [ -f "/home/$USERNAME/.muttrc" ]; then + if grep -q "set editor=" "/home/$USERNAME/.muttrc"; then + sed -i '/set editor=/d' "/home/$USERNAME/.muttrc" fi fi fi @@ -194,74 +196,74 @@ function install_emacs { #echo -n "(add-to-list 'load-path " > /home/$MY_USERNAME/.emacs #echo '"~/.emacs.d/")' >> /home/$MY_USERNAME/.emacs #echo '' >> /home/$MY_USERNAME/.emacs - echo $';; ===== Remove trailing whitepace ======================================' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo ";;(add-hook 'before-save-hook 'delete-trailing-whitespace)" >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo ';; Goto a line number with CTRL-l' >> /home/$MY_USERNAME/.emacs - echo -n '(global-set-key "\C-l" ' >> /home/$MY_USERNAME/.emacs - echo "'goto-line)" >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo $';; ===== Show line numbers ==============================================' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo "(add-hook 'find-file-hook (lambda () (linum-mode 1)))" >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo $';; ===== Enable line wrapping in org-mode ===============================' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo " (add-hook 'org-mode-hook" >> /home/$MY_USERNAME/.emacs - echo " '(lambda ()" >> /home/$MY_USERNAME/.emacs - echo " (visual-line-mode 1)))" >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo $';; ===== Enable shift select in org mode ================================' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo '(setq org-support-shift-select t)' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo $';; ===== Set standard indent to 4 rather that 4 =========================' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo '(setq standard-indent 4)' >> /home/$MY_USERNAME/.emacs - echo '(setq-default tab-width 4)' >> /home/$MY_USERNAME/.emacs - echo '(setq c-basic-offset 4)' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo $';; ===== Support Wheel Mouse Scrolling ==================================' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo '(mouse-wheel-mode t)' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo $';; ===== Place Backup Files in Specific Directory =======================' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo '(setq make-backup-files t)' >> /home/$MY_USERNAME/.emacs - echo '(setq version-control t)' >> /home/$MY_USERNAME/.emacs - echo '(setq backup-directory-alist (quote ((".*" . "~/.emacs_backups/"))))' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo $';; ===== Make Text mode the default mode for new buffers ================' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo "(setq default-major-mode 'text-mode)" >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo $';; ===== Line length ====================================================' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo '(setq-default fill-column 72)' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo $';; ===== Enable Line and Column Numbering ===============================' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo '(line-number-mode 1)' >> /home/$MY_USERNAME/.emacs - echo '(column-number-mode 1)' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo $';; ===== Turn on Auto Fill mode automatically in all modes ==============' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo ';; Auto-fill-mode the the automatic wrapping of lines and insertion of' >> /home/$MY_USERNAME/.emacs - echo ';; newlines when the cursor goes over the column limit.' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo ';; This should actually turn on auto-fill-mode by default in all major' >> /home/$MY_USERNAME/.emacs - echo ';; modes. The other way to do this is to turn on the fill for specific modes' >> /home/$MY_USERNAME/.emacs - echo ';; via hooks.' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo '(setq auto-fill-mode 1)' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo $';; ===== Enable GPG encryption =========================================' >> /home/$MY_USERNAME/.emacs - echo '' >> /home/$MY_USERNAME/.emacs - echo "(require 'epa)" >> /home/$MY_USERNAME/.emacs - echo '(epa-file-enable)' >> /home/$MY_USERNAME/.emacs - cp /home/$MY_USERNAME/.emacs /root/.emacs - chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.emacs + { echo $';; ===== Remove trailing whitepace ======================================'; + echo ''; + echo ";;(add-hook 'before-save-hook 'delete-trailing-whitespace)"; + echo ''; + echo ';; Goto a line number with CTRL-l'; + echo -n '(global-set-key "\C-l" '; + echo "'goto-line)"; + echo ''; + echo $';; ===== Show line numbers =============================================='; + echo ''; + echo "(add-hook 'find-file-hook (lambda () (linum-mode 1)))"; + echo ''; + echo $';; ===== Enable line wrapping in org-mode ==============================='; + echo ''; + echo " (add-hook 'org-mode-hook"; + echo " '(lambda ()"; + echo " (visual-line-mode 1)))"; + echo ''; + echo $';; ===== Enable shift select in org mode ================================'; + echo ''; + echo '(setq org-support-shift-select t)'; + echo ''; + echo $';; ===== Set standard indent to 4 rather that 4 ========================='; + echo ''; + echo '(setq standard-indent 4)'; + echo '(setq-default tab-width 4)'; + echo '(setq c-basic-offset 4)'; + echo ''; + echo $';; ===== Support Wheel Mouse Scrolling =================================='; + echo ''; + echo '(mouse-wheel-mode t)'; + echo ''; + echo $';; ===== Place Backup Files in Specific Directory ======================='; + echo ''; + echo '(setq make-backup-files t)'; + echo '(setq version-control t)'; + echo '(setq backup-directory-alist (quote ((".*" . "~/.emacs_backups/"))))'; + echo ''; + echo $';; ===== Make Text mode the default mode for new buffers ================'; + echo ''; + echo "(setq default-major-mode 'text-mode)"; + echo ''; + echo $';; ===== Line length ===================================================='; + echo ''; + echo '(setq-default fill-column 72)'; + echo ''; + echo $';; ===== Enable Line and Column Numbering ==============================='; + echo ''; + echo '(line-number-mode 1)'; + echo '(column-number-mode 1)'; + echo ''; + echo $';; ===== Turn on Auto Fill mode automatically in all modes =============='; + echo ''; + echo ';; Auto-fill-mode the the automatic wrapping of lines and insertion of'; + echo ';; newlines when the cursor goes over the column limit.'; + echo ''; + echo ';; This should actually turn on auto-fill-mode by default in all major'; + echo ';; modes. The other way to do this is to turn on the fill for specific modes'; + echo ';; via hooks.'; + echo ''; + echo '(setq auto-fill-mode 1)'; + echo ''; + echo $';; ===== Enable GPG encryption ========================================='; + echo ''; + echo "(require 'epa)"; + echo '(epa-file-enable)'; } >> "/home/$MY_USERNAME/.emacs" + cp "/home/$MY_USERNAME/.emacs" /root/.emacs + chown "$MY_USERNAME":"$MY_USERNAME" "/home/$MY_USERNAME/.emacs" # add a mutt entry to use emacs to compose emails if [ -f /etc/Muttrc ]; then @@ -273,92 +275,92 @@ function install_emacs { for d in /home/*/ ; do USERNAME=$(echo "$d" | awk -F '/' '{print $3}') if [[ $(is_valid_user "$USERNAME") == "1" ]]; then - if [ -f /home/$USERNAME/.muttrc ]; then - if ! grep -q "set editor=" /home/$USERNAME/.muttrc; then - echo 'set editor="emacs -q --load ~/.emacs-mutt"' >> /home/$USERNAME/.muttrc + if [ -f "/home/$USERNAME/.muttrc" ]; then + if ! grep -q "set editor=" "/home/$USERNAME/.muttrc"; then + echo 'set editor="emacs -q --load ~/.emacs-mutt"' >> "/home/$USERNAME/.muttrc" else - sed -i 's|set editor=.*|set editor="emacs -q --load ~/.emacs-mutt"|g' /home/$USERNAME/.muttrc + sed -i 's|set editor=.*|set editor="emacs -q --load ~/.emacs-mutt"|g' "/home/$USERNAME/.muttrc" fi fi # create an Emacs configuration specifically for use with Mutt, which # has word wrap and spell checking on by default - if [ ! -f /home/$USERNAME/.emacs-mutt ]; then - echo "(add-hook 'before-save-hook 'delete-trailing-whitespace)" > /home/$USERNAME/.emacs-mutt - echo '(setq org-support-shift-select t)' >> /home/$USERNAME/.emacs-mutt - echo '(setq standard-indent 4)' >> /home/$USERNAME/.emacs-mutt - echo '(setq-default tab-width 4)' >> /home/$USERNAME/.emacs-mutt - echo '(setq c-basic-offset 4)' >> /home/$USERNAME/.emacs-mutt - echo '(mouse-wheel-mode t)' >> /home/$USERNAME/.emacs-mutt - echo '(setq make-backup-files t)' >> /home/$USERNAME/.emacs-mutt - echo '(setq version-control t)' >> /home/$USERNAME/.emacs-mutt - echo '(setq backup-directory-alist (quote ((".*" . "~/.emacs_backups/"))))' >> /home/$USERNAME/.emacs-mutt - echo "(setq default-major-mode 'text-mode)" >> /home/$USERNAME/.emacs-mutt - echo "(dolist (hook '(text-mode-hook))" >> /home/$USERNAME/.emacs-mutt - echo ' (add-hook hook (lambda () (flyspell-mode 1))))' >> /home/$USERNAME/.emacs-mutt - echo '(setq-default fill-column 72)' >> /home/$USERNAME/.emacs-mutt + if [ ! -f "/home/$USERNAME/.emacs-mutt" ]; then + { echo "(add-hook 'before-save-hook 'delete-trailing-whitespace)"; + echo '(setq org-support-shift-select t)'; + echo '(setq standard-indent 4)'; + echo '(setq-default tab-width 4)'; + echo '(setq c-basic-offset 4)'; + echo '(mouse-wheel-mode t)'; + echo '(setq make-backup-files t)'; + echo '(setq version-control t)'; + echo '(setq backup-directory-alist (quote ((".*" . "~/.emacs_backups/"))))'; + echo "(setq default-major-mode 'text-mode)"; + echo "(dolist (hook '(text-mode-hook))"; + echo ' (add-hook hook (lambda () (flyspell-mode 1))))'; + echo '(setq-default fill-column 72)'; } > "/home/$USERNAME/.emacs-mutt" if [[ $DEFAULT_LANGUAGE == 'en_US'* ]]; then - echo '(setq ispell-dictionary "american")' >> /home/$USERNAME/.emacs-mutt + echo '(setq ispell-dictionary "american")' >> "/home/$USERNAME/.emacs-mutt" fi if [[ $DEFAULT_LANGUAGE == 'en_GB'* ]]; then - echo '(setq ispell-dictionary "british")' >> /home/$USERNAME/.emacs-mutt + echo '(setq ispell-dictionary "british")' >> "/home/$USERNAME/.emacs-mutt" fi if [[ $DEFAULT_LANGUAGE == 'fr_FR'* ]]; then - echo '(setq ispell-dictionary "french")' >> /home/$USERNAME/.emacs-mutt + echo '(setq ispell-dictionary "french")' >> "/home/$USERNAME/.emacs-mutt" fi if [[ $DEFAULT_LANGUAGE == 'it_IT'* ]]; then - echo '(setq ispell-dictionary "italian")' >> /home/$USERNAME/.emacs-mutt + echo '(setq ispell-dictionary "italian")' >> "/home/$USERNAME/.emacs-mutt" fi if [[ $DEFAULT_LANGUAGE == 'cs_CZ'* ]]; then - echo '(setq ispell-dictionary "czech")' >> /home/$USERNAME/.emacs-mutt + echo '(setq ispell-dictionary "czech")' >> "/home/$USERNAME/.emacs-mutt" fi if [[ $DEFAULT_LANGUAGE == 'da_DK'* ]]; then - echo '(setq ispell-dictionary "danish")' >> /home/$USERNAME/.emacs-mutt + echo '(setq ispell-dictionary "danish")' >> "/home/$USERNAME/.emacs-mutt" fi if [[ $DEFAULT_LANGUAGE == 'nl_NL'* ]]; then - echo '(setq ispell-dictionary "dutch")' >> /home/$USERNAME/.emacs-mutt + echo '(setq ispell-dictionary "dutch")' >> "/home/$USERNAME/.emacs-mutt" fi if [[ $DEFAULT_LANGUAGE == 'ru_RU'* ]]; then - echo '(setq ispell-dictionary "russian")' >> /home/$USERNAME/.emacs-mutt + echo '(setq ispell-dictionary "russian")' >> "/home/$USERNAME/.emacs-mutt" fi if [[ $DEFAULT_LANGUAGE == 'es_ES'* ]]; then - echo '(setq ispell-dictionary "spanish")' >> /home/$USERNAME/.emacs-mutt + echo '(setq ispell-dictionary "spanish")' >> "/home/$USERNAME/.emacs-mutt" fi if [[ $DEFAULT_LANGUAGE == 'sv_SE'* ]]; then - echo '(setq ispell-dictionary "swedish")' >> /home/$USERNAME/.emacs-mutt + echo '(setq ispell-dictionary "swedish")' >> "/home/$USERNAME/.emacs-mutt" fi if [[ $DEFAULT_LANGUAGE == 'no_NO'* ]]; then - echo '(setq ispell-dictionary "norwegian")' >> /home/$USERNAME/.emacs-mutt + echo '(setq ispell-dictionary "norwegian")' >> "/home/$USERNAME/.emacs-mutt" fi if [[ $DEFAULT_LANGUAGE == 'de_DE'* ]]; then - echo '(setq ispell-dictionary "ngerman")' >> /home/$USERNAME/.emacs-mutt + echo '(setq ispell-dictionary "ngerman")' >> "/home/$USERNAME/.emacs-mutt" fi if [[ $DEFAULT_LANGUAGE == 'bg_BG'* ]]; then - echo '(setq ispell-dictionary "bulgarian")' >> /home/$USERNAME/.emacs-mutt + echo '(setq ispell-dictionary "bulgarian")' >> "/home/$USERNAME/.emacs-mutt" fi if [[ $DEFAULT_LANGUAGE == 'pl'* ]]; then - echo '(setq ispell-dictionary "polish")' >> /home/$USERNAME/.emacs-mutt + echo '(setq ispell-dictionary "polish")' >> "/home/$USERNAME/.emacs-mutt" fi if [[ $DEFAULT_LANGUAGE == 'et_EE'* ]]; then - echo '(setq ispell-dictionary "estonian")' >> /home/$USERNAME/.emacs-mutt + echo '(setq ispell-dictionary "estonian")' >> "/home/$USERNAME/.emacs-mutt" fi if [[ $DEFAULT_LANGUAGE == 'lt_LT'* ]]; then - echo '(setq ispell-dictionary "lithuanian")' >> /home/$USERNAME/.emacs-mutt + echo '(setq ispell-dictionary "lithuanian")' >> "/home/$USERNAME/.emacs-mutt" fi if [[ $DEFAULT_LANGUAGE == 'uk_UA'* ]]; then - echo '(setq ispell-dictionary "ukranian")' >> /home/$USERNAME/.emacs-mutt + echo '(setq ispell-dictionary "ukranian")' >> "/home/$USERNAME/.emacs-mutt" fi if [[ $DEFAULT_LANGUAGE == 'ca_ES'* ]]; then - echo '(setq ispell-dictionary "catalan")' >> /home/$USERNAME/.emacs-mutt + echo '(setq ispell-dictionary "catalan")' >> "/home/$USERNAME/.emacs-mutt" fi - echo '(setq auto-fill-mode 0)' >> /home/$USERNAME/.emacs-mutt - echo "(add-hook 'text-mode-hook 'turn-on-auto-fill)" >> /home/$USERNAME/.emacs-mutt - echo "(setq-default auto-fill-function 'do-auto-fill)" >> /home/$USERNAME/.emacs-mutt - chown $USERNAME:$USERNAME /home/$USERNAME/.emacs-mutt + { echo '(setq auto-fill-mode 0)'; + echo "(add-hook 'text-mode-hook 'turn-on-auto-fill)"; + echo "(setq-default auto-fill-function 'do-auto-fill)"; } >> "/home/$USERNAME/.emacs-mutt" + chown "$USERNAME":"$USERNAME" "/home/$USERNAME/.emacs-mutt" # add the emacs mutt configuration to the user profile skeleton if [ ! -f /etc/skel/.emacs-mutt ]; then - cp /home/$USERNAME/.emacs-mutt /etc/skel/.emacs-mutt + cp "/home/$USERNAME/.emacs-mutt" /etc/skel/.emacs-mutt chown root:root /etc/skel/.emacs-mutt fi fi diff --git a/src/freedombone-utils-go b/src/freedombone-utils-go index 4f673f71..8e032764 100755 --- a/src/freedombone-utils-go +++ b/src/freedombone-utils-go @@ -51,7 +51,7 @@ function select_go_version { else sed -i "s|export GVM_ROOT=.*|export GVM_ROOT=$GVM_ROOT|g" ~/.bashrc fi - cd $GVM_ROOT/bin + cd "$GVM_ROOT/bin" || exit 3873658 [[ -s "$GVM_ROOT/scripts/gvm" ]] && source "$GVM_ROOT/scripts/gvm" gvm use go${GO_VERSION} --default @@ -60,21 +60,21 @@ function select_go_version { exit 629825 fi - systemctl set-environment GOPATH=$GOPATH + systemctl set-environment GOPATH="$GOPATH" } function mesh_upgrade_golang_from_source { chroot "$rootdir" adduser --disabled-login --gecos 'go' ipfs - git clone $GO_REPO $rootdir/home/go/go${GO_VERSION} - cd $rootdir/home/go/go${GO_VERSION} - git checkout go${GO_VERSION} -b go${GO_VERSION} + git clone "$GO_REPO" "$rootdir/home/go/go${GO_VERSION}" + cd "$rootdir/home/go/go${GO_VERSION}" || exit 3463635 + git checkout "go${GO_VERSION}" -b "go${GO_VERSION}" - git clone $GO_REPO $rootdir/home/go/go${GO_INTERMEDIATE_VERSION} - cd $rootdir/home/go/go${GO_INTERMEDIATE_VERSION} + git clone "$GO_REPO" "$rootdir/home/go/go${GO_INTERMEDIATE_VERSION}" + cd "$rootdir/home/go/go${GO_INTERMEDIATE_VERSION}" || exit 672845624 git checkout go${GO_INTERMEDIATE_VERSION} -b go${GO_INTERMEDIATE_VERSION} - cat < ${rootdir}/root/upgrade_golang.sh + cat < "${rootdir}/root/upgrade_golang.sh" #!/bin/bash apt-get -yq install build-essential libc6-dev @@ -119,20 +119,20 @@ systemctl set-environment GOROOT=\$GOROOT exit 0 EOF - chroot ${rootdir} chmod +x /root/upgrade_golang.sh - chroot ${rootdir} /root/upgrade_golang.sh - if [ ! -f ${rootdir}/home/go/go${GO_VERSION}/bin/go ]; then + chroot "${rootdir}" chmod +x /root/upgrade_golang.sh + chroot "${rootdir}" /root/upgrade_golang.sh + if [ ! -f "${rootdir}/home/go/go${GO_VERSION}/bin/go" ]; then echo $'Failed to upgrade golang' - cat ${rootdir}/root/upgrade_golang.sh - rm -f ${rootdir}/root/upgrade_golang.sh + cat "${rootdir}/root/upgrade_golang.sh" + rm -f "${rootdir}/root/upgrade_golang.sh" exit 836535 fi - rm -f ${rootdir}/root/upgrade_golang.sh + rm -f "${rootdir}/root/upgrade_golang.sh" } function mesh_upgrade_golang { prefix= - if [ $rootdir ]; then + if [ "$rootdir" ]; then prefix="chroot $rootdir" fi $prefix adduser --disabled-login --gecos 'go' go @@ -177,43 +177,43 @@ function mesh_upgrade_golang { fi GO_SOURCE=https://storage.googleapis.com/golang/go${GO_VERSION}.linux-${GOARCH}.tar.gz - if [ ! -d ${rootdir}${INSTALL_DIR} ]; then - chroot "$rootdir" mkdir -p ${INSTALL_DIR} + if [ ! -d "${rootdir}${INSTALL_DIR}" ]; then + chroot "$rootdir" mkdir -p "${INSTALL_DIR}" fi - cd ${rootdir}${INSTALL_DIR} - if [ ! -f ${rootdir}${INSTALL_DIR}/go${GO_VERSION}.linux-${GOARCH}.tar.gz ]; then + cd "${rootdir}${INSTALL_DIR}" || exit 236487365 + if [ ! -f "${rootdir}${INSTALL_DIR}/go${GO_VERSION}.linux-${GOARCH}.tar.gz" ]; then wget ${GO_SOURCE} fi - if [ ! -f ${rootdir}${INSTALL_DIR}/go${GO_VERSION}.linux-${GOARCH}.tar.gz ]; then + if [ ! -f "${rootdir}${INSTALL_DIR}/go${GO_VERSION}.linux-${GOARCH}.tar.gz" ]; then exit 26524 fi - $prefix tar -C /home/go -xzf ${INSTALL_DIR}/go${GO_VERSION}.linux-${GOARCH}.tar.gz - if [ ! -d ${rootdir}/home/go/go/bin ]; then + $prefix tar -C /home/go -xzf "${INSTALL_DIR}/go${GO_VERSION}.linux-${GOARCH}.tar.gz" + if [ ! -d "${rootdir}/home/go/go/bin" ]; then echo 'Go binary not installed' exit 763562 fi - mv ${rootdir}/home/go/go ${rootdir}/home/go/go${GO_VERSION} - echo "export GOROOT=/home/go" >> ${rootdir}/root/.bashrc - echo "export GOROOT=/home/go" >> ${rootdir}/etc/skel/.bashrc - echo "export GOROOT=/home/go" >> ${rootdir}/home/$MY_USERNAME/.bashrc - echo "export GOROOT=/home/go" >> ${rootdir}/home/go/.bashrc + mv "${rootdir}/home/go/go" "${rootdir}/home/go/go${GO_VERSION}" + echo "export GOROOT=/home/go" >> "${rootdir}/root/.bashrc" + echo "export GOROOT=/home/go" >> "${rootdir}/etc/skel/.bashrc" + echo "export GOROOT=/home/go" >> "${rootdir}/home/$MY_USERNAME/.bashrc" + echo "export GOROOT=/home/go" >> "${rootdir}/home/go/.bashrc" - echo "export GOPATH=\$GOROOT/go${GO_VERSION}/bin" >> ${rootdir}/root/.bashrc - echo "export GOPATH=\$GOROOT/go${GO_VERSION}/bin" >> ${rootdir}/etc/skel/.bashrc - echo "export GOPATH=\$GOROOT/go${GO_VERSION}/bin" >> ${rootdir}/home/$MY_USERNAME/.bashrc - echo "export GOPATH=\$GOROOT/go${GO_VERSION}/bin" >> ${rootdir}/home/go/.bashrc + echo "export GOPATH=\$GOROOT/go${GO_VERSION}/bin" >> "${rootdir}/root/.bashrc" + echo "export GOPATH=\$GOROOT/go${GO_VERSION}/bin" >> "${rootdir}/etc/skel/.bashrc" + echo "export GOPATH=\$GOROOT/go${GO_VERSION}/bin" >> "${rootdir}/home/$MY_USERNAME/.bashrc" + echo "export GOPATH=\$GOROOT/go${GO_VERSION}/bin" >> "${rootdir}/home/go/.bashrc" - echo 'export PATH=$PATH:$GOPATH' >> ${rootdir}/root/.bashrc - echo 'export PATH=$PATH:$GOPATH' >> ${rootdir}/etc/skel/.bashrc - echo 'export PATH=$PATH:$GOPATH' >> ${rootdir}/home/$MY_USERNAME/.bashrc - echo 'export PATH=$PATH:$GOPATH' >> ${rootdir}/home/go/.bashrc - $prefix chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME + echo "export PATH=\$PATH:\$GOPATH" >> "${rootdir}/root/.bashrc" + echo "export PATH=\$PATH:\$GOPATH" >> "${rootdir}/etc/skel/.bashrc" + echo "export PATH=\$PATH:\$GOPATH" >> "${rootdir}/home/$MY_USERNAME/.bashrc" + echo "export PATH=\$PATH:\$GOPATH" >> "${rootdir}/home/go/.bashrc" + $prefix chown -R "$MY_USERNAME":"$MY_USERNAME" "/home/$MY_USERNAME" $prefix chown -R go:go /home/go - cp ${rootdir}/home/go/go${GO_VERSION}/bin/* ${rootdir}/usr/bin + cp "${rootdir}/home/go/go${GO_VERSION}/bin/*" "${rootdir}/usr/bin" } function upgrade_golang { - if grep -Fxq "upgrade_golang:$GO_VERSION" $COMPLETION_FILE; then + if grep -Fxq "upgrade_golang:$GO_VERSION" "$COMPLETION_FILE"; then return fi diff --git a/src/freedombone-utils-gpg b/src/freedombone-utils-gpg index e5790582..fc02cd3a 100755 --- a/src/freedombone-utils-gpg +++ b/src/freedombone-utils-gpg @@ -29,57 +29,57 @@ # along with this program. If not, see . function gpg_update_mutt { - key_username=$1 + key_username="$1" - if [ ! -f /home/$key_username/.muttrc ]; then + if [ ! -f "/home/$key_username/.muttrc" ]; then return fi CURR_EMAIL_ADDRESS=$key_username@$HOSTNAME - CURR_GPG_ID=$(gpg --homedir=/home/$key_username/.gnupg --list-keys $CURR_EMAIL_ADDRESS | sed -n '2p' | sed 's/^[ \t]*//') + CURR_GPG_ID=$(gpg --homedir="/home/$key_username/.gnupg" --list-keys "$CURR_EMAIL_ADDRESS" | sed -n '2p' | sed 's/^[ \t]*//') # If the default key is specified within gpg.conf - if [ -f /home/$key_username/gpg.conf ]; then - if grep -q "default-key" /home/$key_username/gpg.conf; then - default_gpg_key=$(cat /home/$key_username/gpg.conf | grep "default-key") + if [ -f "/home/$key_username/gpg.conf" ]; then + if grep -q "default-key" "/home/$key_username/gpg.conf"; then + default_gpg_key=$(grep "default-key" "/home/$key_username/gpg.conf") if [[ "$default_gpg_key" != *'#'* ]]; then - default_gpg_key=$(cat /home/$key_username/gpg.conf | grep "default-key" | awk -F ' ' '{print $2}') + default_gpg_key=$(grep "default-key" "/home/$key_username/gpg.conf" | awk -F ' ' '{print $2}') if [ ${#default_gpg_key} -gt 3 ]; then - CURR_GPG_ID=$(gpg --homedir=/home/$key_username/.gnupg --list-keys $default_gpg_key | sed -n '2p' | sed 's/^[ \t]*//') + CURR_GPG_ID=$(gpg --homedir="/home/$key_username/.gnupg" --list-keys "$default_gpg_key" | sed -n '2p' | sed 's/^[ \t]*//') fi fi fi fi - sed -i "s|set pgp_encrypt_only_command.*|set pgp_encrypt_only_command=\"/usr/lib/mutt/pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --trust-model always --encrypt-to $CURR_GPG_ID -- -r %r -- %f\"|g" /home/$key_username/.muttrc - sed -i "s|set pgp_encrypt_sign_command.*|set pgp_encrypt_sign_command=\"/usr/lib/mutt/pgpewrap gpg %?p?--passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --trust-model always --encrypt-to $CURR_GPG_ID -- -r %r -- %f\"|g" /home/$key_username/.muttrc + sed -i "s|set pgp_encrypt_only_command.*|set pgp_encrypt_only_command=\"/usr/lib/mutt/pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --trust-model always --encrypt-to $CURR_GPG_ID -- -r %r -- %f\"|g" "/home/$key_username/.muttrc" + sed -i "s|set pgp_encrypt_sign_command.*|set pgp_encrypt_sign_command=\"/usr/lib/mutt/pgpewrap gpg %?p?--passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --trust-model always --encrypt-to $CURR_GPG_ID -- -r %r -- %f\"|g" "/home/$key_username/.muttrc" - chown $key_username:$key_username /home/$key_username/.muttrc + chown "$key_username":"$key_username" "/home/$key_username/.muttrc" } function gpg_import_public_key { - key_username=$1 - key_filename=$2 + key_username="$1" + key_filename="$2" - gpg --homedir=/home/$key_username/.gnupg --import $key_filename - gpg_set_permissions $key_username + gpg --homedir="/home/$key_username/.gnupg" --import "$key_filename" + gpg_set_permissions "$key_username" } function gpg_import_private_key { - key_username=$1 - key_filename=$2 + key_username="$1" + key_filename="$2" - gpg --homedir=/home/$key_username/.gnupg --allow-secret-key-import --import $key_filename - gpg_set_permissions $key_username + gpg --homedir="/home/$key_username/.gnupg" --allow-secret-key-import --import "$key_filename" + gpg_set_permissions "$key_username" } function gpg_export_public_key { - key_username=$1 - key_id=$2 - key_filename=$3 + key_username="$1" + key_id="$2" + key_filename="$3" - chown -R $key_username:$key_username /home/$key_username/.gnupg - su -m root -c "gpg --homedir /home/$key_username/.gnupg --output $key_filename --armor --export $key_id" - $key_username + chown -R "$key_username":"$key_username" "/home/$key_username/.gnupg" + su -m root -c "gpg --homedir /home/$key_username/.gnupg --output $key_filename --armor --export $key_id" - "$key_username" } function gpg_export_private_key { @@ -87,68 +87,68 @@ function gpg_export_private_key { key_id=$2 key_filename=$3 - chown -R $key_username:$key_username /home/$key_username/.gnupg - su -m root -c "gpg --homedir=/home/$key_username/.gnupg --armor --output $key_filename --export-secret-key $key_id" - $key_username + chown -R "$key_username":"$key_username" "/home/$key_username/.gnupg" + su -m root -c "gpg --homedir=/home/$key_username/.gnupg --armor --output $key_filename --export-secret-key $key_id" - "$key_username" } function gpg_create_key { - key_username=$1 - key_passphrase=$2 + key_username="$1" + key_passphrase="$2" - gpg_dir=/home/$key_username/.gnupg + gpg_dir="/home/$key_username/.gnupg" - echo 'Key-Type: eddsa' > /home/$key_username/gpg-genkey.conf - echo 'Key-Curve: Ed25519' >> /home/$key_username/gpg-genkey.conf - echo 'Subkey-Type: eddsa' >> /home/$key_username/gpg-genkey.conf - echo 'Subkey-Curve: Ed25519' >> /home/$key_username/gpg-genkey.conf - echo "Name-Real: $MY_NAME" >> /home/$key_username/gpg-genkey.conf - echo "Name-Email: $MY_EMAIL_ADDRESS" >> /home/$key_username/gpg-genkey.conf - echo 'Expire-Date: 0' >> /home/$key_username/gpg-genkey.conf - cat /home/$key_username/gpg-genkey.conf - if [ $key_passphrase ]; then - echo "Passphrase: $key_passphrase" >> /home/$key_username/gpg-genkey.conf + { echo 'Key-Type: eddsa'; + echo 'Key-Curve: Ed25519'; + echo 'Subkey-Type: eddsa'; + echo 'Subkey-Curve: Ed25519'; + echo "Name-Real: $MY_NAME"; + echo "Name-Email: $MY_EMAIL_ADDRESS"; + echo 'Expire-Date: 0'; } > "/home/$key_username/gpg-genkey.conf" + cat "/home/$key_username/gpg-genkey.conf" + if [ "$key_passphrase" ]; then + echo "Passphrase: $key_passphrase" >> "/home/$key_username/gpg-genkey.conf" else - echo "Passphrase: $PROJECT_NAME" >> /home/$key_username/gpg-genkey.conf + echo "Passphrase: $PROJECT_NAME" >> "/home/$key_username/gpg-genkey.conf" fi - chown $key_username:$key_username /home/$key_username/gpg-genkey.conf + chown "$key_username":"$key_username" "/home/$key_username/gpg-genkey.conf" echo $'Generating a new GPG key' - su -m root -c "gpg --homedir /home/$key_username/.gnupg --batch --full-gen-key /home/$key_username/gpg-genkey.conf" - $key_username - chown -R $key_username:$key_username /home/$key_username/.gnupg + su -m root -c "gpg --homedir /home/$key_username/.gnupg --batch --full-gen-key /home/$key_username/gpg-genkey.conf" - "$key_username" + chown -R "$key_username":"$key_username" "/home/$key_username/.gnupg" KEY_EXISTS=$(gpg_key_exists "$key_username" "$MY_EMAIL_ADDRESS") if [[ $KEY_EXISTS == "no" ]]; then echo $"A GPG key for $MY_EMAIL_ADDRESS could not be created" exit 63621 fi - shred -zu /home/$key_username/gpg-genkey.conf + shred -zu "/home/$key_username/gpg-genkey.conf" CURR_GPG_PUBLIC_KEY_ID=$(gpg_pubkey_from_email "$key_username" "$MY_EMAIL_ADDRESS") if [ ${#CURR_GPG_PUBLIC_KEY_ID} -lt 4 ]; then echo $"GPG public key ID could not be obtained for $MY_EMAIL_ADDRESS" exit 825292 fi - gpg_set_permissions $key_username + gpg_set_permissions "$key_username" } function gpg_delete_key { - key_username=$1 - key_id=$2 + key_username="$1" + key_id="$2" - chown -R $key_username:$key_username /home/$key_username/.gnupg - su -c "gpg --batch --quiet --homedir=/home/$key_username/.gnupg --delete-secret-key $key_id" - $key_username - su -c "gpg --batch --quiet --homedir=/home/$key_username/.gnupg --delete-key $key_id" - $key_username + chown -R "$key_username":"$key_username" "/home/$key_username/.gnupg" + su -c "gpg --batch --quiet --homedir=/home/$key_username/.gnupg --delete-secret-key $key_id" - "$key_username" + su -c "gpg --batch --quiet --homedir=/home/$key_username/.gnupg --delete-key $key_id" - "$key_username" } function gpg_set_permissions { key_username=$1 if [[ "$key_username" != 'root' ]]; then - chmod 700 /home/$key_username/.gnupg - chmod -R 600 /home/$key_username/.gnupg/* - printf '%%Assuan%%\nsocket=/dev/shm/S.dirmngr\n' > /home/$key_username/.gnupg/S.dirmngr - if [ -d /home/$key_username/.gnupg/crls.d ]; then - chmod +x /home/$key_username/.gnupg/crls.d + chmod 700 "/home/$key_username/.gnupg" + chmod -R 600 "/home/$key_username/.gnupg/*" + printf '%%Assuan%%\nsocket=/dev/shm/S.dirmngr\n' > "/home/$key_username/.gnupg/S.dirmngr" + if [ -d "/home/$key_username/.gnupg/crls.d" ]; then + chmod +x "/home/$key_username/.gnupg/crls.d" fi - chown -R $key_username:$key_username /home/$key_username/.gnupg + chown -R "$key_username":"$key_username" "/home/$key_username/.gnupg" else chmod 700 /root/.gnupg chmod -R 600 /root/.gnupg/* @@ -156,7 +156,7 @@ function gpg_set_permissions { if [ -d /root/.gnupg/crls.d ]; then chmod +x /root/.gnupg/crls.d fi - chown -R $key_username:$key_username /root/.gnupg + chown -R "$key_username":"$key_username" /root/.gnupg fi } @@ -164,22 +164,22 @@ function gpg_reconstruct_key { key_username=$1 key_interactive=$2 - if [ ! -d /home/$key_username/.gnupg_fragments ]; then + if [ ! -d "/home/$key_username/.gnupg_fragments" ]; then return fi - cd /home/$key_username/.gnupg_fragments + cd "/home/$key_username/.gnupg_fragments" || exit 3468346 + # shellcheck disable=SC2012 no_of_shares=$(ls -afq keyshare.asc.* | wc -l) if (( no_of_shares < 4 )); then - if [ $key_interactive ]; then + if [ "$key_interactive" ]; then dialog --title $"Recover Encryption Keys" --msgbox $'Not enough fragments to reconstruct the key' 6 70 else echo $'Not enough fragments to reconstruct the key' fi exit 7348 fi - gfcombine /home/$key_username/.gnupg_fragments/keyshare* - if [ ! "$?" = "0" ]; then - if [ $key_interactive ]; then + if ! gfcombine "/home/$key_username/.gnupg_fragments/keyshare*"; then + if [ "$key_interactive" ]; then dialog --title $"Recover Encryption Keys" --msgbox $'Unable to reconstruct the key' 6 70 else echo $'Unable to reconstruct the key' @@ -188,8 +188,8 @@ function gpg_reconstruct_key { fi KEYS_FILE=/home/$key_username/.gnupg_fragments/keyshare.asc - if [ ! -f $KEYS_FILE ]; then - if [ $key_interactive ]; then + if [ ! -f "$KEYS_FILE" ]; then + if [ "$key_interactive" ]; then dialog --title $"Recover Encryption Keys" --msgbox $'Unable to reconstruct the key' 6 70 else echo $'Unable to reconstruct the key' @@ -197,22 +197,21 @@ function gpg_reconstruct_key { exit 52852 fi - gpg --homedir=/home/$key_username/.gnupg --allow-secret-key-import --import $KEYS_FILE - if [ ! "$?" = "0" ]; then - shred -zu $KEYS_FILE - rm -rf /home/$key_username/.tempgnupg - if [ $key_interactive ]; then + if ! gpg --homedir="/home/$key_username/.gnupg" --allow-secret-key-import --import "$KEYS_FILE"; then + shred -zu "$KEYS_FILE" + rm -rf "/home/$key_username/.tempgnupg" + if [ "$key_interactive" ]; then dialog --title $"Recover Encryption Keys" --msgbox $'Unable to import gpg key' 6 70 else echo $'Unable to import gpg key' fi exit 96547 fi - shred -zu $KEYS_FILE + shred -zu "$KEYS_FILE" - gpg_set_permissions $key_username + gpg_set_permissions "$key_username" - if [ $key_interactive ]; then + if [ "$key_interactive" ]; then dialog --title $"Recover Encryption Keys" --msgbox $'Key has been reconstructed' 6 70 else echo $'Key has been reconstructed' @@ -224,9 +223,9 @@ function gpg_agent_setup { if [[ $gpg_username == 'root' ]]; then if ! grep -q 'GPG_TTY' /root/.bashrc; then - echo '' >> /root/.bashrc - echo 'GPG_TTY=$(tty)' >> /root/.bashrc - echo 'export GPG_TTY' >> /root/.bashrc + { echo ''; + echo "GPG_TTY=\$(tty)"; + echo 'export GPG_TTY'; } >> /root/.bashrc fi if grep -q '# use-agent' /root/.gnupg/gpg.conf; then sed -i 's|# use-agent|use-agent|g' /root/.gnupg/gpg.conf @@ -234,37 +233,37 @@ function gpg_agent_setup { if ! grep -q 'use-agent' /root/.gnupg/gpg.conf; then echo 'use-agent' >> /root/.gnupg/gpg.conf fi - echo 'default-cache-ttl 300' > /root/.gnupg/gpg-agent.conf - echo 'max-cache-ttl 999999' >> /root/.gnupg/gpg-agent.conf - echo 'allow-loopback-pinentry' >> /root/.gnupg/gpg-agent.conf + { echo 'default-cache-ttl 300'; + echo 'max-cache-ttl 999999'; + echo 'allow-loopback-pinentry'; } > /root/.gnupg/gpg-agent.conf if [ -f /root/.gnupg/S.dirmngr ]; then rm /root/.gnupg/S.dirmngr fi echo RELOADAGENT | gpg-connect-agent else - if ! grep -q 'GPG_TTY' /home/$gpg_username/.bashrc; then - echo '' >> /home/$gpg_username/.bashrc - echo 'GPG_TTY=$(tty)' >> /home/$gpg_username/.bashrc - echo 'export GPG_TTY' >> /home/$gpg_username/.bashrc - chown $gpg_username:$gpg_username /home/$gpg_username/.bashrc + if ! grep -q 'GPG_TTY' "/home/$gpg_username/.bashrc"; then + { echo ''; + echo "GPG_TTY=\$(tty)"; + echo 'export GPG_TTY'; } >> "/home/$gpg_username/.bashrc" + chown "$gpg_username":"$gpg_username" "/home/$gpg_username/.bashrc" fi - if grep -q '# use-agent' /home/$gpg_username/.gnupg/gpg.conf; then - sed -i 's|# use-agent|use-agent|g' /home/$gpg_username/.gnupg/gpg.conf + if grep -q '# use-agent' "/home/$gpg_username/.gnupg/gpg.conf"; then + sed -i 's|# use-agent|use-agent|g' "/home/$gpg_username/.gnupg/gpg.conf" fi - if ! grep -q 'use-agent' /home/$gpg_username/.gnupg/gpg.conf; then - echo 'use-agent' >> /home/$gpg_username/.gnupg/gpg.conf + if ! grep -q 'use-agent' "/home/$gpg_username/.gnupg/gpg.conf"; then + echo 'use-agent' >> "/home/$gpg_username/.gnupg/gpg.conf" fi - if ! grep -q 'pinentry-mode loopback' /home/$gpg_username/.gnupg/gpg.conf; then - echo 'pinentry-mode loopback' >> /home/$gpg_username/.gnupg/gpg.conf + if ! grep -q 'pinentry-mode loopback' "/home/$gpg_username/.gnupg/gpg.conf"; then + echo 'pinentry-mode loopback' >> "/home/$gpg_username/.gnupg/gpg.conf" fi - echo 'default-cache-ttl 300' > /home/$gpg_username/.gnupg/gpg-agent.conf - echo 'max-cache-ttl 999999' >> /home/$gpg_username/.gnupg/gpg-agent.conf - echo 'allow-loopback-pinentry' >> /home/$gpg_username/.gnupg/gpg-agent.conf - if [ -f /home/$gpg_username/.gnupg/S.dirmngr ]; then - rm /home/$gpg_username/.gnupg/S.dirmngr + echo 'default-cache-ttl 300' > "/home/$gpg_username/.gnupg/gpg-agent.conf" + echo 'max-cache-ttl 999999' >> "/home/$gpg_username/.gnupg/gpg-agent.conf" + echo 'allow-loopback-pinentry' >> "/home/$gpg_username/.gnupg/gpg-agent.conf" + if [ -f "/home/$gpg_username/.gnupg/S.dirmngr" ]; then + rm "/home/$gpg_username/.gnupg/S.dirmngr" fi if [[ "$gpg_username" != "$USER" ]]; then - su -c "echo RELOADAGENT | gpg-connect-agent" - $gpg_username + su -c "echo RELOADAGENT | gpg-connect-agent" - "$gpg_username" else echo RELOADAGENT | gpg-connect-agent fi @@ -277,21 +276,21 @@ function gpg_agent_enable { if [[ $gpg_username == 'root' ]]; then return else - if grep -q 'GPG_TTY' /home/$gpg_username/.bashrc; then - sed -i '/GPG_TTY/d' /home/$gpg_username/.bashrc - chown $gpg_username:$gpg_username /home/$gpg_username/.bashrc + if grep -q 'GPG_TTY' "/home/$gpg_username/.bashrc"; then + sed -i '/GPG_TTY/d' "/home/$gpg_username/.bashrc" + chown "$gpg_username":"$gpg_username" "/home/$gpg_username/.bashrc" fi - if grep -q 'use-agent' /home/$gpg_username/.gnupg/gpg.conf; then - sed -i '/use-agent/d' /home/$gpg_username/.gnupg/gpg.conf + if grep -q 'use-agent' "/home/$gpg_username/.gnupg/gpg.conf"; then + sed -i '/use-agent/d' "/home/$gpg_username/.gnupg/gpg.conf" fi - if grep -q 'pinentry-mode loopback' /home/$gpg_username/.gnupg/gpg.conf; then - sed -i '/pinentry-mode loopback/d' /home/$gpg_username/.gnupg/gpg.conf + if grep -q 'pinentry-mode loopback' "/home/$gpg_username/.gnupg/gpg.conf"; then + sed -i '/pinentry-mode loopback/d' "/home/$gpg_username/.gnupg/gpg.conf" fi - if [ -f /home/$gpg_username/.gnupg/gpg-agent.conf ]; then - rm /home/$gpg_username/.gnupg/gpg-agent.conf + if [ -f "/home/$gpg_username/.gnupg/gpg-agent.conf" ]; then + rm "/home/$gpg_username/.gnupg/gpg-agent.conf" fi if [[ "$gpg_username" != "$USER" ]]; then - su -c "echo RELOADAGENT | gpg-connect-agent" - $gpg_username + su -c "echo RELOADAGENT | gpg-connect-agent" - "$gpg_username" else echo RELOADAGENT | gpg-connect-agent fi @@ -303,46 +302,46 @@ function gpg_pubkey_from_email { key_email_address=$2 key_id= if [[ $key_owner_username != "root" ]]; then - key_id=$(su -c "gpg --list-keys $key_email_address" - $key_owner_username | sed -n '2p' | sed 's/^[ \t]*//') + key_id=$(su -c "gpg --list-keys $key_email_address" - "$key_owner_username" | sed -n '2p' | sed 's/^[ \t]*//') # If the default key is specified within gpg.conf - if [ -f /home/$key_owner_username/gpg.conf ]; then - if grep -q "default-key" /home/$key_owner_username/gpg.conf; then - default_gpg_key=$(cat /home/$key_owner_username/gpg.conf | grep "default-key") + if [ -f "/home/$key_owner_username/gpg.conf" ]; then + if grep -q "default-key" "/home/$key_owner_username/gpg.conf"; then + default_gpg_key=$(grep "default-key" "/home/$key_owner_username/gpg.conf") if [[ "$default_gpg_key" != *'#'* ]]; then - default_gpg_key=$(cat /home/$key_owner_username/gpg.conf | grep "default-key" | awk -F ' ' '{print $2}') + default_gpg_key=$(grep "default-key" "/home/$key_owner_username/gpg.conf" | awk -F ' ' '{print $2}') if [ ${#default_gpg_key} -gt 3 ]; then - key_id=$(su -c "gpg --list-keys $default_gpg_key" - $key_owner_username | sed -n '2p' | sed 's/^[ \t]*//') + key_id=$(su -c "gpg --list-keys $default_gpg_key" - "$key_owner_username" | sed -n '2p' | sed 's/^[ \t]*//') fi fi fi fi else - key_id=$(gpg --list-keys $key_email_address | sed -n '2p' | sed 's/^[ \t]*//') + key_id=$(gpg --list-keys "$key_email_address" | sed -n '2p' | sed 's/^[ \t]*//') # If the default key is specified within gpg.conf if [ -f /root/gpg.conf ]; then if grep -q "default-key" /root/gpg.conf; then - default_gpg_key=$(cat /root/gpg.conf | grep "default-key") + default_gpg_key=$(grep "default-key" /root/gpg.conf) if [[ "$default_gpg_key" != *'#'* ]]; then - default_gpg_key=$(cat /root/gpg.conf | grep "default-key" | awk -F ' ' '{print $2}') + default_gpg_key=$(grep "default-key" /root/gpg.conf | awk -F ' ' '{print $2}') if [ ${#default_gpg_key} -gt 3 ]; then - key_id=$(gpg --list-keys $default_gpg_key | sed -n '2p' | sed 's/^[ \t]*//') + key_id=$(gpg --list-keys "$default_gpg_key" | sed -n '2p' | sed 's/^[ \t]*//') fi fi fi fi fi - echo $key_id + echo "$key_id" } function enable_email_encryption_at_rest { for d in /home/*/ ; do USERNAME=$(echo "$d" | awk -F '/' '{print $3}') if [[ $(is_valid_user "$USERNAME") == "1" ]]; then - if grep -q '#| /usr/bin/gpgit.pl' /home/$USERNAME/.procmailrc; then - sed -i 's@#| /usr/bin/gpgit.pl@| /usr/bin/gpgit.pl@g' /home/$USERNAME/.procmailrc - sed -i 's|#:0 f|:0 f|g' /home/$USERNAME/.procmailrc + if grep -q '#| /usr/bin/gpgit.pl' "/home/$USERNAME/.procmailrc"; then + sed -i 's@#| /usr/bin/gpgit.pl@| /usr/bin/gpgit.pl@g' "/home/$USERNAME/.procmailrc" + sed -i 's|#:0 f|:0 f|g' "/home/$USERNAME/.procmailrc" fi fi done @@ -357,9 +356,9 @@ function disable_email_encryption_at_rest { for d in /home/*/ ; do USERNAME=$(echo "$d" | awk -F '/' '{print $3}') if [[ $(is_valid_user "$USERNAME") == "1" ]]; then - if ! grep -q '#| /usr/bin/gpgit.pl' /home/$USERNAME/.procmailrc; then - sed -i 's@| /usr/bin/gpgit.pl@#| /usr/bin/gpgit.pl@g' /home/$USERNAME/.procmailrc - sed -i 's|:0 f|#:0 f|g' /home/$USERNAME/.procmailrc + if ! grep -q '#| /usr/bin/gpgit.pl' "/home/$USERNAME/.procmailrc"; then + sed -i 's@| /usr/bin/gpgit.pl@#| /usr/bin/gpgit.pl@g' "/home/$USERNAME/.procmailrc" + sed -i 's|:0 f|#:0 f|g' "/home/$USERNAME/.procmailrc" fi fi done diff --git a/src/freedombone-utils-guile b/src/freedombone-utils-guile index 51a25cf9..1974e10e 100755 --- a/src/freedombone-utils-guile +++ b/src/freedombone-utils-guile @@ -37,14 +37,14 @@ EIGHTSYNC_COMMIT='8cbb7f22227c0afdd3b0bd758ebec0efba2fa1e1' function install_8sync { apt-get -qy install flex libunistring-dev libgc-dev autoconf texinfo - if [ ! -d $INSTALL_DIR ]; then - mkdir $INSTALL_DIR + if [ ! -d "$INSTALL_DIR" ]; then + mkdir "$INSTALL_DIR" fi - cd $INSTALL_DIR + cd "$INSTALL_DIR" || exit 67832456 - git_clone $EIGHTSYNC_REPO $INSTALL_DIR/eightsync - cd $INSTALL_DIR/eightsync - git checkout ${EIGHTSYNC_COMMIT} -b ${EIGHTSYNC_COMMIT} + git_clone "$EIGHTSYNC_REPO" "$INSTALL_DIR/eightsync" + cd "$INSTALL_DIR/eightsync" || exit 23468346 + git checkout "${EIGHTSYNC_COMMIT}" -b "${EIGHTSYNC_COMMIT}" export GUILE_BASE_PATH=/opt/guile-${GUILE_VERSION} export GUILE_CFLAGS="-I${GUILE_BASE_PATH}/include" @@ -67,31 +67,31 @@ function install_guile { apt-get -qy install flex libunistring-dev libgc-dev autoconf texinfo lzip wget - if [ ! -d $INSTALL_DIR ]; then - mkdir $INSTALL_DIR + if [ ! -d "$INSTALL_DIR" ]; then + mkdir "$INSTALL_DIR" fi - cd $INSTALL_DIR + cd "$INSTALL_DIR" || exit 4298497 - if [ ! -f guile-${GUILE_VERSION}-pack-${GUILE_ARCH}-linux-gnu.tar.lz ]; then - wget https://ftp.gnu.org/gnu/guile/guile-${GUILE_VERSION}-pack-${GUILE_ARCH}-linux-gnu.tar.lz + if [ ! -f "guile-${GUILE_VERSION}-pack-${GUILE_ARCH}-linux-gnu.tar.lz" ]; then + wget "https://ftp.gnu.org/gnu/guile/guile-${GUILE_VERSION}-pack-${GUILE_ARCH}-linux-gnu.tar.lz" fi - if [ ! -f guile-${GUILE_VERSION}-pack-${GUILE_ARCH}-linux-gnu.tar.lz ]; then + if [ ! -f "guile-${GUILE_VERSION}-pack-${GUILE_ARCH}-linux-gnu.tar.lz" ]; then echo 'Unable to download guile pack' exit 6735238 fi - CURR_GUILE_HASH=$(sha256sum guile-${GUILE_VERSION}-pack-${GUILE_ARCH}-linux-gnu.tar.lz | awk -F ' ' '{print $1}') + CURR_GUILE_HASH=$(sha256sum "guile-${GUILE_VERSION}-pack-${GUILE_ARCH}-linux-gnu.tar.lz" | awk -F ' ' '{print $1}') if [[ "$CURR_GUILE_HASH" != "$GUILE_HASH" ]]; then echo 'Guile hash does not match' exit 7237625 fi - cd / - tar xvf $INSTALL_DIR/guile-${GUILE_VERSION}-pack-${GUILE_ARCH}-linux-gnu.tar.lz - if [ ! -d /opt/guile-${GUILE_VERSION}/bin ]; then + cd / || exit 73563635 + tar xvf "$INSTALL_DIR/guile-${GUILE_VERSION}-pack-${GUILE_ARCH}-linux-gnu.tar.lz" + if [ ! -d "/opt/guile-${GUILE_VERSION}/bin" ]; then echo 'Guile was not installed' exit 825269 fi echo "export GUILE_PATH=/opt/guile-${GUILE_VERSION}/bin" >> ~/.bashrc - echo 'export PATH=$PATH:$GUILE_PATH' >> ~/.bashrc + echo "export PATH=\$PATH:\$GUILE_PATH" >> ~/.bashrc } # NOTE: deliberately no exit 0 diff --git a/src/freedombone-utils-i2p b/src/freedombone-utils-i2p index d3693660..0925eeff 100755 --- a/src/freedombone-utils-i2p +++ b/src/freedombone-utils-i2p @@ -34,12 +34,12 @@ I2P_DOMAIN='deb.i2p2.de' function install_i2p { - if [ ! -d $INSTALL_DIR ]; then - mkdir -p $INSTALL_DIR + if [ ! -d "$INSTALL_DIR" ]; then + mkdir -p "$INSTALL_DIR" fi # install the gpg key - cd $INSTALL_DIR + cd "$INSTALL_DIR" || exit 346735 if [ -f i2p-debian-repo.key.asc ]; then rm i2p-debian-repo.key.asc fi @@ -121,3 +121,5 @@ function i2p_enable_sam { sed -i 's|clientApp.1.startOnLoad=.*|clientApp.1.startOnLoad=true|g' /var/lib/i2p/i2p-config/clients.config systemctl restart i2p } + +# NOTE: deliberately no exit 0 diff --git a/src/freedombone-utils-interactive b/src/freedombone-utils-interactive index dfbd4314..65378e37 100755 --- a/src/freedombone-utils-interactive +++ b/src/freedombone-utils-interactive @@ -32,14 +32,13 @@ function interactive_configuration_remote_backups { if [[ $SYSTEM_TYPE == "mesh"* ]]; then return fi - if [ ! -f /usr/local/bin/${PROJECT_NAME}-remote ]; then - if [ ! -f /usr/bin/${PROJECT_NAME}-remote ]; then + if [ ! -f "/usr/local/bin/${PROJECT_NAME}-remote" ]; then + if [ ! -f "/usr/bin/${PROJECT_NAME}-remote" ]; then echo $"The command ${PROJECT_NAME}-remote was not found" exit 87354 fi fi - ${PROJECT_NAME}-remote -u $MY_USERNAME -l $FRIENDS_SERVERS_LIST -m $MINIMUM_PASSWORD_LENGTH -r yes - if [ ! "$?" = "0" ]; then + if ! "${PROJECT_NAME}-remote" -u "$MY_USERNAME" -l "$FRIENDS_SERVERS_LIST" -m "$MINIMUM_PASSWORD_LENGTH" -r yes; then echo $'Command failed:' echo '' echo $" ${PROJECT_NAME}-remote -u $MY_USERNAME -l $FRIENDS_SERVERS_LIST -m $MINIMUM_PASSWORD_LENGTH -r yes" @@ -49,8 +48,8 @@ function interactive_configuration_remote_backups { } function interactive_configuration { - if [ ! -f /usr/local/bin/${PROJECT_NAME}-config ]; then - if [ ! -f /usr/bin/${PROJECT_NAME}-config ]; then + if [ ! -f "/usr/local/bin/${PROJECT_NAME}-config" ]; then + if [ ! -f "/usr/bin/${PROJECT_NAME}-config" ]; then echo $"The command ${PROJECT_NAME}-config was not found" exit 63935 fi @@ -59,32 +58,32 @@ function interactive_configuration { rm -f /tmp/meshuserdevice fi - if [ $SOCIALINSTANCE ]; then - ${PROJECT_NAME}-config \ - -f $CONFIGURATION_FILE \ - -w $PROJECT_WEBSITE \ - -m $MINIMUM_PASSWORD_LENGTH \ + if [ "$SOCIALINSTANCE" ]; then + "${PROJECT_NAME}-config" \ + -f "$CONFIGURATION_FILE" \ + -w "$PROJECT_WEBSITE" \ + -m "$MINIMUM_PASSWORD_LENGTH" \ --minimal "yes" \ - --social $SOCIALINSTANCE + --social "$SOCIALINSTANCE" else if [[ $ONION_ONLY == "no" ]]; then if [[ $MINIMAL_INSTALL == "no" ]]; then - ${PROJECT_NAME}-config \ - -f $CONFIGURATION_FILE \ - -w $PROJECT_WEBSITE \ - -m $MINIMUM_PASSWORD_LENGTH + "${PROJECT_NAME}-config" \ + -f "$CONFIGURATION_FILE" \ + -w "$PROJECT_WEBSITE" \ + -m "$MINIMUM_PASSWORD_LENGTH" else - ${PROJECT_NAME}-config \ - -f $CONFIGURATION_FILE \ - -w $PROJECT_WEBSITE \ - -m $MINIMUM_PASSWORD_LENGTH \ + "${PROJECT_NAME}-config" \ + -f "$CONFIGURATION_FILE" \ + -w "$PROJECT_WEBSITE" \ + -m "$MINIMUM_PASSWORD_LENGTH" \ --minimal "yes" fi else - ${PROJECT_NAME}-config \ - -f $CONFIGURATION_FILE \ - -w $PROJECT_WEBSITE \ - -m $MINIMUM_PASSWORD_LENGTH \ + "${PROJECT_NAME}-config" \ + -f "$CONFIGURATION_FILE" \ + -w "$PROJECT_WEBSITE" \ + -m "$MINIMUM_PASSWORD_LENGTH" \ --onion "yes" fi fi @@ -93,6 +92,7 @@ function interactive_configuration { rm -f /tmp/meshuserdevice exit 0 fi + # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then echo $'Command failed:' echo '' @@ -107,7 +107,7 @@ function interactive_configuration { dialog --title $"Encrypted backup to other servers" \ --backtitle $"${PROJECT_NAME} Configuration" \ --defaultno \ - --yesno $"\nDo you wish to configure some remote backup locations?" 7 60 + --yesno $"\\nDo you wish to configure some remote backup locations?" 7 60 sel=$? case $sel in 0) interactive_configuration_remote_backups;; @@ -121,53 +121,55 @@ function interactive_site_details { SITE_BACKTITLE=$"Freedombone Configuration" SITE_CONFIG_TITLE=$"${site_name^} Configuration" - SITE_FORM_TEXT=$"\nPlease enter your ${site_name^} details.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" + SITE_FORM_TEXT=$"\\nPlease enter your ${site_name^} details.\\n\\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" SITE_DOMAIN_NAME= SITE_CODE= SITE_DETAILS_COMPLETE= while [ ! $SITE_DETAILS_COMPLETE ] do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 + data=$(mktemp 2>/dev/null) if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then dialog --backtitle "$SITE_BACKTITLE" \ --title "$SITE_CONFIG_TITLE" \ --form "$SITE_FORM_TEXT" 14 55 3 \ - $"Domain:" 1 1 "$(grep '${site_name_upper}_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ - $"Code:" 2 1 "$(grep '${site_name_upper}_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 255 \ - 2> $data + $"Domain:" 1 1 "$(grep "${site_name_upper}_DOMAIN_NAME" temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ + $"Code:" 2 1 "$(grep "${site_name_upper}_CODE" temp.cfg | awk -F '=' '{print $2}')" 2 16 33 255 \ + 2> "$data" else dialog --backtitle "$SITE_BACKTITLE" \ --title "$SITE_CONFIG_TITLE" \ --form "$SITE_FORM_TEXT" 11 55 3 \ - $"Domain:" 1 1 "$(grep '${site_name_upper}_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ - 2> $data + $"Domain:" 1 1 "$(grep "${site_name_upper}_DOMAIN_NAME" temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ + 2> "$data" fi sel=$? case $sel in - 1) exit 1;; - 255) exit 1;; + 1) rm -f "$data" + exit 1;; + 255) rm -f "$data" + exit 1;; esac - SITE_DOMAIN_NAME=$(cat $data | sed -n 1p) - if [ $SITE_DOMAIN_NAME ]; then + SITE_DOMAIN_NAME=$(sed -n 1p < "$data") + if [ "$SITE_DOMAIN_NAME" ]; then TEST_DOMAIN_NAME=$SITE_DOMAIN_NAME validate_domain_name - if [[ $TEST_DOMAIN_NAME != $SITE_DOMAIN_NAME ]]; then + if [[ "$TEST_DOMAIN_NAME" != "$SITE_DOMAIN_NAME" ]]; then SITE_DOMAIN_NAME= dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50 else - if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then - SITE_CODE=$(cat $data | sed -n 2p) + if [[ "$DDNS_PROVIDER" == "default@freedns.afraid.org" ]]; then + SITE_CODE=$(sed -n 2p < "$data") validate_freedns_code "$SITE_CODE" - if [ ! $VALID_CODE ]; then + if [ ! "$VALID_CODE" ]; then SITE_DOMAIN_NAME= fi fi fi fi - if [ $SITE_DOMAIN_NAME ]; then + if [ "$SITE_DOMAIN_NAME" ]; then SITE_DETAILS_COMPLETE="yes" fi + rm -f "$data" done # save the results in the config file @@ -192,31 +194,31 @@ function interactive_site_details_with_title { SITE_DETAILS_COMPLETE= while [ ! $SITE_DETAILS_COMPLETE ] do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 + data=$(mktemp 2>/dev/null) if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then dialog --backtitle $"Freedombone Configuration" \ --title "$SITE_BACKTITLE" \ --form "$SITE_FORM_TEXT" 14 55 4 \ - $"Title:" 1 1 "$(grep '$SITE_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ - $"Domain:" 2 1 "$(grep '$SITE_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 40 \ - $"Code:" 3 1 "$(grep '$SITE_CODE' temp.cfg | awk -F '=' '{print $2}')" 3 16 33 255 \ - 2> $data + $"Domain:" 2 1 "$(grep "$SITE_DOMAIN_NAME" temp.cfg | awk -F '=' '{print $2}')" 2 16 33 40 \ + $"Code:" 3 1 "$(grep "$SITE_CODE" temp.cfg | awk -F '=' '{print $2}')" 3 16 33 255 \ + 2> "$data" else dialog --backtitle "$SITE_BACKTITLE" \ --title "$SITE_CONFIG_TITLE" \ --form "$SITE_FORM_TEXT" 11 55 3 \ - $"Title:" 1 1 "$(grep '$SITE_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ - $"Domain:" 2 1 "$(grep '$SITE_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 40 \ - 2> $data + $"Title:" 1 1 "$(grep "$SITE_TITLE" temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ + $"Domain:" 2 1 "$(grep "$SITE_DOMAIN_NAME" temp.cfg | awk -F '=' '{print $2}')" 2 16 33 40 \ + 2> "$data" fi sel=$? case $sel in - 1) exit 1;; - 255) exit 1;; + 1) rm -f "$data" + exit 1;; + 255) rm -f "$data" + exit 1;; esac - SITE_TITLE=$(cat $data | sed -n 1p) - SITE_DOMAIN_NAME=$(cat $data | sed -n 2p) + SITE_TITLE=$(sed -n 1p < "$data") + SITE_DOMAIN_NAME=$(sed -n 2p < "$data") site_domain_name_str="$SITE_DOMAIN_NAME" if [ ${#site_domain_name_str} -gt 1 ]; then TEST_DOMAIN_NAME="$SITE_DOMAIN_NAME" @@ -225,10 +227,10 @@ function interactive_site_details_with_title { SITE_DOMAIN_NAME= dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50 else - if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then - SITE_CODE=$(cat $data | sed -n 3p) + if [[ "$DDNS_PROVIDER" == "default@freedns.afraid.org" ]]; then + SITE_CODE=$(sed -n 3p < "$data") validate_freedns_code "${SITE_CODE}" - if [ ! $VALID_CODE ]; then + if [ ! "$VALID_CODE" ]; then SITE_DOMAIN_NAME= fi fi @@ -240,6 +242,7 @@ function interactive_site_details_with_title { SITE_DETAILS_COMPLETE="yes" fi fi + rm -f "$data" done # save the results in the config file diff --git a/src/freedombone-utils-keys b/src/freedombone-utils-keys index 42201cb4..9bd19f21 100755 --- a/src/freedombone-utils-keys +++ b/src/freedombone-utils-keys @@ -41,137 +41,137 @@ function interactive_gpg_from_usb { do detect_usb_drive - if [ ! -b $USB_DRIVE ]; then + if [ ! -b "$USB_DRIVE" ]; then if (( GPG_CTR > 0 )); then - gpg_reconstruct_key $MY_USERNAME interactive - gpg_update_mutt $MY_USERNAME + gpg_reconstruct_key "$MY_USERNAME" interactive + gpg_update_mutt "$MY_USERNAME" return 0 fi dialog --title $"Recover Encryption Keys" --msgbox $'No USB drive found' 6 30 exit 739836 fi - backup_mount_drive ${USB_DRIVE} ${MY_USERNAME} + backup_mount_drive "${USB_DRIVE}" "${MY_USERNAME}" - if [ ! -d $USB_MOUNT ]; then + if [ ! -d "$USB_MOUNT" ]; then if (( GPG_CTR > 0 )); then - backup_unmount_drive ${USB_DRIVE} - gpg_reconstruct_key $MY_USERNAME interactive + backup_unmount_drive "${USB_DRIVE}" + gpg_reconstruct_key "$MY_USERNAME" interactive return 0 fi dialog --title $"Recover Encryption Keys" \ --msgbox $"There was a problem mounting the USB drive $USB_DRIVE to $USB_MOUNT" 6 70 - backup_unmount_drive ${USB_DRIVE} + backup_unmount_drive "${USB_DRIVE}" exit 74393 fi - if [ ! -d $USB_MOUNT/.gnupg ]; then - if [ ! -d $USB_MOUNT/.gnupg_fragments ]; then + if [ ! -d "$USB_MOUNT/.gnupg" ]; then + if [ ! -d "$USB_MOUNT/.gnupg_fragments" ]; then if (( GPG_CTR > 0 )); then - backup_unmount_drive ${USB_DRIVE} - gpg_reconstruct_key $MY_USERNAME interactive - gpg_update_mutt $MY_USERNAME + backup_unmount_drive "${USB_DRIVE}" + gpg_reconstruct_key "$MY_USERNAME" interactive + gpg_update_mutt "$MY_USERNAME" return 0 fi dialog --title $"Recover Encryption Keys" \ --msgbox $"The directory $USB_MOUNT/.gnupg or $USB_MOUNT/.gnupg_fragments was not found" 6 70 - backup_unmount_drive ${USB_DRIVE} + backup_unmount_drive "${USB_DRIVE}" exit 723814 fi fi - if [ -d $USB_MOUNT/letsencrypt ]; then + if [ -d "$USB_MOUNT/letsencrypt" ]; then if [ ! -d /etc/letsencrypt ]; then mkdir /etc/letsencrypt fi echo $'Recovering LetsEncrypt keys' - cp -r $USB_MOUNT/letsencrypt/* /etc/letsencrypt + cp -r "$USB_MOUNT/letsencrypt/*" /etc/letsencrypt addgroup ssl-cert chown -R root:ssl-cert /etc/letsencrypt fi - if [ -f $USB_MOUNT/.mastergpgkey ]; then + if [ -f "$USB_MOUNT/.mastergpgkey" ]; then # Recovering keys from file rather than just copying the gnupg # directory may help to avoid problems during upgrades/reinstalls - if [ ! -f $USB_MOUNT/.backupgpgkey ]; then + if [ ! -f "$USB_MOUNT/.backupgpgkey" ]; then echo $'No backup key file found on USB drive' exit 725729 fi CURR_EMAIL_ADDRESS=$MY_USERNAME@$HOSTNAME - CURR_GPG_ID=$(gpg --homedir=$HOME_DIR/.gnupg --list-keys $CURR_EMAIL_ADDRESS | sed -n '2p' | sed 's/^[ \t]*//') - CURR_GPG_BACKUP_ID=$(gpg --homedir=$HOME_DIR/.gnupg --list-keys "(backup key)" | sed -n '2p' | sed 's/^[ \t]*//') + CURR_GPG_ID=$(gpg --homedir="$HOME_DIR/.gnupg" --list-keys "$CURR_EMAIL_ADDRESS" | sed -n '2p' | sed 's/^[ \t]*//') + CURR_GPG_BACKUP_ID=$(gpg --homedir="$HOME_DIR/.gnupg" --list-keys "(backup key)" | sed -n '2p' | sed 's/^[ \t]*//') # If the default key is specified within gpg.conf - if [ -f $HOME_DIR/gpg.conf ]; then - if grep -q "default-key" $HOME_DIR/gpg.conf; then - default_gpg_key=$(cat $HOME_DIR/gpg.conf | grep "default-key") + if [ -f "$HOME_DIR/gpg.conf" ]; then + if grep -q "default-key" "$HOME_DIR/gpg.conf"; then + default_gpg_key=$(grep "default-key" "$HOME_DIR/gpg.conf") if [[ "$default_gpg_key" != *'#'* ]]; then - default_gpg_key=$(cat $HOME_DIR/gpg.conf | grep "default-key" | awk -F ' ' '{print $2}') + default_gpg_key=$(grep "default-key" "$HOME_DIR/gpg.conf" | awk -F ' ' '{print $2}') if [ ${#default_gpg_key} -gt 3 ]; then - CURR_GPG_ID=$(gpg --homedir=$HOME_DIR/.gnupg --list-keys $default_gpg_key | sed -n '2p' | sed 's/^[ \t]*//') + CURR_GPG_ID=$(gpg --homedir="$HOME_DIR/.gnupg" --list-keys "$default_gpg_key" | sed -n '2p' | sed 's/^[ \t]*//') fi fi fi fi echo $'Making backup copy of existing gpg keys' - if [ -d $HOME_DIR/.gnupg ]; then - if [ -d $HOME_DIR/.gnupg_old ]; then - rm -rf $HOME_DIR/.gnupg_old + if [ -d "$HOME_DIR/.gnupg" ]; then + if [ -d "$HOME_DIR/.gnupg_old" ]; then + rm -rf "$HOME_DIR/.gnupg_old" fi - cp -r $HOME_DIR/.gnupg $HOME_DIR/.gnupg_old - chmod 700 $HOME_DIR/.gnupg_old - chmod -R 600 $HOME_DIR/.gnupg_old/* - chown -R $MY_USERNAME:$MY_USERNAME $HOME_DIR/.gnupg_old + cp -r "$HOME_DIR/.gnupg $HOME_DIR/.gnupg_old" + chmod 700 "$HOME_DIR/.gnupg_old" + chmod -R 600 "$HOME_DIR/.gnupg_old/*" + chown -R "$MY_USERNAME":"$MY_USERNAME" "$HOME_DIR/.gnupg_old" fi echo $'Removing old gpg keys' - gpg_delete_key $MY_USERNAME $CURR_GPG_BACKUP_ID - gpg_delete_key $MY_USERNAME $CURR_GPG_ID + gpg_delete_key "$MY_USERNAME" "$CURR_GPG_BACKUP_ID" + gpg_delete_key "$MY_USERNAME" "$CURR_GPG_ID" echo $'Importing master keys' - gpg --homedir=$HOME_DIR/.gnupg --allow-secret-key-import --import $USB_MOUNT/.mastergpgkey - echo "$BACKUP_DUMMY_PASSWORD" | gpg --batch --passphrase-fd 0 --homedir=$HOME_DIR/.gnupg --allow-secret-key-import --import $USB_MOUNT/.backupgpgkey - if [ -d $HOME_DIR/.gnupg ]; then + gpg --homedir="$HOME_DIR/.gnupg" --allow-secret-key-import --import "$USB_MOUNT/.mastergpgkey" + echo "$BACKUP_DUMMY_PASSWORD" | gpg --batch --passphrase-fd 0 --homedir="$HOME_DIR/.gnupg" --allow-secret-key-import --import "$USB_MOUNT/.backupgpgkey" + if [ -d "$HOME_DIR/.gnupg" ]; then echo $'Setting permissions' - gpg_set_permissions $MY_USERNAME + gpg_set_permissions "$MY_USERNAME" echo $"Updating muttrc for $MY_USERNAME" - gpg_update_mutt $MY_USERNAME + gpg_update_mutt "$MY_USERNAME" fi GPG_LOADING="no" dialog --title $"Recover Encryption Keys" \ --msgbox $"GPG Keyring loaded to $HOME_DIR from master keydrive" 6 70 else - if [ -d $USB_MOUNT/.gnupg ]; then - if [ ! -d $HOME_DIR/.gnupg ]; then - mkdir $HOME_DIR/.gnupg + if [ -d "$USB_MOUNT/.gnupg" ]; then + if [ ! -d "$HOME_DIR/.gnupg" ]; then + mkdir "$HOME_DIR/.gnupg" fi echo $'Recovering GPG keys' - cp -r $USB_MOUNT/.gnupg/* $HOME_DIR/.gnupg + cp -r "$USB_MOUNT/.gnupg/*" "$HOME_DIR/.gnupg" GPG_LOADING="no" dialog --title $"Recover Encryption Keys" \ --msgbox $"GPG Keyring directory loaded to $HOME_DIR" 6 70 else # Collect fragments from the USB drive - if [ ! -d $HOME_DIR/.gnupg_fragments ]; then - mkdir $HOME_DIR/.gnupg_fragments + if [ ! -d "$HOME_DIR/.gnupg_fragments" ]; then + mkdir "$HOME_DIR/.gnupg_fragments" fi - cp -r $USB_MOUNT/.gnupg_fragments/* $HOME_DIR/.gnupg_fragments + cp -r "$USB_MOUNT/.gnupg_fragments/*" "$HOME_DIR/.gnupg_fragments" fi fi - if [[ $SSH_IMPORTED == "no" ]]; then - if [ -d $USB_MOUNT/.ssh ]; then - if [ ! -d $HOME_DIR/.ssh ]; then - mkdir $HOME_DIR/.ssh + if [[ "$SSH_IMPORTED" == "no" ]]; then + if [ -d "$USB_MOUNT/.ssh" ]; then + if [ ! -d "$HOME_DIR/.ssh" ]; then + mkdir "$HOME_DIR/.ssh" fi - cp $USB_MOUNT/.ssh/* $HOME_DIR/.ssh + cp "$USB_MOUNT/.ssh/*" "$HOME_DIR/.ssh" dialog --title $"Recover Encryption Keys" \ --msgbox $"ssh keys imported" 6 70 SSH_IMPORTED="yes" fi fi - if [ -d $USB_MOUNT ]; then - backup_unmount_drive ${USB_DRIVE} + if [ -d "$USB_MOUNT" ]; then + backup_unmount_drive "${USB_DRIVE}" fi if [[ $GPG_LOADING == "yes" ]]; then dialog --title $"Recover Encryption Keys" \ @@ -185,15 +185,15 @@ function interactive_gpg_from_remote { REMOTE_SERVERS_LIST=/home/$MY_USERNAME/keyshareservers.txt # get a list of remote servers - ${PROJECT_NAME}-remote -u $MY_USERNAME -l $REMOTE_SERVERS_LIST -t "Remote server" + "${PROJECT_NAME}-remote" -u "$MY_USERNAME" -l "$REMOTE_SERVERS_LIST" -t "Remote server" - if [ ! -f $REMOTE_SERVERS_LIST ]; then + if [ ! -f "$REMOTE_SERVERS_LIST" ]; then dialog --title $"Encryption Keys Recovery" --msgbox $'Error obtaining server list' 6 70 return 1 fi # check the number of entries in the file - no_of_servers=$(cat $REMOTE_SERVERS_LIST | wc -l) + no_of_servers=$(wc -l < "$REMOTE_SERVERS_LIST") if (( no_of_servers < 3 )); then dialog --title $"Encryption Keys Recovery" \ --msgbox $'There must be at least three servers to recover the key' 6 70 @@ -201,8 +201,7 @@ function interactive_gpg_from_remote { fi # try to recover the key from the servers - ${PROJECT_NAME}-recoverkey -u $MY_USERNAME -l $REMOTE_SERVERS_LIST - if [ ! "$?" = "0" ]; then + if ! "${PROJECT_NAME}-recoverkey" -u "$MY_USERNAME" -l "$REMOTE_SERVERS_LIST"; then dialog --title $"Encryption Keys Recovery" --msgbox $'Your key could not be recovered' 6 70 return 3 fi @@ -217,36 +216,36 @@ function interactive_gpg { while [[ $GPG_CONFIGURED != "yes" ]] do GPG_CONFIGURED="yes" - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 + data=$(mktemp 2>/dev/null) dialog --backtitle $"Freedombone Configuration" \ --radiolist $"GPG/PGP keys for your system:" 13 70 3 \ 1 $"Generate new keys (new user)" on \ 2 $"Import keys from USB drive/s" off \ - 3 $"Retrieve keys from friends servers" off 2> $data + 3 $"Retrieve keys from friends servers" off 2> "$data" sel=$? case $sel in - 1) exit 1;; - 255) exit 2;; + 1) rm -f "$data" + exit 1;; + 255) rm -f "$data" + exit 2;; esac - case $(cat $data) in - 1) if [ -d /home/${MY_USERNAME}/.gnupg ]; then - rm -rf /home/${MY_USERNAME}/.gnupg + case $(cat "$data") in + 1) if [ -d "/home/${MY_USERNAME}/.gnupg" ]; then + rm -rf "/home/${MY_USERNAME}/.gnupg" fi break;; 2) interactive_gpg_from_usb break;; - 3) interactive_gpg_from_remote - if [ ! "$?" = "0" ]; then + 3) if ! interactive_gpg_from_remote; then GPG_CONFIGURED="no" fi;; esac + rm -f "$data" done } function interactive_key_recovery { - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 + data=$(mktemp 2>/dev/null) dialog --title $"Encryption Keys Recovery" \ --backtitle $"Freedombone Configuration" \ @@ -254,14 +253,16 @@ function interactive_key_recovery { --yesno $"Do you wish to recover your previous encryption keys from a USB master keydrive?" 7 60 sel=$? case $sel in - 1) return;; - 255) return;; + 1) rm -f "$data" + return;; + 255) rm -f "$data" + return;; esac clear apt-get -yq install cryptsetup - ${PROJECT_NAME}-recoverkey -u $MY_USERNAME - if [ -d /home/$MY_USERNAME/.gnupg ]; then - cp -rf /home/$MY_USERNAME/.gnupg /root + "${PROJECT_NAME}-recoverkey" -u "$MY_USERNAME" + if [ -d "/home/$MY_USERNAME/.gnupg" ]; then + cp -rf "/home/$MY_USERNAME/.gnupg" /root chmod 700 /root/.gnupg chmod 600 /root/.gnupg/* printf '%%Assuan%%\nsocket=/dev/shm/S.dirmngr\n' > /root/.gnupg/S.dirmngr @@ -269,6 +270,7 @@ function interactive_key_recovery { chmod +x /root/.gnupg/crls.d fi fi + rm -f "$data" } function set_password_for_all_users { @@ -278,7 +280,7 @@ function set_password_for_all_users { for d in /home/*/ ; do USERNAME=$(echo "$d" | awk -F '/' '{print $3}') if [[ $(is_valid_user "$USERNAME") == "1" ]]; then - ${PROJECT_NAME}-pass -u "${USERNAME}" -a "${app_name}" -p "${change_password}" + "${PROJECT_NAME}-pass" -u "${USERNAME}" -a "${app_name}" -p "${change_password}" fi done } diff --git a/src/freedombone-utils-login b/src/freedombone-utils-login index 32cf290a..397c7f1a 100755 --- a/src/freedombone-utils-login +++ b/src/freedombone-utils-login @@ -38,14 +38,13 @@ function change_login_message { rm -f /etc/init.d/motd fi - echo '' > /etc/motd - echo ".---. . . " >> /etc/motd - echo "| | | " >> /etc/motd - echo "|--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-. " >> /etc/motd - echo "| | (.-' (.-' ( | ( )| | | | )( )| | (.-' " >> /etc/motd - echo "' ' --' --' -' - -' ' ' -' -' -' ' - --'" >> /etc/motd - echo $' Freedom in the Cloud' >> /etc/motd - echo '' >> /etc/motd + { echo ".---. . . "; + echo "| | | "; + echo "|--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-. "; + echo "| | (.-' (.-' ( | ( )| | | | )( )| | (.-' "; + echo "' ' --' --' -' - -' ' ' -' -' -' ' - --'"; + echo $' Freedom in the Cloud'; + echo ''; } > /etc/motd mark_completed "${FUNCNAME[0]}" } diff --git a/src/freedombone-utils-mesh b/src/freedombone-utils-mesh index 84742a41..6b1ddcc9 100755 --- a/src/freedombone-utils-mesh +++ b/src/freedombone-utils-mesh @@ -35,11 +35,11 @@ MESH_DEFAULT_PROTOCOL=/root/.mesh_protocol_default function mesh_generate_ipv6_address { network=fd66:66:66 - if [ $1 ]; then - search_ipv6=$(ifconfig $1 | grep $network) - if [ $search_ipv6 ]; then - result=$(ifconfig $1 | grep $network | awk -F ' ' '{print $2}') - ip -6 addr add ${result}/128 dev $1 + if [ "$1" ]; then + search_ipv6=$(ifconfig "$1" | grep "$network") + if [ "$search_ipv6" ]; then + result=$(ifconfig "$1" | grep "$network" | awk -F ' ' '{print $2}') + ip -6 addr add "${result}/128" dev "$1" return fi fi @@ -51,7 +51,7 @@ function mesh_generate_ipv6_address { d=${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]} e=${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]}${ipv6_array[$RANDOM%16]} result=$network:$a:$b:$c:$d:$e - ip -6 addr add ${result}/128 dev $1 + ip -6 addr add "${result}/128" dev "$1" } function mesh_protocol_init { @@ -67,21 +67,21 @@ function mesh_protocol_init { # Mesh definition WIFI_SSID='mesh' - if [ -f $COMPLETION_FILE ]; then - if grep -q "WIFI_SSID:" $COMPLETION_FILE; then - WIFI_SSID=$(cat $COMPLETION_FILE | grep "WIFI_SSID:" | awk -F ':' '{print $2}') + if [ -f "$COMPLETION_FILE" ]; then + if grep -q "WIFI_SSID:" "$COMPLETION_FILE"; then + WIFI_SSID=$(grep "WIFI_SSID:" "$COMPLETION_FILE" | awk -F ':' '{print $2}') fi - sed -i "s|WIFI_SSID:.*|WIFI_SSID:${WIFI_SSID}|g" $COMPLETION_FILE + sed -i "s|WIFI_SSID:.*|WIFI_SSID:${WIFI_SSID}|g" "$COMPLETION_FILE" fi CELLID='any' CHANNEL=2 HOTSPOT_CHANNEL=6 - if [ -f $COMPLETION_FILE ]; then - if grep -q "Wifi channel:" $COMPLETION_FILE; then - CHANNEL=$(cat $COMPLETION_FILE | grep "Wifi channel:" | awk -F ':' '{print $2}') + if [ -f "$COMPLETION_FILE" ]; then + if grep -q "Wifi channel:" "$COMPLETION_FILE"; then + CHANNEL=$(grep "Wifi channel:" "$COMPLETION_FILE" | awk -F ':' '{print $2}') fi - sed -i "s|Wifi channel:.*|Wifi channel:${CHANNEL}|g" $COMPLETION_FILE + sed -i "s|Wifi channel:.*|Wifi channel:${CHANNEL}|g" "$COMPLETION_FILE" fi ZERONET_PORT=15441 @@ -101,18 +101,18 @@ function mesh_protocol_init { EIFACE=eth0 WLAN_ADAPTORS=$(count_wlan) - if [ $WLAN_ADAPTORS -eq 0 ]; then + if [ "$WLAN_ADAPTORS" -eq 0 ]; then echo $'No wlan adaptors found' exit 0 fi } function get_ipv6_wlan { - echo $(ifconfig ${IFACE} | grep inet6 | awk -F ' ' '{print $2}') + ifconfig "${IFACE}" | grep inet6 | awk -F ' ' '{print $2}' } function mesh_hotspot_ip_address { - echo $(ifconfig ${BRIDGE} | grep inet6 | awk -F ' ' '{print $2}') + ifconfig "${BRIDGE}" | grep inet6 | awk -F ' ' '{print $2}' } function global_rate_limit { @@ -129,7 +129,7 @@ function global_rate_limit { function assign_peer_address { for i in {1..6}; do number=$RANDOM - let "number %= 255" + (( "number %= 255" )) octet=$(echo "obase=16;$number" | bc) if [ ${#octet} -lt 2 ]; then octet="0${octet}" @@ -142,7 +142,7 @@ function assign_peer_address { } function mesh_create_app_downloads_page { - if [ ! -d /root/$PROJECT_NAME/image_build/mesh_apps ]; then + if [ ! -d "/root/$PROJECT_NAME/image_build/mesh_apps" ]; then return fi if [ ! -d /var/www/html ]; then @@ -163,27 +163,27 @@ function mesh_create_app_downloads_page { mv /home/fbone/Desktop/cryptpad.desktop /home/fbone/.cryptpad.desktop fi - cp /root/$PROJECT_NAME/website/EN/meshindex.html /var/www/html/index.html + cp "/root/$PROJECT_NAME/website/EN/meshindex.html" /var/www/html/index.html if [ ! -f /var/www/html/ssb.apk ]; then - cp /root/$PROJECT_NAME/image_build/mesh_apps/ssb.apk /var/www/html/ssb.apk + cp "/root/$PROJECT_NAME/image_build/mesh_apps/ssb.apk" /var/www/html/ssb.apk fi if [ ! -f /var/www/html/trifa.apk ]; then - cp /root/$PROJECT_NAME/image_build/mesh_apps/trifa.apk /var/www/html/trifa.apk + cp "/root/$PROJECT_NAME/image_build/mesh_apps/trifa.apk" /var/www/html/trifa.apk fi if [ ! -d /var/www/html/images ]; then mkdir /var/www/html/images fi if [ ! -f /var/www/html/images/logo.png ]; then - cp /root/$PROJECT_NAME/img/logo.png /var/www/html/images/logo.png + cp "/root/$PROJECT_NAME/img/logo.png" /var/www/html/images/logo.png fi if [ ! -f /var/www/html/images/ssb.png ]; then - cp /root/$PROJECT_NAME/img/icon_patchwork.png /var/www/html/images/ssb.png + cp "/root/$PROJECT_NAME/img/icon_patchwork.png" /var/www/html/images/ssb.png fi if [ ! -f /var/www/html/images/trifa.png ]; then - cp /root/$PROJECT_NAME/img/trifa.png /var/www/html/images/trifa.png + cp "/root/$PROJECT_NAME/img/trifa.png" /var/www/html/images/trifa.png fi if [ ! -f /var/www/html/freedombone.css ]; then - cp /root/$PROJECT_NAME/website/freedombone.css /var/www/html/freedombone.css + cp "/root/$PROJECT_NAME/website/freedombone.css" /var/www/html/freedombone.css fi chown -R www-data:www-data /var/www/html/* } @@ -191,8 +191,8 @@ function mesh_create_app_downloads_page { function enable_mesh_firewall { iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT - iptables -A INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT - iptables -A INPUT -p udp --dport $TRACKER_PORT -j ACCEPT + iptables -A INPUT -p tcp --dport "$TRACKER_PORT" -j ACCEPT + iptables -A INPUT -p udp --dport "$TRACKER_PORT" -j ACCEPT iptables -A INPUT -p udp --dport 6240 -j ACCEPT iptables -A INPUT -p tcp --dport 6240 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT @@ -203,16 +203,16 @@ function enable_mesh_firewall { iptables -A INPUT -p udp --dport 5353 -j ACCEPT iptables -A INPUT -p tcp --dport 5354 -j ACCEPT iptables -A INPUT -p udp --dport 5354 -j ACCEPT - iptables -A INPUT -p tcp --dport $ZERONET_PORT -j ACCEPT - iptables -A INPUT -p udp --dport $ZERONET_PORT -j ACCEPT - iptables -A INPUT -p tcp --dport $IPFS_PORT -j ACCEPT - iptables -A INPUT -p tcp --dport $TOX_PORT -j ACCEPT - iptables -A INPUT -p udp --dport $TOX_PORT -j ACCEPT - iptables -A INPUT -p tcp --dport $LIBREVAULT_PORT -j ACCEPT - iptables -A INPUT -p udp --dport $LIBREVAULT_PORT -j ACCEPT - iptables -A INPUT -p tcp --dport $TAHOELAFS_PORT -j ACCEPT + iptables -A INPUT -p tcp --dport "$ZERONET_PORT" -j ACCEPT + iptables -A INPUT -p udp --dport "$ZERONET_PORT" -j ACCEPT + iptables -A INPUT -p tcp --dport "$IPFS_PORT" -j ACCEPT + iptables -A INPUT -p tcp --dport "$TOX_PORT" -j ACCEPT + iptables -A INPUT -p udp --dport "$TOX_PORT" -j ACCEPT + iptables -A INPUT -p tcp --dport "$LIBREVAULT_PORT" -j ACCEPT + iptables -A INPUT -p udp --dport "$LIBREVAULT_PORT" -j ACCEPT + iptables -A INPUT -p tcp --dport "$TAHOELAFS_PORT" -j ACCEPT # SSB/Scuttlebot/Patchwork - iptables -A INPUT -p tcp --dport $GIT_SSB_PORT -j ACCEPT + iptables -A INPUT -p tcp --dport "$GIT_SSB_PORT" -j ACCEPT iptables -A INPUT -p udp --dport 8008 -j ACCEPT iptables -A INPUT -p tcp --dport 8008 -j ACCEPT iptables -A INPUT -p udp --dport 8010 -j ACCEPT @@ -227,8 +227,8 @@ function enable_mesh_firewall { ip6tables -A INPUT -p ipv6-icmp -j ACCEPT ip6tables -A OUTPUT -p ipv6-icmp -j ACCEPT - ip6tables -A INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT - ip6tables -A INPUT -p udp --dport $TRACKER_PORT -j ACCEPT + ip6tables -A INPUT -p tcp --dport "$TRACKER_PORT" -j ACCEPT + ip6tables -A INPUT -p udp --dport "$TRACKER_PORT" -j ACCEPT ip6tables -A INPUT -p udp --dport 6240 -j ACCEPT ip6tables -A INPUT -p tcp --dport 6240 -j ACCEPT ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT @@ -239,16 +239,16 @@ function enable_mesh_firewall { ip6tables -A INPUT -p udp --dport 5353 -j ACCEPT ip6tables -A INPUT -p tcp --dport 5354 -j ACCEPT ip6tables -A INPUT -p udp --dport 5354 -j ACCEPT - ip6tables -A INPUT -p tcp --dport $ZERONET_PORT -j ACCEPT - ip6tables -A INPUT -p udp --dport $ZERONET_PORT -j ACCEPT - ip6tables -A INPUT -p tcp --dport $IPFS_PORT -j ACCEPT - ip6tables -A INPUT -p tcp --dport $TOX_PORT -j ACCEPT - ip6tables -A INPUT -p udp --dport $TOX_PORT -j ACCEPT - ip6tables -A INPUT -p tcp --dport $LIBREVAULT_PORT -j ACCEPT - ip6tables -A INPUT -p udp --dport $LIBREVAULT_PORT -j ACCEPT - ip6tables -A INPUT -p tcp --dport $TAHOELAFS_PORT -j ACCEPT + ip6tables -A INPUT -p tcp --dport "$ZERONET_PORT" -j ACCEPT + ip6tables -A INPUT -p udp --dport "$ZERONET_PORT" -j ACCEPT + ip6tables -A INPUT -p tcp --dport "$IPFS_PORT" -j ACCEPT + ip6tables -A INPUT -p tcp --dport "$TOX_PORT" -j ACCEPT + ip6tables -A INPUT -p udp --dport "$TOX_PORT" -j ACCEPT + ip6tables -A INPUT -p tcp --dport "$LIBREVAULT_PORT" -j ACCEPT + ip6tables -A INPUT -p udp --dport "$LIBREVAULT_PORT" -j ACCEPT + ip6tables -A INPUT -p tcp --dport "$TAHOELAFS_PORT" -j ACCEPT # SSB/Scuttlebot/Patchwork - ip6tables -A INPUT -p tcp --dport $GIT_SSB_PORT -j ACCEPT + ip6tables -A INPUT -p tcp --dport "$GIT_SSB_PORT" -j ACCEPT ip6tables -A INPUT -p udp --dport 8008 -j ACCEPT ip6tables -A INPUT -p tcp --dport 8008 -j ACCEPT ip6tables -A INPUT -p udp --dport 8010 -j ACCEPT @@ -266,12 +266,12 @@ function enable_mesh_firewall { # to discover local peers iptables -A INPUT -p tcp --dport 653 -j ACCEPT iptables -A INPUT -p udp --dport 653 -j ACCEPT - iptables -A INPUT -i ${EIFACE} -m state --state NEW -p tcp --dport 1194 -j ACCEPT + iptables -A INPUT -i "${EIFACE}" -m state --state NEW -p tcp --dport 1194 -j ACCEPT iptables -A INPUT -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -j ACCEPT - iptables -A FORWARD -i tun+ -o ${EIFACE} -m state --state RELATED,ESTABLISHED -j ACCEPT - iptables -A FORWARD -i ${EIFACE} -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT - iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ${EIFACE} -j MASQUERADE + iptables -A FORWARD -i tun+ -o "${EIFACE}" -m state --state RELATED,ESTABLISHED -j ACCEPT + iptables -A FORWARD -i "${EIFACE}" -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT + iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o "${EIFACE}" -j MASQUERADE iptables -A OUTPUT -o tun+ -j ACCEPT echo 1 > /proc/sys/net/ipv4/ip_forward sed -i 's|# net.ipv4.ip_forward|net.ipv4.ip_forward|g' /etc/sysctl.conf @@ -280,8 +280,8 @@ function enable_mesh_firewall { } function disable_mesh_firewall { - iptables -D INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT - iptables -D INPUT -p udp --dport $TRACKER_PORT -j ACCEPT + iptables -D INPUT -p tcp --dport "$TRACKER_PORT" -j ACCEPT + iptables -D INPUT -p udp --dport "$TRACKER_PORT" -j ACCEPT iptables -D INPUT -p udp --dport 6240 -j ACCEPT iptables -D INPUT -p tcp --dport 6240 -j ACCEPT iptables -D INPUT -p tcp --dport 80 -j ACCEPT @@ -292,17 +292,17 @@ function disable_mesh_firewall { iptables -D INPUT -p udp --dport 5353 -j ACCEPT iptables -D INPUT -p tcp --dport 5354 -j ACCEPT iptables -D INPUT -p udp --dport 5354 -j ACCEPT - iptables -D INPUT -p tcp --dport $ZERONET_PORT -j ACCEPT - iptables -D INPUT -p udp --dport $ZERONET_PORT -j ACCEPT - iptables -D INPUT -p tcp --dport $IPFS_PORT -j ACCEPT - iptables -D INPUT -p udp --dport $IPFS_PORT -j ACCEPT - iptables -D INPUT -p tcp --dport $TOX_PORT -j ACCEPT - iptables -D INPUT -p udp --dport $TOX_PORT -j ACCEPT - iptables -D INPUT -p tcp --dport $LIBREVAULT_PORT -j ACCEPT - iptables -D INPUT -p udp --dport $LIBREVAULT_PORT -j ACCEPT - iptables -D INPUT -p tcp --dport $TAHOELAFS_PORT -j ACCEPT + iptables -D INPUT -p tcp --dport "$ZERONET_PORT" -j ACCEPT + iptables -D INPUT -p udp --dport "$ZERONET_PORT" -j ACCEPT + iptables -D INPUT -p tcp --dport "$IPFS_PORT" -j ACCEPT + iptables -D INPUT -p udp --dport "$IPFS_PORT" -j ACCEPT + iptables -D INPUT -p tcp --dport "$TOX_PORT" -j ACCEPT + iptables -D INPUT -p udp --dport "$TOX_PORT" -j ACCEPT + iptables -D INPUT -p tcp --dport "$LIBREVAULT_PORT" -j ACCEPT + iptables -D INPUT -p udp --dport "$LIBREVAULT_PORT" -j ACCEPT + iptables -D INPUT -p tcp --dport "$TAHOELAFS_PORT" -j ACCEPT # SSB/Scuttlebot/Patchwork - iptables -D INPUT -p tcp --dport $GIT_SSB_PORT -j ACCEPT + iptables -D INPUT -p tcp --dport "$GIT_SSB_PORT" -j ACCEPT iptables -D INPUT -p udp --dport 8008 -j ACCEPT iptables -D INPUT -p tcp --dport 8008 -j ACCEPT iptables -D INPUT -p udp --dport 8010 -j ACCEPT @@ -315,8 +315,8 @@ function disable_mesh_firewall { ip6tables -D INPUT -p udp --dport 6696 -j ACCEPT - ip6tables -D INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT - ip6tables -D INPUT -p udp --dport $TRACKER_PORT -j ACCEPT + ip6tables -D INPUT -p tcp --dport "$TRACKER_PORT" -j ACCEPT + ip6tables -D INPUT -p udp --dport "$TRACKER_PORT" -j ACCEPT ip6tables -D INPUT -p udp --dport 6240 -j ACCEPT ip6tables -D INPUT -p tcp --dport 6240 -j ACCEPT ip6tables -D INPUT -p tcp --dport 80 -j ACCEPT @@ -327,17 +327,17 @@ function disable_mesh_firewall { ip6tables -D INPUT -p udp --dport 5353 -j ACCEPT ip6tables -D INPUT -p tcp --dport 5354 -j ACCEPT ip6tables -D INPUT -p udp --dport 5354 -j ACCEPT - ip6tables -D INPUT -p tcp --dport $ZERONET_PORT -j ACCEPT - ip6tables -D INPUT -p udp --dport $ZERONET_PORT -j ACCEPT - ip6tables -D INPUT -p tcp --dport $IPFS_PORT -j ACCEPT - ip6tables -D INPUT -p udp --dport $IPFS_PORT -j ACCEPT - ip6tables -D INPUT -p tcp --dport $TOX_PORT -j ACCEPT - ip6tables -D INPUT -p udp --dport $TOX_PORT -j ACCEPT - ip6tables -D INPUT -p tcp --dport $LIBREVAULT_PORT -j ACCEPT - ip6tables -D INPUT -p udp --dport $LIBREVAULT_PORT -j ACCEPT - ip6tables -D INPUT -p tcp --dport $TAHOELAFS_PORT -j ACCEPT + ip6tables -D INPUT -p tcp --dport "$ZERONET_PORT" -j ACCEPT + ip6tables -D INPUT -p udp --dport "$ZERONET_PORT" -j ACCEPT + ip6tables -D INPUT -p tcp --dport "$IPFS_PORT" -j ACCEPT + ip6tables -D INPUT -p udp --dport "$IPFS_PORT" -j ACCEPT + ip6tables -D INPUT -p tcp --dport "$TOX_PORT" -j ACCEPT + ip6tables -D INPUT -p udp --dport "$TOX_PORT" -j ACCEPT + ip6tables -D INPUT -p tcp --dport "$LIBREVAULT_PORT" -j ACCEPT + ip6tables -D INPUT -p udp --dport "$LIBREVAULT_PORT" -j ACCEPT + ip6tables -D INPUT -p tcp --dport "$TAHOELAFS_PORT" -j ACCEPT # SSB/Scuttlebot/Patchwork - ip6tables -D INPUT -p tcp --dport $GIT_SSB_PORT -j ACCEPT + ip6tables -D INPUT -p tcp --dport "$GIT_SSB_PORT" -j ACCEPT ip6tables -D INPUT -p udp --dport 8008 -j ACCEPT ip6tables -D INPUT -p tcp --dport 8008 -j ACCEPT ip6tables -D INPUT -p udp --dport 8010 -j ACCEPT @@ -352,12 +352,12 @@ function disable_mesh_firewall { # vpn over the internet iptables -D INPUT -p tcp --dport 653 -j ACCEPT iptables -D INPUT -p udp --dport 653 -j ACCEPT - iptables -D INPUT -i ${EIFACE} -m state --state NEW -p tcp --dport 1194 -j ACCEPT + iptables -D INPUT -i "${EIFACE}" -m state --state NEW -p tcp --dport 1194 -j ACCEPT iptables -D INPUT -i tun+ -j ACCEPT iptables -D FORWARD -i tun+ -j ACCEPT - iptables -D FORWARD -i tun+ -o ${EIFACE} -m state --state RELATED,ESTABLISHED -j ACCEPT - iptables -D FORWARD -i ${EIFACE} -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT - iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o ${EIFACE} -j MASQUERADE + iptables -D FORWARD -i tun+ -o "${EIFACE}" -m state --state RELATED,ESTABLISHED -j ACCEPT + iptables -D FORWARD -i "${EIFACE}" -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT + iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o "${EIFACE}" -j MASQUERADE iptables -D OUTPUT -o tun+ -j ACCEPT echo 0 > /proc/sys/net/ipv4/ip_forward @@ -401,25 +401,25 @@ function enable_mesh_tor { } function enable_mesh_seconary_wifi { - if [ $secondary_wifi_available ]; then + if [ "$secondary_wifi_available" ]; then sed -i 's|#DAEMON_CONF=.*|DAEMON_CONF="/etc/hostapd/hostapd.conf"|g' /etc/default/hostapd mesh_hotspot_address=$(mesh_hotspot_ip_address) if [[ "$mesh_hotspot_address" == *'.'* ]]; then - echo "interface=${IFACE_SECONDARY}" > /etc/hostapd/hostapd.conf - echo "bridge=${BRIDGE}" >> /etc/hostapd/hostapd.conf - echo 'driver=nl80211' >> /etc/hostapd/hostapd.conf - echo "country_code=UK" >> /etc/hostapd/hostapd.conf - echo "ssid=${WIFI_SSID}-${mesh_hotspot_address}" >> /etc/hostapd/hostapd.conf - echo 'hw_mode=g' >> /etc/hostapd/hostapd.conf - echo "channel=${HOTSPOT_CHANNEL}" >> /etc/hostapd/hostapd.conf - echo 'wpa=2' >> /etc/hostapd/hostapd.conf - echo "wpa_passphrase=$HOTSPOT_PASSPHRASE" >> /etc/hostapd/hostapd.conf - echo 'wpa_key_mgmt=WPA-PSK' >> /etc/hostapd/hostapd.conf - echo 'wpa_pairwise=TKIP' >> /etc/hostapd/hostapd.conf - echo 'rsn_pairwise=CCMP' >> /etc/hostapd/hostapd.conf - echo 'auth_algs=1' >> /etc/hostapd/hostapd.conf - echo 'macaddr_acl=0' >> /etc/hostapd/hostapd.conf + { echo "interface=${IFACE_SECONDARY}"; + echo "bridge=${BRIDGE}"; + echo 'driver=nl80211'; + echo "country_code=UK"; + echo "ssid=${WIFI_SSID}-${mesh_hotspot_address}"; + echo 'hw_mode=g'; + echo "channel=${HOTSPOT_CHANNEL}"; + echo 'wpa=2'; + echo "wpa_passphrase=$HOTSPOT_PASSPHRASE"; + echo 'wpa_key_mgmt=WPA-PSK'; + echo 'wpa_pairwise=TKIP'; + echo 'rsn_pairwise=CCMP'; + echo 'auth_algs=1'; + echo 'macaddr_acl=0'; } > /etc/hostapd/hostapd.conf sed -i "s|#interface=.*|interface=${IFACE_SECONDARY}|g" /etc/dnsmasq.conf sed -i "s|interface=.*|interface=${IFACE_SECONDARY}|g" /etc/dnsmasq.conf @@ -437,7 +437,7 @@ function enable_mesh_seconary_wifi { fi fi - if [ ! $secondary_wifi_available ]; then + if [ ! "$secondary_wifi_available" ]; then systemctl stop hostapd systemctl disable hostapd diff --git a/src/freedombone-utils-meteor b/src/freedombone-utils-meteor index d60d6def..5caa5b50 100755 --- a/src/freedombone-utils-meteor +++ b/src/freedombone-utils-meteor @@ -41,14 +41,14 @@ function meteor_cleanUp { } function install_meteor_script { - meteor_dir=$1 + meteor_dir="$1" - if [ ! $meteor_dir ]; then + if [ ! "$meteor_dir" ]; then echo $'No meteor install directory specified' exit 692025 fi - if [ ! -d $meteor_dir ]; then + if [ ! -d "$meteor_dir" ]; then echo $'Meteor install directory not found' exit 845382 fi @@ -67,19 +67,19 @@ function install_meteor_script { DIR_PREFIX="/usr/local" - TARBALL_URL="$https://meteorinstall-4168.kxcdn.com/packages-bootstrap/${RELEASE}/meteor-bootstrap-${PLATFORM}.tar.gz" + TARBALL_URL="https://meteorinstall-4168.kxcdn.com/packages-bootstrap/${RELEASE}/meteor-bootstrap-${PLATFORM}.tar.gz" INSTALL_TMPDIR="$meteor_dir/.meteor-install-tmp" TARBALL_FILE="$meteor_dir/.meteor-tarball-tmp" # Remove temporary files now in case they exist. meteor_cleanUp - if [ -d $INSTALL_TMPDIR ]; then - rm -rf $INSTALL_TMPDIR + if [ -d "$INSTALL_TMPDIR" ]; then + rm -rf "$INSTALL_TMPDIR" fi mkdir "$INSTALL_TMPDIR" - if [ ! -f ${TARBALL_FILE} ]; then + if [ ! -f "${TARBALL_FILE}" ]; then echo "Downloading Meteor distribution" # keep trying to curl the file until it works (resuming where possible) MAX_ATTEMPTS=10 @@ -90,11 +90,8 @@ function install_meteor_script { do ATTEMPTS=$((ATTEMPTS + 1)) - curl --progress-bar --fail --continue-at - \ - "$TARBALL_URL" --output "$TARBALL_FILE" - - if [ $? -eq 0 ] - then + if curl --progress-bar --fail --continue-at - \ + "$TARBALL_URL" --output "$TARBALL_FILE"; then break fi @@ -103,14 +100,14 @@ function install_meteor_script { done fi - if [ ! -f ${TARBALL_FILE} ]; then + if [ ! -f "${TARBALL_FILE}" ]; then echo $'meteor tarball could not be downloaded' exit 7272452 fi tar -xzf "$TARBALL_FILE" -C "$INSTALL_TMPDIR" -o - if [ ! -f ${INSTALL_TMPDIR}/.meteor/meteor ]; then + if [ ! -f "${INSTALL_TMPDIR}/.meteor/meteor" ]; then echo $'tarball not extracted' exit 693252 fi @@ -201,10 +198,10 @@ EOF function install_meteor { apt-get -yq install curl - if [ ! -d $INSTALL_DIR/meteor ]; then - mkdir $INSTALL_DIR/meteor + if [ ! -d "$INSTALL_DIR/meteor" ]; then + mkdir "$INSTALL_DIR/meteor" fi - cd $INSTALL_DIR/meteor + cd "$INSTALL_DIR/meteor" || exit 72345274 install_meteor_script } diff --git a/src/freedombone-utils-mongodb b/src/freedombone-utils-mongodb index b19e37b4..255408ee 100755 --- a/src/freedombone-utils-mongodb +++ b/src/freedombone-utils-mongodb @@ -35,14 +35,14 @@ MONGODB_APPS_FILE=$HOME/.mongodbapps function store_original_mongodb_password { if [ ! -f /root/.mongodboriginal ]; then echo $'Storing original mongodb password' - ORIGINAL_MONGODB_PASSWORD=$(${PROJECT_NAME}-pass -u root -a mongodb) + ORIGINAL_MONGODB_PASSWORD=$("${PROJECT_NAME}-pass" -u root -a mongodb) # We can store this in plaintext because it will soon be of historical interest only echo -n "$ORIGINAL_MONGODB_PASSWORD" > /root/.mongodboriginal fi } function get_mongodb_password { - MONGODB_PASSWORD=$(${PROJECT_NAME}-pass -u root -a mongodb) + MONGODB_PASSWORD=$("${PROJECT_NAME}-pass" -u root -a mongodb) if [[ "$MONGODB_PASSWORD" == *'failed'* ]]; then echo $'Could not obtain mongodb password' exit 7835272 @@ -63,14 +63,14 @@ function install_mongodb { function_check get_mongodb_password get_mongodb_password - if [ ! $MONGODB_PASSWORD ]; then - if [ -f $IMAGE_PASSWORD_FILE ]; then - MONGODB_PASSWORD="$(printf `cat $IMAGE_PASSWORD_FILE`)" + if [ ! "$MONGODB_PASSWORD" ]; then + if [ -f "$IMAGE_PASSWORD_FILE" ]; then + MONGODB_PASSWORD="$(printf "%s" "$(cat "$IMAGE_PASSWORD_FILE")")" else - MONGODB_PASSWORD="$(openssl rand -base64 32 | cut -c1-${MINIMUM_PASSWORD_LENGTH})" + MONGODB_PASSWORD="$(create_password "${MINIMUM_PASSWORD_LENGTH}")" fi fi - ${PROJECT_NAME}-pass -u root -a mongodb -p "$MONGODB_PASSWORD" + "${PROJECT_NAME}-pass" -u root -a mongodb -p "$MONGODB_PASSWORD" apt-get -yq install mongodb mongo-tools apt-get -yq remove --purge apache2-bin* @@ -84,9 +84,9 @@ function install_mongodb { exit 78352 fi - if [ $app_name ]; then - if ! grep -q "$app_name" $MONGODB_APPS_FILE; then - echo "$app_name" >> $MONGODB_APPS_FILE + if [ "$app_name" ]; then + if ! grep -q "$app_name" "$MONGODB_APPS_FILE"; then + echo "$app_name" >> "$MONGODB_APPS_FILE" fi fi @@ -96,14 +96,14 @@ function install_mongodb { function remove_mongodb { app_name=$1 - if [ ! $app_name ]; then + if [ ! "$app_name" ]; then return fi removemongo= - if [ -f $MONGODB_APPS_FILE ]; then - sed -i "/$app_name/d" $MONGODB_APPS_FILE - if [ ! -s $MONGODB_APPS_FILE ]; then + if [ -f "$MONGODB_APPS_FILE" ]; then + sed -i "/$app_name/d" "$MONGODB_APPS_FILE" + if [ ! -s "$MONGODB_APPS_FILE" ]; then removemongo=1 fi else @@ -125,7 +125,7 @@ function remove_mongodb { if [ -f /etc/init.d/mongodb ]; then rm /etc/init.d/mongodb fi - sed -i '/install_mongodb/d' $COMPLETION_FILE + sed -i '/install_mongodb/d' "$COMPLETION_FILE" fi } @@ -146,10 +146,10 @@ function drop_database_mongodb { if [[ "$database_name" == 'admin' ]]; then return fi - mongo $database_name --eval "db.runCommand( { dropDatabase: 1 } )" - if [ $app_name ]; then - if grep -q "$app_name" $MONGODB_APPS_FILE; then - sed -i "/$app_name/d" $MONGODB_APPS_FILE + mongo "$database_name" --eval "db.runCommand( { dropDatabase: 1 } )" + if [ "$app_name" ]; then + if grep -q "$app_name" "$MONGODB_APPS_FILE"; then + sed -i "/$app_name/d" "$MONGODB_APPS_FILE" fi fi } @@ -157,8 +157,7 @@ function drop_database_mongodb { function initialise_database_mongodb { database_name=$1 database_file=$2 - mongorestore $database_file - if [ ! "$?" = "0" ]; then + if ! mongorestore "$database_file"; then exit 8358365 fi } @@ -166,11 +165,13 @@ function initialise_database_mongodb { function create_database_mongodb { app_name="$1" app_admin_password="$2" - app_admin_username=$3 + app_admin_username="$3" mongo admin --eval "db.createUser({user: '$app_admin_username', pwd: '$app_admin_password', roles: [ { role: 'userAdminAnyDatabase', db: 'admin' } ] })" - if [ $app_name ]; then - if ! grep -q "$app_name" $MONGODB_APPS_FILE; then - echo "$app_name" >> $MONGODB_APPS_FILE + if [ "$app_name" ]; then + if ! grep -q "$app_name" "$MONGODB_APPS_FILE"; then + echo "$app_name" >> "$MONGODB_APPS_FILE" fi fi } + +# NOTE: deliberately there is no "exit 0" diff --git a/src/freedombone-utils-monkeysphere b/src/freedombone-utils-monkeysphere index 1ca49684..d1883571 100755 --- a/src/freedombone-utils-monkeysphere +++ b/src/freedombone-utils-monkeysphere @@ -34,22 +34,22 @@ function install_monkeysphere { fi apt-get -yq install monkeysphere msva-perl #su -c "monkeysphere gen-subkey $MY_GPG_PUBLIC_KEY_ID" - $MY_USERNAME - mkdir /home/$MY_USERNAME/.monkeysphere - chmod 755 /home/$MY_USERNAME/.monkeysphere - echo "$MY_NAME <${MY_EMAIL_ADDRESS}>" > /home/$MY_USERNAME/.monkeysphere/authorized_user_ids - chmod 644 /home/$MY_USERNAME/.monkeysphere/authorized_user_ids - chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.monkeysphere + mkdir "/home/$MY_USERNAME/.monkeysphere" + chmod 755 "/home/$MY_USERNAME/.monkeysphere" + echo "$MY_NAME <${MY_EMAIL_ADDRESS}>" > "/home/$MY_USERNAME/.monkeysphere/authorized_user_ids" + chmod 644 "/home/$MY_USERNAME/.monkeysphere/authorized_user_ids" + chown -R "$MY_USERNAME":"$MY_USERNAME" "/home/$MY_USERNAME/.monkeysphere" monkeysphere-authentication update-users if [ ! -f /etc/ssh/ssh_host_rsa_key ]; then echo $'monkeysphere import: ssh host key not found' exit 76295 fi - monkeysphere-host import-key /etc/ssh/ssh_host_rsa_key ssh://$DEFAULT_DOMAIN_NAME + monkeysphere-host import-key /etc/ssh/ssh_host_rsa_key "ssh://$DEFAULT_DOMAIN_NAME" SSH_ONION_HOSTNAME=$(cat ${COMPLETION_FILE} | grep 'ssh onion domain' | awk -F ':' '{print $2}') - monkeysphere-host import-key /etc/ssh/ssh_host_rsa_key ssh://$SSH_ONION_HOSTNAME + monkeysphere-host import-key /etc/ssh/ssh_host_rsa_key "ssh://$SSH_ONION_HOSTNAME" - if [ ! $MY_GPG_PUBLIC_KEY_ID ]; then + if [ ! "$MY_GPG_PUBLIC_KEY_ID" ]; then MY_GPG_PUBLIC_KEY_ID=$(gpg_pubkey_from_email "$MY_USERNAME" "$MY_USERNAME@$HOSTNAME") if [ ${#MY_GPG_PUBLIC_KEY_ID} -lt 4 ]; then echo $"monkeysphere unable to get GPG key ID for user $MY_USERNAME@$HOSTNAME" @@ -57,8 +57,8 @@ function install_monkeysphere { fi fi # The admin user is the identity certifier - fpr=$(gpg --with-colons --fingerprint $MY_GPG_PUBLIC_KEY_ID | grep fpr | head -n 1 | awk -F ':' '{print $10}') - monkeysphere-authentication add-identity-certifier $fpr + fpr=$(gpg --with-colons --fingerprint "$MY_GPG_PUBLIC_KEY_ID" | grep fpr | head -n 1 | awk -F ':' '{print $10}') + monkeysphere-authentication add-identity-certifier "$fpr" mark_completed "${FUNCNAME[0]}" } diff --git a/src/freedombone-utils-network b/src/freedombone-utils-network index 7b9a5df4..95d6ba89 100755 --- a/src/freedombone-utils-network +++ b/src/freedombone-utils-network @@ -62,11 +62,11 @@ function install_static_network { echo '# and how to activate them. For more information, see interfaces(5).' >> /etc/network/interfaces echo 'source /etc/network/interfaces.d/*' >> /etc/network/interfaces - echo 'auto eth0' > /etc/network/interfaces.d/static - echo 'iface eth0 inet static' >> /etc/network/interfaces.d/static - echo " address $LOCAL_NETWORK_STATIC_IP_ADDRESS" >> /etc/network/interfaces.d/static - echo ' netmask 255.255.255.0' >> /etc/network/interfaces.d/static - echo " gateway $ROUTER_IP_ADDRESS" >> /etc/network/interfaces.d/static + { echo 'auto eth0'; + echo 'iface eth0 inet static'; + echo " address $LOCAL_NETWORK_STATIC_IP_ADDRESS"; + echo ' netmask 255.255.255.0'; + echo " gateway $ROUTER_IP_ADDRESS"; } > /etc/network/interfaces.d/static mark_completed "${FUNCNAME[0]}" } @@ -77,23 +77,23 @@ function get_external_ipv4_address { function get_ipv4_address { IPv4dev=$(ip route get $IPV4_ADDRESS_TEST_DESTINATION | awk '{for(i=1;i<=NF;i++)if($i~/dev/)print $(i+1)}') - echo $(ip -o -f inet addr show dev "$IPv4dev" | awk '{print $4}' | awk 'END {print}' | awk -F '/' '{print $1}') + ip -o -f inet addr show dev "$IPv4dev" | awk '{print $4}' | awk 'END {print}' | awk -F '/' '{print $1}' } function get_ipv6_address { retval=$(ip -6 route get $IPV6_ADDRESS_TEST_DESTINATION 2> /dev/null) - echo $(echo "$retval" | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "src") print $(i+1) }') + echo "$retval" | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "src") print $(i+1) }' } function update_external_ip { ip_update_script=/usr/bin/externalipupdate - echo '#!/bin/bash' >> $ip_update_script - echo "existing_ip=\$(cat $CONFIGURATION_FILE | grep \"EXTERNAL_IPV4_ADDRESS=\" | head -n 1 | awk -F '=' '{print \$2}')'" >> $ip_update_script - echo "curr_ip=\$(nslookup . $EXTERNAL_IP_LOOKUP_URL | grep Address | tail -n 1 | awk -F ' ' '{print \$2}')" >> $ip_update_script - echo 'if [[ "$curr_ip" != "$existing_ip" ]]; then' >> $ip_update_script - echo " sed -i \"s|EXTERNAL_IPV4_ADDRESS=.*|EXTERNAL_IPV4_ADDRESS=\${curr_ip}|g\" $CONFIGURATION_FILE" >> $ip_update_script - echo " echo \"\$(date)\" >> ~/${PROJECT_NAME}-external-ip-changes.txt" >> $ip_update_script - echo 'fi' >> $ip_update_script + { echo '#!/bin/bash'; + echo "existing_ip=\$(cat $CONFIGURATION_FILE | grep \"EXTERNAL_IPV4_ADDRESS=\" | head -n 1 | awk -F '=' '{print \$2}')'"; + echo "curr_ip=\$(nslookup . $EXTERNAL_IP_LOOKUP_URL | grep Address | tail -n 1 | awk -F ' ' '{print \$2}')"; + echo "if [[ \"\$curr_ip\" != \"\$existing_ip\" ]]; then"; + echo " sed -i \"s|EXTERNAL_IPV4_ADDRESS=.*|EXTERNAL_IPV4_ADDRESS=\${curr_ip}|g\" $CONFIGURATION_FILE"; + echo " echo \"\$(date)\" >> ~/${PROJECT_NAME}-external-ip-changes.txt"; + echo 'fi'; } > $ip_update_script cron_add_mins 10 $ip_update_script } From 5479d49dc9fc604d9b915520e8e9761aa62cb133 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 27 Feb 2018 14:11:56 +0000 Subject: [PATCH 17/67] More tidying --- src/freedombone-app-etherpad | 463 ++++++++++++++-------------- src/freedombone-app-fedwiki | 241 ++++++++------- src/freedombone-app-friendica | 498 +++++++++++++++--------------- src/freedombone-app-ghost | 380 +++++++++++------------ src/freedombone-app-gnusocial | 564 +++++++++++++++++----------------- src/freedombone-app-gogs | 435 +++++++++++++------------- src/freedombone-app-htmly | 545 ++++++++++++++++---------------- src/freedombone-app-hubzilla | 510 +++++++++++++++--------------- src/freedombone-app-icecast | 436 +++++++++++++------------- src/freedombone-app-ipfs | 284 ++++++++--------- src/freedombone-app-irc | 403 ++++++++++++------------ src/freedombone-app-jitsi | 167 +++++----- src/freedombone-app-kanboard | 391 ++++++++++++----------- src/freedombone-app-keyserver | 401 ++++++++++++------------ src/freedombone-app-koel | 493 ++++++++++++++--------------- src/freedombone-app-lychee | 368 +++++++++++----------- src/freedombone-app-mailpile | 172 +++++------ src/freedombone-app-matrix | 324 +++++++++---------- 18 files changed, 3558 insertions(+), 3517 deletions(-) diff --git a/src/freedombone-app-etherpad b/src/freedombone-app-etherpad index 3082e6fd..330de307 100755 --- a/src/freedombone-app-etherpad +++ b/src/freedombone-app-etherpad @@ -41,7 +41,7 @@ ETHERPAD_REPO="https://github.com/ether/etherpad-lite" ETHERPAD_COMMIT='454f539561a8d9de51ed107a29d974eb79198bc6' ETHERPAD_ADMIN_PASSWORD= ETHERPAD_TITLE=$'Freedombone Docs' -ETHERPAD_WELCOME_MESSAGE=$"Welcome to ${ETHERPAD_TITLE}!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!" +ETHERPAD_WELCOME_MESSAGE=$"Welcome to ${ETHERPAD_TITLE}!\\n\\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!" etherpad_variables=(ONION_ONLY DEFAULT_DOMAIN_NAME @@ -67,109 +67,109 @@ function change_password_etherpad { read_config_param ETHERPAD_DOMAIN_NAME if grep -q "\"$change_username\": {" /var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json; then - user_line=$(cat /var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json | grep "\"$change_username\": {") + user_line=$(grep "\"$change_username\": {" "/var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json") if [[ "$user_line" == *"\"is_admin\": true"* ]]; then - sed -i "s|\"$change_username\": {.*|\"$change_username\": { \"password\": "$new_user_password", \"is_admin\": true }|g" /var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json + sed -i "s|\"$change_username\": {.*|\"$change_username\": { \"password\": \"$new_user_password\", \"is_admin\": true }|g" "/var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json" else - sed -i "s|\"$change_username\": {.*|\"$change_username\": { \"password\": "$new_user_password", \"is_admin\": false },|g" /var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json + sed -i "s|\"$change_username\": {.*|\"$change_username\": { \"password\": \"$new_user_password\", \"is_admin\": false },|g" /var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json fi - ${PROJECT_NAME}-pass -u $change_username -a etherpad -p "$2" + "${PROJECT_NAME}-pass" -u "$change_username" -a etherpad -p "$2" systemctl restart etherpad fi } function etherpad_create_database { - if [ -f $IMAGE_PASSWORD_FILE ]; then - ETHERPAD_ADMIN_PASSWORD="$(printf `cat $IMAGE_PASSWORD_FILE`)" + if [ -f "$IMAGE_PASSWORD_FILE" ]; then + ETHERPAD_ADMIN_PASSWORD="$(printf "%s" "$(cat "$IMAGE_PASSWORD_FILE")")" else - if [ ! $ETHERPAD_ADMIN_PASSWORD ]; then - ETHERPAD_ADMIN_PASSWORD="$(create_password ${MINIMUM_PASSWORD_LENGTH})" + if [ ! "$ETHERPAD_ADMIN_PASSWORD" ]; then + ETHERPAD_ADMIN_PASSWORD="$(create_password "${MINIMUM_PASSWORD_LENGTH}")" fi fi - if [ ! $ETHERPAD_ADMIN_PASSWORD ]; then + if [ ! "$ETHERPAD_ADMIN_PASSWORD" ]; then return fi function_check create_database - create_database etherpad "$ETHERPAD_ADMIN_PASSWORD" $MY_USERNAME + create_database etherpad "$ETHERPAD_ADMIN_PASSWORD" "$MY_USERNAME" } function create_etherpad_settings { - settings_file=/var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json - echo '{' > $settings_file - echo " \"title\": \"${ETHERPAD_TITLE}\"," >> $settings_file - echo ' "favicon": "favicon.ico",' >> $settings_file + settings_file="/var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json" + { echo '{'; + echo " \"title\": \"${ETHERPAD_TITLE}\","; + echo ' "favicon": "favicon.ico",'; - echo ' "ip": "127.0.0.1",' >> $settings_file - echo " \"port\" : ${ETHERPAD_PORT}," >> $settings_file + echo ' "ip": "127.0.0.1",'; + echo " \"port\" : ${ETHERPAD_PORT},"; - echo ' "showSettingsInAdminPage" : true,' >> $settings_file - echo ' "dbType" : "mysql",' >> $settings_file - echo ' "dbSettings" : {' >> $settings_file - echo ' "user" : "root",' >> $settings_file - echo ' "host" : "localhost",' >> $settings_file - echo " \"password\": \"${MARIADB_PASSWORD}\"," >> $settings_file - echo ' "database": "etherpad",' >> $settings_file - echo ' "charset" : "utf8mb4"' >> $settings_file - echo ' },' >> $settings_file + echo ' "showSettingsInAdminPage" : true,'; + echo ' "dbType" : "mysql",'; + echo ' "dbSettings" : {'; + echo ' "user" : "root",'; + echo ' "host" : "localhost",'; + echo " \"password\": \"${MARIADB_PASSWORD}\","; + echo ' "database": "etherpad",'; + echo ' "charset" : "utf8mb4"'; + echo ' },'; - echo " \"defaultPadText\" : \"${ETHERPAD_WELCOME_MESSAGE}\"," >> $settings_file + echo " \"defaultPadText\" : \"${ETHERPAD_WELCOME_MESSAGE}\","; - echo ' "padOptions": {' >> $settings_file - echo ' "noColors": false,' >> $settings_file - echo ' "showControls": true,' >> $settings_file - echo ' "showChat": true,' >> $settings_file - echo ' "showLineNumbers": false,' >> $settings_file - echo ' "useMonospaceFont": false,' >> $settings_file - echo ' "userName": false,' >> $settings_file - echo ' "userColor": true,' >> $settings_file - echo ' "rtl": false,' >> $settings_file - echo ' "alwaysShowChat": true,' >> $settings_file - echo ' "chatAndUsers": true,' >> $settings_file - echo ' "lang": "en-gb"' >> $settings_file - echo ' },' >> $settings_file + echo ' "padOptions": {'; + echo ' "noColors": false,'; + echo ' "showControls": true,'; + echo ' "showChat": true,'; + echo ' "showLineNumbers": false,'; + echo ' "useMonospaceFont": false,'; + echo ' "userName": false,'; + echo ' "userColor": true,'; + echo ' "rtl": false,'; + echo ' "alwaysShowChat": true,'; + echo ' "chatAndUsers": true,'; + echo ' "lang": "en-gb"'; + echo ' },'; - echo ' "suppressErrorsInPadText" : true,' >> $settings_file - echo ' "requireSession" : false,' >> $settings_file - echo ' "editOnly" : false,' >> $settings_file - echo ' "sessionNoPassword" : false,' >> $settings_file - echo ' "minify" : true,' >> $settings_file - echo ' "maxAge" : 21600, // 60 * 60 * 6 = 6 hours' >> $settings_file - echo ' "abiword" : null,' >> $settings_file - echo ' "soffice" : null,' >> $settings_file - echo ' "tidyHtml" : null,' >> $settings_file - echo ' "allowUnknownFileEnds" : false,' >> $settings_file - echo ' "requireAuthentication" : true,' >> $settings_file - echo ' "requireAuthorization" : true,' >> $settings_file - echo ' "trustProxy" : false,' >> $settings_file - echo ' "disableIPlogging" : true,' >> $settings_file + echo ' "suppressErrorsInPadText" : true,'; + echo ' "requireSession" : false,'; + echo ' "editOnly" : false,'; + echo ' "sessionNoPassword" : false,'; + echo ' "minify" : true,'; + echo ' "maxAge" : 21600, // 60 * 60 * 6 = 6 hours'; + echo ' "abiword" : null,'; + echo ' "soffice" : null,'; + echo ' "tidyHtml" : null,'; + echo ' "allowUnknownFileEnds" : false,'; + echo ' "requireAuthentication" : true,'; + echo ' "requireAuthorization" : true,'; + echo ' "trustProxy" : false,'; + echo ' "disableIPlogging" : true,'; - echo ' "users": {' >> $settings_file - echo " \"${MY_USERNAME}\": { \"password\": \"${ETHERPAD_ADMIN_PASSWORD}\", \"is_admin\": true }" >> $settings_file - echo ' },' >> $settings_file + echo ' "users": {'; + echo " \"${MY_USERNAME}\": { \"password\": \"${ETHERPAD_ADMIN_PASSWORD}\", \"is_admin\": true }"; + echo ' },'; - echo ' "socketTransportProtocols" : ["xhr-polling", "jsonp-polling", "htmlfile"],' >> $settings_file - echo ' "loadTest": false,' >> $settings_file - echo ' "indentationOnNewLine": false,' >> $settings_file + echo ' "socketTransportProtocols" : ["xhr-polling", "jsonp-polling", "htmlfile"],'; + echo ' "loadTest": false,'; + echo ' "indentationOnNewLine": false,'; - echo ' "toolbar": {' >> $settings_file - echo ' "left": [' >> $settings_file - echo ' ["bold", "italic", "underline", "strikethrough"],' >> $settings_file - echo ' ["orderedlist", "unorderedlist", "indent", "outdent"],' >> $settings_file - echo ' ["undo", "redo"],' >> $settings_file - echo ' ["clearauthorship"]' >> $settings_file - echo ' ],' >> $settings_file - echo ' "right": [' >> $settings_file - echo ' ["importexport", "timeslider", "savedrevision"],' >> $settings_file - echo ' ["settings", "embed"],' >> $settings_file - echo ' ["showusers"]' >> $settings_file - echo ' ],' >> $settings_file - echo ' "timeslider": [' >> $settings_file - echo ' ["timeslider_export", "timeslider_returnToPad"]' >> $settings_file - echo ' ]' >> $settings_file - echo ' },' >> $settings_file - echo ' "loglevel": "INFO"' >> $settings_file - echo '}' >> $settings_file + echo ' "toolbar": {'; + echo ' "left": ['; + echo ' ["bold", "italic", "underline", "strikethrough"],'; + echo ' ["orderedlist", "unorderedlist", "indent", "outdent"],'; + echo ' ["undo", "redo"],'; + echo ' ["clearauthorship"]'; + echo ' ],'; + echo ' "right": ['; + echo ' ["importexport", "timeslider", "savedrevision"],'; + echo ' ["settings", "embed"],'; + echo ' ["showusers"]'; + echo ' ],'; + echo ' "timeslider": ['; + echo ' ["timeslider_export", "timeslider_returnToPad"]'; + echo ' ]'; + echo ' },'; + echo ' "loglevel": "INFO"'; + echo '}'; } > $settings_file chmod 600 $settings_file } @@ -177,7 +177,7 @@ function remove_user_etherpad { remove_username="$1" settings_file=/var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json - ${PROJECT_NAME}-pass -u $remove_username --rmapp etherpad + "${PROJECT_NAME}-pass" -u "$remove_username" --rmapp etherpad if grep -q "\"$remove_username\": {" $settings_file; then sed -i "/\"$remove_username\": {/d" $settings_file @@ -191,7 +191,7 @@ function add_user_etherpad { settings_file=/var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json if ! grep -q "\"$new_username\": {" $settings_file; then - ${PROJECT_NAME}-pass -u $new_username -a etherpad -p "$2" + "${PROJECT_NAME}-pass" -u "$new_username" -a etherpad -p "$2" sed -i "/\"users\": {/a \"$new_username\": { \"password\": \"$new_user_password\", \"is_admin\": false }," $settings_file if grep -q "\"$new_username\": {" $settings_file; then systemctl restart etherpad @@ -204,11 +204,11 @@ function add_user_etherpad { } function install_interactive_etherpad { - if [ ! $ONION_ONLY ]; then + if [ ! "$ONION_ONLY" ]; then ONION_ONLY='no' fi - if [[ $ONION_ONLY != "no" ]]; then + if [[ "$ONION_ONLY" != "no" ]]; then ETHERPAD_DOMAIN_NAME='etherpad.local' write_config_param "ETHERPAD_DOMAIN_NAME" "$ETHERPAD_DOMAIN_NAME" else @@ -220,18 +220,17 @@ function install_interactive_etherpad { function etherpad_set_title { read_config_param "ETHERPAD_TITLE" - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 + data=$(mktemp 2>/dev/null) dialog --title $"Etherpad Title" \ --backtitle $"Freedombone Control Panel" \ - --inputbox $'Set a title for your etherpad system' 10 60 "$ETHERPAD_TITLE" 2>$data + --inputbox $'Set a title for your etherpad system' 10 60 "$ETHERPAD_TITLE" 2>"$data" sel=$? case $sel in 0) - temp_title=$(<$data) + temp_title=$(<"$data") if [ ${#temp_title} -gt 0 ]; then ETHERPAD_TITLE="$temp_title" - settings_file=/var/www/$ETHERPAD_DOMAIN_NAME/htdocs/settings.json + settings_file="/var/www/$ETHERPAD_DOMAIN_NAME/htdocs/settings.json" write_config_param "ETHERPAD_TITLE" "$ETHERPAD_TITLE" sed -i "s|\"title\":.*|\"title\": \"${ETHERPAD_TITLE}\"|g" $settings_file @@ -241,22 +240,22 @@ function etherpad_set_title { fi ;; esac + rm -f "$data" } function etherpad_set_welcome_message { read_config_param "ETHERPAD_WELCOME_MESSAGE" - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 + data=$(mktemp 2>/dev/null) dialog --title $"Etherpad Welcome Message" \ --backtitle $"Freedombone Control Panel" \ - --inputbox $'Set a welcome message, which can include html formatting' 10 60 "$ETHERPAD_WELCOME_MESSAGE" 2>$data + --inputbox $'Set a welcome message, which can include html formatting' 10 60 "$ETHERPAD_WELCOME_MESSAGE" 2>"$data" sel=$? case $sel in 0) - temp_welcome=$(<$data) + temp_welcome=$(<"$data") if [ ${#temp_welcome} -gt 0 ]; then ETHERPAD_WELCOME_MESSAGE="$temp_welcome" - settings_file=/var/www/$ETHERPAD_DOMAIN_NAME/htdocs/settings.json + settings_file="/var/www/$ETHERPAD_DOMAIN_NAME/htdocs/settings.json" write_config_param "ETHERPAD_WELCOME_MESSAGE" "$ETHERPAD_WELCOME_MESSAGE" sed -i "s|\"defaultPadText\" :.*|\"defaultPadText\" : \"${ETHERPAD_WELCOME_MESSAGE}\"|g" $settings_file @@ -266,29 +265,33 @@ function etherpad_set_welcome_message { fi ;; esac + rm -f "$data" } function configure_interactive_etherpad { while true do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 + data=$(mktemp 2>/dev/null) dialog --backtitle $"Freedombone Control Panel" \ --title $"Etherpad Settings" \ --radiolist $"Choose an operation:" 12 70 3 \ 1 $"Set Title" off \ 2 $"Set a welcome message" off \ - 3 $"Exit" on 2> $data + 3 $"Exit" on 2> "$data" sel=$? case $sel in - 1) return;; - 255) return;; + 1) rm -f "$data" + return;; + 255) rm -f "$data" + return;; esac - case $(cat $data) in + case $(cat "$data") in 1) etherpad_set_title;; 2) etherpad_set_welcome_message;; - 3) break;; + 3) rm -f "$data" + break;; esac + rm -f "$data" done } @@ -311,18 +314,18 @@ function upgrade_etherpad { function backup_local_etherpad { ETHERPAD_DOMAIN_NAME='etherpad' - if grep -q "etherpad domain" $COMPLETION_FILE; then + if grep -q "etherpad domain" "$COMPLETION_FILE"; then ETHERPAD_DOMAIN_NAME=$(get_completion_param "etherpad domain") fi source_directory=/var/www/${ETHERPAD_DOMAIN_NAME}/htdocs - if [ -d $source_directory ]; then + if [ -d "$source_directory" ]; then dest_directory=etherpad function_check suspend_site - suspend_site ${ETHERPAD_DOMAIN_NAME} + suspend_site "${ETHERPAD_DOMAIN_NAME}" function_check backup_directory_to_usb - backup_directory_to_usb $source_directory $dest_directory + backup_directory_to_usb "$source_directory" "$dest_directory" function_check backup_database_to_usb backup_database_to_usb etherpad @@ -333,50 +336,50 @@ function backup_local_etherpad { } function restore_local_etherpad { - if ! grep -q "etherpad domain" $COMPLETION_FILE; then + if ! grep -q "etherpad domain" "$COMPLETION_FILE"; then return fi ETHERPAD_DOMAIN_NAME=$(get_completion_param "etherpad domain") - if [ $ETHERPAD_DOMAIN_NAME ]; then + if [ "$ETHERPAD_DOMAIN_NAME" ]; then temp_restore_dir=/root/tempetherpad - etherpad_dir=/var/www/${ETHERPAD_DOMAIN_NAME}/htdocs + #etherpad_dir="/var/www/${ETHERPAD_DOMAIN_NAME}/htdocs" function_check etherpad_create_database etherpad_create_database - restore_database etherpad ${ETHERPAD_DOMAIN_NAME} + restore_database etherpad "${ETHERPAD_DOMAIN_NAME}" if [ -d $temp_restore_dir ]; then rm -rf $temp_restore_dir fi - chown -R etherpad: /var/www/${ETHERPAD_DOMAIN_NAME}/htdocs - if [ -f /etc/ssl/certs/${ETHERPAD_DOMAIN_NAME}.pem ]; then - chown etherpad: /etc/ssl/certs/${ETHERPAD_DOMAIN_NAME}.pem + chown -R etherpad: "/var/www/${ETHERPAD_DOMAIN_NAME}/htdocs" + if [ -f "/etc/ssl/certs/${ETHERPAD_DOMAIN_NAME}.pem" ]; then + chown etherpad: "/etc/ssl/certs/${ETHERPAD_DOMAIN_NAME}.pem" fi - if [ -f /etc/ssl/private/${ETHERPAD_DOMAIN_NAME}.key ]; then - chown etherpad: /etc/ssl/private/${ETHERPAD_DOMAIN_NAME}.key + if [ -f "/etc/ssl/private/${ETHERPAD_DOMAIN_NAME}.key" ]; then + chown etherpad: "/etc/ssl/private/${ETHERPAD_DOMAIN_NAME}.key" fi - MARIADB_PASSWORD=$(${PROJECT_NAME}-pass -u root -a mariadb) - settings_file=/var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json - sed -i "s|\"password\":.*|\"password\": \"${MARIADB_PASSWORD}\",|g" $settings_file + MARIADB_PASSWORD=$("${PROJECT_NAME}-pass" -u root -a mariadb) + settings_file="/var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json" + sed -i "s|\"password\":.*|\"password\": \"${MARIADB_PASSWORD}\",|g" "$settings_file" MARIADB_PASSWORD= fi } function backup_remote_etherpad { - if grep -q "etherpad domain" $COMPLETION_FILE; then + if grep -q "etherpad domain" "$COMPLETION_FILE"; then ETHERPAD_DOMAIN_NAME=$(get_completion_param "etherpad domain") - temp_backup_dir=/var/www/${ETHERPAD_DOMAIN_NAME}/htdocs - if [ -d $temp_backup_dir ]; then + temp_backup_dir="/var/www/${ETHERPAD_DOMAIN_NAME}/htdocs" + if [ -d "$temp_backup_dir" ]; then function_check suspend_site - suspend_site ${ETHERPAD_DOMAIN_NAME} + suspend_site "${ETHERPAD_DOMAIN_NAME}" function_check backup_database_to_friend backup_database_to_friend etherpad function_check backup_directory_to_friend - backup_directory_to_friend $temp_backup_dir etherpad + backup_directory_to_friend "$temp_backup_dir" etherpad function_check restart_site restart_site @@ -387,29 +390,29 @@ function backup_remote_etherpad { } function restore_remote_etherpad { - if grep -q "etherpad domain" $COMPLETION_FILE; then + if grep -q "etherpad domain" "$COMPLETION_FILE"; then ETHERPAD_DOMAIN_NAME=$(get_completion_param "etherpad domain") function_check etherpad_create_database etherpad_create_database function_check restore_database_from_friend - restore_database_from_friend etherpad ${ETHERPAD_DOMAIN_NAME} + restore_database_from_friend etherpad "${ETHERPAD_DOMAIN_NAME}" if [ -d /root/tempetherpad ]; then rm -rf /root/tempetherpad fi - chown -R etherpad: /var/www/${ETHERPAD_DOMAIN_NAME}/htdocs - if [ -f /etc/ssl/certs/${ETHERPAD_DOMAIN_NAME}.pem ]; then - chown etherpad: /etc/ssl/certs/${ETHERPAD_DOMAIN_NAME}.pem + chown -R etherpad: "/var/www/${ETHERPAD_DOMAIN_NAME}/htdocs" + if [ -f "/etc/ssl/certs/${ETHERPAD_DOMAIN_NAME}.pem" ]; then + chown etherpad: "/etc/ssl/certs/${ETHERPAD_DOMAIN_NAME}.pem" fi - if [ -f /etc/ssl/private/${ETHERPAD_DOMAIN_NAME}.key ]; then - chown etherpad: /etc/ssl/private/${ETHERPAD_DOMAIN_NAME}.key + if [ -f "/etc/ssl/private/${ETHERPAD_DOMAIN_NAME}.key" ]; then + chown etherpad: "/etc/ssl/private/${ETHERPAD_DOMAIN_NAME}.key" fi - MARIADB_PASSWORD=$(${PROJECT_NAME}-pass -u root -a mariadb) - settings_file=/var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json - sed -i "s|\"password\":.*|\"password\": \"${MARIADB_PASSWORD}\",|g" $settings_file + MARIADB_PASSWORD=$("${PROJECT_NAME}-pass" -u root -a mariadb) + settings_file="/var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json" + sed -i "s|\"password\":.*|\"password\": \"${MARIADB_PASSWORD}\",|g" "$settings_file" MARIADB_PASSWORD= fi } @@ -427,13 +430,13 @@ function remove_etherpad { rm /etc/systemd/system/etherpad.service fi systemctl daemon-reload - nginx_dissite $ETHERPAD_DOMAIN_NAME - remove_certs $ETHERPAD_DOMAIN_NAME - if [ -d /var/www/$ETHERPAD_DOMAIN_NAME ]; then - rm -rf /var/www/$ETHERPAD_DOMAIN_NAME + nginx_dissite "$ETHERPAD_DOMAIN_NAME" + remove_certs "$ETHERPAD_DOMAIN_NAME" + if [ -d "/var/www/$ETHERPAD_DOMAIN_NAME" ]; then + rm -rf "/var/www/$ETHERPAD_DOMAIN_NAME" fi - if [ -f /etc/nginx/sites-available/$ETHERPAD_DOMAIN_NAME ]; then - rm /etc/nginx/sites-available/$ETHERPAD_DOMAIN_NAME + if [ -f "/etc/nginx/sites-available/$ETHERPAD_DOMAIN_NAME" ]; then + rm "/etc/nginx/sites-available/$ETHERPAD_DOMAIN_NAME" fi function_check drop_database drop_database etherpad @@ -441,7 +444,7 @@ function remove_etherpad { remove_onion_service etherpad ${ETHERPAD_ONION_PORT} remove_app etherpad remove_completion_param install_etherpad - sed -i '/etherpad/d' $COMPLETION_FILE + sed -i '/etherpad/d' "$COMPLETION_FILE" remove_backup_database_local etherpad remove_nodejs etherpad @@ -449,22 +452,22 @@ function remove_etherpad { userdel -r etherpad function_check remove_ddns_domain - remove_ddns_domain $ETHERPAD_DOMAIN_NAME + remove_ddns_domain "$ETHERPAD_DOMAIN_NAME" } function install_etherpad { - if [ ! $ETHERPAD_DOMAIN_NAME ]; then + if [ ! "$ETHERPAD_DOMAIN_NAME" ]; then echo $'No domain name was given for etherpad' exit 7359 fi check_ram_availability 2000 - if [ -f $IMAGE_PASSWORD_FILE ]; then - ETHERPAD_ADMIN_PASSWORD="$(printf `cat $IMAGE_PASSWORD_FILE`)" + if [ -f "$IMAGE_PASSWORD_FILE" ]; then + ETHERPAD_ADMIN_PASSWORD="$(printf "%s" "$(cat "$IMAGE_PASSWORD_FILE")")" else - if [ ! $ETHERPAD_ADMIN_PASSWORD ]; then - ETHERPAD_ADMIN_PASSWORD="$(create_password ${MINIMUM_PASSWORD_LENGTH})" + if [ ! "$ETHERPAD_ADMIN_PASSWORD" ]; then + ETHERPAD_ADMIN_PASSWORD="$(create_password "${MINIMUM_PASSWORD_LENGTH}")" fi fi @@ -484,133 +487,133 @@ function install_etherpad { function_check install_nodejs install_nodejs etherpad - if [ ! -d /var/www/$ETHERPAD_DOMAIN_NAME ]; then - mkdir /var/www/$ETHERPAD_DOMAIN_NAME + if [ ! -d "/var/www/$ETHERPAD_DOMAIN_NAME" ]; then + mkdir "/var/www/$ETHERPAD_DOMAIN_NAME" fi - if [ ! -d /var/www/$ETHERPAD_DOMAIN_NAME/htdocs ]; then + if [ ! -d "/var/www/$ETHERPAD_DOMAIN_NAME/htdocs" ]; then if [ -d /repos/etherpad ]; then - mkdir /var/www/$ETHERPAD_DOMAIN_NAME/htdocs - cp -r -p /repos/etherpad/. /var/www/$ETHERPAD_DOMAIN_NAME/htdocs - cd /var/www/$ETHERPAD_DOMAIN_NAME/htdocs + mkdir "/var/www/$ETHERPAD_DOMAIN_NAME/htdocs" + cp -r -p /repos/etherpad/. "/var/www/$ETHERPAD_DOMAIN_NAME/htdocs" + cd "/var/www/$ETHERPAD_DOMAIN_NAME/htdocs" || exit 32468346 git pull else function_check git_clone - git_clone $ETHERPAD_REPO /var/www/$ETHERPAD_DOMAIN_NAME/htdocs + git_clone "$ETHERPAD_REPO" "/var/www/$ETHERPAD_DOMAIN_NAME/htdocs" fi - if [ ! -d /var/www/$ETHERPAD_DOMAIN_NAME/htdocs ]; then + if [ ! -d "/var/www/$ETHERPAD_DOMAIN_NAME/htdocs" ]; then echo $'Unable to clone etherpad repo' exit 56382 fi fi - cd /var/www/$ETHERPAD_DOMAIN_NAME/htdocs - git checkout $ETHERPAD_COMMIT -b $ETHERPAD_COMMIT + cd "/var/www/$ETHERPAD_DOMAIN_NAME/htdocs" || exit 24654824 + git checkout "$ETHERPAD_COMMIT" -b "$ETHERPAD_COMMIT" set_completion_param "etherpad commit" "$ETHERPAD_COMMIT" - chmod a+w /var/www/$ETHERPAD_DOMAIN_NAME/htdocs - chown www-data:www-data /var/www/$ETHERPAD_DOMAIN_NAME/htdocs + chmod a+w "/var/www/$ETHERPAD_DOMAIN_NAME/htdocs" + chown www-data:www-data "/var/www/$ETHERPAD_DOMAIN_NAME/htdocs" function_check etherpad_create_database etherpad_create_database function_check add_ddns_domain - add_ddns_domain $ETHERPAD_DOMAIN_NAME + add_ddns_domain "$ETHERPAD_DOMAIN_NAME" create_etherpad_settings - adduser --system --home=/var/www/$ETHERPAD_DOMAIN_NAME/htdocs/ --group etherpad - chown -R etherpad: /var/www/$ETHERPAD_DOMAIN_NAME/htdocs/ + adduser --system --home="/var/www/$ETHERPAD_DOMAIN_NAME/htdocs/" --group etherpad + chown -R etherpad: "/var/www/$ETHERPAD_DOMAIN_NAME/htdocs/" - echo '[Unit]' > /etc/systemd/system/etherpad.service - echo 'Description=etherpad-lite (real-time collaborative document editing)' >> /etc/systemd/system/etherpad.service - echo 'After=syslog.target network.target' >> /etc/systemd/system/etherpad.service - echo '' >> /etc/systemd/system/etherpad.service - echo '[Service]' >> /etc/systemd/system/etherpad.service - echo 'Type=simple' >> /etc/systemd/system/etherpad.service - echo 'User=etherpad' >> /etc/systemd/system/etherpad.service - echo 'Group=etherpad' >> /etc/systemd/system/etherpad.service - echo "WorkingDirectory=/var/www/$ETHERPAD_DOMAIN_NAME/htdocs" >> /etc/systemd/system/etherpad.service - echo "ExecStart=/var/www/$ETHERPAD_DOMAIN_NAME/htdocs/bin/run.sh" >> /etc/systemd/system/etherpad.service - echo 'Restart=on-failure' >> /etc/systemd/system/etherpad.service - echo 'SuccessExitStatus=3 4' >> /etc/systemd/system/etherpad.service - echo 'RestartForceExitStatus=3 4' >> /etc/systemd/system/etherpad.service - echo '' >> /etc/systemd/system/etherpad.service - echo '[Install]' >> /etc/systemd/system/etherpad.service - echo 'WantedBy=multi-user.target' >> /etc/systemd/system/etherpad.service + { echo '[Unit]'; + echo 'Description=etherpad-lite (real-time collaborative document editing)'; + echo 'After=syslog.target network.target'; + echo ''; + echo '[Service]'; + echo 'Type=simple'; + echo 'User=etherpad'; + echo 'Group=etherpad'; + echo "WorkingDirectory=/var/www/$ETHERPAD_DOMAIN_NAME/htdocs"; + echo "ExecStart=/var/www/$ETHERPAD_DOMAIN_NAME/htdocs/bin/run.sh"; + echo 'Restart=on-failure'; + echo 'SuccessExitStatus=3 4'; + echo 'RestartForceExitStatus=3 4'; + echo ''; + echo '[Install]'; + echo 'WantedBy=multi-user.target'; } > /etc/systemd/system/etherpad.service chmod +x /etc/systemd/system/etherpad.service etherpad_nginx_site=/etc/nginx/sites-available/$ETHERPAD_DOMAIN_NAME if [[ $ONION_ONLY == "no" ]]; then function_check nginx_http_redirect - nginx_http_redirect $ETHERPAD_DOMAIN_NAME - echo 'server {' >> $etherpad_nginx_site - echo ' listen 443 ssl;' >> $etherpad_nginx_site - echo ' #listen [::]:443 ssl;' >> $etherpad_nginx_site - echo " server_name $ETHERPAD_DOMAIN_NAME;" >> $etherpad_nginx_site - echo '' >> $etherpad_nginx_site - echo ' # Security' >> $etherpad_nginx_site + nginx_http_redirect "$ETHERPAD_DOMAIN_NAME" + { echo 'server {'; + echo ' listen 443 ssl;'; + echo ' #listen [::]:443 ssl;'; + echo " server_name $ETHERPAD_DOMAIN_NAME;"; + echo ''; + echo ' # Security'; } >> "$etherpad_nginx_site" function_check nginx_ssl - nginx_ssl $ETHERPAD_DOMAIN_NAME + nginx_ssl "$ETHERPAD_DOMAIN_NAME" function_check nginx_disable_sniffing - nginx_disable_sniffing $ETHERPAD_DOMAIN_NAME + nginx_disable_sniffing "$ETHERPAD_DOMAIN_NAME" - echo ' add_header Strict-Transport-Security max-age=15768000;' >> $etherpad_nginx_site - echo '' >> $etherpad_nginx_site - echo ' # Logs' >> $etherpad_nginx_site - echo ' access_log /dev/null;' >> $etherpad_nginx_site - echo ' error_log /dev/null;' >> $etherpad_nginx_site - echo '' >> $etherpad_nginx_site - echo ' # Root' >> $etherpad_nginx_site - echo " root /var/www/$ETHERPAD_DOMAIN_NAME/htdocs;" >> $etherpad_nginx_site - echo '' >> $etherpad_nginx_site - echo ' location / {' >> $etherpad_nginx_site + { echo ' add_header Strict-Transport-Security max-age=15768000;'; + echo ''; + echo ' # Logs'; + echo ' access_log /dev/null;'; + echo ' error_log /dev/null;'; + echo ''; + echo ' # Root'; + echo " root /var/www/$ETHERPAD_DOMAIN_NAME/htdocs;"; + echo ''; + echo ' location / {'; } >> "$etherpad_nginx_site" function_check nginx_limits - nginx_limits $ETHERPAD_DOMAIN_NAME '15m' - echo " proxy_pass http://localhost:${ETHERPAD_PORT}/;" >> $etherpad_nginx_site - echo ' proxy_set_header Host $host;' >> $etherpad_nginx_site - echo ' proxy_buffering off;' >> $etherpad_nginx_site - echo ' }' >> $etherpad_nginx_site - echo '}' >> $etherpad_nginx_site + nginx_limits "$ETHERPAD_DOMAIN_NAME" '15m' + { echo " proxy_pass http://localhost:${ETHERPAD_PORT}/;"; + echo " proxy_set_header Host \$host;"; + echo ' proxy_buffering off;'; + echo ' }'; + echo '}'; } >> "$etherpad_nginx_site" else - echo -n '' > $etherpad_nginx_site + echo -n '' > "$etherpad_nginx_site" fi - echo 'server {' >> $etherpad_nginx_site - echo " listen 127.0.0.1:$ETHERPAD_ONION_PORT default_server;" >> $etherpad_nginx_site - echo " server_name $ETHERPAD_DOMAIN_NAME;" >> $etherpad_nginx_site - echo '' >> $etherpad_nginx_site + { echo 'server {'; + echo " listen 127.0.0.1:$ETHERPAD_ONION_PORT default_server;"; + echo " server_name $ETHERPAD_ONION_HOSTNAME;"; + echo ''; } >> "$etherpad_nginx_site" function_check nginx_disable_sniffing - nginx_disable_sniffing $ETHERPAD_DOMAIN_NAME - echo '' >> $etherpad_nginx_site - echo ' # Logs' >> $etherpad_nginx_site - echo ' access_log /dev/null;' >> $etherpad_nginx_site - echo ' error_log /dev/null;' >> $etherpad_nginx_site - echo '' >> $etherpad_nginx_site - echo ' # Root' >> $etherpad_nginx_site - echo " root /var/www/$ETHERPAD_DOMAIN_NAME/htdocs;" >> $etherpad_nginx_site - echo '' >> $etherpad_nginx_site - echo ' location / {' >> $etherpad_nginx_site + nginx_disable_sniffing "$ETHERPAD_DOMAIN_NAME" + { echo ''; + echo ' # Logs'; + echo ' access_log /dev/null;'; + echo ' error_log /dev/null;'; + echo ''; + echo ' # Root'; + echo " root /var/www/$ETHERPAD_DOMAIN_NAME/htdocs;"; + echo ''; + echo ' location / {'; } >> "$etherpad_nginx_site" function_check nginx_limits - nginx_limits $ETHERPAD_DOMAIN_NAME '15m' - echo " proxy_pass http://localhost:${ETHERPAD_PORT}/;" >> $etherpad_nginx_site - echo ' proxy_set_header Host $host;' >> $etherpad_nginx_site - echo ' proxy_buffering off;' >> $etherpad_nginx_site - echo ' }' >> $etherpad_nginx_site - echo '}' >> $etherpad_nginx_site + nginx_limits "$ETHERPAD_DOMAIN_NAME" '15m' + { echo " proxy_pass http://localhost:${ETHERPAD_PORT}/;"; + echo " proxy_set_header Host \$host;"; + echo ' proxy_buffering off;'; + echo ' }'; + echo '}'; } >> "$etherpad_nginx_site" function_check create_site_certificate - create_site_certificate $ETHERPAD_DOMAIN_NAME 'yes' + create_site_certificate "$ETHERPAD_DOMAIN_NAME" 'yes' - if [ -f /etc/ssl/certs/${ETHERPAD_DOMAIN_NAME}.crt ]; then - mv /etc/ssl/certs/${ETHERPAD_DOMAIN_NAME}.crt /etc/ssl/certs/${ETHERPAD_DOMAIN_NAME}.pem + if [ -f "/etc/ssl/certs/${ETHERPAD_DOMAIN_NAME}.crt" ]; then + mv "/etc/ssl/certs/${ETHERPAD_DOMAIN_NAME}.crt" "/etc/ssl/certs/${ETHERPAD_DOMAIN_NAME}.pem" fi - if [ -f /etc/ssl/certs/${ETHERPAD_DOMAIN_NAME}.pem ]; then - chown etherpad: /etc/ssl/certs/${ETHERPAD_DOMAIN_NAME}.pem + if [ -f "/etc/ssl/certs/${ETHERPAD_DOMAIN_NAME}.pem" ]; then + chown etherpad: "/etc/ssl/certs/${ETHERPAD_DOMAIN_NAME}.pem" fi - if [ -f /etc/ssl/private/${ETHERPAD_DOMAIN_NAME}.key ]; then - chown etherpad: /etc/ssl/private/${ETHERPAD_DOMAIN_NAME}.key + if [ -f "/etc/ssl/private/${ETHERPAD_DOMAIN_NAME}.key" ]; then + chown etherpad: "/etc/ssl/private/${ETHERPAD_DOMAIN_NAME}.key" fi usermod -a -G ssl-cert etherpad @@ -623,14 +626,14 @@ function install_etherpad { backup_database_local etherpad function_check nginx_ensite - nginx_ensite $ETHERPAD_DOMAIN_NAME + nginx_ensite "$ETHERPAD_DOMAIN_NAME" ETHERPAD_ONION_HOSTNAME=$(add_onion_service etherpad 80 ${ETHERPAD_ONION_PORT}) - ${PROJECT_NAME}-pass -u $MY_USERNAME -a etherpad -p "$ETHERPAD_ADMIN_PASSWORD" + "${PROJECT_NAME}-pass" -u "$MY_USERNAME" -a etherpad -p "$ETHERPAD_ADMIN_PASSWORD" function_check add_ddns_domain - add_ddns_domain $ETHERPAD_DOMAIN_NAME + add_ddns_domain "$ETHERPAD_DOMAIN_NAME" set_completion_param "etherpad domain" "$ETHERPAD_DOMAIN_NAME" diff --git a/src/freedombone-app-fedwiki b/src/freedombone-app-fedwiki index d8b27591..8197e49a 100755 --- a/src/freedombone-app-fedwiki +++ b/src/freedombone-app-fedwiki @@ -127,7 +127,7 @@ function add_user_fedwiki { } function install_interactive_fedwiki { - if [ ! $ONION_ONLY ]; then + if [ ! "$ONION_ONLY" ]; then ONION_ONLY='no' fi @@ -148,7 +148,7 @@ function change_password_fedwiki { echo $'Fedwiki password is too short' return fi - ${PROJECT_NAME}-pass -u $FEDWIKI_USERNAME -a fedwiki -p "$FEDWIKI_PASSWORD" + "${PROJECT_NAME}-pass" -u "$FEDWIKI_USERNAME" -a fedwiki -p "$FEDWIKI_PASSWORD" sed -i "s|--cookieSecret .*|--cookieSecret '${FEDWIKI_PASSWORD}'|g" /etc/systemd/system/fedwiki.service sed -i "s|\"secret\":.*|\"secret\": \"${FEDWIKI_PASSWORD}\"|g" ${FEDWIKI_DATA}/status/owner.json systemctl daemon-reload @@ -177,12 +177,12 @@ function upgrade_fedwiki { function backup_local_fedwiki { FEDWIKI_DOMAIN_NAME='fedwiki.local' - if grep -q "fedwiki domain" $COMPLETION_FILE; then + if grep -q "fedwiki domain" "$COMPLETION_FILE"; then FEDWIKI_DOMAIN_NAME=$(get_completion_param "fedwiki domain") fi systemctl stop fedwiki - suspend_site ${FEDWIKI_DOMAIN_NAME} + suspend_site "${FEDWIKI_DOMAIN_NAME}" fedwiki_path=$FEDWIKI_DATA if [ -d $fedwiki_path ]; then @@ -195,11 +195,11 @@ function backup_local_fedwiki { function restore_local_fedwiki { FEDWIKI_DOMAIN_NAME='fedwiki.local' - if grep -q "fedwiki domain" $COMPLETION_FILE; then + if grep -q "fedwiki domain" "$COMPLETION_FILE"; then FEDWIKI_DOMAIN_NAME=$(get_completion_param "fedwiki domain") fi - if [ $FEDWIKI_DOMAIN_NAME ]; then - suspend_site ${FEDWIKI_DOMAIN_NAME} + if [ "$FEDWIKI_DOMAIN_NAME" ]; then + suspend_site "${FEDWIKI_DOMAIN_NAME}" systemctl stop fedwiki temp_restore_dir=/root/tempfedwiki @@ -215,8 +215,8 @@ function restore_local_fedwiki { rm -rf $temp_restore_dir fi - FEDWIKI_PASSWORD=$(cat ${FEDWIKI_DATA}/status/owner.json | grep secret | awk -F '"' '{print $4}') - ${PROJECT_NAME}-pass -u $FEDWIKI_USERNAME -a fedwiki -p "$FEDWIKI_PASSWORD" + FEDWIKI_PASSWORD=$(grep secret "${FEDWIKI_DATA}/status/owner.json" | awk -F '"' '{print $4}') + "${PROJECT_NAME}-pass" -u "$FEDWIKI_USERNAME" -a fedwiki -p "$FEDWIKI_PASSWORD" sed -i "s|--cookieSecret .*|--cookieSecret '${FEDWIKI_PASSWORD}'|g" /etc/systemd/system/fedwiki.service write_config_param "FEDWIKI_COOKIE" "$FEDWIKI_PASSWORD" systemctl daemon-reload @@ -227,12 +227,12 @@ function restore_local_fedwiki { function backup_remote_fedwiki { FEDWIKI_DOMAIN_NAME='fedwiki.local' - if grep -q "fedwiki domain" $COMPLETION_FILE; then + if grep -q "fedwiki domain" "$COMPLETION_FILE"; then FEDWIKI_DOMAIN_NAME=$(get_completion_param "fedwiki domain") fi systemctl stop fedwiki - suspend_site ${FEDWIKI_DOMAIN_NAME} + suspend_site "${FEDWIKI_DOMAIN_NAME}" temp_backup_dir=$FEDWIKI_DATA if [ -d $temp_backup_dir ]; then @@ -248,12 +248,12 @@ function backup_remote_fedwiki { function restore_remote_fedwiki { FEDWIKI_DOMAIN_NAME='fedwiki.local' - if grep -q "fedwiki domain" $COMPLETION_FILE; then + if grep -q "fedwiki domain" "$COMPLETION_FILE"; then FEDWIKI_DOMAIN_NAME=$(get_completion_param "fedwiki domain") fi systemctl stop fedwiki - suspend_site ${FEDWIKI_DOMAIN_NAME} + suspend_site "${FEDWIKI_DOMAIN_NAME}" temp_restore_dir=/root/tempfedwiki function_check restore_directory_from_friend @@ -268,8 +268,8 @@ function restore_remote_fedwiki { rm -rf $temp_restore_dir fi - FEDWIKI_PASSWORD=$(cat ${FEDWIKI_DATA}/status/owner.json | grep secret | awk -F '"' '{print $4}') - ${PROJECT_NAME}-pass -u $FEDWIKI_USERNAME -a fedwiki -p "$FEDWIKI_PASSWORD" + FEDWIKI_PASSWORD=$(grep secret "${FEDWIKI_DATA}/status/owner.json" | awk -F '"' '{print $4}') + "${PROJECT_NAME}-pass" -u "$FEDWIKI_USERNAME" -a fedwiki -p "$FEDWIKI_PASSWORD" sed -i "s|--cookieSecret .*|--cookieSecret '${FEDWIKI_PASSWORD}'|g" /etc/systemd/system/fedwiki.service write_config_param "FEDWIKI_COOKIE" "$FEDWIKI_PASSWORD" systemctl daemon-reload @@ -294,20 +294,20 @@ function remove_fedwiki { remove_nodejs fedwiki read_config_param "FEDWIKI_DOMAIN_NAME" - nginx_dissite $FEDWIKI_DOMAIN_NAME - remove_certs ${FEDWIKI_DOMAIN_NAME} - if [ -f /etc/nginx/sites-available/$FEDWIKI_DOMAIN_NAME ]; then - rm -f /etc/nginx/sites-available/$FEDWIKI_DOMAIN_NAME + nginx_dissite "$FEDWIKI_DOMAIN_NAME" + remove_certs "${FEDWIKI_DOMAIN_NAME}" + if [ -f "/etc/nginx/sites-available/$FEDWIKI_DOMAIN_NAME" ]; then + rm -f "/etc/nginx/sites-available/$FEDWIKI_DOMAIN_NAME" fi - if [ -d /var/www/$FEDWIKI_DOMAIN_NAME ]; then - rm -rf /var/www/$FEDWIKI_DOMAIN_NAME + if [ -d "/var/www/$FEDWIKI_DOMAIN_NAME" ]; then + rm -rf "/var/www/$FEDWIKI_DOMAIN_NAME" fi remove_config_param FEDWIKI_DOMAIN_NAME remove_config_param FEDWIKI_CODE function_check remove_onion_service remove_onion_service fedwiki ${FEDWIKI_ONION_PORT} remove_completion_param "install_fedwiki" - sed -i '/fedwiki/d' $COMPLETION_FILE + sed -i '/fedwiki/d' "$COMPLETION_FILE" groupdel -f fedwiki userdel -r fedwiki @@ -317,101 +317,102 @@ function remove_fedwiki { fi function_check remove_ddns_domain - remove_ddns_domain $FEDWIKI_DOMAIN_NAME + remove_ddns_domain "$FEDWIKI_DOMAIN_NAME" } function fedwiki_setup_web { - fedwiki_nginx_file=/etc/nginx/sites-available/$FEDWIKI_DOMAIN_NAME + fedwiki_nginx_file="/etc/nginx/sites-available/$FEDWIKI_DOMAIN_NAME" - if [[ $ONION_ONLY == "no" ]]; then - echo 'server {' > $fedwiki_nginx_file - echo ' listen 80;' >> $fedwiki_nginx_file - echo ' listen [::]:80;' >> $fedwiki_nginx_file - echo " server_name $FEDWIKI_DOMAIN_NAME;" >> $fedwiki_nginx_file - echo ' rewrite ^ https://$server_name$request_uri? permanent;' >> $fedwiki_nginx_file - echo '}' >> $fedwiki_nginx_file - echo '' >> $fedwiki_nginx_file - echo 'server {' >> $fedwiki_nginx_file - echo ' listen 443 ssl;' >> $fedwiki_nginx_file - echo ' #listen [::]:443 ssl;' >> $fedwiki_nginx_file - echo " server_name $FEDWIKI_DOMAIN_NAME;" >> $fedwiki_nginx_file - echo '' >> $fedwiki_nginx_file + if [[ "$ONION_ONLY" == "no" ]]; then + { echo 'server {'; + echo ' listen 80;'; + echo ' listen [::]:80;'; + echo " server_name $FEDWIKI_DOMAIN_NAME;"; + echo " rewrite ^ https://\$server_name\$request_uri? permanent;"; + echo '}'; + echo ''; + echo 'server {'; + echo ' listen 443 ssl;'; + echo ' #listen [::]:443 ssl;'; + echo " server_name $FEDWIKI_DOMAIN_NAME;"; + echo ''; } > "$fedwiki_nginx_file" function_check nginx_ssl - nginx_ssl $FEDWIKI_DOMAIN_NAME mobile + nginx_ssl "$FEDWIKI_DOMAIN_NAME" mobile - sed -i '/Content-Security-Policy/d' $fedwiki_nginx_file - sed -i '/X-XSS-Protection/d' $fedwiki_nginx_file - sed -i '/X-Robots-Tag/d' $fedwiki_nginx_file - sed -i '/X-Download-Options/d' $fedwiki_nginx_file - sed -i '/X-Permitted-Cross-Domain-Policies/d' $fedwiki_nginx_file + sed -i '/Content-Security-Policy/d' "$fedwiki_nginx_file" + sed -i '/X-XSS-Protection/d' "$fedwiki_nginx_file" + sed -i '/X-Robots-Tag/d' "$fedwiki_nginx_file" + sed -i '/X-Download-Options/d' "$fedwiki_nginx_file" + sed -i '/X-Permitted-Cross-Domain-Policies/d' "$fedwiki_nginx_file" - echo ' add_header X-Robots-Tag none;' >> $fedwiki_nginx_file - echo ' add_header X-Download-Options noopen;' >> $fedwiki_nginx_file - echo ' add_header X-Frame-Options DENY;' >> $fedwiki_nginx_file - echo ' add_header X-Content-Type-Options nosniff;' >> $fedwiki_nginx_file - echo ' add_header Strict-Transport-Security max-age=15768000;' >> $fedwiki_nginx_file - echo '' >> $fedwiki_nginx_file - echo ' location /fonts-font-awesome/ {' >> $fedwiki_nginx_file - echo ' alias /usr/share/fonts-font-awesome/;' >> $fedwiki_nginx_file - echo ' }' >> $fedwiki_nginx_file - echo '' >> $fedwiki_nginx_file - echo ' location / {' >> $fedwiki_nginx_file - echo " proxy_pass http://localhost:${FEDWIKI_PORT};" >> $fedwiki_nginx_file - echo ' proxy_set_header X-Real-IP $remote_addr;' >> $fedwiki_nginx_file - echo ' proxy_set_header Host $host;' >> $fedwiki_nginx_file - echo ' proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' >> $fedwiki_nginx_file - echo ' client_max_body_size 1M;' >> $fedwiki_nginx_file - echo ' }' >> $fedwiki_nginx_file - echo '}' >> $fedwiki_nginx_file - echo '' >> $fedwiki_nginx_file + { echo ' add_header X-Robots-Tag none;'; + echo ' add_header X-Download-Options noopen;'; + echo ' add_header X-Frame-Options DENY;'; + echo ' add_header X-Content-Type-Options nosniff;'; + echo ' add_header Strict-Transport-Security max-age=15768000;'; + echo ''; + echo ' location /fonts-font-awesome/ {'; + echo ' alias /usr/share/fonts-font-awesome/;'; + echo ' }'; + echo ''; + echo ' location / {'; + echo " proxy_pass http://localhost:${FEDWIKI_PORT};"; + echo " proxy_set_header X-Real-IP \$remote_addr;"; + echo " proxy_set_header Host \$host;"; + echo " proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;"; + echo ' client_max_body_size 1M;'; + echo ' }'; + echo '}'; + echo ''; } >> "$fedwiki_nginx_file" else - echo -n '' > $fedwiki_nginx_file + echo -n '' > "$fedwiki_nginx_file" fi - echo 'server {' >> $fedwiki_nginx_file - echo " listen 127.0.0.1:$FEDWIKI_ONION_PORT default_server;" >> $fedwiki_nginx_file - echo " server_name $FEDWIKI_ONION_HOSTNAME;" >> $fedwiki_nginx_file - echo '' >> $fedwiki_nginx_file - echo ' add_header X-Robots-Tag none;' >> $fedwiki_nginx_file - echo ' add_header X-Download-Options noopen;' >> $fedwiki_nginx_file - echo ' add_header X-Frame-Options DENY;' >> $fedwiki_nginx_file - echo ' add_header X-Content-Type-Options nosniff;' >> $fedwiki_nginx_file - echo '' >> $fedwiki_nginx_file - echo ' location /fonts-font-awesome/ {' >> $fedwiki_nginx_file - echo ' alias /usr/share/fonts-font-awesome/;' >> $fedwiki_nginx_file - echo ' }' >> $fedwiki_nginx_file - echo '' >> $fedwiki_nginx_file - echo ' location / {' >> $fedwiki_nginx_file - echo " proxy_pass http://localhost:${FEDWIKI_PORT};" >> $fedwiki_nginx_file - echo ' proxy_set_header X-Real-IP $remote_addr;' >> $fedwiki_nginx_file - echo ' proxy_set_header Host $host;' >> $fedwiki_nginx_file - echo ' proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;' >> $fedwiki_nginx_file - echo ' client_max_body_size 1M;' >> $fedwiki_nginx_file - echo ' }' >> $fedwiki_nginx_file - echo '}' >> $fedwiki_nginx_file + { echo 'server {'; + echo " listen 127.0.0.1:$FEDWIKI_ONION_PORT default_server;"; + echo " server_name $FEDWIKI_ONION_HOSTNAME;"; + echo ''; + echo ' add_header X-Robots-Tag none;'; + echo ' add_header X-Download-Options noopen;'; + echo ' add_header X-Frame-Options DENY;'; + echo ' add_header X-Content-Type-Options nosniff;'; + echo ''; + echo ' location /fonts-font-awesome/ {'; + echo ' alias /usr/share/fonts-font-awesome/;'; + echo ' }'; + echo ''; + echo ' location / {'; + echo " proxy_pass http://localhost:${FEDWIKI_PORT};"; + echo " proxy_set_header X-Real-IP \$remote_addr;"; + echo " proxy_set_header Host \$host;"; + echo " proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;"; + echo ' client_max_body_size 1M;'; + echo ' }'; + echo '}'; } >> "$fedwiki_nginx_file" function_check create_site_certificate - create_site_certificate $FEDWIKI_DOMAIN_NAME 'yes' + create_site_certificate "$FEDWIKI_DOMAIN_NAME" 'yes' function_check nginx_ensite - nginx_ensite $FEDWIKI_DOMAIN_NAME + nginx_ensite "$FEDWIKI_DOMAIN_NAME" } function install_fedwiki { - if [[ $VARIANT == "mesh"* ]]; then + # shellcheck disable=SC2153 + if [[ "$VARIANT" == "mesh"* ]]; then return fi - if [ ! $ONION_ONLY ]; then + if [ ! "$ONION_ONLY" ]; then ONION_ONLY='no' fi - if [ ! $FEDWIKI_DOMAIN_NAME ]; then + if [ ! "$FEDWIKI_DOMAIN_NAME" ]; then echo $'The fedwiki domain name was not specified' exit 893635 fi - if [ ! -d /var/www/$FEDWIKI_DOMAIN_NAME/htdocs ]; then - mkdir -p /var/www/$FEDWIKI_DOMAIN_NAME/htdocs + if [ ! -d "/var/www/$FEDWIKI_DOMAIN_NAME/htdocs" ]; then + mkdir -p "/var/www/$FEDWIKI_DOMAIN_NAME/htdocs" fi if [ ! -d $FEDWIKI_DATA ]; then @@ -429,14 +430,12 @@ function install_fedwiki { apt-get -yq install fonts-font-awesome - npm install -g wiki@$FEDWIKI_VERSION - if [ ! "$?" = "0" ]; then + if ! npm install -g wiki@$FEDWIKI_VERSION; then echo $'Failed to install fedwiki' exit 6293523 fi - npm install -g wiki-security-friends@0.1.0 - if [ ! "$?" = "0" ]; then + if ! npm install -g wiki-security-friends@0.1.0; then echo $'Failed to install wiki-security-friends' exit 783533 fi @@ -457,44 +456,44 @@ function install_fedwiki { FEDWIKI_COOKIE="$(create_password 20)" fi - echo '[Unit]' > /etc/systemd/system/fedwiki.service - echo 'Description=Fedwiki federated wiki' >> /etc/systemd/system/fedwiki.service - echo 'After=syslog.target' >> /etc/systemd/system/fedwiki.service - echo 'After=network.target' >> /etc/systemd/system/fedwiki.service - echo '' >> /etc/systemd/system/fedwiki.service - echo '[Service]' >> /etc/systemd/system/fedwiki.service - echo 'User=fedwiki' >> /etc/systemd/system/fedwiki.service - echo 'Group=fedwiki' >> /etc/systemd/system/fedwiki.service - echo "WorkingDirectory=/usr/local/lib/node_modules/wiki" >> /etc/systemd/system/fedwiki.service - echo "ExecStart=/usr/local/bin/wiki --security_type friends --session_duration 7 --data $FEDWIKI_DATA -p $FEDWIKI_PORT --cookieSecret '${FEDWIKI_COOKIE}'" >> /etc/systemd/system/fedwiki.service - echo 'StandardOutput=syslog' >> /etc/systemd/system/fedwiki.service - echo 'StandardError=syslog' >> /etc/systemd/system/fedwiki.service - echo 'SyslogIdentifier=fedwiki' >> /etc/systemd/system/fedwiki.service - echo 'Restart=always' >> /etc/systemd/system/fedwiki.service - echo "Environment=NODE_ENV=production" >> /etc/systemd/system/fedwiki.service - echo '' >> /etc/systemd/system/fedwiki.service - echo '[Install]' >> /etc/systemd/system/fedwiki.service - echo 'WantedBy=multi-user.target' >> /etc/systemd/system/fedwiki.service + { echo '[Unit]'; + echo 'Description=Fedwiki federated wiki'; + echo 'After=syslog.target'; + echo 'After=network.target'; + echo ''; + echo '[Service]'; + echo 'User=fedwiki'; + echo 'Group=fedwiki'; + echo "WorkingDirectory=/usr/local/lib/node_modules/wiki"; + echo "ExecStart=/usr/local/bin/wiki --security_type friends --session_duration 7 --data $FEDWIKI_DATA -p $FEDWIKI_PORT --cookieSecret '${FEDWIKI_COOKIE}'"; + echo 'StandardOutput=syslog'; + echo 'StandardError=syslog'; + echo 'SyslogIdentifier=fedwiki'; + echo 'Restart=always'; + echo "Environment=NODE_ENV=production"; + echo ''; + echo '[Install]'; + echo 'WantedBy=multi-user.target'; } > /etc/systemd/system/fedwiki.service if [ ! -d ${FEDWIKI_DATA}/status ]; then mkdir -p ${FEDWIKI_DATA}/status fi fedwiki_auth_file=${FEDWIKI_DATA}/status/owner.json - echo '{' > $fedwiki_auth_file - echo " \"name\": \"${MY_USERNAME}\"," >> $fedwiki_auth_file - echo ' "friend": {' >> $fedwiki_auth_file - echo " \"secret\": \"${FEDWIKI_COOKIE}\"" >> $fedwiki_auth_file - echo ' }' >> $fedwiki_auth_file - echo '}' >> $fedwiki_auth_file + { echo '{'; + echo " \"name\": \"${MY_USERNAME}\","; + echo ' "friend": {'; + echo " \"secret\": \"${FEDWIKI_COOKIE}\""; + echo ' }'; + echo '}'; } > $fedwiki_auth_file chown -R fedwiki:fedwiki $FEDWIKI_DATA fedwiki_setup_web - ${PROJECT_NAME}-pass -u $MY_USERNAME -a fedwiki -p "$FEDWIKI_COOKIE" + "${PROJECT_NAME}-pass" -u "$MY_USERNAME" -a fedwiki -p "$FEDWIKI_COOKIE" function_check add_ddns_domain - add_ddns_domain $FEDWIKI_DOMAIN_NAME + add_ddns_domain "$FEDWIKI_DOMAIN_NAME" fedwiki_remove_bad_links diff --git a/src/freedombone-app-friendica b/src/freedombone-app-friendica index db1ad7bc..7eee5abe 100755 --- a/src/freedombone-app-friendica +++ b/src/freedombone-app-friendica @@ -60,7 +60,7 @@ function logging_off_friendica { function remove_user_friendica { remove_username="$1" - ${PROJECT_NAME}-pass -u $remove_username --rmapp friendica + "${PROJECT_NAME}-pass" -u "$remove_username" --rmapp friendica } function add_user_friendica { @@ -71,27 +71,26 @@ function add_user_friendica { new_username="$1" new_user_password="$2" - ${PROJECT_NAME}-pass -u $new_username -a friendica -p "$new_user_password" + "${PROJECT_NAME}-pass" -u "$new_username" -a friendica -p "$new_user_password" echo '0' } function friendica_renew_cert { dialog --title $"Renew SSL certificate" \ --backtitle $"Freedombone Control Panel" \ - --yesno $"\nThis will renew a letsencrypt certificate. Select 'yes' to continue" 16 60 + --yesno $"\\nThis will renew a letsencrypt certificate. Select 'yes' to continue" 16 60 sel=$? case $sel in 1) return;; 255) return;; esac FRIENDICA_DOMAIN_NAME=$(get_completion_param "friendica domain") - if [ ! -d /var/www/$FRIENDICA_DOMAIN_NAME/htdocs ]; then + if [ ! -d "/var/www/$FRIENDICA_DOMAIN_NAME/htdocs" ]; then dialog --title $"Renew SSL certificate" \ --msgbox $"Friendica install directory not found" 6 40 return fi - ${PROJECT_NAME}-renew-cert -h $FRIENDICA_DOMAIN_NAME -p 'letsencrypt' - if [ ! "$?" = "0" ]; then + if ! "${PROJECT_NAME}-renew-cert" -h "$FRIENDICA_DOMAIN_NAME" -p 'letsencrypt'; then any_key else dialog --title $"Renew SSL certificate" \ @@ -100,52 +99,54 @@ function friendica_renew_cert { } function friendica_channel_directory_server { - if ! grep -q "friendica domain" $COMPLETION_FILE; then + if ! grep -q "friendica domain" "$COMPLETION_FILE"; then dialog --title $"Friendica channel directory server" \ --msgbox $"Friendica is not installed on this system" 6 40 return fi FRIENDICA_DOMAIN_NAME=$(get_completion_param "friendica domain") - if [ ! -d /var/www/$FRIENDICA_DOMAIN_NAME/htdocs ]; then + if [ ! -d "/var/www/$FRIENDICA_DOMAIN_NAME/htdocs" ]; then dialog --title $"Friendica channel directory server" \ --msgbox $"Friendica install directory not found" 6 40 return fi - CURR_DIR_SERVER=$(cat /var/www/$FRIENDICA_DOMAIN_NAME/htdocs/.htconfig.php | grep directory | awk -F "'" '{print $6}') + CURR_DIR_SERVER=$(grep directory "/var/www/$FRIENDICA_DOMAIN_NAME/htdocs/.htconfig.php" | awk -F "'" '{print $6}') - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 + data=$(mktemp 2>/dev/null) dialog --title $"Friendica channel directory server" \ --backtitle $"Freedombone Control Panel" \ --inputbox $"When you click on 'channel directory' this is where Friendica will obtain its list from" 8 60 "$CURR_DIR_SERVER" 2>$data sel=$? case $sel in 0) - friendica_domain_server=$(<$data) + friendica_domain_server=$(<"$data") if [[ "$friendica_domain_server" != *"."* ]]; then + rm -f "$data" return fi if [[ "$friendica_domain_server" != "http"* ]]; then dialog --title $"Friendica channel directory server" \ --msgbox $"Invalid domain - include the https://" 6 40 + rm -f "$data" return fi - sed -i "s|\['directory'\] = .*|\['directory'\] = \'$friendica_domain_server\';|g" /var/www/$FRIENDICA_DOMAIN_NAME/htdocs/.htconfig.php + sed -i "s|\['directory'\] = .*|\['directory'\] = \'$friendica_domain_server\';|g" "/var/www/$FRIENDICA_DOMAIN_NAME/htdocs/.htconfig.php" dialog --title $"Friendica channel directory server" \ --msgbox $"Domain channel directory server changed to $friendica_domain_server" 6 40 ;; esac + rm -f "$data" } function friendica_close_registrations { - sed -i "s|REGISTER_OPEN|REGISTER_CLOSED|g" /var/www/$FRIENDICA_DOMAIN_NAME/htdocs/.htconfig.php + sed -i "s|REGISTER_OPEN|REGISTER_CLOSED|g" "/var/www/$FRIENDICA_DOMAIN_NAME/htdocs/.htconfig.php" dialog --title $"Friendica Account Registrations" \ --msgbox $"New registrations are now closed" 6 40 } function friendica_allow_registrations { - sed -i "s|REGISTER_CLOSED|REGISTER_OPEN|g" /var/www/$FRIENDICA_DOMAIN_NAME/htdocs/.htconfig.php + sed -i "s|REGISTER_CLOSED|REGISTER_OPEN|g" "/var/www/$FRIENDICA_DOMAIN_NAME/htdocs/.htconfig.php" dialog --title $"Friendica Account Registrations" \ --msgbox $"New registrations are permitted" 6 40 } @@ -153,8 +154,7 @@ function friendica_allow_registrations { function configure_interactive_friendica { while true do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 + data=$(mktemp 2>/dev/null) dialog --backtitle $"Freedombone Control Panel" \ --title $"Friendica" \ --radiolist $"Choose an operation:" 15 70 6 \ @@ -162,19 +162,21 @@ function configure_interactive_friendica { 2 $"Renew SSL certificate" off \ 3 $"Close new account registrations" off \ 4 $"Allow new account registrations" off \ - 5 $"Back to main menu" on 2> $data + 5 $"Back to main menu" on 2> "$data" sel=$? case $sel in 1) break;; 255) break;; esac - case $(cat $data) in + case $(cat "$data") in 1) friendica_channel_directory_server;; 2) friendica_renew_cert;; 3) friendica_close_registrations;; 4) friendica_allow_registrations;; - 5) break;; + 5) rm -f "$data" + break;; esac + rm -f "$data" done } @@ -190,7 +192,7 @@ function install_interactive_friendica { } function change_password_friendica { - FRIENDICA_USERNAME="$1" + #FRIENDICA_USERNAME="$1" FRIENDICA_PASSWORD="$2" if [ ${#FRIENDICA_PASSWORD} -lt 8 ]; then echo $'Friendica password is too short' @@ -201,14 +203,14 @@ function change_password_friendica { } function friendica_create_database { - if [ -f $IMAGE_PASSWORD_FILE ]; then - FRIENDICA_ADMIN_PASSWORD="$(printf `cat $IMAGE_PASSWORD_FILE`)" + if [ -f "$IMAGE_PASSWORD_FILE" ]; then + FRIENDICA_ADMIN_PASSWORD="$(printf "%s" "$(cat "$IMAGE_PASSWORD_FILE")")" fi - if [ ! $FRIENDICA_ADMIN_PASSWORD ]; then - FRIENDICA_ADMIN_PASSWORD="$(create_password ${MINIMUM_PASSWORD_LENGTH})" + if [ ! "$FRIENDICA_ADMIN_PASSWORD" ]; then + FRIENDICA_ADMIN_PASSWORD="$(create_password "${MINIMUM_PASSWORD_LENGTH}")" fi - ${PROJECT_NAME}-pass -u $MY_USERNAME -a friendica -p "$FRIENDICA_ADMIN_PASSWORD" - if [ ! $FRIENDICA_ADMIN_PASSWORD ]; then + "${PROJECT_NAME}-pass" -u "$MY_USERNAME" -a friendica -p "$FRIENDICA_ADMIN_PASSWORD" + if [ ! "$FRIENDICA_ADMIN_PASSWORD" ]; then return fi @@ -229,17 +231,17 @@ function upgrade_friendica { FRIENDICA_PATH=/var/www/$FRIENDICA_DOMAIN_NAME/htdocs function_check set_repo_commit - set_repo_commit $FRIENDICA_PATH "friendica commit" "$FRIENDICA_COMMIT" $FRIENDICA_REPO - set_repo_commit $FRIENDICA_PATH/addon "friendica addons commit" "$FRIENDICA_ADDONS_COMMIT" $FRIENDICA_ADDONS_REPO + set_repo_commit "$FRIENDICA_PATH" "friendica commit" "$FRIENDICA_COMMIT" $FRIENDICA_REPO + set_repo_commit "$FRIENDICA_PATH/addon" "friendica addons commit" "$FRIENDICA_ADDONS_COMMIT" $FRIENDICA_ADDONS_REPO } function backup_local_friendica { - friendica_path=/var/www/${FRIENDICA_DOMAIN_NAME}/htdocs - if [ -d $friendica_path ]; then + friendica_path="/var/www/${FRIENDICA_DOMAIN_NAME}/htdocs" + if [ -d "$friendica_path" ]; then function_check backup_database_to_usb backup_database_to_usb friendica - backup_directory_to_usb $friendica_path friendica + backup_directory_to_usb "$friendica_path" friendica fi } @@ -250,31 +252,31 @@ function restore_local_friendica { function_check friendica_create_database friendica_create_database - restore_database friendica ${FRIENDICA_DOMAIN_NAME} - if [ -d $USB_MOUNT/backup/friendica ]; then - if [ ! -d $friendica_dir/store/[data]/smarty3 ]; then - mkdir -p $friendica_dir/store/[data]/smarty3 + restore_database friendica "${FRIENDICA_DOMAIN_NAME}" + if [ -d "$USB_MOUNT/backup/friendica" ]; then + if [ ! -d "$friendica_dir/store/[data]/smarty3" ]; then + mkdir -p "$friendica_dir/store/[data]/smarty3" fi - chmod 1777 $friendica_dir/store/[data]/smarty3 - chown -R www-data:www-data $friendica_dir/* + chmod 1777 "$friendica_dir/store/[data]/smarty3" + chown -R www-data:www-data "$friendica_dir/*" if [ -d $temp_restore_dir ]; then rm -rf $temp_restore_dir fi - MARIADB_PASSWORD=$(${PROJECT_NAME}-pass -u root -a mariadb) + MARIADB_PASSWORD=$("${PROJECT_NAME}-pass" -u root -a mariadb) FRIENDICA_PATH=/var/www/$FRIENDICA_DOMAIN_NAME/htdocs - sed -i "s|\$db_pass =.*|\$db_pass = '${MARIADB_PASSWORD}';|g" $FRIENDICA_PATH/.htconfig.php + sed -i "s|\$db_pass =.*|\$db_pass = '${MARIADB_PASSWORD}';|g" "$FRIENDICA_PATH/.htconfig.php" MARIADB_PASSWORD= fi } function backup_remote_friendica { - temp_backup_dir=/var/www/${FRIENDICA_DOMAIN_NAME}/htdocs - if [ -d $temp_backup_dir ]; then - suspend_site ${FRIENDICA_DOMAIN_NAME} + temp_backup_dir="/var/www/${FRIENDICA_DOMAIN_NAME}/htdocs" + if [ -d "$temp_backup_dir" ]; then + suspend_site "${FRIENDICA_DOMAIN_NAME}" backup_database_to_friend friendica echo "Backing up Friendica installation" - backup_directory_to_friend $temp_backup_dir friendica + backup_directory_to_friend "$temp_backup_dir" friendica restart_site echo "Backup of Friendica complete" else @@ -289,21 +291,21 @@ function restore_remote_friendica { function_check friendica_create_database friendica_create_database - restore_database_from_friend friendica ${FRIENDICA_DOMAIN_NAME} - if [ -d $SERVER_DIRECTORY/backup/friendica ]; then - if [ ! -d /var/www/${FRIENDICA_DOMAIN_NAME}/htdocs/store/[data]/smarty3 ]; then - mkdir -p /var/www/${FRIENDICA_DOMAIN_NAME}/htdocs/store/[data]/smarty3 + restore_database_from_friend friendica "${FRIENDICA_DOMAIN_NAME}" + if [ -d "$SERVER_DIRECTORY/backup/friendica" ]; then + if [ ! -d "/var/www/${FRIENDICA_DOMAIN_NAME}/htdocs/store/[data]/smarty3" ]; then + mkdir -p "/var/www/${FRIENDICA_DOMAIN_NAME}/htdocs/store/[data]/smarty3" fi - chmod 1777 /var/www/${FRIENDICA_DOMAIN_NAME}/htdocs/store/[data]/smarty3 - chown -R www-data:www-data /var/www/${FRIENDICA_DOMAIN_NAME}/htdocs/* + chmod 1777 "/var/www/${FRIENDICA_DOMAIN_NAME}/htdocs/store/[data]/smarty3" + chown -R www-data:www-data "/var/www/${FRIENDICA_DOMAIN_NAME}/htdocs/*" fi if [ -d /root/tempfriendica ]; then rm -rf /root/tempfriendica fi - MARIADB_PASSWORD=$(${PROJECT_NAME}-pass -u root -a mariadb) - FRIENDICA_PATH=/var/www/$FRIENDICA_DOMAIN_NAME/htdocs - sed -i "s|\$db_pass =.*|\$db_pass = '${MARIADB_PASSWORD}';|g" $FRIENDICA_PATH/.htconfig.php + MARIADB_PASSWORD=$("${PROJECT_NAME}-pass" -u root -a mariadb) + FRIENDICA_PATH="/var/www/$FRIENDICA_DOMAIN_NAME/htdocs" + sed -i "s|\$db_pass =.*|\$db_pass = '${MARIADB_PASSWORD}';|g" "$FRIENDICA_PATH/.htconfig.php" MARIADB_PASSWORD= } @@ -311,35 +313,35 @@ function remove_friendica { if [ ${#FRIENDICA_DOMAIN_NAME} -eq 0 ]; then return fi - nginx_dissite $FRIENDICA_DOMAIN_NAME - remove_certs ${FRIENDICA_DOMAIN_NAME} - if [ -d /var/www/$FRIENDICA_DOMAIN_NAME ]; then - rm -rf /var/www/$FRIENDICA_DOMAIN_NAME + nginx_dissite "$FRIENDICA_DOMAIN_NAME" + remove_certs "${FRIENDICA_DOMAIN_NAME}" + if [ -d "/var/www/$FRIENDICA_DOMAIN_NAME" ]; then + rm -rf "/var/www/$FRIENDICA_DOMAIN_NAME" fi - if [ -f /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME ]; then - rm /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME + if [ -f "/etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME" ]; then + rm "/etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME" fi function_check drop_database drop_database friendica function_check remove_onion_service remove_onion_service friendica ${FRIENDICA_ONION_PORT} - sed -i '/friendica/d' $COMPLETION_FILE + sed -i '/friendica/d' "$COMPLETION_FILE" sed -i '/poller.php/d' /etc/crontab function_check remove_ddns_domain - remove_ddns_domain $FRIENDICA_DOMAIN_NAME + remove_ddns_domain "$FRIENDICA_DOMAIN_NAME" } function install_friendica { - if [ ! $FRIENDICA_DOMAIN_NAME ]; then + if [ ! "$FRIENDICA_DOMAIN_NAME" ]; then return fi - if [[ $ONION_ONLY != "no" ]]; then + if [[ "$ONION_ONLY" != "no" ]]; then return fi - FRIENDICA_PATH=/var/www/$FRIENDICA_DOMAIN_NAME/htdocs + FRIENDICA_PATH="/var/www/$FRIENDICA_DOMAIN_NAME/htdocs" function_check install_mariadb install_mariadb @@ -354,38 +356,38 @@ function install_friendica { apt-get -yq install php-dev imagemagick php-imagick libfcgi0ldbl apt-get -yq install php-memcached - if [ ! -d /var/www/$FRIENDICA_DOMAIN_NAME ]; then - mkdir /var/www/$FRIENDICA_DOMAIN_NAME + if [ ! -d "/var/www/$FRIENDICA_DOMAIN_NAME" ]; then + mkdir "/var/www/$FRIENDICA_DOMAIN_NAME" fi - if [ ! -d $FRIENDICA_PATH ]; then - mkdir $FRIENDICA_PATH + if [ ! -d "$FRIENDICA_PATH" ]; then + mkdir "$FRIENDICA_PATH" fi - if [ ! -f $FRIENDICA_PATH/index.php ]; then - cd $INSTALL_DIR + if [ ! -f "$FRIENDICA_PATH/index.php" ]; then + cd "$INSTALL_DIR" || exit 2346824864 if [ -d /repos/friendica ]; then mkdir friendica cp -r -p /repos/friendica/. friendica - cd friendica + cd friendica || exit 24682462 git pull else function_check git_clone - git_clone $FRIENDICA_REPO friendica + git_clone "$FRIENDICA_REPO" friendica fi git checkout $FRIENDICA_COMMIT -b $FRIENDICA_COMMIT set_completion_param "friendica commit" "$FRIENDICA_COMMIT" - rm -rf $FRIENDICA_PATH - mv friendica $FRIENDICA_PATH + rm -rf "$FRIENDICA_PATH" + mv friendica "$FRIENDICA_PATH" - git_clone $FRIENDICA_ADDONS_REPO $FRIENDICA_PATH/addon - cd $FRIENDICA_PATH/addon - git checkout $FRIENDICA_ADDONS_COMMIT -b $FRIENDICA_ADDONS_COMMIT + git_clone "$FRIENDICA_ADDONS_REPO" "$FRIENDICA_PATH/addon" + cd "$FRIENDICA_PATH/addon" || exit 34835685 + git checkout "$FRIENDICA_ADDONS_COMMIT" -b "$FRIENDICA_ADDONS_COMMIT" set_completion_param "friendica addons commit" "$FRIENDICA_ADDONS_COMMIT" - chown -R www-data:www-data $FRIENDICA_PATH + chown -R www-data:www-data "$FRIENDICA_PATH" fi FRIENDICA_ONION_HOSTNAME= @@ -400,158 +402,158 @@ function install_friendica { fi function_check add_ddns_domain - add_ddns_domain $FRIENDICA_DOMAIN_NAME + add_ddns_domain "$FRIENDICA_DOMAIN_NAME" - if [[ $ONION_ONLY == "no" ]]; then + if [[ "$ONION_ONLY" == "no" ]]; then function_check nginx_http_redirect - nginx_http_redirect $FRIENDICA_DOMAIN_NAME - echo 'server {' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' listen 443 ssl;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' #listen [::]:443 ssl;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo " root $FRIENDICA_PATH;" >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo " server_name $FRIENDICA_DOMAIN_NAME;" >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo " error_log /dev/null;" >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' index index.php;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' charset utf-8;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' access_log /dev/null;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME + nginx_http_redirect "$FRIENDICA_DOMAIN_NAME" + { echo 'server {'; + echo ' listen 443 ssl;'; + echo ' #listen [::]:443 ssl;'; + echo " root $FRIENDICA_PATH;"; + echo " server_name $FRIENDICA_DOMAIN_NAME;"; + echo " error_log /dev/null;"; + echo ' index index.php;'; + echo ' charset utf-8;'; + echo ' access_log /dev/null;'; } >> "/etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME" function_check nginx_ssl - nginx_ssl $FRIENDICA_DOMAIN_NAME + nginx_ssl "$FRIENDICA_DOMAIN_NAME" function_check nginx_disable_sniffing - nginx_disable_sniffing $FRIENDICA_DOMAIN_NAME - echo ' add_header Strict-Transport-Security max-age=15768000;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # rewrite to front controller as default rule' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' location / {' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME + nginx_disable_sniffing "$FRIENDICA_DOMAIN_NAME" + { echo ' add_header Strict-Transport-Security max-age=15768000;'; + echo ''; + echo ' # rewrite to front controller as default rule'; + echo ' location / {'; } >> "/etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME" function_check nginx_limits - nginx_limits $FRIENDICA_DOMAIN_NAME - echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # statically serve these file types when possible' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # otherwise fall back to front controller' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # allow browser to cache them' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # added .htm for advanced source code editor library' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' expires 30d;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' try_files $uri /index.php?q=$uri&$args;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # block these file types' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' deny all;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # or a unix socket' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME + nginx_limits "$FRIENDICA_DOMAIN_NAME" + { echo " rewrite ^/(.*) /index.php?q=\$uri&\$args last;"; + echo ' }'; + echo ''; + echo ' # statically serve these file types when possible'; + echo ' # otherwise fall back to front controller'; + echo ' # allow browser to cache them'; + echo ' # added .htm for advanced source code editor library'; + echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {'; + echo ' expires 30d;'; + echo " try_files \$uri /index.php?q=\$uri&\$args;"; + echo ' }'; + echo ''; + echo ' # block these file types'; + echo ' location ~* \.(tpl|md|tgz|log|out)$ {'; + echo ' deny all;'; + echo ' }'; + echo ''; + echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000'; + echo ' # or a unix socket'; + echo ' location ~* \.php$ {'; } >> "/etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME" function_check nginx_limits - nginx_limits $FRIENDICA_DOMAIN_NAME - echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo " # Won't work properly (404 error) if the file is not stored on this" >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo " # server, which is entirely possible with php-fpm/php-fcgi." >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on" >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo " # another machine. And then cross your fingers that you won't get hacked." >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # With php-cgi alone:' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # fastcgi_pass 127.0.0.1:9000;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # With php-fpm:' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' fastcgi_read_timeout 30;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' fastcgi_read_timeout 300;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # deny access to all dot files' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' location ~ /\. {' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' deny all;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' location ~ /\.ht {' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' deny all;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo '}' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME + nginx_limits "$FRIENDICA_DOMAIN_NAME" + { echo ' # Zero-day exploit defense.'; + echo ' # http://forum.nginx.org/read.php?2,88845,page=3'; + echo " # Won't work properly (404 error) if the file is not stored on this"; + echo " # server, which is entirely possible with php-fpm/php-fcgi."; + echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on"; + echo " # another machine. And then cross your fingers that you won't get hacked."; + echo " try_files \$uri \$uri/ /index.php;"; + echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini'; + echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;'; + echo ' # With php-cgi alone:'; + echo ' # fastcgi_pass 127.0.0.1:9000;'; + echo ' # With php-fpm:'; + echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;'; + echo ' include fastcgi_params;'; + echo ' fastcgi_read_timeout 30;'; + echo ' fastcgi_index index.php;'; + echo " fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;"; + echo ' fastcgi_read_timeout 300;'; + echo ' }'; + echo ''; + echo ' # deny access to all dot files'; + echo ' location ~ /\. {'; + echo ' deny all;'; + echo ' }'; + echo ''; + echo ' location ~ /\.ht {'; + echo ' deny all;'; + echo ' }'; + echo '}'; + echo ''; } >> "/etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME" else - echo 'server {' > /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo " listen 127.0.0.1:${FRIENDICA_ONION_PORT} default_server;" >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo " root $FRIENDICA_PATH;" >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo " server_name $FRIENDICA_ONION_HOSTNAME;" >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo " error_log /dev/null;" >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' index index.php;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' charset utf-8;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' access_log /dev/null;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' add_header Strict-Transport-Security max-age=15768000;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # rewrite to front controller as default rule' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' location / {' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - nginx_limits $FRIENDICA_DOMAIN_NAME - nginx_disable_sniffing $FRIENDICA_DOMAIN_NAME - echo ' rewrite ^/(.*) /index.php?q=$uri&$args last;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # statically serve these file types when possible' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # otherwise fall back to front controller' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # allow browser to cache them' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # added .htm for advanced source code editor library' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' expires 30d;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' try_files $uri /index.php?q=$uri&$args;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # block these file types' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' location ~* \.(tpl|md|tgz|log|out)$ {' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' deny all;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # or a unix socket' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' location ~* \.php$ {' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - nginx_limits $FRIENDICA_DOMAIN_NAME - nginx_disable_sniffing $FRIENDICA_DOMAIN_NAME - echo ' # Zero-day exploit defense.' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # http://forum.nginx.org/read.php?2,88845,page=3' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo " # Won't work properly (404 error) if the file is not stored on this" >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo " # server, which is entirely possible with php-fpm/php-fcgi." >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on" >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo " # another machine. And then cross your fingers that you won't get hacked." >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' try_files $uri $uri/ /index.php;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # With php-cgi alone:' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # fastcgi_pass 127.0.0.1:9000;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # With php-fpm:' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' include fastcgi_params;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' fastcgi_read_timeout 30;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' fastcgi_index index.php;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' fastcgi_read_timeout 300;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' # deny access to all dot files' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' location ~ /\. {' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' deny all;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo '' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' location ~ /\.ht {' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' deny all;' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo ' }' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME - echo '}' >> /etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME + { echo 'server {'; + echo " listen 127.0.0.1:${FRIENDICA_ONION_PORT} default_server;"; + echo " root $FRIENDICA_PATH;"; + echo " server_name $FRIENDICA_ONION_HOSTNAME;"; + echo " error_log /dev/null;"; + echo ' index index.php;'; + echo ' charset utf-8;'; + echo ' access_log /dev/null;'; + echo ' add_header Strict-Transport-Security max-age=15768000;'; + echo ''; + echo ' # rewrite to front controller as default rule'; + echo ' location / {'; } > "/etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME" + nginx_limits "$FRIENDICA_DOMAIN_NAME" + nginx_disable_sniffing "$FRIENDICA_DOMAIN_NAME" + { echo " rewrite ^/(.*) /index.php?q=\$uri&\$args last;"; + echo ' }'; + echo ''; + echo ' # statically serve these file types when possible'; + echo ' # otherwise fall back to front controller'; + echo ' # allow browser to cache them'; + echo ' # added .htm for advanced source code editor library'; + echo ' location ~* \.(jpg|jpeg|gif|png|ico|css|js|htm|html|ttf|woff|svg)$ {'; + echo ' expires 30d;'; + echo " try_files \$uri /index.php?q=\$uri&\$args;"; + echo ' }'; + echo ''; + echo ' # block these file types'; + echo ' location ~* \.(tpl|md|tgz|log|out)$ {'; + echo ' deny all;'; + echo ' }'; + echo ''; + echo ' # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000'; + echo ' # or a unix socket'; + echo ' location ~* \.php$ {'; } >> "/etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME" + nginx_limits "$FRIENDICA_DOMAIN_NAME" + nginx_disable_sniffing "$FRIENDICA_DOMAIN_NAME" + { echo ' # Zero-day exploit defense.'; + echo ' # http://forum.nginx.org/read.php?2,88845,page=3'; + echo " # Won't work properly (404 error) if the file is not stored on this"; + echo " # server, which is entirely possible with php-fpm/php-fcgi."; + echo " # Comment the 'try_files' line out if you set up php-fpm/php-fcgi on"; + echo " # another machine. And then cross your fingers that you won't get hacked."; + echo ' try_files $uri $uri/ /index.php;'; + echo ' # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini'; + echo ' fastcgi_split_path_info ^(.+\.php)(/.+)$;'; + echo ' # With php-cgi alone:'; + echo ' # fastcgi_pass 127.0.0.1:9000;'; + echo ' # With php-fpm:'; + echo ' fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;'; + echo ' include fastcgi_params;'; + echo ' fastcgi_read_timeout 30;'; + echo ' fastcgi_index index.php;'; + echo " fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;"; + echo ' fastcgi_read_timeout 300;'; + echo ' }'; + echo ''; + echo ' # deny access to all dot files'; + echo ' location ~ /\. {'; + echo ' deny all;'; + echo ' }'; + echo ''; + echo ' location ~ /\.ht {'; + echo ' deny all;'; + echo ' }'; + echo '}'; } >> "/etc/nginx/sites-available/$FRIENDICA_DOMAIN_NAME" fi function_check configure_php configure_php function_check create_site_certificate - create_site_certificate $FRIENDICA_DOMAIN_NAME 'yes' + create_site_certificate "$FRIENDICA_DOMAIN_NAME" 'yes' - if [ ! -d $FRIENDICA_PATH/view/tpl/smarty3 ]; then - mkdir $FRIENDICA_PATH/view/tpl/smarty3 + if [ ! -d "$FRIENDICA_PATH/view/tpl/smarty3" ]; then + mkdir "$FRIENDICA_PATH/view/tpl/smarty3" fi if [ ! -d "$FRIENDICA_PATH/store" ]; then mkdir "$FRIENDICA_PATH/store" @@ -563,9 +565,9 @@ function install_friendica { mkdir "$FRIENDICA_PATH/store/[data]/smarty3" chmod 1777 "$FRIENDICA_PATH/store/[data]/smarty3" fi - chmod 1777 $FRIENDICA_PATH/view/tpl + chmod 1777 "$FRIENDICA_PATH/view/tpl" chown -R www-data:www-data "$FRIENDICA_PATH/store" - chmod 1777 $FRIENDICA_PATH/view/tpl/smarty3 + chmod 1777 "$FRIENDICA_PATH/view/tpl/smarty3" # Ensure that the database gets backed up locally, if remote # backups are not being used @@ -575,55 +577,55 @@ function install_friendica { function_check backup_database_local backup_database_local friendica - chown -R www-data:www-data $FRIENDICA_PATH + chown -R www-data:www-data "$FRIENDICA_PATH" function_check nginx_ensite - nginx_ensite $FRIENDICA_DOMAIN_NAME + nginx_ensite "$FRIENDICA_DOMAIN_NAME" # initialize the database - if [ ! -f $FRIENDICA_PATH/database.sql ]; then + if [ ! -f "$FRIENDICA_PATH/database.sql" ]; then echo $'No database schema found for friendica' exit 252782 fi function_check initialise_database - initialise_database friendica $FRIENDICA_PATH/database.sql + initialise_database friendica "$FRIENDICA_PATH/database.sql" # create the config file - echo ' $FRIENDICA_PATH/.htconfig.php - echo "\$db_host = 'localhost';" >> $FRIENDICA_PATH/.htconfig.php - echo "\$db_user = 'root';" >> $FRIENDICA_PATH/.htconfig.php - echo "\$db_pass = '${MARIADB_PASSWORD}';" >> $FRIENDICA_PATH/.htconfig.php - echo "\$db_data = 'friendica';" >> $FRIENDICA_PATH/.htconfig.php - echo "\$default_timezone = 'Europe/London';" >> $FRIENDICA_PATH/.htconfig.php + { echo ' "$FRIENDICA_PATH/.htconfig.php" if [[ $ONION_ONLY == 'no' ]]; then - echo "\$a->config['system']['baseurl'] = 'https://${FRIENDICA_DOMAIN_NAME}';" >> $FRIENDICA_PATH/.htconfig.php + echo "\$a->config['system']['baseurl'] = 'https://${FRIENDICA_DOMAIN_NAME}';" >> "$FRIENDICA_PATH/.htconfig.php" else - echo "\$a->config['system']['baseurl'] = 'http://${FRIENDICA_ONION_HOSTNAME}';" >> $FRIENDICA_PATH/.htconfig.php + echo "\$a->config['system']['baseurl'] = 'http://${FRIENDICA_ONION_HOSTNAME}';" >> "$FRIENDICA_PATH/.htconfig.php" fi - echo "\$a->config['sitename'] = \"Friendica\";" >> $FRIENDICA_PATH/.htconfig.php - echo "\$a->config['register_policy'] = REGISTER_OPEN;" >> $FRIENDICA_PATH/.htconfig.php - echo "\$a->config['register_text'] = '';" >> $FRIENDICA_PATH/.htconfig.php - echo "\$a->config['admin_email'] = '${MY_EMAIL_ADDRESS}';" >> $FRIENDICA_PATH/.htconfig.php - echo "\$a->config['system']['no_regfullname'] = true;" >> $FRIENDICA_PATH/.htconfig.php - echo "\$a->config['max_import_size'] = 200000;" >> $FRIENDICA_PATH/.htconfig.php - echo "\$a->config['system']['maximagesize'] = 800000;" >> $FRIENDICA_PATH/.htconfig.php - echo "\$a->config['php_path'] = '/usr/bin/php';" >> $FRIENDICA_PATH/.htconfig.php - echo "\$a->config['system']['directory'] = 'http://dir.friendi.ca';" >> $FRIENDICA_PATH/.htconfig.php - echo "\$a->config['system']['allowed_themes'] = 'quattro,vier,duepuntozero,smoothly';" >> $FRIENDICA_PATH/.htconfig.php - echo "\$a->config['system']['theme'] = 'vier';" >> $FRIENDICA_PATH/.htconfig.php - echo "\$a->config['system']['huburl'] = '[internal]';" >> $FRIENDICA_PATH/.htconfig.php - echo "\$a->config['system']['language'] = 'en';" >> $FRIENDICA_PATH/.htconfig.php - echo "\$a->config['system']['rino_encrypt'] = 2;" >> $FRIENDICA_PATH/.htconfig.php - echo "\$a->config['system']['allowed_link_protocols'] = array('mailto', 'cid');" >> $FRIENDICA_PATH/.htconfig.php - chown www-data:www-data $FRIENDICA_PATH/.htconfig.php - chmod 755 $FRIENDICA_PATH/.htconfig.php + { echo "\$a->config['sitename'] = \"Friendica\";"; + echo "\$a->config['register_policy'] = REGISTER_OPEN;"; + echo "\$a->config['register_text'] = '';"; + echo "\$a->config['admin_email'] = '${MY_EMAIL_ADDRESS}';"; + echo "\$a->config['system']['no_regfullname'] = true;"; + echo "\$a->config['max_import_size'] = 200000;"; + echo "\$a->config['system']['maximagesize'] = 800000;"; + echo "\$a->config['php_path'] = '/usr/bin/php';"; + echo "\$a->config['system']['directory'] = 'http://dir.friendi.ca';"; + echo "\$a->config['system']['allowed_themes'] = 'quattro,vier,duepuntozero,smoothly';"; + echo "\$a->config['system']['theme'] = 'vier';"; + echo "\$a->config['system']['huburl'] = '[internal]';"; + echo "\$a->config['system']['language'] = 'en';"; + echo "\$a->config['system']['rino_encrypt'] = 2;"; + echo "\$a->config['system']['allowed_link_protocols'] = array('mailto', 'cid');"; } >> "$FRIENDICA_PATH/.htconfig.php" + chown www-data:www-data "$FRIENDICA_PATH/.htconfig.php" + chmod 755 "$FRIENDICA_PATH/.htconfig.php" systemctl restart mariadb systemctl restart php7.0-fpm systemctl restart nginx systemctl restart cron - ${PROJECT_NAME}-addemail -u $MY_USERNAME -e "noreply@$FRIENDICA_DOMAIN_NAME" -g friendica --public no + "${PROJECT_NAME}-addemail" -u "$MY_USERNAME" -e "noreply@$FRIENDICA_DOMAIN_NAME" -g friendica --public no set_completion_param "friendica domain" "${FRIENDICA_DOMAIN_NAME}" APP_INSTALLED=1 diff --git a/src/freedombone-app-ghost b/src/freedombone-app-ghost index fa5fb464..e5008d93 100755 --- a/src/freedombone-app-ghost +++ b/src/freedombone-app-ghost @@ -48,14 +48,14 @@ ghost_variables=(GHOST_DOMAIN_NAME function ghost_bust { # kill the started ghost process - kill_pid=$(ps aux | grep "ghost run" | awk -F ' ' '{print $2}' | head -n 1) - kill -9 $kill_pid + kill_pid=$(pgrep "ghost run" | head -n 1) + kill -9 "$kill_pid" - kill_pid=$(ps aux | grep "ghost" | awk -F ' ' '{print $2}' | head -n 1) - kill -9 $kill_pid + kill_pid=$(pgrep "ghost" | head -n 1) + kill -9 "$kill_pid" - kill_pid=$(ps aux | grep "ghost" | awk -F ' ' '{print $2}' | head -n 1) - kill -9 $kill_pid + kill_pid=$(pgrep "ghost" | head -n 1) + kill -9 "$kill_pid" } function logging_on_ghost { @@ -77,9 +77,9 @@ function ghost_replace_jquery { sed -i "s|http://code.jquery.com/jquery.js|$curr_domain/jquery-${jquery_version}.js|g" current/node_modules/jsdom/README.md sed -i "s|https://code.jquery.com/jquery.js|$curr_domain/jquery-${jquery_version}.js|g" current/node_modules/jsdom/README.md - cd /var/www/${GHOST_DOMAIN_NAME}/htdocs/current - find ./ -type f -exec sed -i -e 's|https://code.jquery.com|$curr_domain|g' {} \; - find ./ -type f -exec sed -i -e 's|http://code.jquery.com|$curr_domain|g' {} \; + cd "/var/www/${GHOST_DOMAIN_NAME}/htdocs/current" || exit 3468368 + find ./ -type f -exec sed -i -e "s|https://code.jquery.com|$curr_domain|g" {} \; + find ./ -type f -exec sed -i -e "s|http://code.jquery.com|$curr_domain|g" {} \; } function ghost_rss_button { @@ -98,14 +98,14 @@ function ghost_remove_offsite_links { ghost_rss_button # remove google font links - cd /var/www/$GHOST_DOMAIN_NAME/htdocs/current - find ./ -type f -exec sed -i -e 's/fonts.googleapis.com/$curr_domain/g' {} \; + cd "/var/www/$GHOST_DOMAIN_NAME/htdocs/current" || exit 246872424 + find ./ -type f -exec sed -i -e "s/fonts.googleapis.com/$curr_domain/g" {} \; # copy jquery locally previous_jquery_version='1.12.0' jquery_version='1.12.4' if [ ! -f /var/www/$GHOST_DOMAIN_NAME/htdocs/jquery-${jquery_version}.js ]; then - cd /var/www/$GHOST_DOMAIN_NAME/htdocs + cd "/var/www/$GHOST_DOMAIN_NAME/htdocs" || exit 3468746824 wget https://code.jquery.com/jquery-${jquery_version}.js jquery_hash=$(sha256sum jquery-${jquery_version}.js | awk -F ' ' '{print $1}') if [[ "$jquery_hash" != '430f36f9b5f21aae8cc9dca6a81c4d3d84da5175eaedcf2fdc2c226302cb3575' ]]; then @@ -119,27 +119,27 @@ function ghost_remove_offsite_links { } function ghost_replace_proprietary_services { - replace_file=$1 + replace_file="$1" - sed -i 's|Twitter Profile|GNU Social Profile|g' $replace_file - sed -i 's|Twitter profile|GNU Social Profile|g' $replace_file - sed -i 's|Twitter Username|GNU Social Username|g' $replace_file - sed -i 's|twitter.com|quitter.se|g' $replace_file - sed -i 's|Facebook Page|Hubzilla Channel|g' $replace_file - sed -i 's|Facebook Profile|Hubzilla Channel|g' $replace_file - sed -i 's|Facebook profile|Hubzilla Channel|g' $replace_file - sed -i 's|www.facebook.com/username|hubzilladomain/username|g' $replace_file - sed -i 's|www.facebook.com/ghost|hubzilladomain/username|g' $replace_file - sed -i 's|www.facebook.com/testuser|hubzilladomain/username|g' $replace_file - sed -i 's|www.facebook.com/testing|hubzilladomain/username|g' $replace_file - sed -i 's|www.facebook.com/test|hubzilladomain/username|g' $replace_file - sed -i 's|www.facebook.com/yourUsername|hubzilladomain/username|g' $replace_file - sed -i 's|www.facebook.com/yourPage|hubzilladomain/username|g' $replace_file - sed -i 's|Facebook Username|Hubzilla Channel|g' $replace_file - sed -i 's|www.facebook.com|hubzilladomain|g' $replace_file - sed -i 's|facebook value|hubzilla value|g' $replace_file + sed -i 's|Twitter Profile|GNU Social Profile|g' "$replace_file" + sed -i 's|Twitter profile|GNU Social Profile|g' "$replace_file" + sed -i 's|Twitter Username|GNU Social Username|g' "$replace_file" + sed -i 's|twitter.com|quitter.se|g' "$replace_file" + sed -i 's|Facebook Page|Hubzilla Channel|g' "$replace_file" + sed -i 's|Facebook Profile|Hubzilla Channel|g' "$replace_file" + sed -i 's|Facebook profile|Hubzilla Channel|g' "$replace_file" + sed -i 's|www.facebook.com/username|hubzilladomain/username|g' "$replace_file" + sed -i 's|www.facebook.com/ghost|hubzilladomain/username|g' "$replace_file" + sed -i 's|www.facebook.com/testuser|hubzilladomain/username|g' "$replace_file" + sed -i 's|www.facebook.com/testing|hubzilladomain/username|g' "$replace_file" + sed -i 's|www.facebook.com/test|hubzilladomain/username|g' "$replace_file" + sed -i 's|www.facebook.com/yourUsername|hubzilladomain/username|g' "$replace_file" + sed -i 's|www.facebook.com/yourPage|hubzilladomain/username|g' "$replace_file" + sed -i 's|Facebook Username|Hubzilla Channel|g' "$replace_file" + sed -i 's|www.facebook.com|hubzilladomain|g' "$replace_file" + sed -i 's|facebook value|hubzilla value|g' "$replace_file" - sed -i '/