summaryrefslogtreecommitdiffstats
path: root/python
diff options
context:
space:
mode:
authorEmmanuel Raviart <eraviart@entrouvert.com>2004-08-20 00:13:35 +0000
committerEmmanuel Raviart <eraviart@entrouvert.com>2004-08-20 00:13:35 +0000
commitc4344d4b1b3d77f2ef7594c217c298661a27dd5e (patch)
tree4d2636f3e07b82aa0a679f30a159cfd1fc277e8d /python
parent31fdd0be5742c82d8ff67a965d49b7b9934d9af4 (diff)
downloadlasso-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.py168
-rw-r--r--python/tests/IdentityProvider.py8
-rw-r--r--python/tests/LibertyEnabledClientProxy.py2
-rw-r--r--python/tests/ServiceProvider.py10
-rw-r--r--python/tests/errorchecking_tests.py6
-rw-r--r--python/tests/login_tests.py9
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')