freedombone-app-gnusocial 43KB

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