diff options
author | jortel <devnull@localhost> | 2010-02-01 23:20:01 +0000 |
---|---|---|
committer | jortel <devnull@localhost> | 2010-02-01 23:20:01 +0000 |
commit | 2a8fcad2a93cd6674e4d367f1278bc1a86260a58 (patch) | |
tree | 8715c76e79b7d9a98e6a31c226c29ab9fafa857c | |
parent | cd793e3955a75af60a5d755291e7921563cf1508 (diff) | |
download | suds-2a8fcad2a93cd6674e4d367f1278bc1a86260a58.tar.gz |
Add support for <Timestamp/> and <Expires/> tokens for WSSE.
-rw-r--r-- | suds/__init__.py | 2 | ||||
-rw-r--r-- | suds/wsse.py | 51 |
2 files changed, 41 insertions, 12 deletions
diff --git a/suds/__init__.py b/suds/__init__.py index e6094aa..cb2c02d 100644 --- a/suds/__init__.py +++ b/suds/__init__.py @@ -27,7 +27,7 @@ import sys # __version__ = '0.3.9' -__build__="(beta) R654-20100201" +__build__="(beta) R655-20100201" # # Exceptions diff --git a/suds/wsse.py b/suds/wsse.py index 09cfaf9..0fc8301 100644 --- a/suds/wsse.py +++ b/suds/wsse.py @@ -22,7 +22,7 @@ from logging import getLogger from suds import * from suds.sudsobject import Object from suds.sax.element import Element -from datetime import datetime +from datetime import datetime, timedelta try: from hashlib import md5 @@ -83,6 +83,14 @@ class Security(Object): class Token(Object): """ I{Abstract} security token. """ + @classmethod + def now(cls): + return datetime.now() + + @classmethod + def sysdate(cls): + return cls.now().isoformat() + def __init__(self): Object.__init__(self) @@ -99,14 +107,6 @@ class UsernameToken(Token): @ivar created: The token created. @type created: L{datetime} """ - - @classmethod - def now(cls): - return datetime.now() - - @classmethod - def sysdate(cls): - return cls.now().isoformat() def __init__(self, username=None, password=None): """ @@ -133,7 +133,7 @@ class UsernameToken(Token): s = [] s.append(self.username) s.append(self.password) - s.append(self.sysdate()) + s.append(Token.sysdate()) m = md5() m.update(':'.join(s)) self.nonce = m.hexdigest() @@ -148,7 +148,7 @@ class UsernameToken(Token): @type dt: L{datetime} """ if dt is None: - self.created = self.now() + self.created = Token.now() else: self.created = dt @@ -175,3 +175,32 @@ class UsernameToken(Token): n.setText(self.created.isoformat()) root.append(n) return root + + +class Timestamp(Token): + """ + Represents the I{Timestamp} WS-Secuirty token. + @ivar created: The token created. + @type created: L{datetime} + @ivar expires: The token expires. + @type expires: L{datetime} + """ + + def __init__(self, validity=90): + """ + @param validity: The time in seconds. + @type validity: int + """ + Token.__init__(self) + self.created = Token.now() + self.expires = self.created + timedelta(seconds=validity) + + def xml(self): + root = Element("Timestamp", ns=wsuns) + created = Element('Created', ns=wsuns) + created.setText(self.created.isoformat()) + expires = Element('Expires', ns=wsuns) + expires.setText(self.expires.isoformat()) + root.append(created) + root.append(expires) + return root
\ No newline at end of file |