# -*- coding: utf-8 -*- import os import shutil import subprocess from . import tools TMP_FILE = '/tmp/confupdater.tmp' def replace_file_line(filename, oldline, newline): with open(filename, 'r') as conf, open(TMP_FILE, 'w') as tmp: for line in conf: # Find line starting with oldline if line.startswith(oldline): # Replace te line with oldline, newline, \n (to not repeat the oldline in newline) tmp.write(oldline) tmp.write(newline) tmp.write('\n') # Dump the rest of the file and break the loop tmp.write(conf.read()) break else: tmp.write(line) # Copy the file contents to the original file (preserves permissions of the original file) shutil.copyfile(TMP_FILE, filename) os.unlink(TMP_FILE) def run_mysql_query(query, database): if not maria_started: tools.start_service('mariadb') subprocess.run(['docker', 'exec', '-i', 'mariadb', 'mysql', '-e', query, database]) if not maria_started: tools.stop_service('mariadb') def update_gmaps_api_key(api_key): # CKAN replace_file_line('/srv/ckan/conf/ckan.ini', 'ckanext.geoview.gapi_key = ', api_key) # Crisis Cleanup replace_file_line('/srv/crisiscleanup/conf/boot.rb', 'ENV[\'GOOGLE_MAPS_API_KEY\'] = ', api_key) # Pan.do/ra replace_file_line('/srv/pandora/conf/local_settings.py', 'GOOGLE_API_KEY = ', '\'{}\''.format(api_key)) # Sahana replace_file_line('/srv/sahana/conf/000_config.py', 'settings.gis.api_google = ', '"{}"'.format(api_key)) # Sahana Demo replace_file_line('/srv/sahana-demo/conf/000_config.py', 'settings.gis.api_google = ', '"{}"'.format(api_key)) # SAMBRO replace_file_line('/srv/sambro/conf/000_config.py', 'settings.gis.api_google = ', '"{}"'.format(api_key)) # Sigmah replace_file_line('/srv/sigmah/conf/sigmah.properties', 'maps.key=', api_key) # Ushahidi replace_file_line('/srv/ushahidi/conf/config.json', ' "google_analytics_id": ', '"{}"'.format(api_key)) def update_email(email): # CKAN replace_file_line('/srv/ckan/conf/ckan.ini', 'smtp.mail_from = ', email) replace_file_line('/srv/ckan-datapusher/conf/datapusher_settings.py', 'FROM_EMAIL = ', '\'{}\''.format(email)) # Crisis Cleanup replace_file_line('/srv/crisiscleanup/conf/initializers/devise.rb', ' config.mailer_sender = ', '\'{}\''.format(email)) # CTS replace_file_line('/srv/cts/conf/spotter.py', 'SERVER_EMAIL = ', '\'{}\''.format(email)) # GNU Health replace_file_line('/srv/gnuhealth/conf/trytond.conf', 'from = ', email) # KanBoard replace_file_line('/srv/kanboard/conf/config.php', 'define(\'MAIL_FROM\', ', '\'{}\');'.format(email)) # Mifos X query = 'UPDATE `c_external_service_properties` SET `value` = "{}" WHERE `external_service_id` = 2 and `name` LIKE "username";'.format(email) run_mysql_query(query, 'mifostenant-default') # Sahana replace_file_line('/srv/sahana/conf/000_config.py', 'settings.mail.sender = ', '"{}"'.format(email)) replace_file_line('/srv/sahana/conf/000_config.py', 'settings.mail.approver = ', '"{}"'.format(email)) # Sahana Demo replace_file_line('/srv/sahana-demo/conf/000_config.py', 'settings.mail.sender = ', '"{}"'.format(email)) replace_file_line('/srv/sahana-demo/conf/000_config.py', 'settings.mail.approver = ', '"{}"'.format(email)) # SAMBRO replace_file_line('/srv/sambro/conf/000_config.py', 'settings.mail.sender = ', '"{}"'.format(email)) replace_file_line('/srv/sambro/conf/000_config.py', 'settings.mail.approver = ', '"{}"'.format(email)) # SeedDMS replace_file_line('/srv/seeddms/conf/settings.xml', ' '.format(email)) # Sigmah replace_file_line('/srv/sigmah/conf/sigmah.properties', 'mail.from.address=', email) replace_file_line('/srv/sigmah/conf/sigmah.properties', 'mail.support.to=', email) # Ushahidi email_json = '{\"incoming_type\":\"IMAP\",\"incoming_server\":\"localhost\",\"incoming_port\":143,\"incoming_security\":\"None\",\"incoming_username\":\"{}\",\"incoming_password\":\"password\",\"outgoing_type\":\"SMTP\",\"outgoing_server\":\"postfix\",\"outgoing_port\":25,\"outgoing_security\":\"None\",\"outgoing_username\":\"{}\",\"outgoing_password\":\"password\",\"from\":\"{}\",\"from_name\":\"Ushahidi\"}' query = 'UPDATE `config` SET `config_value` = "{}" WHERE `group_name` LIKE "data-provider" AND `config_key` LIKE "email";'.format(email_json) run_mysql_query(query, 'ushahidi') def update_url(host): # CKAN replace_file_line('/srv/ckan/conf/ckan.ini', 'ckan.site_url = ', 'https://ckan.{}'.format(host)) # Motech replace_file_line('/srv/motech/conf/config/motech-settings.properties', 'server.url=', 'https://motech.{}'.format(host)) # Pan.do/ra replace_file_line('/srv/pandora/conf/config.jsonc', ' "url": ', '"pandora.{}"'.format(host)) # Sahana replace_file_line('/srv/sahana/conf/000_config.py', 'settings.base.public_url = ', '"https://sahana.{}"'.format(host)) # Sahana Demo replace_file_line('/srv/sahana-demo/conf/000_config.py', 'settings.base.public_url = ', '"https://sahana-demo.{}"'.format(host)) # SAMBRO replace_file_line('/srv/sambro/conf/000_config.py', 'settings.base.public_url = ', '"https://sambro.{}"'.format(host)) # Ushahidi replace_file_line('/srv/ushahidi/conf/config.json', ' "backend_url": ', '"https://ush.{}/platform",'.format(host)) api_url = '\"https:\\/\\/ush.{}\\/platform\\/api\\/v3\\/config\\/data-provider\"' query = 'UPDATE `config` SET `config_value` = "{}" WHERE `group_name` LIKE "data-provider" AND `config_key` LIKE "url";'.format(api_url) run_mysql_query(query, 'ushahidi')