diff --git a/sabnzbd/nzbstuff.py b/sabnzbd/nzbstuff.py index e3e6d4c..edb0b63 100644 --- a/sabnzbd/nzbstuff.py +++ b/sabnzbd/nzbstuff.py @@ -1629,24 +1629,36 @@ def format_time_string(seconds, days=0): return completestr.strip() -RE_PASSWORD1 = re.compile(r'([^/\\]+)[/\\](.+)') -RE_PASSWORD2 = re.compile(r'(.+){{([^{}]+)}}$') -RE_PASSWORD3 = re.compile(r'(.+)\s+password\s*=\s*(.+)$', re.I) def scan_password(name): """ Get password (if any) from the title """ if 'http://' in name or 'https://' in name: return name, None - m = RE_PASSWORD1.search(name) - if not m: - m = RE_PASSWORD2.search(name) - if not m: - m = RE_PASSWORD3.search(name) - if m: - return m.group(1).strip('. '), m.group(2).strip() - else: - return name.strip('. '), None + braces = name.find('{{') + if braces < 0: + braces = len(name) + slash = name.find('/') + + # Look for name/password, but make sure that '/' comes before any {{ + if slash >= 0 and slash < braces and not 'password=' in name: + return name[:slash].strip('. '), name[slash+1:] + + # Look for "name password=password" + pw = name.find('password=') + if pw >= 0: + return name[:pw].strip('. '), name[pw+9:] + + # Look for name{{password}} + if braces < len(name) and name.endswith('}}'): + return name[:braces].strip('. '), name[braces+2:len(name)-2] + + # Look again for name/password + if slash >= 0: + return name[:slash].strip('. '), name[slash+1:] + + # No password found + return name, None def get_attrib_file(path, size):