@@ -27,72 +27,25 @@ protected static function isAllowed(PolicyDecisionPoint $pdp, Request $request,
27
27
return $ pdp ->isAllowed ($ request , $ operation , $ attributes , $ resourceType , $ resourceObject , $ isMe );
28
28
}
29
29
30
- protected static function replaceKeys (array $ input )
31
- {
32
- $ return = array ();
33
- foreach ($ input as $ key => $ value ) {
34
- if (strpos ($ key , '_ ' ) > 0 ) {
35
- $ key = str_replace ('___ ' , '. ' , $ key );
36
- }
37
-
38
- if (is_array ($ value )) {
39
- $ value = self ::replaceKeys ($ value );
40
- }
41
-
42
- $ return [$ key ] = $ value ;
43
- }
44
- return $ return ;
45
- }
46
-
47
30
protected static function validateScim (ResourceType $ resourceType , $ flattened , ?Model $ resourceObject )
48
31
{
49
- $ objectPreparedForValidation = [];
50
32
$ validations = $ resourceType ->getValidations ();
51
- $ simpleValidations = [];
52
-
53
- /**
54
- * Dots have a different meaning in SCIM and in Laravel's validation logic
55
- */
56
- foreach ($ flattened as $ key => $ value ) {
57
- $ objectPreparedForValidation [preg_replace ('/([^*])\.([^*])/ ' , '${1}___${2} ' , $ key )] = $ value ;
58
- }
59
33
60
34
foreach ($ validations as $ key => $ value ) {
61
- $ simpleValidations [
62
- preg_replace ('/([^*])\.([^*]) / ' , '${1}___${2} ' , $ key )
63
- ] = ! is_string ( $ value ) ? $ value : ( $ resourceObject != null ? preg_replace ( ' /,\[OBJECT_ID\]/ ' , ' , ' . $ resourceObject -> id , $ value ) : str_replace ( ' ,[OBJECT_ID] ' , '' , $ value ));
35
+ if ( is_string ( $ value )) {
36
+ $ validations [ $ key ] = $ resourceObject ? preg_replace ('/,\[OBJECT_ID\] / ' , ', ' . $ resourceObject -> id , $ value ) : str_replace ( ' ,[OBJECT_ID] ' , '' , $ value );
37
+ }
64
38
}
65
39
66
- $ validator = Validator::make ($ objectPreparedForValidation , $ simpleValidations );
40
+ $ validator = Validator::make ($ flattened , $ validations );
67
41
68
42
if ($ validator ->fails ()) {
69
43
$ e = $ validator ->errors ();
70
- $ e = self ::replaceKeys ($ e ->toArray ());
71
44
72
45
throw (new SCIMException ('Invalid data! ' ))->setCode (400 )->setScimType ('invalidSyntax ' )->setErrors ($ e );
73
46
}
74
47
75
- $ validTemp = $ validator ->validate ();
76
- $ valid = [];
77
-
78
- $ keys = collect ($ simpleValidations )->keys ()->map (
79
- function ($ rule ) {
80
- return explode ('. ' , $ rule )[0 ];
81
- }
82
- )->unique ()->toArray ();
83
-
84
- foreach ($ keys as $ key ) {
85
- if (array_key_exists ($ key , $ validTemp )) {
86
- $ valid [$ key ] = $ validTemp [$ key ];
87
- }
88
- }
89
-
90
- $ flattened = [];
91
- foreach ($ valid as $ key => $ value ) {
92
- $ flattened [str_replace (['___ ' ], ['. ' ], $ key )] = $ value ;
93
- }
94
-
95
- return $ flattened ;
48
+ return $ validator ->validate ();
96
49
}
97
50
98
51
public static function createFromSCIM ($ resourceType , $ input , PolicyDecisionPoint $ pdp = null , Request $ request = null , $ allowAlways = false , $ isMe = false )
0 commit comments