|
47 | 47 | _SPLIT = re.compile(r',(?![^\(\)]*\))')
|
48 | 48 | _PRIORITY = re.compile(r'^\(address=(.+),priority=(\d+)\)$', re.VERBOSE)
|
49 | 49 | ssl_opts = ["ssl-cert", "ssl-ca", "ssl-key", "ssl-crl"]
|
| 50 | +sess_opts = ssl_opts + ["user", "password", "schema", "host", "port", |
| 51 | + "routers", "socket", "ssl-mode"] |
50 | 52 |
|
51 | 53 | def _parse_address_list(path):
|
52 | 54 | """Parses a list of host, port pairs
|
@@ -135,18 +137,27 @@ def _validate_settings(settings):
|
135 | 137 | Args:
|
136 | 138 | settings: dict containing connection settings.
|
137 | 139 | """
|
| 140 | + invalid_opts = set(settings.keys()).difference(sess_opts) |
| 141 | + if invalid_opts: |
| 142 | + raise ProgrammingError("Invalid options: {0}." |
| 143 | + "".format(", ".join(invalid_opts))) |
| 144 | + |
138 | 145 | if "routers" in settings:
|
139 | 146 | for router in settings["routers"]:
|
140 | 147 | _validate_hosts(router)
|
141 | 148 | elif "host" in settings:
|
142 | 149 | _validate_hosts(settings)
|
143 | 150 |
|
144 |
| - if "ssl-mode" in settings and settings["ssl-mode"] not in SSLMode: |
145 |
| - raise InterfaceError("Invalid SSL Mode '{0}'." |
146 |
| - "".format(settings["ssl-mode"])) |
147 |
| - elif settings.get("ssl-mode") == SSLMode.DISABLED and \ |
148 |
| - any(key in settings for key in ssl_opts): |
149 |
| - raise InterfaceError("SSL options used with ssl-mode 'disabled'.") |
| 151 | + if "ssl-mode" in settings: |
| 152 | + try: |
| 153 | + settings["ssl-mode"] = settings["ssl-mode"].lower() |
| 154 | + SSLMode.index(settings["ssl-mode"]) |
| 155 | + except (AttributeError, ValueError): |
| 156 | + raise InterfaceError("Invalid SSL Mode '{0}'." |
| 157 | + "".format(settings["ssl-mode"])) |
| 158 | + if settings["ssl-mode"] == SSLMode.DISABLED and \ |
| 159 | + any(key in settings for key in ssl_opts): |
| 160 | + raise InterfaceError("SSL options used with ssl-mode 'disabled'.") |
150 | 161 |
|
151 | 162 | if "ssl-crl" in settings and not "ssl-ca" in settings:
|
152 | 163 | raise InterfaceError("CA Certificate not provided.")
|
|
0 commit comments