diff options
| author | Emmanuel Raviart <eraviart@entrouvert.com> | 2004-08-20 00:13:35 +0000 |
|---|---|---|
| committer | Emmanuel Raviart <eraviart@entrouvert.com> | 2004-08-20 00:13:35 +0000 |
| commit | c4344d4b1b3d77f2ef7594c217c298661a27dd5e (patch) | |
| tree | 4d2636f3e07b82aa0a679f30a159cfd1fc277e8d /python | |
| parent | 31fdd0be5742c82d8ff67a965d49b7b9934d9af4 (diff) | |
| download | lasso-c4344d4b1b3d77f2ef7594c217c298661a27dd5e.tar.gz lasso-c4344d4b1b3d77f2ef7594c217c298661a27dd5e.tar.xz lasso-c4344d4b1b3d77f2ef7594c217c298661a27dd5e.zip | |
Updated Python high-level binding and tests.
May all the lights be green!
Diffstat (limited to 'python')
| -rw-r--r-- | python/lasso.py | 168 | ||||
| -rw-r--r-- | python/tests/IdentityProvider.py | 8 | ||||
| -rw-r--r-- | python/tests/LibertyEnabledClientProxy.py | 2 | ||||
| -rw-r--r-- | python/tests/ServiceProvider.py | 10 | ||||
| -rw-r--r-- | python/tests/errorchecking_tests.py | 6 | ||||
| -rw-r--r-- | python/tests/login_tests.py | 9 |
6 files changed, 180 insertions, 23 deletions
diff --git a/python/lasso.py b/python/lasso.py index dda25e09..8df098d7 100644 --- a/python/lasso.py +++ b/python/lasso.py @@ -41,10 +41,14 @@ import lassomod _globals = globals() for constantName, constantValue in lassomod.__dict__.iteritems(): if constantName.startswith('lassoHttpMethod') \ + or constantName.startswith('lassoLibConsent') \ + or constantName.startswith('lassoLibNameIDPolicyType') \ + or constantName.startswith('lassoLibProtocolProfile') \ or constantName.startswith('lassoLoginProtocolProfile') \ or constantName.startswith('lassoMessageType') \ or constantName.startswith('lassoProviderType') \ or constantName.startswith('lassoRequestType') \ + or constantName.startswith('lassoSamlAuthenticationMethod') \ or constantName.startswith('lassoSignatureMethod'): _globals[constantName[5].lower() + constantName[6:]] = constantValue @@ -231,13 +235,68 @@ class Server(_ObjectMixin, lassomod.LassoServer): return lassomod.lasso_server_dump(self) +class Identity(_ObjectMixin, lassomod.LassoIdentity): + # Constructors + + def __new__(cls, metadata = None, public_key = None, private_key = None, certificate = None, + signature_method = signatureMethodRsaSha1): + self = lassomod.lasso_identity_new( + metadata, public_key, private_key, certificate, signature_method) + if self is None: + raise ErrorInstanceCreationFailed('lasso_identity_new') + object.__setattr__(self, '__class__', cls) + return self + + def new_from_dump(cls, dump): + self = lassomod.lasso_identity_new_from_dump(dump) + if self is None: + raise ErrorInstanceCreationFailed('lasso_identity_new_from_dump') + object.__setattr__(self, '__class__', cls) + return self + new_from_dump = classmethod(new_from_dump) + + # Methods + + def dump(self): + return lassomod.lasso_identity_dump(self) + + +class Session(_ObjectMixin, lassomod.LassoSession): + # Constructors + + def __new__(cls, metadata = None, public_key = None, private_key = None, certificate = None, + signature_method = signatureMethodRsaSha1): + self = lassomod.lasso_session_new( + metadata, public_key, private_key, certificate, signature_method) + if self is None: + raise ErrorInstanceCreationFailed('lasso_session_new') + object.__setattr__(self, '__class__', cls) + return self + + def new_from_dump(cls, dump): + self = lassomod.lasso_session_new_from_dump(dump) + if self is None: + raise ErrorInstanceCreationFailed('lasso_session_new_from_dump') + object.__setattr__(self, '__class__', cls) + return self + new_from_dump = classmethod(new_from_dump) + + # Methods + + def dump(self): + return lassomod.lasso_session_dump(self) + + class _ProfileChild(object): """Abstract class for all Lasso objects that inherit from LassoProfile""" # Attributes def get_identity(self): - return lassomod.lasso_profile_get_identity(self.parent) + identity = lassomod.lasso_profile_get_identity(self.parent) + if identity is not None: + object.__setattr__(identity, '__class__', Identity) + return identity def set_identity(self, identity): lassomod.lasso_profile_set_identity(self.parent, identity) identity = property(get_identity, set_identity) @@ -305,11 +364,17 @@ class _ProfileChild(object): response_type = property(get_response_type) def get_server(self): - return self.parent.server + server = self.parent.server + if server is not None: + object.__setattr__(server, '__class__', Server) + return server server = property(get_server) def get_session(self): - return lassomod.lasso_profile_get_session(self.parent) + session = lassomod.lasso_profile_get_session(self.parent) + if session is not None: + object.__setattr__(session, '__class__', Session) + return session def set_session(self, session): lassomod.lasso_profile_set_session(self.parent, session) session = property(get_session, set_session) @@ -469,6 +534,103 @@ class Logout(_ObjectMixin, lassomod.LassoLogout, _ProfileChild): raise newError(errorCode, 'lasso_logout_validate_request') +class Lecp(_ObjectMixin, lassomod.LassoLecp): + # Attributes + + def get_msg_body(self): + return self.parent.parent.msg_body + msg_body = property(get_msg_body) + + def get_msg_url(self): + return self.parent.parent.msg_url + msg_url = property(get_msg_url) + + def get_request(self): + request_type = self.request_type + if request_type == messageTypeAuthnRequest: + request = lassomod.lasso_profile_get_authn_request_ref(self.parent.parent) + object.__setattr__(request, '__class__', AuthnRequest) + elif request_type == messageTypeRequest: + request = lassomod.lasso_profile_get_request_ref(self.parent.parent) + object.__setattr__(request, '__class__', Request) + else: + raise ErrorUnknownRequestType('lasso_profile_get_???_request', request_type) + return request + request = property(get_request) + + def get_request_type(self): + return self.parent.parent.request_type + request_type = property(get_request_type) + + # Constructors + + def __new__(cls, server): + self = lassomod.lasso_lecp_new(server) + if self is None: + raise ErrorInstanceCreationFailed('lasso_lecp_new') + object.__setattr__(self, '__class__', cls) + return self + + def new_from_dump(cls, server, dump): + self = lassomod.lasso_lecp_new_from_dump(server, dump) + if self is None: + raise ErrorInstanceCreationFailed('lasso_lecp_new_from_dump') + object.__setattr__(self, '__class__', cls) + return self + new_from_dump = classmethod(new_from_dump) + + # Methods + + def build_authn_request_envelope_msg(self): + errorCode = lassomod.lasso_lecp_build_authn_request_envelope_msg(self) + if errorCode: + raise newError(errorCode, 'lasso_lecp_build_authn_request_envelope_msg') + + def build_authn_request_msg(self, remote_providerID): + errorCode = lassomod.lasso_lecp_build_authn_request_msg(self, remote_providerID) + if errorCode: + raise newError(errorCode, 'lasso_lecp_build_authn_request_msg') + + def build_authn_response_envelope_msg(self, authentication_result, authenticationMethod, + reauthenticateOnOrAfter): + errorCode = lassomod.lasso_lecp_build_authn_response_envelope_msg( + self, authentication_result, authenticationMethod, reauthenticateOnOrAfter) + if errorCode: + raise newError(errorCode, 'lasso_lecp_build_authn_response_envelope_msg') + + def build_authn_response_msg(self): + errorCode = lassomod.lasso_lecp_build_authn_response_msg(self) + if errorCode: + raise newError(errorCode, 'lasso_lecp_build_authn_response_msg') + + def init_authn_request(self): + errorCode = lassomod.lasso_lecp_init_authn_request(self) + if errorCode: + raise newError(errorCode, 'lasso_lecp_init_authn_request') + + def init_from_authn_request_msg(self, authn_request_msg, authn_request_method): + errorCode = lassomod.lasso_lecp_init_from_authn_request_msg( + self, authn_request_msg, authn_request_method) + if errorCode: + raise newError(errorCode, 'lasso_lecp_init_from_authn_request_msg') + + def process_authn_request_envelope_msg(self, request_msg): + errorCode = lassomod.lasso_lecp_process_authn_request_envelope_msg(self, request_msg) + if errorCode: + raise newError(errorCode, 'lasso_lecp_process_authn_request_envelope_msg') + + def process_authn_response_envelope_msg(self, response_msg): + errorCode = lassomod.lasso_lecp_process_authn_response_envelope_msg(self, response_msg) + if errorCode: + raise newError(errorCode, 'lasso_lecp_process_authn_response_envelope_msg') + + def set_identity_from_dump(self, dump): + lassomod.lasso_profile_set_identity_from_dump(self.parent.parent, dump) + + def set_session_from_dump(self, dump): + lassomod.lasso_profile_set_session_from_dump(self.parent.parent, dump) + + ################################################################################ # Module Initialization ################################################################################ diff --git a/python/tests/IdentityProvider.py b/python/tests/IdentityProvider.py index 8ea800e6..90673d61 100644 --- a/python/tests/IdentityProvider.py +++ b/python/tests/IdentityProvider.py @@ -55,7 +55,7 @@ class IdentityProviderMixin(Provider.ProviderMixin): lassoServer = self.getLassoServer() if handler.httpRequest.method == 'GET': # Single sign-on using HTTP redirect. - login = lasso.Login.new(lassoServer) + login = lasso.Login(lassoServer) session = handler.session if session is not None and session.lassoSessionDump is not None: login.set_session_from_dump(session.lassoSessionDump) @@ -82,7 +82,7 @@ class IdentityProviderMixin(Provider.ProviderMixin): elif handler.httpRequest.method == 'POST' \ and handler.httpRequest.headers.get('Content-Type', None) == 'text/xml': # SOAP request => LECP single sign-on. - lecp = lasso.Lecp.new(lassoServer) + lecp = lasso.Lecp(lassoServer) session = handler.session if session is not None and session.lassoSessionDump is not None: lecp.set_session_from_dump(session.lassoSessionDump) @@ -160,7 +160,7 @@ class IdentityProviderMixin(Provider.ProviderMixin): requestType = lasso.get_request_type_from_soap_msg(soapRequestMsg) if requestType == lasso.requestTypeLogin: lassoServer = self.getLassoServer() - login = lasso.Login.new(lassoServer) + login = lasso.Login(lassoServer) # FIXME: What should we return when there is an error in process_request_msg? # FIXME: Create a new Lasso function build_response_msg, with either None or # soapResponseMessage as argument. It is called after process_request_message and @@ -177,7 +177,7 @@ class IdentityProviderMixin(Provider.ProviderMixin): headers = {'Content-Type': 'text/xml'}, body = soapResponseMsg) elif requestType == lasso.requestTypeLogout: lassoServer = self.getLassoServer() - logout = lasso.Logout.new(lassoServer, lasso.providerTypeIdp) + logout = lasso.Logout(lassoServer, lasso.providerTypeIdp) logout.process_request_msg(soapRequestMsg, lasso.httpMethodSoap) nameIdentifier = logout.nameIdentifier failUnless(nameIdentifier) diff --git a/python/tests/LibertyEnabledClientProxy.py b/python/tests/LibertyEnabledClientProxy.py index 7c4d5647..b925d8fc 100644 --- a/python/tests/LibertyEnabledClientProxy.py +++ b/python/tests/LibertyEnabledClientProxy.py @@ -92,7 +92,7 @@ class LibertyEnabledClientProxyMixin(abstractweb.WebClientMixin): failUnless(libertyEnabledHeader) failUnless('LIBV=urn:liberty:iff:2003-08' in libertyEnabledHeader) lassoServer = self.getLassoServer() - lecp = lasso.Lecp.new(lassoServer) + lecp = lasso.Lecp(lassoServer) authnRequestEnvelope = httpResponse.body lecp.process_authn_request_envelope_msg(authnRequestEnvelope) # FIXME: The service provider could return an IDPList in authnRequestEnvelope, so that diff --git a/python/tests/ServiceProvider.py b/python/tests/ServiceProvider.py index 3f06d0fe..a9d75a72 100644 --- a/python/tests/ServiceProvider.py +++ b/python/tests/ServiceProvider.py @@ -33,7 +33,7 @@ class ServiceProviderMixin(Provider.ProviderMixin): def assertionConsumer(self, handler): lassoServer = self.getLassoServer() - login = lasso.Login.new(lassoServer) + login = lasso.Login(lassoServer) if handler.httpRequest.method == 'GET': relayState = handler.httpRequest.getQueryField('RelayState', None) @@ -170,7 +170,7 @@ class ServiceProviderMixin(Provider.ProviderMixin): libertyEnabled = handler.httpRequest.headers.get('Liberty-Enabled', None) userAgent = handler.httpRequest.headers.get('User-Agent', None) # FIXME: Lasso should have a function to compute useLecp. - # Or this should be done in lasso.Login.new(lassoServer, libertyEnabled, userAgent) + # Or this should be done in lasso.Login(lassoServer, libertyEnabled, userAgent) useLecp = False if libertyEnabled: useLecp = 'urn:liberty:iff:2003-08' in libertyEnabled @@ -188,7 +188,7 @@ class ServiceProviderMixin(Provider.ProviderMixin): relayState = handler.httpRequest.getQueryField('RelayState', None) lassoServer = self.getLassoServer() if useLecp: - lecp = lasso.Lecp.new(lassoServer) + lecp = lasso.Lecp(lassoServer) lecp.init_authn_request() failUnlessEqual(lecp.request_type, lasso.messageTypeAuthnRequest) @@ -222,7 +222,7 @@ class ServiceProviderMixin(Provider.ProviderMixin): headers.update(self.libertyEnabledHeaders) return handler.respond(headers = headers, body = authnRequestEnvelopeMsg) else: - login = lasso.Login.new(lassoServer) + login = lasso.Login(lassoServer) login.init_authn_request() failUnlessEqual(login.request_type, lasso.messageTypeAuthnRequest) if forceAuthn: @@ -270,7 +270,7 @@ class ServiceProviderMixin(Provider.ProviderMixin): def logout_do(self, handler, session, user): lassoServer = self.getLassoServer() - logout = lasso.Logout.new(lassoServer, lasso.providerTypeSp) + logout = lasso.Logout(lassoServer, lasso.providerTypeSp) if user.lassoIdentityDump is not None: logout.set_identity_from_dump(user.lassoIdentityDump) if session.lassoSessionDump is not None: diff --git a/python/tests/errorchecking_tests.py b/python/tests/errorchecking_tests.py index ab15bd69..adf2ac78 100644 --- a/python/tests/errorchecking_tests.py +++ b/python/tests/errorchecking_tests.py @@ -37,8 +37,6 @@ import lasso class ErrorCheckingTestCase(unittest.TestCase): def DISABLEDtest01(self): - # the user should call lasso.Login.new(); but what if it doesn't ? - # An exception should be raised; the program should not segfault. try: lasso.Login(None).msg_url except: @@ -54,13 +52,13 @@ class ErrorCheckingTestCase(unittest.TestCase): def test03(self): # This time; we got something wrong as query string; we pass it to # init_from_authn_request_msg; surely it shouldn't segfault - server = lasso.Server.new( + server = lasso.Server( '../../tests/data/idp1-la/metadata.xml', None, # '../../tests/data/idp1-la/public-key.pem' is no more used '../../tests/data/idp1-la/private-key-raw.pem', '../../tests/data/idp1-la/certificate.pem', lasso.signatureMethodRsaSha1) - login = lasso.Login.new(server) + login = lasso.Login(server) try: login.init_from_authn_request_msg("", lasso.httpMethodRedirect) except: diff --git a/python/tests/login_tests.py b/python/tests/login_tests.py index 72735643..9f8e877e 100644 --- a/python/tests/login_tests.py +++ b/python/tests/login_tests.py @@ -44,7 +44,7 @@ class LoginTestCase(unittest.TestCase): site = IdentityProvider(internet, 'https://idp1') site.providerId = 'https://idp1/metadata' - lassoServer = lasso.Server.new( + lassoServer = lasso.Server( '../../tests/data/idp1-la/metadata.xml', None, # '../../tests/data/idp1-la/public-key.pem' is no more used '../../tests/data/idp1-la/private-key-raw.pem', @@ -56,7 +56,6 @@ class LoginTestCase(unittest.TestCase): '../../tests/data/ca1-la/certificate.pem') site.lassoServerDump = lassoServer.dump() failUnless(site.lassoServerDump) - lassoServer.destroy() site.newUser('Chantereau') site.newUser('Clapies') @@ -67,21 +66,20 @@ class LoginTestCase(unittest.TestCase): def generateLibertyEnabledClientProxy(self, internet): clientProxy = LibertyEnabledClientProxy(internet) - lassoServer = lasso.Server.new() + lassoServer = lasso.Server() lassoServer.add_provider( '../../tests/data/idp1-la/metadata.xml', '../../tests/data/idp1-la/public-key.pem', '../../tests/data/ca1-la/certificate.pem') clientProxy.lassoServerDump = lassoServer.dump() failUnless(clientProxy.lassoServerDump) - lassoServer.destroy() return clientProxy def generateSpSite(self, internet): site = ServiceProvider(internet, 'https://sp1') site.providerId = 'https://service-provider/metadata' - lassoServer = lasso.Server.new( + lassoServer = lasso.Server( '../../tests/data/sp1-la/metadata.xml', None, # '../../tests/data/sp1-la/public-key.pem' is no more used '../../tests/data/sp1-la/private-key-raw.pem', @@ -93,7 +91,6 @@ class LoginTestCase(unittest.TestCase): '../../tests/data/ca1-la/certificate.pem') site.lassoServerDump = lassoServer.dump() failUnless(site.lassoServerDump) - lassoServer.destroy() site.newUser('Nicolas') site.newUser('Romain') |
