diff --git a/pica-mattermost/Dockerfile b/pica-mattermost/Dockerfile index 4f87f6b0b0fdc913ead66ee52c76fb5cf3d1c062..2e6507d3f579db0120ab69416d0228709dd9f67b 100644 --- a/pica-mattermost/Dockerfile +++ b/pica-mattermost/Dockerfile @@ -13,6 +13,7 @@ ARG PGID=5000 RUN apk add --no-cache \ ca-certificates \ curl \ + jq \ libc6-compat \ libffi-dev \ libcap \ diff --git a/pica-mattermost/README.md b/pica-mattermost/README.md index cbc62d19f0ef23d81d01a549722caffb9587def6..210c1dbf209b2de227c37f02c53453ce63769298 100644 --- a/pica-mattermost/README.md +++ b/pica-mattermost/README.md @@ -13,16 +13,16 @@ Aussi, on n'utilise pas le système de sauvegarde `WAL-e`, ce qui nous permet d' Enfin, le Docker Compose est adapté à notre configuration. -### Utilisation +### Création d'une nouvelle instance -Assurez-vous que les volumes suivants existent (`docker volume`). Sinon, créez-les avec `docker volume create`. -* mattermost-config -* mattermost-db -* mattermost-data -* mattermost-plugins +Assurez-vous que les volumes suivants existent (`docker volume ls`). Sinon, créez-les avec `docker volume create`. +* `mattermost-config` +* `mattermost-db` +* `mattermost-data` +* `mattermost-plugins` -qduchemi@pica01-test:~/dockerfiles/pica-mattermost$ docker volume create mattermost-plugins Copier `secrets/mattermost-db.secrets.example` dans `secrets/mattermost-db.secrets` et remplacer les valeurs des identifiants. + Lancer `docker-compose up -d`. On notera l'utilisation de la variable `DB_HOST` dans le fichier Docker Compose, qui ne devrait pas avoir à être modifiée si on ne touche pas le nom du service de base de données. ### Procédure de mise à jour diff --git a/pica-mattermost/clair-whitelist.yml b/pica-mattermost/clair-whitelist.yml index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..519b80a6902a5d1ace39d4a9a4ec35524560f5b6 100644 --- a/pica-mattermost/clair-whitelist.yml +++ b/pica-mattermost/clair-whitelist.yml @@ -0,0 +1,2 @@ +generalwhitelist: + CVE-2016-4074: jq -> pas de contre mesure, pas utilisé par Mattermost mais juste par l'entrypoint, pas de risque en remote diff --git a/pica-mattermost/entrypoint.sh b/pica-mattermost/entrypoint.sh index 7d14b1831a7c0679caa7a04f25e04ee56212bacf..437e24ae00922d4a6c2a26d27f89490339c0cbf6 100644 --- a/pica-mattermost/entrypoint.sh +++ b/pica-mattermost/entrypoint.sh @@ -11,11 +11,49 @@ if [ "${1:0:1}" = '-' ]; then fi if [ "$1" = 'mattermost' ]; then + # Check CLI args for a -config option + for ARG in $@; + do + case "$ARG" in + -config=*) + MM_CONFIG=${ARG#*=};; + esac + done + + if [ ! -f $MM_CONFIG ] + then + # If there is no configuration file, create it with some default values + echo "No configuration file" $MM_CONFIG + echo "Creating a new one" + # Copy default configuration file + cp /config.json.save $MM_CONFIG + # Substitue some parameters with jq + jq '.ServiceSettings.ListenAddress = ":8000"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.LogSettings.EnableConsole = true' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.LogSettings.ConsoleLevel = "ERROR"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.FileSettings.Directory = "/mattermost/data/"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.FileSettings.EnablePublicLink = true' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.FileSettings.PublicLinkSalt = "'$(generate_salt)'"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.EmailSettings.SendEmailNotifications = false' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.EmailSettings.FeedbackEmail = ""' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.EmailSettings.SMTPServer = ""' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.EmailSettings.SMTPPort = ""' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.EmailSettings.InviteSalt = "'$(generate_salt)'"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.EmailSettings.PasswordResetSalt = "'$(generate_salt)'"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.RateLimitSettings.Enable = true' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.SqlSettings.DriverName = "postgres"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.SqlSettings.AtRestEncryptKey = "'$(generate_salt)'"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + jq '.PluginSettings.Directory = "/mattermost/plugins/"' $MM_CONFIG > $MM_CONFIG.tmp && mv $MM_CONFIG.tmp $MM_CONFIG + else + echo "Using existing config file" $MM_CONFIG + fi + # Configure database access if [[ -z "$MM_SQLSETTINGS_DATASOURCE" && ! -z "$MM_USERNAME" && ! -z "$MM_PASSWORD" ]] then - echo -ne "Configure database connection..." - export MM_SQLSETTINGS_DATASOURCE="postgres://$MM_USERNAME:$MM_PASSWORD@$DB_HOST:$DB_PORT_NUMBER/$MM_DBNAME?sslmode=disable&connect_timeout=10" + # URLEncode the password, allowing for special characters + ENCODED_PASSWORD=$(printf %s $MM_PASSWORD | jq -s -R -r @uri) + export MM_SQLSETTINGS_DATASOURCE="postgres://$MM_USERNAME:$ENCODED_PASSWORD@$DB_HOST:$DB_PORT_NUMBER/$MM_DBNAME?sslmode=disable&connect_timeout=10" echo OK else echo "Using existing database connection"