Merge pull request #375 from dsully/master
Use importlib in place of backports.test.support
This commit is contained in:
commit
b8c1ae7504
@ -1,13 +1,14 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
import copy
|
import copy
|
||||||
import sys
|
import importlib
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import logging
|
import logging
|
||||||
import logging.handlers
|
import logging.handlers
|
||||||
import six
|
import os
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
from future.backports.test.support import import_module
|
import six
|
||||||
|
|
||||||
from saml2 import root_logger, BINDING_URI, SAMLError
|
from saml2 import root_logger, BINDING_URI, SAMLError
|
||||||
from saml2 import BINDING_SOAP
|
from saml2 import BINDING_SOAP
|
||||||
@ -359,7 +360,7 @@ class Config(object):
|
|||||||
else:
|
else:
|
||||||
sys.path.insert(0, head)
|
sys.path.insert(0, head)
|
||||||
|
|
||||||
return import_module(tail)
|
return importlib.import_module(tail)
|
||||||
|
|
||||||
def load_file(self, config_file, metadata_construction=False):
|
def load_file(self, config_file, metadata_construction=False):
|
||||||
if config_file.endswith(".py"):
|
if config_file.endswith(".py"):
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
import hashlib
|
import hashlib
|
||||||
|
import importlib
|
||||||
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import json
|
|
||||||
import requests
|
|
||||||
import six
|
|
||||||
|
|
||||||
from hashlib import sha1
|
from hashlib import sha1
|
||||||
from os.path import isfile
|
from os.path import isfile
|
||||||
from os.path import join
|
from os.path import join
|
||||||
|
|
||||||
from future.backports.test.support import import_module
|
import requests
|
||||||
|
import six
|
||||||
|
|
||||||
from saml2 import md
|
from saml2 import md
|
||||||
from saml2 import saml
|
from saml2 import saml
|
||||||
@ -694,7 +694,7 @@ class MetaDataLoader(MetaDataFile):
|
|||||||
i = func.rfind('.')
|
i = func.rfind('.')
|
||||||
module, attr = func[:i], func[i + 1:]
|
module, attr = func[:i], func[i + 1:]
|
||||||
try:
|
try:
|
||||||
mod = import_module(module)
|
mod = importlib.import_module(module)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise RuntimeError(
|
raise RuntimeError(
|
||||||
'Cannot find metadata provider function %s: "%s"' % (func, e))
|
'Cannot find metadata provider function %s: "%s"' % (func, e))
|
||||||
@ -930,7 +930,7 @@ class MetadataStore(MetaData):
|
|||||||
raise SAMLError("Misconfiguration in metadata %s" % item)
|
raise SAMLError("Misconfiguration in metadata %s" % item)
|
||||||
mod, clas = key.rsplit('.', 1)
|
mod, clas = key.rsplit('.', 1)
|
||||||
try:
|
try:
|
||||||
mod = import_module(mod)
|
mod = importlib.import_module(mod)
|
||||||
MDloader = getattr(mod, clas)
|
MDloader = getattr(mod, clas)
|
||||||
except (ImportError, AttributeError):
|
except (ImportError, AttributeError):
|
||||||
raise SAMLError("Unknown metadata loader %s" % key)
|
raise SAMLError("Unknown metadata loader %s" % key)
|
||||||
|
@ -1,33 +1,23 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import base64
|
||||||
|
import hashlib
|
||||||
|
import hmac
|
||||||
import logging
|
import logging
|
||||||
import random
|
import random
|
||||||
|
|
||||||
import time
|
|
||||||
import base64
|
|
||||||
import six
|
|
||||||
import sys
|
|
||||||
import hmac
|
|
||||||
import string
|
import string
|
||||||
|
import sys
|
||||||
# from python 2.5
|
import time
|
||||||
import imp
|
|
||||||
import traceback
|
import traceback
|
||||||
|
import zlib
|
||||||
|
|
||||||
if sys.version_info >= (2, 5):
|
import six
|
||||||
import hashlib
|
|
||||||
else: # before python 2.5
|
|
||||||
import sha
|
|
||||||
|
|
||||||
from saml2 import saml
|
from saml2 import saml
|
||||||
from saml2 import samlp
|
from saml2 import samlp
|
||||||
from saml2 import VERSION
|
from saml2 import VERSION
|
||||||
from saml2.time_util import instant
|
from saml2.time_util import instant
|
||||||
|
|
||||||
try:
|
|
||||||
from hashlib import md5
|
|
||||||
except ImportError:
|
|
||||||
from md5 import md5
|
|
||||||
import zlib
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -407,67 +397,6 @@ def verify_signature(secret, parts):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
FTICKS_FORMAT = "F-TICKS/SWAMID/2.0%s#"
|
|
||||||
|
|
||||||
|
|
||||||
def fticks_log(sp, logf, idp_entity_id, user_id, secret, assertion):
|
|
||||||
"""
|
|
||||||
'F-TICKS/' federationIdentifier '/' version *('#' attribute '=' value) '#'
|
|
||||||
Allowed attributes:
|
|
||||||
TS the login time stamp
|
|
||||||
RP the relying party entityID
|
|
||||||
AP the asserting party entityID (typcially the IdP)
|
|
||||||
PN a sha256-hash of the local principal name and a unique key
|
|
||||||
AM the authentication method URN
|
|
||||||
|
|
||||||
:param sp: Client instance
|
|
||||||
:param logf: The log function to use
|
|
||||||
:param idp_entity_id: IdP entity ID
|
|
||||||
:param user_id: The user identifier
|
|
||||||
:param secret: A salt to make the hash more secure
|
|
||||||
:param assertion: A SAML Assertion instance gotten from the IdP
|
|
||||||
"""
|
|
||||||
csum = hmac.new(secret, digestmod=hashlib.sha1)
|
|
||||||
csum.update(user_id)
|
|
||||||
ac = assertion.AuthnStatement[0].AuthnContext[0]
|
|
||||||
|
|
||||||
info = {
|
|
||||||
"TS": time.time(),
|
|
||||||
"RP": sp.entity_id,
|
|
||||||
"AP": idp_entity_id,
|
|
||||||
"PN": csum.hexdigest(),
|
|
||||||
"AM": ac.AuthnContextClassRef.text
|
|
||||||
}
|
|
||||||
logf.info(FTICKS_FORMAT % "#".join(["%s=%s" % (a, v) for a, v in info]))
|
|
||||||
|
|
||||||
|
|
||||||
def dynamic_importer(name, class_name=None):
|
|
||||||
"""
|
|
||||||
Dynamically imports modules / classes
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
fp, pathname, description = imp.find_module(name)
|
|
||||||
except ImportError:
|
|
||||||
print("unable to locate module: " + name)
|
|
||||||
return None, None
|
|
||||||
|
|
||||||
try:
|
|
||||||
package = imp.load_module(name, fp, pathname, description)
|
|
||||||
except Exception:
|
|
||||||
raise
|
|
||||||
|
|
||||||
if class_name:
|
|
||||||
try:
|
|
||||||
_class = imp.load_module("%s.%s" % (name, class_name), fp,
|
|
||||||
pathname, description)
|
|
||||||
except Exception:
|
|
||||||
raise
|
|
||||||
|
|
||||||
return package, _class
|
|
||||||
else:
|
|
||||||
return package, None
|
|
||||||
|
|
||||||
|
|
||||||
def exception_trace(exc):
|
def exception_trace(exc):
|
||||||
message = traceback.format_exception(*sys.exc_info())
|
message = traceback.format_exception(*sys.exc_info())
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user