Merge pull request #375 from dsully/master

Use importlib in place of backports.test.support
This commit is contained in:
Roland Hedberg 2016-10-26 11:37:39 -07:00 committed by GitHub
commit b8c1ae7504
3 changed files with 21 additions and 91 deletions

View File

@ -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"):

View File

@ -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)

View File

@ -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())