summaryrefslogtreecommitdiffhomepage
path: root/libs/apprise/URLBase.py
diff options
context:
space:
mode:
Diffstat (limited to 'libs/apprise/URLBase.py')
-rw-r--r--libs/apprise/URLBase.py121
1 files changed, 74 insertions, 47 deletions
diff --git a/libs/apprise/URLBase.py b/libs/apprise/URLBase.py
index 2467a4c1e..90ea85c66 100644
--- a/libs/apprise/URLBase.py
+++ b/libs/apprise/URLBase.py
@@ -670,6 +670,79 @@ class URLBase:
}
@staticmethod
+ def post_process_parse_url_results(results):
+ """
+ After parsing the URL, this function applies a bit of extra logic to
+ support extra entries like `pass` becoming `password`, etc
+
+ This function assumes that parse_url() was called previously setting
+ up the basics to be checked
+ """
+
+ # if our URL ends with an 's', then assume our secure flag is set.
+ results['secure'] = (results['schema'][-1] == 's')
+
+ # QSD Checking (over-rides all)
+ qsd_exists = True if isinstance(results.get('qsd'), dict) else False
+
+ if qsd_exists and 'verify' in results['qsd']:
+ # Pulled from URL String
+ results['verify'] = parse_bool(
+ results['qsd'].get('verify', True))
+
+ elif 'verify' in results:
+ # Pulled from YAML Configuratoin
+ results['verify'] = parse_bool(results.get('verify', True))
+
+ else:
+ # Support SSL Certificate 'verify' keyword. Default to being
+ # enabled
+ results['verify'] = True
+
+ # Password overrides
+ if 'pass' in results:
+ results['password'] = results['pass']
+ del results['pass']
+
+ if qsd_exists:
+ if 'password' in results['qsd']:
+ results['password'] = results['qsd']['password']
+ if 'pass' in results['qsd']:
+ results['password'] = results['qsd']['pass']
+
+ # User overrides
+ if 'user' in results['qsd']:
+ results['user'] = results['qsd']['user']
+
+ # parse_url() always creates a 'password' and 'user' entry in the
+ # results returned. Entries are set to None if they weren't
+ # specified
+ if results['password'] is None and 'user' in results['qsd']:
+ # Handle cases where the user= provided in 2 locations, we want
+ # the original to fall back as a being a password (if one
+ # wasn't otherwise defined) e.g.
+ # mailtos://PASSWORD@[email protected]
+ # - in the above, the PASSWORD gets lost in the parse url()
+ # since a user= over-ride is specified.
+ presults = parse_url(results['url'])
+ if presults:
+ # Store our Password
+ results['password'] = presults['user']
+
+ # Store our socket read timeout if specified
+ if 'rto' in results['qsd']:
+ results['rto'] = results['qsd']['rto']
+
+ # Store our socket connect timeout if specified
+ if 'cto' in results['qsd']:
+ results['cto'] = results['qsd']['cto']
+
+ if 'port' in results['qsd']:
+ results['port'] = results['qsd']['port']
+
+ return results
+
+ @staticmethod
def parse_url(url, verify_host=True, plus_to_space=False,
strict_port=False):
"""Parses the URL and returns it broken apart into a dictionary.
@@ -698,53 +771,7 @@ class URLBase:
# We're done; we failed to parse our url
return results
- # if our URL ends with an 's', then assume our secure flag is set.
- results['secure'] = (results['schema'][-1] == 's')
-
- # Support SSL Certificate 'verify' keyword. Default to being enabled
- results['verify'] = True
-
- if 'verify' in results['qsd']:
- results['verify'] = parse_bool(
- results['qsd'].get('verify', True))
-
- # Password overrides
- if 'password' in results['qsd']:
- results['password'] = results['qsd']['password']
- if 'pass' in results['qsd']:
- results['password'] = results['qsd']['pass']
-
- # User overrides
- if 'user' in results['qsd']:
- results['user'] = results['qsd']['user']
-
- # parse_url() always creates a 'password' and 'user' entry in the
- # results returned. Entries are set to None if they weren't specified
- if results['password'] is None and 'user' in results['qsd']:
- # Handle cases where the user= provided in 2 locations, we want
- # the original to fall back as a being a password (if one wasn't
- # otherwise defined)
- # e.g.
- # mailtos://PASSWORD@[email protected]
- # - the PASSWORD gets lost in the parse url() since a user=
- # over-ride is specified.
- presults = parse_url(results['url'])
- if presults:
- # Store our Password
- results['password'] = presults['user']
-
- # Store our socket read timeout if specified
- if 'rto' in results['qsd']:
- results['rto'] = results['qsd']['rto']
-
- # Store our socket connect timeout if specified
- if 'cto' in results['qsd']:
- results['cto'] = results['qsd']['cto']
-
- if 'port' in results['qsd']:
- results['port'] = results['qsd']['port']
-
- return results
+ return URLBase.post_process_parse_url_results(results)
@staticmethod
def http_response_code_lookup(code, response_mask=None):