source: TI12-security/trunk/NDGSecurity/python/ndg_security_common/ndg/security/common/saml_utils/esg/__init__.py @ 7076

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI12-security/trunk/NDGSecurity/python/ndg_security_common/ndg/security/common/saml_utils/esg/__init__.py@7076
Revision 7076, 5.2 KB checked in by pjkersha, 10 years ago (diff)
  • Property svn:keywords set to Id
Line 
1"""SAML 2.0 Earth System Grid specific functionality
2
3NERC DataGrid Project
4"""
5__author__ = "P J Kershaw"
6__date__ = "09/11/09"
7__copyright__ = "(C) 2009 Science and Technology Facilities Council"
8__license__ = "BSD - see LICENSE file in top-level directory"
9__contact__ = "Philip.Kershaw@stfc.ac.uk"
10__revision__ = '$Id$'
11from ndg.saml.saml2.core import XSStringAttributeValue, AttributeValue, Attribute
12from ndg.saml.common.xml import QName, SAMLConstants
13
14from ndg.security.common.utils import TypedList
15
16
17class  _MetaEsgSamlNamespaces(type):
18    """Meta class enables read-only constants"""
19    @property
20    def FIRSTNAME_ATTRNAME(self):
21        return "urn:esg:first:name"
22   
23    @property
24    def FIRSTNAME_FRIENDLYNAME(self):
25        return "FirstName"
26   
27    @property
28    def LASTNAME_ATTRNAME(self):
29        return "urn:esg:last:name"
30   
31    @property
32    def LASTNAME_FRIENDLYNAME(self):
33        return "LastName"
34   
35    @property
36    def EMAILADDRESS_ATTRNAME(self):
37        return "urn:esg:email:address"
38   
39    @property
40    def EMAILADDRESS_FRIENDLYNAME(self):
41        return "EmailAddress"
42   
43    @property
44    def NAMEID_FORMAT(self):
45        return "urn:esg:openid"
46
47 
48class EsgSamlNamespaces(object):
49    """Earth System Grid specific constants for use with SAML assertions"""
50    __metaclass__ = _MetaEsgSamlNamespaces
51   
52   
53class XSGroupRoleAttributeValue(AttributeValue): 
54    '''ESG Specific Group/Role attribute value.  ESG attribute permissions are
55    organised into group/role pairs
56    '''
57    DEFAULT_NS = "http://www.earthsystemgrid.org"
58    DEFAULT_PREFIX = "esg"
59    TYPE_LOCAL_NAME = "groupRole"
60   
61    GROUP_ATTRIB_NAME = "group"
62    ROLE_ATTRIB_NAME = "role"
63   
64    # QName of the XSI type
65    TYPE_NAME = QName(DEFAULT_NS, 
66                      TYPE_LOCAL_NAME, 
67                      DEFAULT_PREFIX)
68     
69    def __init__(self, 
70                 namespaceURI=DEFAULT_NS, 
71                 elementLocalName=TYPE_LOCAL_NAME, 
72                 namespacePrefix=DEFAULT_PREFIX):
73        '''@param namespaceURI: the namespace the element is in
74        @param elementLocalName: the local name of the XML element this Object
75        represents
76        @param namespacePrefix: the prefix for the given namespace'''
77        self.__namespaceURI = namespaceURI
78        self.__elementLocalName = elementLocalName
79        self.__namespacePrefix = namespacePrefix
80        self.__group = None
81        self.__role = None       
82
83    def _getNamespaceURI(self):
84        return self.__namespaceURI
85
86    def _setNamespaceURI(self, value):
87        if not isinstance(value, basestring):
88            raise TypeError("Expecting %r type for namespaceURI got %r" %
89                            (basestring, value.__class__))
90        self.__namespaceURI = value
91
92    def _getElementLocalName(self):
93        return self.__elementLocalName
94
95    def _setElementLocalName(self, value):
96        if not isinstance(value, basestring):
97            raise TypeError("Expecting %r type for elementLocalName got %r" %
98                            (basestring, value.__class__))
99        self.__elementLocalName = value
100
101    def _getNamespacePrefix(self):
102        return self.__namespacePrefix
103
104    def _setNamespacePrefix(self, value):
105        if not isinstance(value, basestring):
106            raise TypeError("Expecting %r type for namespacePrefix got %r" %
107                            (basestring, value.__class__))
108        self.__namespacePrefix = value
109
110    namespaceURI = property(fget=_getNamespaceURI, 
111                            fset=_setNamespaceURI, 
112                            doc="the namespace the element is in")
113
114    elementLocalName = property(fget=_getElementLocalName, 
115                                fset=_setElementLocalName, 
116                                doc="the local name of the XML element this "
117                                    "Object represents")
118
119    namespacePrefix = property(fget=_getNamespacePrefix, 
120                               fset=_setNamespacePrefix, 
121                               doc="the prefix for the given namespace")
122
123    def _getGroup(self):
124        return self.__group
125     
126    def _setGroup(self, group): 
127        self.__group = group
128     
129    group = property(fget=_getGroup, fset=_setGroup)
130     
131    def _getRole(self):
132        return self.__role
133     
134    def _setRole(self, role):
135        self.__role = role
136     
137    role = property(fget=_getRole, fset=_setRole)
138
139    def getOrderedChildren(self):
140        # no children
141        return None
142
143
144class EsgDefaultQueryAttributes(object):   
145    XSSTRING_NS = "%s#%s" % (
146        SAMLConstants.XSD_NS,
147        XSStringAttributeValue.TYPE_LOCAL_NAME
148    )
149   
150    ATTRIBUTES = TypedList(Attribute)
151    N_ATTRIBUTES = 3
152    ATTRIBUTES += [Attribute(),]*N_ATTRIBUTES
153   
154    ATTRIBUTES[0].name = EsgSamlNamespaces.FIRSTNAME_ATTRNAME
155    ATTRIBUTES[0].friendlyName = EsgSamlNamespaces.FIRSTNAME_FRIENDLYNAME
156    ATTRIBUTES[0].nameFormat = XSSTRING_NS
157
158    ATTRIBUTES[1].name = EsgSamlNamespaces.LASTNAME_ATTRNAME
159    ATTRIBUTES[1].friendlyName = EsgSamlNamespaces.LASTNAME_FRIENDLYNAME
160    ATTRIBUTES[1].nameFormat = XSSTRING_NS
161   
162    ATTRIBUTES[2].name = EsgSamlNamespaces.EMAILADDRESS_ATTRNAME
163    ATTRIBUTES[2].friendlyName = EsgSamlNamespaces.EMAILADDRESS_FRIENDLYNAME
164    ATTRIBUTES[2].nameFormat =  XSSTRING_NS
Note: See TracBrowser for help on using the repository browser.