From b409d9faa0bda143f4198f434719227041d0ae25 Mon Sep 17 00:00:00 2001 From: Calin Crisan Date: Sat, 26 Dec 2015 16:24:58 +0200 Subject: [PATCH] semicolons are now accepted in smtp account passwords --- motioneye/config.py | 17 +++++++---------- motioneye/sendmail.py | 1 + motioneye/templates/main.html | 4 ++-- motioneye/utils.py | 16 ++++++++++++++++ 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/motioneye/config.py b/motioneye/config.py index 2c3df86..9e4900e 100644 --- a/motioneye/config.py +++ b/motioneye/config.py @@ -873,7 +873,7 @@ def motion_camera_ui_to_dict(ui, old_config=None): 'server': ui['email_notifications_smtp_server'], 'port': ui['email_notifications_smtp_port'], 'account': ui['email_notifications_smtp_account'], - 'password': ui['email_notifications_smtp_password'], + 'password': ui['email_notifications_smtp_password'].replace(';', '\\;'), 'tls': ui['email_notifications_smtp_tls'], 'to': emails, 'timespan': ui['email_notifications_picture_time_span']}) @@ -887,8 +887,7 @@ def motion_camera_ui_to_dict(ui, old_config=None): 'url': url}) if ui['command_notifications_enabled']: - commands = ui['command_notifications_exec'].split(';') - on_event_start += [c.strip() for c in commands] + on_event_start += utils.split_semicolon(ui['command_notifications_exec']) data['on_event_start'] = '; '.join(on_event_start) @@ -909,8 +908,7 @@ def motion_camera_ui_to_dict(ui, old_config=None): 'url': url}) if ui['command_storage_enabled']: - commands = ui['command_storage_exec'].split(';') - on_movie_end += [c.strip() for c in commands] + on_movie_end += utils.split_semicolon(ui['command_storage_exec']) data['on_movie_end'] = '; '.join(on_movie_end) @@ -926,8 +924,7 @@ def motion_camera_ui_to_dict(ui, old_config=None): 'url': url}) if ui['command_storage_enabled']: - commands = ui['command_storage_exec'].split(';') - on_picture_save += [c.strip() for c in commands] + on_picture_save += utils.split_semicolon(ui['command_storage_exec']) data['on_picture_save'] = '; '.join(on_picture_save) @@ -1230,7 +1227,7 @@ def motion_camera_dict_to_ui(data): # event start on_event_start = data.get('on_event_start') or [] if on_event_start: - on_event_start = [e.strip() for e in on_event_start.split(';')] + on_event_start = utils.split_semicolon(on_event_start) ui['email_notifications_picture_time_span'] = 0 command_notifications = [] @@ -1245,7 +1242,7 @@ def motion_camera_dict_to_ui(data): ui['email_notifications_smtp_server'] = e[-10] ui['email_notifications_smtp_port'] = e[-9] ui['email_notifications_smtp_account'] = e[-8] - ui['email_notifications_smtp_password'] = e[-7] + ui['email_notifications_smtp_password'] = e[-7].replace('\\;', ';') ui['email_notifications_smtp_tls'] = e[-6].lower() == 'true' ui['email_notifications_addresses'] = e[-5] try: @@ -1277,7 +1274,7 @@ def motion_camera_dict_to_ui(data): # movie end on_movie_end = data.get('on_movie_end') or [] if on_movie_end: - on_movie_end = [e.strip() for e in on_movie_end.split(';')] + on_movie_end = utils.split_semicolon(on_movie_end) command_storage = [] for e in on_movie_end: diff --git a/motioneye/sendmail.py b/motioneye/sendmail.py index 59efe64..6dba6f1 100644 --- a/motioneye/sendmail.py +++ b/motioneye/sendmail.py @@ -168,6 +168,7 @@ def main(parser, args): message = messages.get(options.msg_id) subject = subjects.get(options.msg_id) options.moment = datetime.datetime.strptime(options.moment, '%Y-%m-%dT%H:%M:%S') + options.password = options.password.replace('\\;', ';') # unescape password # do not wait too long for media list, # email notifications are critical diff --git a/motioneye/templates/main.html b/motioneye/templates/main.html index 6b35a88..b2f0008 100644 --- a/motioneye/templates/main.html +++ b/motioneye/templates/main.html @@ -479,7 +479,7 @@ Command - ? + ? {% for config in camera_sections.get('storage', {}).get('configs', []) %} {{config_item(config)}} @@ -866,7 +866,7 @@ Command - ? + ? {% for config in camera_sections.get('notifications', {}).get('configs', []) %} {{config_item(config, "motionDetectionEnabled")}} diff --git a/motioneye/utils.py b/motioneye/utils.py index 17472b6..212379f 100644 --- a/motioneye/utils.py +++ b/motioneye/utils.py @@ -283,6 +283,22 @@ def make_unicode(s): return str(s).decode('utf8') +def split_semicolon(s): + parts = s.split(';') + merged_parts = [] + for p in parts: + if merged_parts and merged_parts[-1][-1] == '\\': + merged_parts[-1] = merged_parts[-1][:-1] + ';' + p + + else: + merged_parts.append(p) + + if not merged_parts: + return [] + + return [p.strip() for p in merged_parts] + + def get_disk_usage(path): logging.debug('getting disk usage for path %(path)s...' % { 'path': path}) -- 2.39.5