freedombone-app-gnusocial 41KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009
  1. #!/bin/bash
  2. #
  3. # .---. . .
  4. # | | |
  5. # |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
  6. # | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
  7. # ' ' --' --' -' - -' ' ' -' -' -' ' - --'
  8. #
  9. # Freedom in the Cloud
  10. #
  11. # gnusocial application
  12. #
  13. # License
  14. # =======
  15. #
  16. # Copyright (C) 2014-2016 Bob Mottram <bob@robotics.uk.to>
  17. #
  18. # This program is free software: you can redistribute it and/or modify
  19. # it under the terms of the GNU Affero General Public License as published by
  20. # the Free Software Foundation, either version 3 of the License, or
  21. # (at your option) any later version.
  22. #
  23. # This program is distributed in the hope that it will be useful,
  24. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  25. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  26. # GNU Affero General Public License for more details.
  27. #
  28. # You should have received a copy of the GNU Affero General Public License
  29. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  30. VARIANTS='full full-vim media'
  31. GNUSOCIAL_DOMAIN_NAME=
  32. GNUSOCIAL_CODE=
  33. GNUSOCIAL_ONION_PORT=8087
  34. GNUSOCIAL_REPO="https://git.gnu.io/gnu/gnu-social.git"
  35. GNUSOCIAL_COMMIT='c67b89e56bf0f90730a9e22beca7e1bd41fc26c3'
  36. GNUSOCIAL_ADMIN_PASSWORD=
  37. GNUSOCIAL_THEME_REPO="https://git.gnu.io/h2p/Qvitter.git"
  38. GNUSOCIAL_THEME_COMMIT='34510bcf37c727f91afad789fb0a531a45171ccf'
  39. GNUSOCIAL_WELCOME_MESSAGE=$'<h1>Welcome to GNU Social – a federated social metwork</h1><p>Another Freedombone site</p>'
  40. GNUSOCIAL_BACKGROUND_IMAGE_URL=
  41. GNUSOCIAL_MARKDOWN_REPO="https://git.gnu.io/chimo/markdown.git"
  42. GNUSOCIAL_MARKDOWN_COMMIT='03c53942f94b3376f0946e6e1fe566cc21ccf232'
  43. # Sharings plugin for gnusocial
  44. SHARINGS_REPO="http://git.lasindias.club/bashrc/Sharings"
  45. SHARINGS_COMMIT='d5c6c7f855d9afff9086c09ea706f38c859bc0d4'
  46. SHARINGS_THEME_REPO="http://git.lasindias.club/manuel/SharingsTheme"
  47. SHARINGS_THEME_COMMIT='7106c7ef03'
  48. # NSFW plugin
  49. GNUSOCIAL_NSFW_REPO="https://gitgud.io/ShitposterClub/SensitiveContent"
  50. GNUSOCIAL_NSFW_COMMIT='a096bbe0cfae9a9b177682920ffb58d32a48e136'
  51. # script which causes old posts to expire
  52. gnusocial_expire_script=/usr/bin/gnusocial-expire
  53. gnusocial_variables=(GNUSOCIAL_COMMIT
  54. ONION_ONLY
  55. GNUSOCIAL_DOMAIN_NAME
  56. GNUSOCIAL_CODE
  57. GNUSOCIAL_WELCOME_MESSAGE
  58. GNUSOCIAL_BACKGROUND_IMAGE_URL
  59. DDNS_PROVIDER
  60. GNUSOCIAL_MARKDOWN_REPO
  61. GNUSOCIAL_MARKDOWN_COMMIT
  62. SHARINGS_REPO
  63. SHARINGS_COMMIT
  64. SHARINGS_THEME_REPO
  65. SHARINGS_THEME_COMMIT
  66. MY_USERNAME)
  67. function remove_user_gnusocial {
  68. remove_username="$1"
  69. function_check get_completion_param
  70. GNUSOCIAL_DOMAIN_NAME=$(get_completion_param "gnusocial domain")
  71. if [ -d /var/www/$GNUSOCIAL_DOMAIN_NAME ]; then
  72. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs
  73. php scripts/deleteprofile.php -n $remove_username -y
  74. fi
  75. }
  76. function add_user_gnusocial {
  77. new_username="$1"
  78. new_user_password="$2"
  79. GNUSOCIAL_DOMAIN_NAME=$(get_completion_param "gnusocial domain")
  80. if [ -d /var/www/${GNUSOCIAL_DOMAIN_NAME}/htdocs ]; then
  81. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs
  82. php scripts/registeruser.php -n $new_username -w "$new_user_password" -e "$new_username@$HOSTNAME"
  83. ${PROJECT_NAME}-addemail -u $new_username -e "noreply@$GNUSOCIAL_DOMAIN_NAME" -g gnusocial --public no
  84. echo '0'
  85. else
  86. echo '1'
  87. fi
  88. }
  89. function install_interactive_gnusocial {
  90. if [ ! $ONION_ONLY ]; then
  91. ONION_ONLY='no'
  92. fi
  93. if [[ $ONION_ONLY != "no" ]]; then
  94. GNUSOCIAL_DOMAIN_NAME='gnusocial.local'
  95. else
  96. GNUSOCIAL_DETAILS_COMPLETE=
  97. while [ ! $GNUSOCIAL_DETAILS_COMPLETE ]
  98. do
  99. data=$(tempfile 2>/dev/null)
  100. trap "rm -f $data" 0 1 2 5 15
  101. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  102. dialog --backtitle $"Freedombone Configuration" \
  103. --title $"GNU Social Configuration" \
  104. --form $"\nPlease enter your GNU Social details. Welcome message and background image URL can be left blank.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 16 65 4 \
  105. $"Domain:" 1 1 "$(grep 'GNUSOCIAL_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \
  106. $"Welcome Message:" 2 1 "$(grep '$GNUSOCIAL_WELCOME_MESSAGE' temp.cfg | awk -F '=' '{print $2}')" 2 25 255 255 \
  107. $"Background image URL:" 3 1 "$(grep '$GNUSOCIAL_BACKGROUND_IMAGE_URL' temp.cfg | awk -F '=' '{print $2}')" 3 25 255 255 \
  108. $"Code:" 4 1 "$(grep 'GNUSOCIAL_CODE' temp.cfg | awk -F '=' '{print $2}')" 4 25 33 255 \
  109. 2> $data
  110. else
  111. dialog --backtitle $"Freedombone Configuration" \
  112. --title $"GNU Social Configuration" \
  113. --form $"\nPlease enter your GNU Social details. Welcome message and background image URL can be left blank.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 16 65 4 \
  114. $"Domain:" 1 1 "$(grep 'GNUSOCIAL_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \
  115. $"Welcome Message:" 2 1 "$(grep '$GNUSOCIAL_WELCOME_MESSAGE' temp.cfg | awk -F '=' '{print $2}')" 2 25 255 255 \
  116. $"Background image URL:" 3 1 "$(grep '$GNUSOCIAL_BACKGROUND_IMAGE_URL' temp.cfg | awk -F '=' '{print $2}')" 3 25 255 255 \
  117. 2> $data
  118. fi
  119. sel=$?
  120. case $sel in
  121. 1) exit 1;;
  122. 255) exit 1;;
  123. esac
  124. GNUSOCIAL_DOMAIN_NAME=$(cat $data | sed -n 1p)
  125. welcome_msg=$(cat $data | sed -n 2p)
  126. if [ ${#welcome_msg} -gt 1 ]; then
  127. GNUSOCIAL_WELCOME_MESSAGE=$welcome_msg
  128. fi
  129. img_url=$(cat $data | sed -n 3p)
  130. if [ ${#img_url} -gt 1 ]; then
  131. GNUSOCIAL_BACKGROUND_IMAGE_URL=$img_url
  132. fi
  133. if [ $GNUSOCIAL_DOMAIN_NAME ]; then
  134. if [[ $GNUSOCIAL_DOMAIN_NAME == "$HUBZILLA_DOMAIN_NAME" ]]; then
  135. GNUSOCIAL_DOMAIN_NAME=""
  136. fi
  137. TEST_DOMAIN_NAME=$GNUSOCIAL_DOMAIN_NAME
  138. validate_domain_name
  139. if [[ $TEST_DOMAIN_NAME != $GNUSOCIAL_DOMAIN_NAME ]]; then
  140. GNUSOCIAL_DOMAIN_NAME=
  141. dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  142. else
  143. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  144. GNUSOCIAL_CODE=$(cat $data | sed -n 4p)
  145. validate_freedns_code "$GNUSOCIAL_CODE"
  146. if [ ! $VALID_CODE ]; then
  147. GNUSOCIAL_DOMAIN_NAME=
  148. fi
  149. fi
  150. fi
  151. fi
  152. if [ $GNUSOCIAL_DOMAIN_NAME ]; then
  153. GNUSOCIAL_DETAILS_COMPLETE="yes"
  154. fi
  155. done
  156. # save the results in the config file
  157. write_config_param "GNUSOCIAL_CODE" "$GNUSOCIAL_CODE"
  158. write_config_param "GNUSOCIAL_WELCOME_MESSAGE" "$GNUSOCIAL_WELCOME_MESSAGE"
  159. write_config_param "GNUSOCIAL_BACKGROUND_IMAGE_URL" "$GNUSOCIAL_BACKGROUND_IMAGE_URL"
  160. fi
  161. write_config_param "GNUSOCIAL_DOMAIN_NAME" "$GNUSOCIAL_DOMAIN_NAME"
  162. APP_INSTALLED=1
  163. }
  164. function change_password_gnusocial {
  165. echo -n ''
  166. }
  167. function get_mariadb_gnusocial_admin_password {
  168. if [ -f /home/$MY_USERNAME/README ]; then
  169. if grep -q "MariaDB gnusocial admin password" /home/$MY_USERNAME/README; then
  170. GNUSOCIAL_ADMIN_PASSWORD=$(cat /home/$MY_USERNAME/README | grep "MariaDB gnusocial admin password" | awk -F ':' '{print $2}' | sed 's/^ *//')
  171. fi
  172. if grep -q "gnusocial administrator password" /home/$MY_USERNAME/README; then
  173. GNUSOCIAL_ADMIN_PASSWORD=$(cat /home/$MY_USERNAME/README | grep "gnusocial administrator password" | awk -F ':' '{print $2}' | sed 's/^ *//')
  174. fi
  175. fi
  176. }
  177. function gnusocial_create_database {
  178. function_check get_mariadb_gnusocial_admin_password
  179. get_mariadb_gnusocial_admin_password
  180. if [ ! $GNUSOCIAL_ADMIN_PASSWORD ]; then
  181. if [ -f $IMAGE_PASSWORD_FILE ]; then
  182. GNUSOCIAL_ADMIN_PASSWORD="$(printf `cat $IMAGE_PASSWORD_FILE`)"
  183. else
  184. GNUSOCIAL_ADMIN_PASSWORD="$(create_password ${MINIMUM_PASSWORD_LENGTH})"
  185. fi
  186. fi
  187. if [ ! $GNUSOCIAL_ADMIN_PASSWORD ]; then
  188. return
  189. fi
  190. function_check create_database
  191. create_database gnusocial "$GNUSOCIAL_ADMIN_PASSWORD" $MY_USERNAME
  192. }
  193. function gnusocial_running_script {
  194. if [[ $(is_completed "install_gnusocial") == "0" ]]; then
  195. return
  196. fi
  197. # check that the daemon is running
  198. echo '#!/bin/bash' > /etc/cron.hourly/gnusocial-daemons
  199. echo 'daemon_lines=$(ps aux | grep "scripts/queuedaemon.php" | grep "/var/www")' >> /etc/cron.hourly/gnusocial-daemons
  200. echo 'if [[ $daemon_lines != *"/var/www/"* ]]; then' >> /etc/cron.hourly/gnusocial-daemons
  201. echo " ADMIN_USER=\$(cat $COMPLETION_FILE | grep 'Admin user' | awk -F ':' '{print \$2}')" >> /etc/cron.hourly/gnusocial-daemons
  202. echo ' MY_EMAIL_ADDRESS=$ADMIN_USER@$HOSTNAME' >> /etc/cron.hourly/gnusocial-daemons
  203. echo ' echo "Restarting GNU Social daemons" | mail -s "GNU Social daemons not found" $MY_EMAIL_ADDRESS' >> /etc/cron.hourly/gnusocial-daemons
  204. echo " cd /var/www/${GNUSOCIAL_DOMAIN_NAME}/htdocs" >> /etc/cron.hourly/gnusocial-daemons
  205. echo ' scripts/startdaemons.sh' >> /etc/cron.hourly/gnusocial-daemons
  206. echo 'fi' >> /etc/cron.hourly/gnusocial-daemons
  207. chmod +x /etc/cron.hourly/gnusocial-daemons
  208. }
  209. function reconfigure_gnusocial {
  210. echo -n ''
  211. }
  212. function upgrade_gnusocial {
  213. if grep -q "gnusocial domain" $COMPLETION_FILE; then
  214. GNUSOCIAL_DOMAIN_NAME=$(get_completion_param "gnusocial domain")
  215. fi
  216. # update to the next commit
  217. function_check set_repo_commit
  218. set_repo_commit /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs "gnusocial commit" "$GNUSOCIAL_COMMIT" $GNUSOCIAL_REPO
  219. function_check gnusocial_running_script
  220. gnusocial_running_script
  221. }
  222. function backup_local_gnusocial {
  223. GNUSOCIAL_DOMAIN_NAME='gnusocial'
  224. if grep -q "gnusocial domain" $COMPLETION_FILE; then
  225. GNUSOCIAL_DOMAIN_NAME=$(get_completion_param "gnusocial domain")
  226. fi
  227. source_directory=/var/www/${GNUSOCIAL_DOMAIN_NAME}/htdocs
  228. if [ -d $source_directory ]; then
  229. dest_directory=gnusocial
  230. echo $"Backing up $source_directory to $dest_directory"
  231. function_check suspend_site
  232. suspend_site ${GNUSOCIAL_DOMAIN_NAME}
  233. function_check backup_directory_to_usb
  234. backup_directory_to_usb $source_directory $dest_directory
  235. function_check backup_database_to_usb
  236. backup_database_to_usb gnusocial
  237. function_check restart_site
  238. restart_site
  239. echo $"Backup to $dest_directory complete"
  240. fi
  241. }
  242. function restore_local_gnusocial {
  243. if ! grep -q "gnusocial domain" $COMPLETION_FILE; then
  244. return
  245. fi
  246. GNUSOCIAL_DOMAIN_NAME=$(get_completion_param "gnusocial domain")
  247. if [ $GNUSOCIAL_DOMAIN_NAME ]; then
  248. echo $"Restoring gnusocial"
  249. temp_restore_dir=/root/tempgnusocial
  250. gnusocial_dir=/var/www/${GNUSOCIAL_DOMAIN_NAME}/htdocs
  251. # stop the daemons
  252. cd $gnusocial_dir
  253. scripts/stopdaemons.sh
  254. function_check gnusocial_create_database
  255. gnusocial_create_database
  256. restore_database gnusocial ${GNUSOCIAL_DOMAIN_NAME}
  257. if [ -d $temp_restore_dir ]; then
  258. rm -rf $temp_restore_dir
  259. fi
  260. # start the daemons
  261. cd $gnusocial_dir
  262. scripts/startdaemons.sh
  263. echo $"Restore of gnusocial complete"
  264. fi
  265. }
  266. function backup_remote_gnusocial {
  267. if grep -q "gnusocial domain" $COMPLETION_FILE; then
  268. GNUSOCIAL_DOMAIN_NAME=$(get_completion_param "gnusocial domain")
  269. temp_backup_dir=/var/www/${GNUSOCIAL_DOMAIN_NAME}/htdocs
  270. if [ -d $temp_backup_dir ]; then
  271. function_check suspend_site
  272. suspend_site ${GNUSOCIAL_DOMAIN_NAME}
  273. function_check backup_database_to_friend
  274. backup_database_to_friend gnusocial
  275. echo $"Backing up GNU social installation"
  276. function_check backup_directory_to_friend
  277. backup_directory_to_friend $temp_backup_dir gnusocial
  278. function_check restart_site
  279. restart_site
  280. else
  281. echo $"gnusocial domain specified but not found in ${temp_backup_dir}"
  282. fi
  283. fi
  284. }
  285. function restore_remote_gnusocial {
  286. if grep -q "gnusocial domain" $COMPLETION_FILE; then
  287. echo $"Restoring gnusocial"
  288. GNUSOCIAL_DOMAIN_NAME=$(get_completion_param "gnusocial domain")
  289. # stop the daemons
  290. cd /var/www/${GNUSOCIAL_DOMAIN_NAME}/htdocs
  291. scripts/stopdaemons.sh
  292. function_check gnusocial_create_database
  293. gnusocial_create_database
  294. function_check restore_database_from_friend
  295. restore_database_from_friend gnusocial ${GNUSOCIAL_DOMAIN_NAME}
  296. if [ -d /root/tempgnusocial ]; then
  297. rm -rf /root/tempgnusocial
  298. fi
  299. # start the daemons
  300. cd /var/www/${GNUSOCIAL_DOMAIN_NAME}/htdocs
  301. scripts/startdaemons.sh
  302. echo $"Restore of gnusocial complete"
  303. fi
  304. }
  305. function remove_gnusocial {
  306. if [ ${#GNUSOCIAL_DOMAIN_NAME} -eq 0 ]; then
  307. return
  308. fi
  309. read_config_param "GNUSOCIAL_DOMAIN_NAME"
  310. read_config_param "MY_USERNAME"
  311. echo "Removing $GNUSOCIAL_DOMAIN_NAME"
  312. nginx_dissite $GNUSOCIAL_DOMAIN_NAME
  313. if [ -d /var/www/$GNUSOCIAL_DOMAIN_NAME ]; then
  314. rm -rf /var/www/$GNUSOCIAL_DOMAIN_NAME
  315. fi
  316. if [ -f /etc/nginx/sites-available/$GNUSOCIAL_DOMAIN_NAME ]; then
  317. rm /etc/nginx/sites-available/$GNUSOCIAL_DOMAIN_NAME
  318. fi
  319. function_check drop_database
  320. drop_database gnusocial
  321. function_check remove_onion_service
  322. remove_onion_service gnusocial ${GNUSOCIAL_ONION_PORT}
  323. if grep -q "gnusocial" /etc/crontab; then
  324. sed -i "/gnusocial/d" /etc/crontab
  325. fi
  326. remove_app gnusocial
  327. remove_completion_param install_gnusocial
  328. sed -i '/gnusocial /d' $COMPLETION_FILE
  329. }
  330. function install_gnusocial_main {
  331. if [ ! $GNUSOCIAL_DOMAIN_NAME ]; then
  332. echo $'No domain name was given for gnusocial'
  333. exit 7359
  334. fi
  335. if [[ $(app_is_installed gnusocial_main) == "1" ]]; then
  336. return
  337. fi
  338. function_check gnusocial_running_script
  339. gnusocial_running_script
  340. function_check install_mariadb
  341. install_mariadb
  342. function_check get_mariadb_password
  343. get_mariadb_password
  344. function_check repair_databases_script
  345. repair_databases_script
  346. apt-get -y install php-gettext php5-curl php5-gd php5-mysql git curl php-xml-parser
  347. apt-get -y install php5-memcached php5-intl
  348. if [ ! -d /var/www/$GNUSOCIAL_DOMAIN_NAME ]; then
  349. mkdir /var/www/$GNUSOCIAL_DOMAIN_NAME
  350. fi
  351. if [ ! -d /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs ]; then
  352. function_check git_clone
  353. git_clone $GNUSOCIAL_REPO /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs
  354. if [ ! -d /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs ]; then
  355. echo $'Unable to clone gnusocial repo'
  356. exit 87525
  357. fi
  358. fi
  359. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs
  360. git checkout $GNUSOCIAL_COMMIT -b $GNUSOCIAL_COMMIT
  361. set_completion_param "gnusocial commit" "$GNUSOCIAL_COMMIT"
  362. chmod a+w /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs
  363. chown www-data:www-data /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs
  364. chmod +x /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/scripts/maildaemon.php
  365. function_check gnusocial_create_database
  366. gnusocial_create_database
  367. if [ ! -f "/etc/aliases" ]; then
  368. touch /etc/aliases
  369. fi
  370. if ! grep -q "www-data: root" /etc/aliases; then
  371. echo 'www-data: root' >> /etc/aliases
  372. fi
  373. if ! grep -q "/var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/scripts/maildaemon.php" /etc/aliases; then
  374. echo "*: /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/scripts/maildaemon.php" >> /etc/aliases
  375. fi
  376. function_check add_ddns_domain
  377. add_ddns_domain $GNUSOCIAL_DOMAIN_NAME
  378. gnusocial_nginx_site=/etc/nginx/sites-available/$GNUSOCIAL_DOMAIN_NAME
  379. if [[ $ONION_ONLY == "no" ]]; then
  380. function_check nginx_http_redirect
  381. nginx_http_redirect $GNUSOCIAL_DOMAIN_NAME
  382. echo 'server {' >> $gnusocial_nginx_site
  383. echo ' listen 443 ssl;' >> $gnusocial_nginx_site
  384. echo " server_name $GNUSOCIAL_DOMAIN_NAME;" >> $gnusocial_nginx_site
  385. echo '' >> $gnusocial_nginx_site
  386. echo ' # Security' >> $gnusocial_nginx_site
  387. function_check nginx_ssl
  388. nginx_ssl $GNUSOCIAL_DOMAIN_NAME
  389. function_check nginx_disable_sniffing
  390. nginx_disable_sniffing $GNUSOCIAL_DOMAIN_NAME
  391. echo ' add_header Strict-Transport-Security max-age=15768000;' >> $gnusocial_nginx_site
  392. echo '' >> $gnusocial_nginx_site
  393. echo ' # Logs' >> $gnusocial_nginx_site
  394. echo ' access_log off;' >> $gnusocial_nginx_site
  395. echo ' error_log off;' >> $gnusocial_nginx_site
  396. echo '' >> $gnusocial_nginx_site
  397. echo ' # Root' >> $gnusocial_nginx_site
  398. echo " root /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs;" >> $gnusocial_nginx_site
  399. echo '' >> $gnusocial_nginx_site
  400. echo ' # Index' >> $gnusocial_nginx_site
  401. echo ' index index.php;' >> $gnusocial_nginx_site
  402. echo '' >> $gnusocial_nginx_site
  403. echo ' # PHP' >> $gnusocial_nginx_site
  404. echo ' location ~ \.php {' >> $gnusocial_nginx_site
  405. echo ' include snippets/fastcgi-php.conf;' >> $gnusocial_nginx_site
  406. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> $gnusocial_nginx_site
  407. echo ' }' >> $gnusocial_nginx_site
  408. echo '' >> $gnusocial_nginx_site
  409. echo ' # Location' >> $gnusocial_nginx_site
  410. echo ' location / {' >> $gnusocial_nginx_site
  411. function_check nginx_limits
  412. nginx_limits $GNUSOCIAL_DOMAIN_NAME '15m'
  413. echo ' try_files $uri $uri/ @gnusocial;' >> $gnusocial_nginx_site
  414. echo ' }' >> $gnusocial_nginx_site
  415. echo '' >> $gnusocial_nginx_site
  416. echo ' # Fancy URLs' >> $gnusocial_nginx_site
  417. echo ' location @gnusocial {' >> $gnusocial_nginx_site
  418. echo ' rewrite ^(.*)$ /index.php?p=$1 last;' >> $gnusocial_nginx_site
  419. echo ' }' >> $gnusocial_nginx_site
  420. echo '' >> $gnusocial_nginx_site
  421. echo ' # Restrict access that is unnecessary anyway' >> $gnusocial_nginx_site
  422. echo ' location ~ /\.(ht|git) {' >> $gnusocial_nginx_site
  423. echo ' deny all;' >> $gnusocial_nginx_site
  424. echo ' }' >> $gnusocial_nginx_site
  425. echo '}' >> $gnusocial_nginx_site
  426. else
  427. echo -n '' > $gnusocial_nginx_site
  428. fi
  429. echo 'server {' >> $gnusocial_nginx_site
  430. echo " listen 127.0.0.1:$GNUSOCIAL_ONION_PORT default_server;" >> $gnusocial_nginx_site
  431. echo " server_name $GNUSOCIAL_DOMAIN_NAME;" >> $gnusocial_nginx_site
  432. echo '' >> $gnusocial_nginx_site
  433. function_check nginx_disable_sniffing
  434. nginx_disable_sniffing $GNUSOCIAL_DOMAIN_NAME
  435. echo '' >> $gnusocial_nginx_site
  436. echo ' # Logs' >> $gnusocial_nginx_site
  437. echo ' access_log off;' >> $gnusocial_nginx_site
  438. echo ' error_log off;' >> $gnusocial_nginx_site
  439. echo '' >> $gnusocial_nginx_site
  440. echo ' # Root' >> $gnusocial_nginx_site
  441. echo " root /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs;" >> $gnusocial_nginx_site
  442. echo '' >> $gnusocial_nginx_site
  443. echo ' # Index' >> $gnusocial_nginx_site
  444. echo ' index index.php;' >> $gnusocial_nginx_site
  445. echo '' >> $gnusocial_nginx_site
  446. echo ' # PHP' >> $gnusocial_nginx_site
  447. echo ' location ~ \.php {' >> $gnusocial_nginx_site
  448. echo ' include snippets/fastcgi-php.conf;' >> $gnusocial_nginx_site
  449. echo ' fastcgi_pass unix:/var/run/php5-fpm.sock;' >> $gnusocial_nginx_site
  450. echo ' }' >> $gnusocial_nginx_site
  451. echo '' >> $gnusocial_nginx_site
  452. echo ' # Location' >> $gnusocial_nginx_site
  453. echo ' location / {' >> $gnusocial_nginx_site
  454. function_check nginx_limits
  455. nginx_limits $GNUSOCIAL_DOMAIN_NAME '15m'
  456. echo ' try_files $uri $uri/ @gnusocial;' >> $gnusocial_nginx_site
  457. echo ' }' >> $gnusocial_nginx_site
  458. echo '' >> $gnusocial_nginx_site
  459. echo ' # Fancy URLs' >> $gnusocial_nginx_site
  460. echo ' location @gnusocial {' >> $gnusocial_nginx_site
  461. echo ' rewrite ^(.*)$ /index.php?p=$1 last;' >> $gnusocial_nginx_site
  462. echo ' }' >> $gnusocial_nginx_site
  463. echo '' >> $gnusocial_nginx_site
  464. echo ' # Restrict access that is unnecessary anyway' >> $gnusocial_nginx_site
  465. echo ' location ~ /\.(ht|git) {' >> $gnusocial_nginx_site
  466. echo ' deny all;' >> $gnusocial_nginx_site
  467. echo ' }' >> $gnusocial_nginx_site
  468. echo '}' >> $gnusocial_nginx_site
  469. function_check configure_php
  470. configure_php
  471. function_check create_site_certificate
  472. create_site_certificate $GNUSOCIAL_DOMAIN_NAME 'yes'
  473. # Ensure that the database gets backed up locally, if remote
  474. # backups are not being used
  475. function_check backup_databases_script_header
  476. backup_databases_script_header
  477. function_check backup_database_local
  478. backup_database_local gnusocial
  479. function_check nginx_ensite
  480. nginx_ensite $GNUSOCIAL_DOMAIN_NAME
  481. # NOTE: For the typical case always enable SSL and only
  482. # disable it if in onion only mode. This is due to complexities
  483. # with the way URLs are generated by gnusocial
  484. gnusocial_ssl='always'
  485. if [[ $ONION_ONLY != 'no' ]]; then
  486. gnusocial_ssl='never'
  487. fi
  488. GNUSOCIAL_ONION_HOSTNAME=$(add_onion_service gnusocial 80 ${GNUSOCIAL_ONION_PORT})
  489. GNUSOCIAL_SERVER=${GNUSOCIAL_DOMAIN_NAME}
  490. if [[ $ONION_ONLY != 'no' ]]; then
  491. GNUSOCIAL_SERVER=${GNUSOCIAL_ONION_HOSTNAME}
  492. fi
  493. # Create the configuration
  494. gnusocial_installer=/var/www/${GNUSOCIAL_DOMAIN_NAME}/htdocs/scripts/install_cli.php
  495. if [ ! -f $gnusocial_installer ]; then
  496. echo $'No gnusocial commandline installer found'
  497. exit 53026
  498. fi
  499. ${gnusocial_installer} --server "${GNUSOCIAL_SERVER}" \
  500. --host="localhost" --database="gnusocial" \
  501. --dbtype=mysql --username="root" -v \
  502. --password="$MARIADB_PASSWORD" \
  503. --sitename=$"GNU Social" --fancy='yes' \
  504. --admin-nick="$MY_USERNAME" \
  505. --admin-pass="$GNUSOCIAL_ADMIN_PASSWORD" \
  506. --site-profile="community" \
  507. --ssl=${gnusocial_ssl}
  508. # There can be a lot of warnings here so the return value check is disabled
  509. #if [ ! "$?" = "0" ]; then
  510. # # failed to install
  511. # echo $'Could not install GNU Social'
  512. # exit 72357
  513. #fi
  514. # check gnusocial has a config file
  515. gnusocial_config_file=/var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/config.php
  516. if [ ! -f $gnusocial_config_file ]; then
  517. echo $'Gnusocial config.php not found'
  518. exit 87586
  519. fi
  520. # Some useful settings
  521. if ! grep -q "Recommended GNU social settings" $gnusocial_config_file; then
  522. echo "" >> $gnusocial_config_file
  523. echo "// Recommended GNU social settings" >> $gnusocial_config_file
  524. echo "\$config['thumbnail']['maxsize'] = 3000;" >> $gnusocial_config_file
  525. echo "\$config['profile']['delete'] = true;" >> $gnusocial_config_file
  526. echo "\$config['profile']['changenick'] = true;" >> $gnusocial_config_file
  527. echo "\$config['public']['localonly'] = false;" >> $gnusocial_config_file
  528. echo "addPlugin('StoreRemoteMedia');" >> $gnusocial_config_file
  529. echo "\$config['queue']['enabled'] = true;" >> $gnusocial_config_file
  530. echo "\$config['queue']['daemon'] = true;" >> $gnusocial_config_file
  531. echo "\$config['ostatus']['hub_retries'] = 3;" >> $gnusocial_config_file
  532. fi
  533. # This improves performance
  534. sed -i "s|//\$config\['db'\]\['schemacheck'\].*|\$config\['db'\]\['schemacheck'\] = 'script';|g" $gnusocial_config_file
  535. systemctl restart php5-fpm
  536. systemctl restart nginx
  537. ${PROJECT_NAME}-addemail -u $MY_USERNAME -e "noreply@$GNUSOCIAL_DOMAIN_NAME" -g gnusocial --public no
  538. # some post-install instructions for the user
  539. if ! grep -q $"Gnusocial administrator" /home/$MY_USERNAME/README; then
  540. echo '' >> /home/$MY_USERNAME/README
  541. echo '' >> /home/$MY_USERNAME/README
  542. echo $'Gnusocial' >> /home/$MY_USERNAME/README
  543. echo '=========' >> /home/$MY_USERNAME/README
  544. echo $"Gnusocial administrator nickname: $MY_USERNAME" >> /home/$MY_USERNAME/README
  545. echo $"Gnusocial administrator password: $GNUSOCIAL_ADMIN_PASSWORD" >> /home/$MY_USERNAME/README
  546. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  547. chmod 600 /home/$MY_USERNAME/README
  548. else
  549. if [ -f /home/$MY_USERNAME/README ]; then
  550. sed -i "s|Gnusocial administrator password.*|Gnusocial administrator password: $GNUSOCIAL_ADMIN_PASSWORD|g" /home/$MY_USERNAME/README
  551. fi
  552. fi
  553. if ! grep -q "Gnusocial onion domain" /home/$MY_USERNAME/README; then
  554. echo $"Gnusocial onion domain: ${GNUSOCIAL_ONION_HOSTNAME}" >> /home/$MY_USERNAME/README
  555. echo '' >> /home/$MY_USERNAME/README
  556. chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/README
  557. chmod 600 /home/$MY_USERNAME/README
  558. else
  559. if [ -f /home/$MY_USERNAME/README ]; then
  560. sed -i "s|Gnusocial onion domain.*|Gnusocial onion domain: ${GNUSOCIAL_ONION_HOSTNAME}|g" /home/$MY_USERNAME/README
  561. fi
  562. fi
  563. set_completion_param "gnusocial domain" "$GNUSOCIAL_DOMAIN_NAME"
  564. install_completed gnusocial_main
  565. }
  566. function install_gnusocial_plugin_sharings {
  567. if [ ! -d /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins ]; then
  568. echo $'No local/plugins directory found for the gnusocial'
  569. exit 72945
  570. fi
  571. apt-get -y install liblocale-msgfmt-perl gettext
  572. # update to the next commit
  573. function_check set_repo_commit
  574. set_repo_commit /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins "gnusocial sharings plugin commit" "$SHARINGS_COMMIT" $SHARINGS_REPO
  575. if [[ $(app_is_installed gnusocial_plugin_sharings) == "1" ]]; then
  576. return
  577. fi
  578. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins
  579. function_check git_clone
  580. git_clone $SHARINGS_REPO Sharings
  581. if [ ! -d /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins/Sharings ]; then
  582. echo $'Unable to clone gnusocial sharings plugin'
  583. exit 36738
  584. fi
  585. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins/Sharings
  586. git stash
  587. git checkout master
  588. git branch -D $SHARINGS_COMMIT
  589. git checkout $SHARINGS_COMMIT -b $SHARINGS_COMMIT
  590. # enable the plugin
  591. if ! grep -q "addPlugin('Sharings');" /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/config.php; then
  592. echo "addPlugin('Sharings');" >> /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/config.php
  593. fi
  594. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs
  595. php scripts/checkschema.php
  596. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins/Sharings
  597. php scripts/seedsharings.php
  598. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs
  599. php scripts/checkschema.php
  600. # Languages
  601. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins/Sharings/locale/en/LC_MESSAGES
  602. msgfmt -o Sharings.mo Sharings.po
  603. if [ ! -f Sharings.po ]; then
  604. echo $'English translations for gnusocial sharings plugin were not created'
  605. exit 84352
  606. fi
  607. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins/Sharings/locale/en_GB/LC_MESSAGES
  608. msgfmt -o Sharings.mo Sharings.po
  609. if [ ! -f Sharings.po ]; then
  610. echo $'English (GB) translations for gnusocial sharings plugin were not created'
  611. exit 84352
  612. fi
  613. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins/Sharings/locale/en_US/LC_MESSAGES
  614. msgfmt -o Sharings.mo Sharings.po
  615. if [ ! -f Sharings.po ]; then
  616. echo $'English (US) translations for gnusocial sharings plugin were not created'
  617. exit 84352
  618. fi
  619. chown -R www-data:www-data /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs
  620. set_completion_param gnusocial "sharings plugin commit" "$SHARINGS_COMMIT"
  621. install_completed gnusocial_plugin_sharings
  622. }
  623. function install_gnusocial_plugin_sharings_theme {
  624. if [ ! -d /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins ]; then
  625. echo $'No local/plugins directory found for the gnusocial'
  626. exit 74458
  627. fi
  628. # update to the next commit
  629. function_check set_repo_commit
  630. set_repo_commit /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins "gnusocial sharings theme plugin commit" "$SHARINGS_THEME_COMMIT" $SHARINGS_THEME_REPO
  631. if [[ $(app_is_installed gnusocial_plugin_sharings_theme) == "1" ]]; then
  632. return
  633. fi
  634. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins
  635. function_check git_clone
  636. git_clone $SHARINGS_THEME_REPO SharingsTheme
  637. if [ ! -d /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins/SharingsTheme ]; then
  638. echo $'Unable to clone gnusocial sharings plugin theme'
  639. exit 639253
  640. fi
  641. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins/SharingsTheme
  642. git stash
  643. git checkout master
  644. git branch -D $SHARINGS_THEME_COMMIT
  645. git checkout $SHARINGS_THEME_COMMIT -b $SHARINGS_THEME_COMMIT
  646. # enable the plugin
  647. if ! grep -q "addPlugin('SharingsTheme');" /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/config.php; then
  648. echo "addPlugin('SharingsTheme');" >> /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/config.php
  649. fi
  650. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs
  651. php scripts/checkschema.php
  652. chown -R www-data:www-data /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs
  653. set_completion_param "gnusocial sharings plugin theme commit" "$SHARINGS_THEME_COMMIT"
  654. install_completed gnusocial_plugin_sharings_theme
  655. }
  656. function expire_gnusocial_posts {
  657. # To prevent the database size from growing endlessly this script expires posts
  658. # after a number of months
  659. if [ ! -d /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs ]; then
  660. return
  661. fi
  662. echo '<?php' > $gnusocial_expire_script
  663. echo '' >> $gnusocial_expire_script
  664. echo '// gnusocial post expiry script, based on StatExpire by Tony Baldwin' >> $gnusocial_expire_script
  665. echo '// https://github.com/tonybaldwin/statexpire' >> $gnusocial_expire_script
  666. echo '' >> $gnusocial_expire_script
  667. echo '$oldate=date(("Y-m-d"), strtotime("-3 months"));' >> $gnusocial_expire_script
  668. echo '$username="root";' >> $gnusocial_expire_script
  669. echo "\$password=trim(file_get_contents(\"$DATABASE_PASSWORD_FILE\"));" >> $gnusocial_expire_script
  670. echo '$database="gnusocial";' >> $gnusocial_expire_script
  671. echo '' >> $gnusocial_expire_script
  672. echo 'if (!$link = mysql_connect("localhost", $username, $password)) {' >> $gnusocial_expire_script
  673. echo ' echo "Could not connect to mariadb";' >> $gnusocial_expire_script
  674. echo ' exit;' >> $gnusocial_expire_script
  675. echo '}' >> $gnusocial_expire_script
  676. echo '' >> $gnusocial_expire_script
  677. echo 'if (!mysql_select_db($database, $link)) {' >> $gnusocial_expire_script
  678. echo ' echo "Could not select gnusocial database";' >> $gnusocial_expire_script
  679. echo ' exit;' >> $gnusocial_expire_script
  680. echo '}' >> $gnusocial_expire_script
  681. echo '' >> $gnusocial_expire_script
  682. echo "\$notice_query=\"DELETE FROM notice WHERE created <= '\$oldate 01:01:01'\";" >> $gnusocial_expire_script
  683. echo "\$conversation_query=\"DELETE FROM conversation WHERE created <= '$oldate 01:01:01'\";" >> $gnusocial_expire_script
  684. echo "\$reply_query=\"DELETE FROM reply WHERE modified <= '\$oldate 01:01:01'\";" >> $gnusocial_expire_script
  685. echo '' >> $gnusocial_expire_script
  686. echo 'mysql_query($notice_query);' >> $gnusocial_expire_script
  687. echo '$rowaff1=mysql_affected_rows();' >> $gnusocial_expire_script
  688. echo 'mysql_query($conversation_query);' >> $gnusocial_expire_script
  689. echo '$rowaff2=mysql_affected_rows();' >> $gnusocial_expire_script
  690. echo 'mysql_query($reply_query);' >> $gnusocial_expire_script
  691. echo '$rowaff3=mysql_affected_rows();' >> $gnusocial_expire_script
  692. echo 'mysql_close();' >> $gnusocial_expire_script
  693. echo '' >> $gnusocial_expire_script
  694. echo 'echo "Expire gnusocial posts: $rowaff1 notices, $rowaff2 conversations, and $rowaff3 replies deleted from database.\n";' >> $gnusocial_expire_script
  695. chmod +x $gnusocial_expire_script
  696. # Add a cron job
  697. if ! grep -q "$gnusocial_expire_script" /etc/crontab; then
  698. echo "10 3 5 * * root /usr/bin/timeout 500 /usr/bin/php $gnusocial_expire_script" >> /etc/crontab
  699. fi
  700. # remove old expire script
  701. if [ -f /etc/cron.weekly/clear-gnusocial-database ]; then
  702. rm /etc/cron.weekly/clear-gnusocial-database
  703. fi
  704. }
  705. function install_gnusocial_theme {
  706. # update to the next commit
  707. function_check set_repo_commit
  708. set_repo_commit /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins/Qvitter "gnusocial theme commit" "$GNUSOCIAL_THEME_COMMIT" $GNUSOCIAL_THEME_REPO
  709. # customise with project logo
  710. if [ -f /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins/Qvitter/img/sprite.png ]; then
  711. if [ -f ~/freedombone/img/gnusocial_sprite.png ]; then
  712. cp ~/freedombone/img/gnusocial_sprite.png /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins/Qvitter/img/sprite.png
  713. fi
  714. fi
  715. if [[ $(app_is_installed gnusocial_theme) == "1" ]]; then
  716. return
  717. fi
  718. apt-get -y install wget
  719. if [ ! -d /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins ]; then
  720. mkdir -p /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins
  721. fi
  722. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins
  723. function_check git_clone
  724. git_clone $GNUSOCIAL_THEME_REPO Qvitter
  725. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins/Qvitter
  726. git checkout $GNUSOCIAL_THEME_COMMIT -b $GNUSOCIAL_THEME_COMMIT
  727. # download a custom background image
  728. GNUSOCIAL_BACKGROUND_IMAGE_URL_EXT=
  729. if [ $GNUSOCIAL_BACKGROUND_IMAGE_URL ]; then
  730. if [[ $$GNUSOCIAL_BACKGROUND_IMAGE_URL == *".jpeg" || $$GNUSOCIAL_BACKGROUND_IMAGE_URL == *".jpg" ]]; then
  731. GNUSOCIAL_BACKGROUND_IMAGE_URL_EXT="jpg"
  732. fi
  733. if [[ $$GNUSOCIAL_BACKGROUND_IMAGE_URL == *".png" ]]; then
  734. GNUSOCIAL_BACKGROUND_IMAGE_URL_EXT="png"
  735. fi
  736. if [[ $$GNUSOCIAL_BACKGROUND_IMAGE_URL == *".gif" ]]; then
  737. GNUSOCIAL_BACKGROUND_IMAGE_URL_EXT="gif"
  738. fi
  739. if [ $GNUSOCIAL_BACKGROUND_IMAGE_URL_EXT ]; then
  740. wget $GNUSOCIAL_BACKGROUND_IMAGE_URL -O img/custom.${GNUSOCIAL_BACKGROUND_IMAGE_URL_EXT}
  741. if [ ! -f img/custom.${GNUSOCIAL_BACKGROUND_IMAGE_URL_EXT} ]; then
  742. echo "$GNUSOCIAL_BACKGROUND_IMAGE_URL"
  743. echo $'Custom background image for gnusocial could not be downloaded'
  744. exit 87524
  745. fi
  746. fi
  747. fi
  748. gnusocial_config_file=/var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/config.php
  749. if ! grep -q "addPlugin('Qvitter')" $gnusocial_config_file; then
  750. GNUSOCIAL_WELCOME_MESSAGE=$(echo $GNUSOCIAL_WELCOME_MESSAGE | sed "s|\$GNUSOCIAL_DOMAIN_NAME|$GNUSOCIAL_DOMAIN_NAME|g")
  751. echo "" >> $gnusocial_config_file
  752. echo "// Qvitter settings" >> $gnusocial_config_file
  753. echo "addPlugin('Qvitter');" >> $gnusocial_config_file
  754. echo "\$config['site']['qvitter']['enabledbydefault'] = true;" >> $gnusocial_config_file
  755. echo "\$config['site']['qvitter']['defaultbackgroundcolor'] = '#f4f4f4';" >> $gnusocial_config_file
  756. echo "\$config['site']['qvitter']['defaultlinkcolor'] = '#0084B4';" >> $gnusocial_config_file
  757. echo "\$config['site']['qvitter']['timebetweenpolling'] = 30000; // 30 secs" >> $gnusocial_config_file
  758. if [[ $ONION_ONLY != 'no' ]]; then
  759. echo "\$config['site']['qvitter']['urlshortenerapiurl'] = 'http://qttr.at/shortener.php';" >> $gnusocial_config_file
  760. echo "\$config['site']['qvitter']['urlshortenersignature'] = 'b6afeec983';" >> $gnusocial_config_file
  761. fi
  762. if [ $GNUSOCIAL_BACKGROUND_IMAGE_URL ]; then
  763. echo "\$config['site']['qvitter']['sitebackground'] = 'img/custom.${GNUSOCIAL_BACKGROUND_IMAGE_URL_EXT}';" >> $gnusocial_config_file
  764. else
  765. echo "\$config['site']['qvitter']['sitebackground'] = 'img/vagnsmossen.jpg';" >> $gnusocial_config_file
  766. fi
  767. echo "\$config['site']['qvitter']['favicon'] = 'img/favicon.ico?v=4';" >> $gnusocial_config_file
  768. echo "\$config['site']['qvitter']['sprite'] = Plugin::staticPath('Qvitter', '').'img/sprite.png?v=40';" >> $gnusocial_config_file
  769. echo "\$config['site']['qvitter']['enablewelcometext'] = true;" >> $gnusocial_config_file
  770. echo "\$config['site']['qvitter']['customwelcometext']['en'] = '$GNUSOCIAL_WELCOME_MESSAGE';" >> $gnusocial_config_file
  771. echo "\$config['site']['qvitter']['customwelcometext']['de'] = '$GNUSOCIAL_WELCOME_MESSAGE';" >> $gnusocial_config_file
  772. echo "\$config['site']['qvitter']['customwelcometext']['fr'] = '$GNUSOCIAL_WELCOME_MESSAGE';" >> $gnusocial_config_file
  773. echo "\$config['site']['qvitter']['customwelcometext']['es'] = '$GNUSOCIAL_WELCOME_MESSAGE';" >> $gnusocial_config_file
  774. echo "\$config['site']['qvitter']['blocked_ips'] = array();" >> $gnusocial_config_file
  775. else
  776. if [ $GNUSOCIAL_BACKGROUND_IMAGE_URL_EXT ]; then
  777. if [ -f img/custom.${GNUSOCIAL_BACKGROUND_IMAGE_URL_EXT} ]; then
  778. sed -i "s|\$config['site']['qvitter']['sitebackground'].*|\$config['site']['qvitter']['sitebackground'] = 'img/custom.${GNUSOCIAL_BACKGROUND_IMAGE_URL_EXT}';|g" $gnusocial_config_file
  779. fi
  780. fi
  781. fi
  782. # customise with project logo
  783. if [ -f /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins/Qvitter/img/sprite.png ]; then
  784. if [ -f ~/freedombone/img/gnusocial_sprite.png ]; then
  785. cp ~/freedombone/img/gnusocial_sprite.png /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins/Qvitter/img/sprite.png
  786. fi
  787. fi
  788. set_completion_param "gnusocial theme commit" "$GNUSOCIAL_THEME_COMMIT"
  789. chown -R www-data:www-data /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs
  790. install_completed gnusocial_theme
  791. }
  792. function install_gnusocial_markdown {
  793. GNUSOCIAL_PATH=/var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs
  794. # update to the next commit
  795. function_check set_repo_commit
  796. set_repo_commit $GNUSOCIAL_PATH/local/plugins/Markdown "gnusocial Markdown commit" "$GNUSOCIAL_MARKDOWN_COMMIT" $GNUSOCIAL_MARKDOWN_REPO
  797. if [[ $(app_is_installed gnusocial_markdown) == "1" ]]; then
  798. return
  799. fi
  800. if [ -d $GNUSOCIAL_PATH/local/plugins/Markdown ]; then
  801. rm -rf $GNUSOCIAL_PATH/local/plugins/Markdown
  802. fi
  803. if [ ! -d $GNUSOCIAL_PATH/local/plugins ]; then
  804. mkdir -p $GNUSOCIAL_PATH/local/plugins
  805. fi
  806. cd $GNUSOCIAL_PATH/local/plugins
  807. function_check git_clone
  808. git_clone $GNUSOCIAL_MARKDOWN_REPO Markdown
  809. cd $GNUSOCIAL_PATH/local/plugins/Markdown
  810. git checkout $GNUSOCIAL_MARKDOWN_COMMIT -b $GNUSOCIAL_MARKDOWN_COMMIT
  811. gnusocial_config_file=$GNUSOCIAL_PATH/config.php
  812. if ! grep -q "addPlugin('Markdown'" $gnusocial_config_file; then
  813. echo "" >> $gnusocial_config_file
  814. echo "// Markdown settings" >> $gnusocial_config_file
  815. echo "addPlugin('Markdown');" >> $gnusocial_config_file
  816. fi
  817. set_completion_param "gnusocial markdown commit" "$GNUSOCIAL_MARKDOWN_COMMIT"
  818. chown -R www-data:www-data $GNUSOCIAL_PATH
  819. install_completed gnusocial_markdown
  820. }
  821. function install_gnusocial_plugin_nsfw {
  822. if [ ! -d /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins ]; then
  823. echo $'No local/plugins directory found for the gnusocial'
  824. exit 37252
  825. fi
  826. # update to the next commit
  827. function_check set_repo_commit
  828. set_repo_commit /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins "gnusocial NSFW plugin commit" "$GNUSOCIAL_NSFW_COMMIT" $GNUSOCIAL_NSFW_REPO
  829. if [[ $(is_completed $FUNCNAME) == "1" ]]; then
  830. return
  831. fi
  832. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins
  833. function_check git_clone
  834. git_clone $GNUSOCIAL_NSFW_REPO SensitiveContent
  835. if [ ! -d /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins/SensitiveContent ]; then
  836. echo $'Unable to clone gnusocial NSFW plugin'
  837. exit 36738
  838. fi
  839. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/local/plugins/SensitiveContent
  840. git stash
  841. git checkout master
  842. git branch -D $GNUSOCIAL_NSFW_COMMIT
  843. git checkout $GNUSOCIAL_NSFW_COMMIT -b $GNUSOCIAL_NSFW_COMMIT
  844. # enable the plugin
  845. if ! grep -q "addPlugin('SensitiveContent');" /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/config.php; then
  846. echo "addPlugin('SensitiveContent');" >> /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs/config.php
  847. fi
  848. cd /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs
  849. php scripts/checkschema.php
  850. chown -R www-data:www-data /var/www/$GNUSOCIAL_DOMAIN_NAME/htdocs
  851. set_completion_param "gnusocial NSFW plugin commit" "$GNUSOCIAL_NSFW_COMMIT"
  852. install_completed gnusocial_plugin_nsfw
  853. }
  854. function install_gnusocial {
  855. if [ ! $ONION_ONLY ]; then
  856. ONION_ONLY='no'
  857. fi
  858. install_gnusocial_main
  859. expire_gnusocial_posts
  860. install_gnusocial_theme
  861. install_gnusocial_markdown
  862. install_gnusocial_plugin_sharings
  863. install_gnusocial_plugin_sharings_theme
  864. install_gnusocial_plugin_nsfw
  865. # unleash the daemons!
  866. /etc/cron.hourly/gnusocial-daemons
  867. APP_INSTALLED=1
  868. }
  869. # NOTE: deliberately there is no "exit 0"