From ef0b5366ded785d3e0bb55baebbee18bd36cfe7d Mon Sep 17 00:00:00 2001
From: Bob Mottram <bob@robotics.uk.to>
Date: Mon, 21 Nov 2016 14:54:57 +0000
Subject: [PATCH] Hash etherpad passwords

---
 src/freedombone-app-etherpad | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/src/freedombone-app-etherpad b/src/freedombone-app-etherpad
index adc910347..2e9ad7736 100755
--- a/src/freedombone-app-etherpad
+++ b/src/freedombone-app-etherpad
@@ -53,20 +53,24 @@ etherpad_variables=(ETHERPAD_COMMIT
                     DDNS_PROVIDER
                     MY_USERNAME)
 
+function etherpad_password_hash {
+    echo $(python -c "from passlib.hash import bcrypt;print(bcrypt.encrypt(\"$1\", rounds=10))")
+}
+
 function change_password_etherpad {
     change_username="$1"
-    new_user_password="$2"
+    new_user_password=$(etherpad_password_hash "$2")
 
     read_config_param ETHERPAD_DOMAIN_NAME
 
     if grep "\"$change_username\": {" /var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json; then
         user_line=$(cat /var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json | grep "\"$change_username\": {")
         if [[ "$user_line" == *"\"is_admin\": true"* ]]; then
-            sed -i "s|\"$change_username\": {.*|\"$change_username\": { \"password\": \"$new_user_password\", \"is_admin\": true }|g" /var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json
+            sed -i "s|\"$change_username\": {.*|\"$change_username\": { \"hash\": \"$new_user_password\", \"is_admin\": true }|g" /var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json
         else
-            sed -i "s|\"$change_username\": {.*|\"$change_username\": { \"password\": \"$new_user_password\", \"is_admin\": false },|g" /var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json
+            sed -i "s|\"$change_username\": {.*|\"$change_username\": { \"hash\": \"$new_user_password\", \"is_admin\": false },|g" /var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json
         fi
-        ${PROJECT_NAME}-pass -u $change_username -a etherpad -p "$new_user_password"
+        ${PROJECT_NAME}-pass -u $change_username -a etherpad -p "$2"
         systemctl restart etherpad
     fi
 }
@@ -146,7 +150,7 @@ function create_etherpad_settings {
     echo '  "disableIPlogging" : true,' >> $settings_file
 
     echo '  "users": {' >> $settings_file
-    echo "    \"${MY_USERNAME}\": { \"password\": \"${ETHERPAD_ADMIN_PASSWORD}\", \"is_admin\": true }" >> $settings_file
+    echo "    \"${MY_USERNAME}\": { \"hash\": \"$(etherpad_password_hash "${ETHERPAD_ADMIN_PASSWORD}")\", \"is_admin\": true }" >> $settings_file
     echo '  },' >> $settings_file
 
     echo '  "socketTransportProtocols" : ["xhr-polling", "jsonp-polling", "htmlfile"],' >> $settings_file
@@ -187,12 +191,12 @@ function remove_user_etherpad {
 
 function add_user_etherpad {
     new_username="$1"
-    new_user_password="$2"
+    new_user_password=$(etherpad_password_hash "$2")
     settings_file=/var/www/${ETHERPAD_DOMAIN_NAME}/htdocs/settings.json
 
     if ! grep -q "\"$new_username\": {" $settings_file; then
         ${PROJECT_NAME}-pass -u $new_username -a etherpad -p "$new_user_password"
-        sed -i "/\"users\": {/a    \"$new_username\": { \"password\": \"$new_user_password\", \"is_admin\": false }," $settings_file
+        sed -i "/\"users\": {/a    \"$new_username\": { \"hash\": \"$new_user_password\", \"is_admin\": false }," $settings_file
         if grep -q "\"$new_username\": {" $settings_file; then
             systemctl restart etherpad
         else
@@ -458,7 +462,8 @@ function install_etherpad {
     repair_databases_script
 
     apt-get -yq install gzip git curl python libssl-dev pkg-config \
-            build-essential python g++ make checkinstall
+            build-essential python g++ make checkinstall \
+            python-bcrypt python-passlib
 
     function_check install_nodejs
     install_nodejs etherpad
-- 
GitLab