- Timestamp:
- 14/04/10 09:45:50 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TI12-security/trunk/NDG_XACML/ndg/xacml/core/functions/__init__.py
r6803 r6804 17 17 18 18 from ndg.xacml.core.attributevalue import AttributeValue 19 from ndg.xacml.utils import VettedDict 19 from ndg.xacml.utils import VettedDict, _isIterable 20 20 from ndg.xacml.utils.factory import callModuleObject 21 21 … … 46 46 """XACML standard match function names""" 47 47 FUNCTION_NAMES = ( 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 48 'urn:oasis:names:tc:xacml:1.0:function:string-equal', 49 'urn:oasis:names:tc:xacml:1.0:function:boolean-equal', 50 'urn:oasis:names:tc:xacml:1.0:function:integer-equal', 51 'urn:oasis:names:tc:xacml:1.0:function:double-equal', 52 'urn:oasis:names:tc:xacml:1.0:function:date-equal', 53 'urn:oasis:names:tc:xacml:1.0:function:time-equal', 54 'urn:oasis:names:tc:xacml:1.0:function:dateTime-equal', 55 'urn:oasis:names:tc:xacml:1.0:function:dayTimeDuration-equal', 56 'urn:oasis:names:tc:xacml:1.0:function:yearMonthDuration-equal', 57 'urn:oasis:names:tc:xacml:1.0:function:anyURI-equal', 58 'urn:oasis:names:tc:xacml:1.0:function:x500Name-equal', 59 'urn:oasis:names:tc:xacml:1.0:function:rfc822Name-equal', 60 'urn:oasis:names:tc:xacml:1.0:function:hexBinary-equal', 61 'urn:oasis:names:tc:xacml:1.0:function:base64Binary-equal', 62 'urn:oasis:names:tc:xacml:1.0:function:integer-add', 63 'urn:oasis:names:tc:xacml:1.0:function:double-add', 64 'urn:oasis:names:tc:xacml:1.0:function:integer-subtract', 65 'urn:oasis:names:tc:xacml:1.0:function:double-subtract', 66 'urn:oasis:names:tc:xacml:1.0:function:integer-multiply', 67 'urn:oasis:names:tc:xacml:1.0:function:double-multiply', 68 'urn:oasis:names:tc:xacml:1.0:function:integer-divide', 69 'urn:oasis:names:tc:xacml:1.0:function:double-divide', 70 'urn:oasis:names:tc:xacml:1.0:function:integer-mod', 71 'urn:oasis:names:tc:xacml:1.0:function:integer-abs', 72 'urn:oasis:names:tc:xacml:1.0:function:double-abs', 73 'urn:oasis:names:tc:xacml:1.0:function:round', 74 'urn:oasis:names:tc:xacml:1.0:function:floor', 75 'urn:oasis:names:tc:xacml:1.0:function:string-normalize-space', 76 'urn:oasis:names:tc:xacml:1.0:function:string-normalize-to-lower-case', 77 'urn:oasis:names:tc:xacml:1.0:function:double-to-integer', 78 'urn:oasis:names:tc:xacml:1.0:function:integer-to-double', 79 'urn:oasis:names:tc:xacml:1.0:function:or', 80 'urn:oasis:names:tc:xacml:1.0:function:and', 81 'urn:oasis:names:tc:xacml:1.0:function:n-of', 82 'urn:oasis:names:tc:xacml:1.0:function:not', 83 'urn:oasis:names:tc:xacml:1.0:function:integer-greater-than', 84 'urn:oasis:names:tc:xacml:1.0:function:integer-greater-than-or-equal', 85 'urn:oasis:names:tc:xacml:1.0:function:integer-less-than', 86 'urn:oasis:names:tc:xacml:1.0:function:integer-less-than-or-equal', 87 'urn:oasis:names:tc:xacml:1.0:function:double-greater-than', 88 'urn:oasis:names:tc:xacml:1.0:function:double-greater-than-or-equal', 89 'urn:oasis:names:tc:xacml:1.0:function:double-less-than', 90 'urn:oasis:names:tc:xacml:1.0:function:double-less-than-or-equal', 91 'urn:oasis:names:tc:xacml:1.0:function:dateTime-add-dayTimeDuration', 92 'urn:oasis:names:tc:xacml:1.0:function:dateTime-add-yearMonthDuration', 93 'urn:oasis:names:tc:xacml:1.0:function:dateTime-subtract-dayTimeDuration', 94 'urn:oasis:names:tc:xacml:1.0:function:dateTime-subtract-yearMonthDuration', 95 'urn:oasis:names:tc:xacml:1.0:function:date-add-yearMonthDuration', 96 'urn:oasis:names:tc:xacml:1.0:function:date-subtract-yearMonthDuration', 97 'urn:oasis:names:tc:xacml:1.0:function:string-greater-than', 98 'urn:oasis:names:tc:xacml:1.0:function:string-greater-than-or-equal', 99 'urn:oasis:names:tc:xacml:1.0:function:string-less-than', 100 'urn:oasis:names:tc:xacml:1.0:function:string-less-than-or-equal', 101 'urn:oasis:names:tc:xacml:1.0:function:time-greater-than', 102 'urn:oasis:names:tc:xacml:1.0:function:time-greater-than-or-equal', 103 'urn:oasis:names:tc:xacml:1.0:function:time-less-than', 104 'urn:oasis:names:tc:xacml:1.0:function:time-less-than-or-equal', 105 'urn:oasis:names:tc:xacml:2.0:function:time-in-range', 106 'urn:oasis:names:tc:xacml:1.0:function:dateTime-greater-than', 107 'urn:oasis:names:tc:xacml:1.0:function:dateTime-greater-than-or-equal', 108 'urn:oasis:names:tc:xacml:1.0:function:dateTime-less-than', 109 'urn:oasis:names:tc:xacml:1.0:function:dateTime-less-than-or-equal', 110 'urn:oasis:names:tc:xacml:1.0:function:date-greater-than', 111 'urn:oasis:names:tc:xacml:1.0:function:date-greater-than-or-equal', 112 'urn:oasis:names:tc:xacml:1.0:function:date-less-than', 113 'urn:oasis:names:tc:xacml:1.0:function:date-less-than-or-equal', 114 'urn:oasis:names:tc:xacml:1.0:function:string-one-and-only', 115 'urn:oasis:names:tc:xacml:1.0:function:string-bag-size', 116 'urn:oasis:names:tc:xacml:1.0:function:string-is-in', 117 'urn:oasis:names:tc:xacml:1.0:function:string-bag', 118 'urn:oasis:names:tc:xacml:1.0:function:boolean-one-and-only', 119 'urn:oasis:names:tc:xacml:1.0:function:boolean-bag-size', 120 'urn:oasis:names:tc:xacml:1.0:function:boolean-is-in', 121 'urn:oasis:names:tc:xacml:1.0:function:boolean-bag', 122 'urn:oasis:names:tc:xacml:1.0:function:integer-one-and-only', 123 'urn:oasis:names:tc:xacml:1.0:function:integer-bag-size', 124 'urn:oasis:names:tc:xacml:1.0:function:integer-is-in', 125 'urn:oasis:names:tc:xacml:1.0:function:integer-bag', 126 'urn:oasis:names:tc:xacml:1.0:function:double-one-and-only', 127 'urn:oasis:names:tc:xacml:1.0:function:double-bag-size', 128 'urn:oasis:names:tc:xacml:1.0:function:double-is-in', 129 'urn:oasis:names:tc:xacml:1.0:function:double-bag', 130 'urn:oasis:names:tc:xacml:1.0:function:time-one-and-only', 131 'urn:oasis:names:tc:xacml:1.0:function:time-bag-size', 132 'urn:oasis:names:tc:xacml:1.0:function:time-is-in', 133 'urn:oasis:names:tc:xacml:1.0:function:time-bag', 134 'urn:oasis:names:tc:xacml:1.0:function:date-one-and-only', 135 'urn:oasis:names:tc:xacml:1.0:function:date-bag-size', 136 'urn:oasis:names:tc:xacml:1.0:function:date-is-in', 137 'urn:oasis:names:tc:xacml:1.0:function:date-bag', 138 'urn:oasis:names:tc:xacml:1.0:function:dateTime-one-and-only', 139 'urn:oasis:names:tc:xacml:1.0:function:dateTime-bag-size', 140 'urn:oasis:names:tc:xacml:1.0:function:dateTime-is-in', 141 'urn:oasis:names:tc:xacml:1.0:function:dateTime-bag', 142 'urn:oasis:names:tc:xacml:1.0:function:anyURI-one-and-only', 143 'urn:oasis:names:tc:xacml:1.0:function:anyURI-bag-size', 144 'urn:oasis:names:tc:xacml:1.0:function:anyURI-is-in', 145 'urn:oasis:names:tc:xacml:1.0:function:anyURI-bag', 146 'urn:oasis:names:tc:xacml:1.0:function:hexBinary-one-and-only', 147 'urn:oasis:names:tc:xacml:1.0:function:hexBinary-bag-size', 148 'urn:oasis:names:tc:xacml:1.0:function:hexBinary-is-in', 149 'urn:oasis:names:tc:xacml:1.0:function:hexBinary-bag', 150 'urn:oasis:names:tc:xacml:1.0:function:base64Binary-one-and-only', 151 'urn:oasis:names:tc:xacml:1.0:function:base64Binary-bag-size', 152 'urn:oasis:names:tc:xacml:1.0:function:base64Binary-is-in', 153 'urn:oasis:names:tc:xacml:1.0:function:base64Binary-bag', 154 'urn:oasis:names:tc:xacml:1.0:function:dayTimeDuration-one-and-only', 155 'urn:oasis:names:tc:xacml:1.0:function:dayTimeDuration-bag-size', 156 'urn:oasis:names:tc:xacml:1.0:function:dayTimeDuration-is-in', 157 'urn:oasis:names:tc:xacml:1.0:function:dayTimeDuration-bag', 158 'urn:oasis:names:tc:xacml:1.0:function:yearMonthDuration-one-and-only', 159 'urn:oasis:names:tc:xacml:1.0:function:yearMonthDuration-bag-size', 160 'urn:oasis:names:tc:xacml:1.0:function:yearMonthDuration-is-in', 161 'urn:oasis:names:tc:xacml:1.0:function:yearMonthDuration-bag', 162 'urn:oasis:names:tc:xacml:1.0:function:x500Name-one-and-only', 163 'urn:oasis:names:tc:xacml:1.0:function:x500Name-bag-size', 164 'urn:oasis:names:tc:xacml:1.0:function:x500Name-is-in', 165 'urn:oasis:names:tc:xacml:1.0:function:x500Name-bag', 166 'urn:oasis:names:tc:xacml:1.0:function:rfc822Name-one-and-only', 167 'urn:oasis:names:tc:xacml:1.0:function:rfc822Name-bag-size', 168 'urn:oasis:names:tc:xacml:1.0:function:rfc822Name-is-in', 169 'urn:oasis:names:tc:xacml:1.0:function:rfc822Name-bag', 170 'urn:oasis:names:tc:xacml:2.0:function:string-concatenate', 171 'urn:oasis:names:tc:xacml:2.0:function:uri-string-concatenate', 172 'urn:oasis:names:tc:xacml:1.0:function:any-of', 173 'urn:oasis:names:tc:xacml:1.0:function:all-of', 174 'urn:oasis:names:tc:xacml:1.0:function:any-of-any', 175 'urn:oasis:names:tc:xacml:1.0:function:all-of-any', 176 'urn:oasis:names:tc:xacml:1.0:function:any-of-all', 177 'urn:oasis:names:tc:xacml:1.0:function:all-of-all', 178 'urn:oasis:names:tc:xacml:1.0:function:map', 179 'urn:oasis:names:tc:xacml:1.0:function:x500Name-match', 180 'urn:oasis:names:tc:xacml:1.0:function:rfc822Name-match', 181 'urn:oasis:names:tc:xacml:1.0:function:string-regexp-match', 182 'urn:oasis:names:tc:xacml:2.0:function:anyURI-regexp-match', 183 'urn:oasis:names:tc:xacml:2.0:function:ipAddress-regexp-match', 184 'urn:oasis:names:tc:xacml:2.0:function:dnsName-regexp-match', 185 'urn:oasis:names:tc:xacml:2.0:function:rfc822Name-regexp-match', 186 'urn:oasis:names:tc:xacml:2.0:function:x500Name-regexp-match', 187 'urn:oasis:names:tc:xacml:1.0:function:xpath-node-count', 188 'urn:oasis:names:tc:xacml:1.0:function:xpath-node-equal', 189 'urn:oasis:names:tc:xacml:1.0:function:xpath-node-match', 190 'urn:oasis:names:tc:xacml:1.0:function:string-intersection', 191 'urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of', 192 'urn:oasis:names:tc:xacml:1.0:function:string-union', 193 'urn:oasis:names:tc:xacml:1.0:function:string-subset', 194 'urn:oasis:names:tc:xacml:1.0:function:string-set-equals', 195 'urn:oasis:names:tc:xacml:1.0:function:boolean-intersection', 196 'urn:oasis:names:tc:xacml:1.0:function:boolean-at-least-one-member-of', 197 'urn:oasis:names:tc:xacml:1.0:function:boolean-union', 198 'urn:oasis:names:tc:xacml:1.0:function:boolean-subset', 199 'urn:oasis:names:tc:xacml:1.0:function:boolean-set-equals', 200 'urn:oasis:names:tc:xacml:1.0:function:integer-intersection', 201 'urn:oasis:names:tc:xacml:1.0:function:integer-at-least-one-member-of', 202 'urn:oasis:names:tc:xacml:1.0:function:integer-union', 203 'urn:oasis:names:tc:xacml:1.0:function:integer-subset', 204 'urn:oasis:names:tc:xacml:1.0:function:integer-set-equals', 205 'urn:oasis:names:tc:xacml:1.0:function:double-intersection', 206 'urn:oasis:names:tc:xacml:1.0:function:double-at-least-one-member-of', 207 'urn:oasis:names:tc:xacml:1.0:function:double-union', 208 'urn:oasis:names:tc:xacml:1.0:function:double-subset', 209 'urn:oasis:names:tc:xacml:1.0:function:double-set-equals', 210 'urn:oasis:names:tc:xacml:1.0:function:time-intersection', 211 'urn:oasis:names:tc:xacml:1.0:function:time-at-least-one-member-of', 212 'urn:oasis:names:tc:xacml:1.0:function:time-union', 213 'urn:oasis:names:tc:xacml:1.0:function:time-subset', 214 'urn:oasis:names:tc:xacml:1.0:function:time-set-equals', 215 'urn:oasis:names:tc:xacml:1.0:function:date-intersection', 216 'urn:oasis:names:tc:xacml:1.0:function:date-at-least-one-member-of', 217 'urn:oasis:names:tc:xacml:1.0:function:date-union', 218 'urn:oasis:names:tc:xacml:1.0:function:date-subset', 219 'urn:oasis:names:tc:xacml:1.0:function:date-set-equals', 220 'urn:oasis:names:tc:xacml:1.0:function:dateTime-intersection', 221 'urn:oasis:names:tc:xacml:1.0:function:dateTime-at-least-one-member-of', 222 'urn:oasis:names:tc:xacml:1.0:function:dateTime-union', 223 'urn:oasis:names:tc:xacml:1.0:function:dateTime-subset', 224 'urn:oasis:names:tc:xacml:1.0:function:dateTime-set-equals', 225 'urn:oasis:names:tc:xacml:1.0:function:anyURI-intersection', 226 'urn:oasis:names:tc:xacml:1.0:function:anyURI-at-least-one-member-of', 227 'urn:oasis:names:tc:xacml:1.0:function:anyURI-union', 228 'urn:oasis:names:tc:xacml:1.0:function:anyURI-subset', 229 'urn:oasis:names:tc:xacml:1.0:function:anyURI-set-equals', 230 'urn:oasis:names:tc:xacml:1.0:function:hexBinary-intersection', 231 'urn:oasis:names:tc:xacml:1.0:function:hexBinary-at-least-one-member-of', 232 'urn:oasis:names:tc:xacml:1.0:function:hexBinary-union', 233 'urn:oasis:names:tc:xacml:1.0:function:hexBinary-subset', 234 'urn:oasis:names:tc:xacml:1.0:function:hexBinary-set-equals', 235 'urn:oasis:names:tc:xacml:1.0:function:base64Binary-intersection', 236 'urn:oasis:names:tc:xacml:1.0:function:base64Binary-at-least-one-member-of', 237 'urn:oasis:names:tc:xacml:1.0:function:base64Binary-union', 238 'urn:oasis:names:tc:xacml:1.0:function:base64Binary-subset', 239 'urn:oasis:names:tc:xacml:1.0:function:base64Binary-set-equals', 240 'urn:oasis:names:tc:xacml:1.0:function:dayTimeDuration-intersection', 241 'urn:oasis:names:tc:xacml:1.0:function:dayTimeDuration-at-least-one-member-of', 242 'urn:oasis:names:tc:xacml:1.0:function:dayTimeDuration-union', 243 'urn:oasis:names:tc:xacml:1.0:function:dayTimeDuration-subset', 244 'urn:oasis:names:tc:xacml:1.0:function:dayTimeDuration-set-equals', 245 'urn:oasis:names:tc:xacml:1.0:function:yearMonthDuration-intersection', 246 'urn:oasis:names:tc:xacml:1.0:function:yearMonthDuration-at-least-one-member-of', 247 'urn:oasis:names:tc:xacml:1.0:function:yearMonthDuration-union', 248 'urn:oasis:names:tc:xacml:1.0:function:yearMonthDuration-subset', 249 'urn:oasis:names:tc:xacml:1.0:function:yearMonthDuration-set-equals', 250 'urn:oasis:names:tc:xacml:1.0:function:x500Name-intersection', 251 'urn:oasis:names:tc:xacml:1.0:function:x500Name-at-least-one-member-of', 252 'urn:oasis:names:tc:xacml:1.0:function:x500Name-union', 253 'urn:oasis:names:tc:xacml:1.0:function:x500Name-subset', 254 'urn:oasis:names:tc:xacml:1.0:function:x500Name-set-equals', 255 'urn:oasis:names:tc:xacml:1.0:function:rfc822Name-intersection', 256 'urn:oasis:names:tc:xacml:1.0:function:rfc822Name-at-least-one-member-of', 257 'urn:oasis:names:tc:xacml:1.0:function:rfc822Name-union', 258 'urn:oasis:names:tc:xacml:1.0:function:rfc822Name-subset', 259 'urn:oasis:names:tc:xacml:1.0:function:rfc822Name-set-equals', 260 260 ) 261 261 262 262 263 class ClassFactoryInterface(object):263 class FunctionClassFactoryInterface(object): 264 264 """Interface class for function module class factory class 265 265 """ … … 270 270 '''Create class for the given XACML function identifier 271 271 272 @param identifier: XACML *-at-least-one-member-of type function 273 identifier 272 @param identifier: XACML function identifier 274 273 @type identifier: basestring 275 274 @return: at least one member of class corresponding to the given input 276 275 identifier 277 @rtype: A tLeastOneMemberOfBasederived type or None if no match is276 @rtype: AbstractFunction derived type or None if no match is 278 277 found 279 278 ''' … … 281 280 282 281 283 class FunctionClassFactoryBase( ClassFactoryInterface):282 class FunctionClassFactoryBase(FunctionClassFactoryInterface): 284 283 """Base implementation for XACML Function Class Factory. Derived types 285 should be implemented in sub-modules of ndg.xacml.core.functions e.g. 284 should be implemented in sub-modules of ndg.xacml.core.functions 285 286 e.g. 287 286 288 for urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of a 287 289 class factory should exist, … … 289 291 ndg.xacml.core.functions.v1.at_least_one_member_of.FunctionClassFactory 290 292 291 which 293 which will be capable of returning an AbstractFunction derived type: 294 292 295 StringAtLeastOneMemberOf 293 296 294 Derived classes MUST define these two class variables: 295 297 This class is for convenience only some function factories are better 298 derived directly from FunctionClassFactoryInterface 299 300 Derived classes MUST define these class variables: 301 302 @cvar FUNCTION_NAMES: list of function identifiers that this factory can 303 produce classes for e.g.: 304 305 ('urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of', ...) 306 307 @type FUNCTION_NAMES: NoneType (but list in derived class) 308 296 309 @cvar FUNCTION_NS_SUFFIX: urn suffix for the family of function to define 297 310 e.g. -at-least-one-member-of is the suffix for the URN: … … 307 320 """ 308 321 309 310 322 FUNCTION_NS_SUFFIX = None 323 FUNCTION_NAMES = None 311 324 FUNCTION_BASE_CLASS = None 312 325 … … 322 335 raise TypeError('"FUNCTION_NS_SUFFIX" and "FUNCTION_BASE_CLASS" ' 323 336 'must be defined in a derived implementation of ' 324 'this class. See this classes __doc__ contents') 337 'FunctionClassFactoryBase. See ' 338 'FunctionClassFactoryBase.__doc__ contents') 339 340 if not _isIterable(self.__class__.FUNCTION_NAMES): 341 raise TypeError('"FUNCTION_NAMES" class variable must be an ' 342 'iterable of string type function identifiers; got ' 343 '%r' % self.__class__.FUNCTION_NAMES) 325 344 326 345 self.__map = {} … … 330 349 for n in functionSuffixParts if n]) 331 350 332 functionNames = [n for n in XacmlFunctionNames.FUNCTION_NAMES 333 if n.endswith(self.__class__.FUNCTION_NS_SUFFIX)] 334 335 for identifier in functionNames: 351 for identifier in self.__class__.FUNCTION_NAMES: 336 352 # Extract the function name and the type portion of the function 337 353 # name in order to make an implementation of a class to handle it 338 354 functionName = identifier.split(self.__class__.URN_SEP)[-1] 339 typePart = functionName.split(self.__class__.FUNCTION_N AME_SEP)[0]355 typePart = functionName.split(self.__class__.FUNCTION_NS_SUFFIX)[0] 340 356 341 357 typeName = typePart[0].upper() + typePart[1:] … … 445 461 classPath = None 446 462 447 if functionNs == "urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of":448 pass449 # else:450 # self[functionNs] = NotImplemented451 # return452 453 463 for namespacePrefix, pkgNamePrefix in cls.SUPPORTED_NSS.items(): 454 464 if functionNs.startswith(namespacePrefix): … … 475 485 try: 476 486 functionFactory = callModuleObject(classPath) 477 487 478 488 except (ImportError, AttributeError): 479 489 log.error("Error importing function factory class %r for function " … … 483 493 # No implementation exists - default to Abstract function 484 494 self[functionNs] = NotImplemented 485 486 self[functionNs] = functionFactory(functionNs) 487 488 489 490 495 else: 496 self[functionNs] = functionFactory(functionNs) 497 498 499 500 501 502
Note: See TracChangeset
for help on using the changeset viewer.