1
- """ :mod: RequestValidator
1
+ """:mod: RequestValidator
2
2
3
- ======================
3
+ ======================
4
4
5
- .. module: RequestValidator
5
+ .. module: RequestValidator
6
6
7
- :synopsis: request validator
7
+ :synopsis: request validator
8
8
9
- .. moduleauthor:: [email protected]
9
+ .. moduleauthor:: [email protected]
10
10
11
- A general and simple request validator checking for required attributes and logic.
12
- It checks if required attributes are set/unset but not for their values.
11
+ A general and simple request validator checking for required attributes and logic.
12
+ It checks if required attributes are set/unset but not for their values.
13
13
14
- RequestValidator class implements the DIRACSingleton pattern, no global object is
15
- required to keep a single instance.
14
+ RequestValidator class implements the DIRACSingleton pattern, no global object is
15
+ required to keep a single instance.
16
16
17
- If you need to extend this one with your own specific checks consider:
17
+ If you need to extend this one with your own specific checks consider:
18
18
19
- * for adding Operation or Files required attributes use :any:`addReqAttrsCheck` function::
19
+ * for adding Operation or Files required attributes use :any:`addReqAttrsCheck` function::
20
20
21
- RequestValidator().addReqAttrsCheck( "FooOperation", operationAttrs = [ "Bar", "Buzz"], filesAttrs = [ "LFN" ] )
21
+ RequestValidator().addReqAttrsCheck( "FooOperation", operationAttrs = [ "Bar", "Buzz"], filesAttrs = [ "LFN" ] )
22
22
23
- * for adding generic check define a new callable object ( function or functor ) which takes only one argument,
24
- say for functor::
23
+ * for adding generic check define a new callable object ( function or functor ) which takes only one argument,
24
+ say for functor::
25
25
26
- class MyValidator( RequestValidator ):
26
+ class MyValidator( RequestValidator ):
27
27
28
- @staticmethod
29
- def hasFoo( request ):
30
- if not request.Foo:
31
- return S_ERROR("Foo not set")
32
- return S_OK()
28
+ @staticmethod
29
+ def hasFoo( request ):
30
+ if not request.Foo:
31
+ return S_ERROR("Foo not set")
32
+ return S_OK()
33
33
34
- * or function::
34
+ * or function::
35
35
36
- def hasBar( request ):
37
- if not request.Bar:
38
- return S_ERROR("Bar not set")
39
- return S_OK()
36
+ def hasBar( request ):
37
+ if not request.Bar:
38
+ return S_ERROR("Bar not set")
39
+ return S_OK()
40
40
41
- and add this one to the validators set by calling `RequestValidator().addValidator`, i.e.::
41
+ and add this one to the validators set by calling `RequestValidator().addValidator`, i.e.::
42
42
43
- RequestValidator().addValidator( MyValidator.hasFoo )
44
- RequestValidator().addValidator( hasFoo )
43
+ RequestValidator().addValidator( MyValidator.hasFoo )
44
+ RequestValidator().addValidator( hasFoo )
45
45
46
- Notice that all validators should always return S_ERROR/S_OK, no exceptions from that whatsoever!
46
+ Notice that all validators should always return S_ERROR/S_OK, no exceptions from that whatsoever!
47
47
"""
48
48
49
49
import inspect
@@ -53,6 +53,7 @@ def hasBar( request ):
53
53
from DIRAC .Core .Security .Properties import FULL_DELEGATION , LIMITED_DELEGATION
54
54
from DIRAC .Core .Utilities .DIRACSingleton import DIRACSingleton
55
55
from DIRAC .ConfigurationSystem .Client import PathFinder
56
+ from DIRAC .ConfigurationSystem .Client .Helpers .Registry import getUsernameForDN
56
57
57
58
58
59
class RequestValidator (metaclass = DIRACSingleton ):
@@ -268,28 +269,21 @@ def setAndCheckRequestOwner(request, remoteCredentials):
268
269
269
270
:returns: True if everything is fine, False otherwise
270
271
"""
271
-
272
272
credUserName = remoteCredentials ["username" ]
273
273
credGroup = remoteCredentials ["group" ]
274
274
credProperties = remoteCredentials ["properties" ]
275
- ownershipCheck = None
276
-
277
- # FIXME: code for backward compatibility with requests created by 8.0 clients
278
- # The below can be clearly simplified, leaving the extended checks for clarity
279
- if hasattr (request , "OwnerDN" ) and not hasattr (
280
- request , "Owner"
281
- ): # Requests created by v8.0 client for v8.0 servers
282
- ownershipCheck = request .OwnerDN
283
- if not hasattr (request , "OwnerDN" ) and hasattr (
284
- request , "Owner"
285
- ): # Requests created by v9 client for v9 servers
286
- ownershipCheck = request .Owner
287
- if hasattr (request , "OwnerDN" ) and hasattr (request , "Owner" ): # Requests created by v8.0 client for v9 servers
288
- ownershipCheck = request .Owner
289
- # ##
275
+
276
+ # In case we have an old style request with only a DN and no Owner,
277
+ # get the Owner from the DN.
278
+ if getattr (request , "OwnerDN" , None ) and not getattr (request , "Owner" , None ):
279
+ res = getUsernameForDN (request .OwnerDN )
280
+ if not res ["OK" ]:
281
+ gLogger .error ("Cannot Validate request" , res )
282
+ return False
283
+ request .Owner = res ["Value" ]
290
284
291
285
# If the owner or the group was not set, we use the one of the credentials
292
- if not ownershipCheck or not request .OwnerGroup :
286
+ if not request . Owner or not request .OwnerGroup :
293
287
request .Owner = credUserName
294
288
request .OwnerGroup = credGroup
295
289
return True
0 commit comments