1
0

entrypoint.sh 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #!/bin/bash
  2. echo "Setting up docker env..."
  3. echo "MODE: $MODE"
  4. echo "USE_NEW_DESIGN: $USE_NEW_DESIGN"
  5. echo "WEBPORT: $WEBPORT"
  6. echo "REDACT_IP_ADDRESSES: $REDACT_IP_ADDRESSES"
  7. echo "DB_TYPE: $DB_TYPE"
  8. echo "ENABLE_ID_OBFUSCATION: $ENABLE_ID_OBFUSCATION"
  9. set -e
  10. #set -x
  11. is_alpine() {
  12. [ -f /etc/alpine-release ]
  13. }
  14. # Cleanup
  15. rm -rf /var/www/html/*
  16. # Copy frontend files
  17. cp /speedtest/*.js /var/www/html/
  18. # Copy design switch files
  19. cp /speedtest/config.json /var/www/html/
  20. cp /speedtest/design-switch.js /var/www/html/
  21. # Copy favicon
  22. cp /speedtest/favicon.ico /var/www/html/
  23. # Set custom webroot on alpine
  24. if is_alpine; then
  25. echo "ALPINE IMAGE"
  26. sed -i "s#\"/var/www/localhost/htdocs\"#\"/var/www/html\"#g" /etc/apache2/httpd.conf
  27. else
  28. echo "DEBIAN IMAGE"
  29. fi
  30. # Set up backend side for standlone modes
  31. if [[ "$MODE" == "standalone" || "$MODE" == "dual" ]]; then
  32. cp -r /speedtest/backend/ /var/www/html/backend
  33. if [ ! -z "$IPINFO_APIKEY" ]; then
  34. sed -i s/\$IPINFO_APIKEY\ =\ \'\'/\$IPINFO_APIKEY\ =\ \'$IPINFO_APIKEY\'/g /var/www/html/backend/getIP_ipInfo_apikey.php
  35. fi
  36. fi
  37. if [ "$MODE" == "backend" ]; then
  38. cp -r /speedtest/backend/* /var/www/html
  39. if [ ! -z "$IPINFO_APIKEY" ]; then
  40. sed -i s/\$IPINFO_APIKEY\ =\ \'\'/\$IPINFO_APIKEY\ =\ \'$IPINFO_APIKEY\'/g /var/www/html/getIP_ipInfo_apikey.php
  41. fi
  42. fi
  43. # Set up index.php for frontend-only or standalone modes
  44. if [[ "$MODE" == "frontend" || "$MODE" == "dual" || "$MODE" == "standalone" ]]; then
  45. # Copy design files (switcher + both designs)
  46. cp /speedtest/index.html /var/www/html/
  47. cp /speedtest/index-classic.html /var/www/html/
  48. cp /speedtest/index-modern.html /var/www/html/
  49. # Copy frontend assets directly to root-level subdirectories (no frontend/ parent dir)
  50. mkdir -p /var/www/html/styling /var/www/html/javascript /var/www/html/images /var/www/html/fonts
  51. cp -a /speedtest/frontend/styling/* /var/www/html/styling/
  52. cp -a /speedtest/frontend/javascript/* /var/www/html/javascript/
  53. cp -a /speedtest/frontend/images/* /var/www/html/images/
  54. cp -a /speedtest/frontend/fonts/* /var/www/html/fonts/ 2>/dev/null || true
  55. # Copy frontend config files
  56. cp /speedtest/frontend/settings.json /var/www/html/settings.json 2>/dev/null || true
  57. if [ ! -f /var/www/html/server-list.json ]; then
  58. echo "no server-list.json found, create one for local host"
  59. # generate config for just the local server
  60. 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
  61. fi
  62. fi
  63. # Configure design preference via config.json
  64. if [ "$USE_NEW_DESIGN" == "true" ]; then
  65. sed -i 's/"useNewDesign": false/"useNewDesign": true/' /var/www/html/config.json
  66. fi
  67. # Apply Telemetry settings when running in standalone or frontend mode and telemetry is enabled
  68. if [[ "$TELEMETRY" == "true" && ("$MODE" == "frontend" || "$MODE" == "standalone" || "$MODE" == "dual") ]]; then
  69. cp -r /speedtest/results /var/www/html/results
  70. sed -i 's/telemetry_level": ".*"/telemetry_level": "basic"/' /var/www/html/settings.json
  71. if [ "$MODE" == "frontend" ]; then
  72. mkdir /var/www/html/backend
  73. cp /speedtest/backend/getIP_util.php /var/www/html/backend
  74. fi
  75. if [ "$DB_TYPE" == "mysql" ]; then
  76. sed -i 's/$db_type = '\''.*'\''/$db_type = '\'$DB_TYPE\''/g' /var/www/html/results/telemetry_settings.php
  77. sed -i 's/$MySql_username = '\''.*'\''/$MySql_username = '\'$DB_USERNAME\''/g' /var/www/html/results/telemetry_settings.php
  78. sed -i 's/$MySql_password = '\''.*'\''/$MySql_password = '\'$DB_PASSWORD\''/g' /var/www/html/results/telemetry_settings.php
  79. sed -i 's/$MySql_hostname = '\''.*'\''/$MySql_hostname = '\'$DB_HOSTNAME\''/g' /var/www/html/results/telemetry_settings.php
  80. sed -i 's/$MySql_databasename = '\''.*'\''/$MySql_databasename = '\'$DB_NAME\''/g' /var/www/html/results/telemetry_settings.php
  81. if [ "$DB_PORT" != "" ]; then
  82. sed -i 's/$MySql_port = '\''.*'\''/$MySql_port = '\'$DB_PORT\''/g' /var/www/html/results/telemetry_settings.php
  83. fi
  84. elif [ "$DB_TYPE" == "postgresql" ]; then
  85. sed -i 's/$db_type = '\''.*'\''/$db_type = '\'$DB_TYPE\''/g' /var/www/html/results/telemetry_settings.php
  86. sed -i 's/$PostgreSql_username = '\''.*'\''/$PostgreSql_username = '\'$DB_USERNAME\''/g' /var/www/html/results/telemetry_settings.php
  87. sed -i 's/$PostgreSql_password = '\''.*'\''/$PostgreSql_password = '\'$DB_PASSWORD\''/g' /var/www/html/results/telemetry_settings.php
  88. sed -i 's/$PostgreSql_hostname = '\''.*'\''/$PostgreSql_hostname = '\'$DB_HOSTNAME\''/g' /var/www/html/results/telemetry_settings.php
  89. sed -i 's/$PostgreSql_databasename = '\''.*'\''/$PostgreSql_databasename = '\'$DB_NAME\''/g' /var/www/html/results/telemetry_settings.php
  90. else
  91. sed -i s/\$db_type\ =\ \'.*\'/\$db_type\ =\ \'sqlite\'\/g /var/www/html/results/telemetry_settings.php
  92. fi
  93. sed -i s/\$Sqlite_db_file\ =\ \'.*\'/\$Sqlite_db_file=\'\\\/database\\\/db.sql\'/g /var/www/html/results/telemetry_settings.php
  94. sed -i s/\$stats_password\ =\ \'.*\'/\$stats_password\ =\ \'$PASSWORD\'/g /var/www/html/results/telemetry_settings.php
  95. if [ "$ENABLE_ID_OBFUSCATION" == "true" ]; then
  96. sed -i s/\$enable_id_obfuscation\ =\ .*\;/\$enable_id_obfuscation\ =\ true\;/g /var/www/html/results/telemetry_settings.php
  97. if [ ! -z "$OBFUSCATION_SALT" ]; then
  98. if [[ "$OBFUSCATION_SALT" =~ ^0x[0-9a-fA-F]+$ ]]; then
  99. echo "<?php" > /var/www/html/results/idObfuscation_salt.php
  100. echo "\$OBFUSCATION_SALT = $OBFUSCATION_SALT;" >> /var/www/html/results/idObfuscation_salt.php
  101. else
  102. echo "WARNING: Invalid OBFUSCATION_SALT format. It must be a hex string (e.g., 0x1234abcd). Using random salt." >&2
  103. fi
  104. fi
  105. fi
  106. if [ "$REDACT_IP_ADDRESSES" == "true" ]; then
  107. sed -i s/\$redact_ip_addresses\ =\ .*\;/\$redact_ip_addresses\ =\ true\;/g /var/www/html/results/telemetry_settings.php
  108. fi
  109. mkdir -p /database/
  110. if is_alpine; then
  111. chown -R apache /database/
  112. else
  113. chown -R www-data /database/
  114. fi
  115. fi
  116. if is_alpine; then
  117. chown -R apache /var/www/html/*
  118. else
  119. chown -R www-data /var/www/html/*
  120. fi
  121. # Allow selection of Apache port for network_mode: host
  122. if [ "$WEBPORT" != "80" ]; then
  123. if is_alpine; then
  124. sed -i "s/^Listen 80\$/Listen $WEBPORT/g" /etc/apache2/httpd.conf
  125. else
  126. sed -i "s/^Listen 80\$/Listen $WEBPORT/g" /etc/apache2/ports.conf
  127. sed -i "s/*:80>/*:$WEBPORT>/g" /etc/apache2/sites-available/000-default.conf
  128. fi
  129. fi
  130. echo "Done, Starting APACHE"
  131. # This runs apache
  132. if is_alpine; then
  133. exec httpd -DFOREGROUND
  134. else
  135. exec apache2-foreground
  136. fi