summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjortel <devnull@localhost>2010-02-01 23:20:01 +0000
committerjortel <devnull@localhost>2010-02-01 23:20:01 +0000
commit2a8fcad2a93cd6674e4d367f1278bc1a86260a58 (patch)
tree8715c76e79b7d9a98e6a31c226c29ab9fafa857c
parentcd793e3955a75af60a5d755291e7921563cf1508 (diff)
downloadsuds-2a8fcad2a93cd6674e4d367f1278bc1a86260a58.tar.gz
Add support for <Timestamp/> and <Expires/> tokens for WSSE.
-rw-r--r--suds/__init__.py2
-rw-r--r--suds/wsse.py51
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