83 lines
1.7 KiB
Python
83 lines
1.7 KiB
Python
#!/usr/bin/env python
|
|
import os
|
|
import shutil
|
|
|
|
env = os.environ.get
|
|
|
|
smtp_settings = [
|
|
('username', ''),
|
|
('password', ''),
|
|
('host', 'localhost'),
|
|
('port', '25'),
|
|
('security', 'none'),
|
|
('to', ''),
|
|
('from', ''),
|
|
]
|
|
|
|
required = ['to', 'from']
|
|
|
|
settings = env('ISSO_SETTINGS')
|
|
if not settings:
|
|
raise Exception('No ISSO_SETTINGS defined')
|
|
|
|
settings = settings.split(';')
|
|
|
|
|
|
def backup_name(setting):
|
|
return setting + '.bak'
|
|
|
|
|
|
def purge_backup(setting):
|
|
# if there is a backup file, delete it
|
|
backup_setting = backup_name(setting)
|
|
if os.path.exists(backup_setting):
|
|
try:
|
|
os.remove(backup_setting)
|
|
except OSError:
|
|
pass
|
|
|
|
|
|
def create_backup(setting):
|
|
# make a backup
|
|
shutil.copyfile(setting, backup_name(setting))
|
|
|
|
|
|
def load_values():
|
|
values = []
|
|
for name, default in smtp_settings:
|
|
label = 'ISSO_SMTP_%s' % name.upper()
|
|
value = env(label, default)
|
|
if name in required and not value.strip():
|
|
raise Exception('Required environment variable is not set: %s' %
|
|
label)
|
|
values.append([label, value])
|
|
return values
|
|
|
|
|
|
def replace_placeholders(setting, values):
|
|
with open(setting, 'r') as _file:
|
|
content = _file.read()
|
|
|
|
for label, value in values:
|
|
content = content.replace(label, value)
|
|
|
|
# make a backup
|
|
create_backup(setting)
|
|
|
|
with open(setting, 'w') as _file:
|
|
_file.write(content)
|
|
|
|
return content
|
|
|
|
|
|
def main():
|
|
values = load_values()
|
|
|
|
for setting in settings:
|
|
print("Replacing settings %s" % setting)
|
|
replace_placeholders(setting, values)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|