@@ -155,7 +155,14 @@ func (c Client) Delete(ctx context.Context, parameters *v1alpha1.AuditPolicyPara
155155 return nil
156156}
157157
158+ func TrimAllUsersFromAction (action string ) string {
159+ return strings .ReplaceAll (action , " FOR PRINCIPALS ALL USERS" , "" )
160+ }
161+
158162func OptimizeAuditActions (actionStrings []string ) []string {
163+ if len (actionStrings ) == 0 {
164+ return actionStrings
165+ }
159166 for i := range actionStrings {
160167 actionStrings [i ] = strings .ReplaceAll (actionStrings [i ], " FOR PRINCIPALS ALL USERS" , "" )
161168 }
@@ -239,39 +246,6 @@ func parseUsersList(usersPart string) ([]parsedPrincipal, error) {
239246 return parsedUsers , nil
240247}
241248
242- func parseIntoActions (action string ) ([]parsedAction , error ) {
243- actions := []parsedAction {}
244- actionNames := action
245-
246- partialAction := parsedAction {}
247- if exceptForParts := strings .SplitN (action , " EXCEPT FOR " , 2 ); len (exceptForParts ) == 2 {
248- actionNames = exceptForParts [0 ]
249- afterExceptFor := exceptForParts [1 ]
250- partialUsers , err := parseUsersList (afterExceptFor )
251- if err != nil {
252- return nil , err
253- }
254- partialAction .auditExceptFor = partialUsers
255- } else if forParts := strings .SplitN (exceptForParts [0 ], " FOR " , 2 ); len (forParts ) == 2 {
256- actionNames = forParts [0 ]
257- afterFor := forParts [1 ]
258- partialUsers , err := parseUsersList (afterFor )
259- if err != nil {
260- return nil , err
261- }
262- partialAction .auditFor = partialUsers
263- }
264- for _ , actionName := range strings .Split (actionNames , "," ) {
265- action := parsedAction {
266- actionNames : []string {strings .ToUpper (strings .TrimSpace (actionName ))},
267- auditFor : partialAction .auditFor ,
268- auditExceptFor : partialAction .auditExceptFor ,
269- }
270- actions = append (actions , action )
271- }
272- return actions , nil
273- }
274-
275249func getUniqueString (input []string ) string {
276250 sorted := make ([]string , len (input ))
277251 copy (sorted , input )
@@ -281,23 +255,6 @@ func getUniqueString(input []string) string {
281255 return uniqueString
282256}
283257
284- func updatePrincipals (actionNames []string , principals []parsedPrincipal , principalMap map [string ][]string , principalSelfMap map [string ][]parsedPrincipal ) {
285- users := []string {}
286- usergroups := []string {}
287- for _ , principal := range principals {
288- if principal .user != "" {
289- users = append (users , principal .user )
290- } else if principal .usergroup != "" {
291- usergroups = append (usergroups , principal .usergroup )
292- }
293- }
294- uniqueUsersString := getUniqueString (users )
295- uniqueUsergroupsString := getUniqueString (usergroups )
296- uniqueString := uniqueUsersString + ";" + uniqueUsergroupsString
297- principalMap [uniqueString ] = append (principalMap [uniqueString ], actionNames ... )
298- principalSelfMap [uniqueString ] = principals
299- }
300-
301258func splitActions (actions []parsedAction ) (noUserMap []string , forPrincipalsMap map [string ][]string , forPrincipalsSelfMap map [string ][]parsedPrincipal , exceptForPrincipalsMap map [string ][]string , exceptForPrincipalsSelfMap map [string ][]parsedPrincipal ) {
302259 noUserMap = []string {}
303260 forPrincipalsMap = make (map [string ][]string )
@@ -371,6 +328,56 @@ func stringifyParsedAction(pa parsedAction) string {
371328 return actionStr
372329}
373330
331+ func parseIntoActions (action string ) ([]parsedAction , error ) {
332+ actions := []parsedAction {}
333+ actionNames := action
334+
335+ partialAction := parsedAction {}
336+ if exceptForParts := strings .SplitN (action , " EXCEPT FOR " , 2 ); len (exceptForParts ) == 2 {
337+ actionNames = exceptForParts [0 ]
338+ afterExceptFor := exceptForParts [1 ]
339+ partialUsers , err := parseUsersList (afterExceptFor )
340+ if err != nil {
341+ return nil , err
342+ }
343+ partialAction .auditExceptFor = partialUsers
344+ } else if forParts := strings .SplitN (exceptForParts [0 ], " FOR " , 2 ); len (forParts ) == 2 {
345+ actionNames = forParts [0 ]
346+ afterFor := forParts [1 ]
347+ partialUsers , err := parseUsersList (afterFor )
348+ if err != nil {
349+ return nil , err
350+ }
351+ partialAction .auditFor = partialUsers
352+ }
353+ for _ , actionName := range strings .Split (actionNames , "," ) {
354+ action := parsedAction {
355+ actionNames : []string {strings .ToUpper (strings .TrimSpace (actionName ))},
356+ auditFor : partialAction .auditFor ,
357+ auditExceptFor : partialAction .auditExceptFor ,
358+ }
359+ actions = append (actions , action )
360+ }
361+ return actions , nil
362+ }
363+
364+ func updatePrincipals (actionNames []string , principals []parsedPrincipal , principalMap map [string ][]string , principalSelfMap map [string ][]parsedPrincipal ) {
365+ users := []string {}
366+ usergroups := []string {}
367+ for _ , principal := range principals {
368+ if principal .user != "" {
369+ users = append (users , principal .user )
370+ } else if principal .usergroup != "" {
371+ usergroups = append (usergroups , principal .usergroup )
372+ }
373+ }
374+ uniqueUsersString := getUniqueString (users )
375+ uniqueUsergroupsString := getUniqueString (usergroups )
376+ uniqueString := uniqueUsersString + ";" + uniqueUsergroupsString
377+ principalMap [uniqueString ] = append (principalMap [uniqueString ], actionNames ... )
378+ principalSelfMap [uniqueString ] = principals
379+ }
380+
374381func prepareCreateSql (parameters * v1alpha1.AuditPolicyParameters ) []string {
375382 queryLeft := fmt .Sprintf (`CREATE AUDIT POLICY "%s" AUDITING %s` , utils .EscapeDoubleQuotes (parameters .PolicyName ), parameters .AuditStatus )
376383 queryRight := fmt .Sprintf ("LEVEL %s TRAIL TYPE TABLE RETENTION %d" , parameters .AuditLevel , * parameters .AuditTrailRetention )
0 commit comments