2
2
from shibboleth .models import ShibSession
3
3
#SLO (back-channel) / spyne stuff
4
4
from spyne .model .primitive import Unicode
5
- #from spyne.model import XmlAttribute
5
+ from spyne .model import XmlAttribute
6
+ from spyne .model .enum import Enum
6
7
try :
7
8
from spyne .service import Service
8
9
except ImportError :
@@ -23,19 +24,29 @@ class Attributes(Unicode.Attributes):
23
24
min_occurs = 1
24
25
25
26
27
+ class LogoutRequest (ComplexModel ):
28
+ __namespace__ = 'urn:mace:shibboleth:2.0:sp:notify'
29
+ SessionID = MandatoryUnicode
30
+ type = XmlAttribute (Enum ("global" , "local" ,
31
+ type_name = "LogoutNotificationType" ))
32
+
33
+
34
+ class LogoutResponse (ComplexModel ):
35
+ __namespace__ = 'urn:mace:shibboleth:2.0:sp:notify'
36
+ OK = OKType
37
+
38
+
26
39
class LogoutNotificationService (Service ):
27
- @rpc (MandatoryUnicode , _returns = OKType ,
28
- _in_variable_names = {'sessionid' : 'SessionID' },
29
- _out_variable_name = 'OK' ,
30
- )
31
- def LogoutNotification (ctx , sessionid ):
40
+ @rpc (LogoutRequest , _returns = LogoutResponse , _body_style = 'bare' )
41
+ def LogoutNotification (ctx , req ):
32
42
# delete user session based on shib session
33
43
try :
34
- session_mapping = ShibSession .objects .get (shib = sessionid )
44
+ session_mapping = ShibSession .objects .get (shib = req . SessionID )
35
45
except :
36
46
# Can't delete session
37
47
raise Fault (faultcode = 'Client' , faultstring = 'Invalid session id' )
38
48
else :
39
49
# Deleting session
40
- Session .objects .filter (session_key = session_mapping .session_id ).delete ()
41
- return True
50
+ Session .objects .filter (
51
+ session_key = session_mapping .session_id ).delete ()
52
+ return LogoutResponse
0 commit comments