Better regex.

This commit is contained in:
Andris Raugulis
2022-07-08 09:03:11 +00:00
parent 526a59dfae
commit 4ced12b5f5
+18 -10
View File
@@ -151,6 +151,9 @@ def err(s):
print('[ERROR] {0}'.format(s), file=sys.stderr) print('[ERROR] {0}'.format(s), file=sys.stderr)
sys.exit(1) sys.exit(1)
def _remx(c, v): return re.search(r'\s*' + v + r'\s*"?[=:]\s*(?:"((?:[^"\\]|\\.)*)"|\'((?:[^\'\\]|\\.)*)\')', c)
_refx = lambda mx: to_b(mx.group(1)).decode('unicode_escape').strip()
def parse_xml(xml): def parse_xml(xml):
# type: (str) -> etree._Element # type: (str) -> etree._Element
try: try:
@@ -350,23 +353,28 @@ def mfa_priority(conf, ftype, fprovider):
priority += (512 - line_nr) priority += (512 - line_nr)
return priority return priority
def get_state_token(conf, c): def get_state_token(conf, c):
# type: (Conf, str) -> Optional[str] # type: (Conf, str) -> Optional[str]
rx_state_token = re.search(r'var\s*stateToken\s*=\s*\'([^\']+)\'', c) rx_state_token = _remx(c, 'stateToken')
if not rx_state_token: if not rx_state_token:
dbg(conf.debug, 'not found', 'stateToken') dbg(conf.debug, 'not found', 'stateToken')
return None return None
state_token = to_n(to_b(rx_state_token.group(1)).decode('unicode_escape').strip()) return _refx(rx_state_token)
return state_token
def get_redirect_url(conf, c, current_url=None): def get_redirect_url(conf, c, current_url=None):
# type: (Conf, str, Optional[str]) -> Optional[str] # type: (Conf, str, Optional[str]) -> Optional[str]
rx_base_url = re.search(r'"baseUrl":"([^"]+)",', c) rx_redirect_url = _remx(c, 'redirectUri')
rx_from_uri = re.search(r'"fromUri":"([^"]+)",', c) if rx_redirect_url:
redirect_uri = _refx(rx_redirect_url)
if redirect_uri.startswith('http'):
return redirect_uri
rx_base_url = _remx(c, 'baseUrl')
rx_from_uri = _remx(c, 'fromUri')
if not rx_from_uri: if not rx_from_uri:
dbg(conf.debug, 'not found', 'formUri') dbg(conf.debug, 'not found', 'fromUri')
return None return None
from_uri = to_n(to_b(rx_from_uri.group(1)).decode('unicode_escape').strip()) from_uri = _refx(rx_from_uri)
if from_uri.startswith('http'): if from_uri.startswith('http'):
return from_uri return from_uri
if not rx_base_url: if not rx_base_url:
@@ -374,7 +382,7 @@ def get_redirect_url(conf, c, current_url=None):
if current_url: if current_url:
return urljoin(current_url, from_uri) return urljoin(current_url, from_uri)
return from_uri return from_uri
base_url = to_n(to_b(rx_base_url.group(1)).decode('unicode_escape').strip()) base_url = _refx(rx_base_url)
return base_url + from_uri return base_url + from_uri
def parse_url(url): def parse_url(url):
@@ -467,7 +475,7 @@ def okta_saml(conf, saml_xml):
redirect_url = get_redirect_url(conf, c, url) redirect_url = get_redirect_url(conf, c, url)
if redirect_url is None: if redirect_url is None:
err('did not find redirect url') err('did not find redirect url')
return redirect_url return c, redirect_url
def okta_auth(conf, stateToken=None): def okta_auth(conf, stateToken=None):
# type: (Conf, Optional[str]) -> Any # type: (Conf, Optional[str]) -> Any
@@ -942,7 +950,7 @@ def main():
else: else:
saml_xml = paloalto_prelogin(conf, gateway_url) saml_xml = paloalto_prelogin(conf, gateway_url)
redirect_url = okta_saml(conf, saml_xml) rsaml, redirect_url = okta_saml(conf, saml_xml)
token = okta_auth(conf) token = okta_auth(conf)
log('sessionToken: {0}'.format(token)) log('sessionToken: {0}'.format(token))
if do_portal_login: if do_portal_login: