Guest User

Untitled

a guest
Sep 15th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.58 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. # Function to generate a random salt
  4. generate_salt() {
  5. cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 48 | head -n 1
  6. }
  7.  
  8. # Read environment variables or set default values
  9. DB_HOST=${DB_HOST:-db}
  10. DB_PORT_NUMBER=${DB_PORT_NUMBER:-5432}
  11. MM_USERNAME=${MM_USERNAME:-mmuser}
  12. MM_PASSWORD=${MM_PASSWORD:-mmuser_password}
  13. MM_DBNAME=${MM_DBNAME:-mattermost}
  14. MM_CONFIG=${MM_CONFIG:-/mattermost/config/config.json}
  15.  
  16. if [ "${1:0:1}" = '-' ]; then
  17. set -- mattermost "$@"
  18. fi
  19.  
  20. if [ "$1" = 'mattermost' ]; then
  21. # Check CLI args for a -config option
  22. for ARG in $@;
  23. do
  24. case "$ARG" in
  25. -config=*)
  26. MM_CONFIG=${ARG#*=};;
  27. esac
  28. done
  29.  
  30. if [ ! -f $MM_CONFIG ]
  31. then
  32. # If there is no configuration file, create it with some default values
  33. echo "No configuration file" $MM_CONFIG
  34. echo "Creating a new one"
  35. # Copy default configuration file
  36. cp /config.json.save $MM_CONFIG
  37. # Substitue some parameters with jq
  38. jq '.ServiceSettings.ListenAddress = ":8000"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG
  39. jq '.LogSettings.EnableConsole = false' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG
  40. jq '.LogSettings.ConsoleLevel = "INFO"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG
  41. jq '.FileSettings.Directory = "/mattermost/data/"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG
  42. jq '.FileSettings.EnablePublicLink = true' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG
  43. jq '.FileSettings.PublicLinkSalt = "'$(generate_salt)'"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG
  44. jq '.EmailSettings.SendEmailNotifications = false' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG
  45. jq '.EmailSettings.FeedbackEmail = ""' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG
  46. jq '.EmailSettings.SMTPServer = ""' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG
  47. jq '.EmailSettings.SMTPPort = ""' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG
  48. jq '.EmailSettings.InviteSalt = "'$(generate_salt)'"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG
  49. jq '.EmailSettings.PasswordResetSalt = "'$(generate_salt)'"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG
  50. jq '.RateLimitSettings.Enable = true' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG
  51. jq '.SqlSettings.DriverName = "postgres"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG
  52. jq '.SqlSettings.AtRestEncryptKey = "'$(generate_salt)'"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG
  53. jq '.PluginSettings.Directory = "/mattermost/plugins/"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG
  54. else
  55. echo "Using existing config file" $MM_CONFIG
  56. fi
  57.  
  58. # Configure database access
  59. if [ -z "$MM_SQLSETTINGS_DATASOURCE" ]
  60. then
  61. echo -ne "Configure database connection..."
  62. # URLEncode the password, allowing for special characters
  63. ENCODED_PASSWORD=$(printf %s $MM_PASSWORD | jq -s -R -r @uri)
  64. export MM_SQLSETTINGS_DATASOURCE="postgres://$MM_USERNAME:$ENCODED_PASSWORD@$DB_HOST:$DB_PORT_NUMBER/$MM_DBNAME?sslmode=disable&connect_timeout=10"
  65. echo OK
  66. else
  67. echo "Using existing database connection"
  68. fi
  69.  
  70. # Wait for database to be reachable
  71. echo "Wait until database $DB_HOST:$DB_PORT_NUMBER is ready..."
  72. until nc -z $DB_HOST $DB_PORT_NUMBER
  73. do
  74. sleep 1
  75. done
  76.  
  77. # Wait another second for the database to be properly started.
  78. # Necessary to avoid "panic: Failed to open sql connection pq: the database system is starting up"
  79. sleep 1
  80.  
  81. echo "Starting mattermost"
  82. fi
  83.  
  84. exec "$@"
Add Comment
Please, Sign In to add comment