entrypoint.sh 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #!/bin/bash
  2. set -e
  3. set -x
  4. is_alpine() {
  5. [ -f /etc/alpine-release ]
  6. }
  7. # Cleanup
  8. rm -rf /var/www/html/*
  9. # Copy frontend files
  10. cp /speedtest/*.js /var/www/html/
  11. # Copy favicon
  12. cp /speedtest/favicon.ico /var/www/html/
  13. # Set custom webroot on alpine
  14. if is_alpine; then
  15. echo "ALPINE IMAGE"
  16. sed -i "s#\"/var/www/localhost/htdocs\"#\"/var/www/html\"#g" /etc/apache2/httpd.conf
  17. else
  18. echo "DEBIAN IMAGE"
  19. fi
  20. # Set up backend side for standlone modes
  21. if [[ "$MODE" == "standalone" || "$MODE" == "dual" ]]; then
  22. cp -r /speedtest/backend/ /var/www/html/backend
  23. if [ ! -z "$IPINFO_APIKEY" ]; then
  24. sed -i s/\$IPINFO_APIKEY\ =\ \'\'/\$IPINFO_APIKEY\ =\ \'$IPINFO_APIKEY\'/g /var/www/html/backend/getIP_ipInfo_apikey.php
  25. fi
  26. fi
  27. if [ "$MODE" == "backend" ]; then
  28. cp -r /speedtest/backend/* /var/www/html
  29. if [ ! -z "$IPINFO_APIKEY" ]; then
  30. sed -i s/\$IPINFO_APIKEY\ =\ \'\'/\$IPINFO_APIKEY\ =\ \'$IPINFO_APIKEY\'/g /var/www/html/getIP_ipInfo_apikey.php
  31. fi
  32. fi
  33. # Set up index.php for frontend-only or standalone modes
  34. if [[ "$MODE" == "frontend" || "$MODE" == "dual" ]]; then
  35. cp -av /speedtest/frontend/* /var/www/html/
  36. elif [ "$MODE" == "standalone" ]; then
  37. cp -av /speedtest/frontend/* /var/www/html/
  38. echo '[{"name":"local","server":"/backend", "dlURL": "garbage.php", "ulURL": "empty.php", "pingURL": "empty.php", "getIpURL": "getIP.php", "sponsorName": "", "sponsorURL": "", "id":1 }]' > /var/www/html/server-list.json
  39. fi
  40. # Apply Telemetry settings when running in standalone or frontend mode and telemetry is enabled
  41. if [[ "$TELEMETRY" == "true" && ("$MODE" == "frontend" || "$MODE" == "standalone" || "$MODE" == "dual") ]]; then
  42. cp -r /speedtest/results /var/www/html/results
  43. sed -i 's/telemetry_level": ".*"/telemetry_level": "basic"/' /var/www/html/settings.json
  44. if [ "$MODE" == "frontend" ]; then
  45. mkdir /var/www/html/backend
  46. cp /speedtest/backend/getIP_util.php /var/www/html/backend
  47. fi
  48. if [ "$DB_TYPE" == "mysql" ]; then
  49. sed -i 's/$db_type = '\''.*'\''/$db_type = '\'$DB_TYPE\''/g' /var/www/html/results/telemetry_settings.php
  50. sed -i 's/$MySql_username = '\''.*'\''/$MySql_username = '\'$DB_USERNAME\''/g' /var/www/html/results/telemetry_settings.php
  51. sed -i 's/$MySql_password = '\''.*'\''/$MySql_password = '\'$DB_PASSWORD\''/g' /var/www/html/results/telemetry_settings.php
  52. sed -i 's/$MySql_hostname = '\''.*'\''/$MySql_hostname = '\'$DB_HOSTNAME\''/g' /var/www/html/results/telemetry_settings.php
  53. sed -i 's/$MySql_databasename = '\''.*'\''/$MySql_databasename = '\'$DB_NAME\''/g' /var/www/html/results/telemetry_settings.php
  54. if [ "$DB_PORT" != "" ]; then
  55. sed -i 's/$MySql_port = '\''.*'\''/$MySql_port = '\'$DB_PORT\''/g' /var/www/html/results/telemetry_settings.php
  56. fi
  57. elif [ "$DB_TYPE" == "postgresql" ]; then
  58. sed -i 's/$db_type = '\''.*'\''/$db_type = '\'$DB_TYPE\''/g' /var/www/html/results/telemetry_settings.php
  59. sed -i 's/$PostgreSql_username = '\''.*'\''/$PostgreSql_username = '\'$DB_USERNAME\''/g' /var/www/html/results/telemetry_settings.php
  60. sed -i 's/$PostgreSql_password = '\''.*'\''/$PostgreSql_password = '\'$DB_PASSWORD\''/g' /var/www/html/results/telemetry_settings.php
  61. sed -i 's/$PostgreSql_hostname = '\''.*'\''/$PostgreSql_hostname = '\'$DB_HOSTNAME\''/g' /var/www/html/results/telemetry_settings.php
  62. sed -i 's/$PostgreSql_databasename = '\''.*'\''/$PostgreSql_databasename = '\'$DB_NAME\''/g' /var/www/html/results/telemetry_settings.php
  63. else
  64. sed -i s/\$db_type\ =\ \'.*\'/\$db_type\ =\ \'sqlite\'\/g /var/www/html/results/telemetry_settings.php
  65. fi
  66. sed -i s/\$Sqlite_db_file\ =\ \'.*\'/\$Sqlite_db_file=\'\\\/database\\\/db.sql\'/g /var/www/html/results/telemetry_settings.php
  67. sed -i s/\$stats_password\ =\ \'.*\'/\$stats_password\ =\ \'$PASSWORD\'/g /var/www/html/results/telemetry_settings.php
  68. if [ "$ENABLE_ID_OBFUSCATION" == "true" ]; then
  69. sed -i s/\$enable_id_obfuscation\ =\ .*\;/\$enable_id_obfuscation\ =\ true\;/g /var/www/html/results/telemetry_settings.php
  70. if [ ! -z "$OBFUSCATION_SALT" ]; then
  71. if [[ "$OBFUSCATION_SALT" =~ ^0x[0-9a-fA-F]+$ ]]; then
  72. echo "<?php" > /var/www/html/results/idObfuscation_salt.php
  73. echo "\$OBFUSCATION_SALT = $OBFUSCATION_SALT;" >> /var/www/html/results/idObfuscation_salt.php
  74. else
  75. echo "WARNING: Invalid OBFUSCATION_SALT format. It must be a hex string (e.g., 0x1234abcd). Using random salt." >&2
  76. fi
  77. fi
  78. fi
  79. if [ "$REDACT_IP_ADDRESSES" == "true" ]; then
  80. sed -i s/\$redact_ip_addresses\ =\ .*\;/\$redact_ip_addresses\ =\ true\;/g /var/www/html/results/telemetry_settings.php
  81. fi
  82. mkdir -p /database/
  83. if is_alpine; then
  84. chown -R apache /database/
  85. else
  86. chown -R www-data /database/
  87. fi
  88. fi
  89. if is_alpine; then
  90. chown -R apache /var/www/html/*
  91. else
  92. chown -R www-data /var/www/html/*
  93. fi
  94. # Allow selection of Apache port for network_mode: host
  95. if [ "$WEBPORT" != "80" ]; then
  96. if is_alpine; then
  97. sed -i "s/^Listen 80\$/Listen $WEBPORT/g" /etc/apache2/httpd.conf
  98. else
  99. sed -i "s/^Listen 80\$/Listen $WEBPORT/g" /etc/apache2/ports.conf
  100. sed -i "s/*:80>/*:$WEBPORT>/g" /etc/apache2/sites-available/000-default.conf
  101. fi
  102. fi
  103. echo "Done, Starting APACHE"
  104. # This runs apache
  105. if is_alpine; then
  106. exec httpd -DFOREGROUND
  107. else
  108. exec apache2-foreground
  109. fi