in pkg/domain/authorizationErrorParser.go [75:108]
func parseMultiAuthorizationFailedErrors(authorizationFailedErrMsg string) (map[string][]string, error) {
re := regexp.MustCompile(`The client '([^']+)' with object id '([^']+)' does not have authorization to perform action '([^']+)'.* over scope '([^']+)' or the scope is invalid\.`)
matches := re.FindAllStringSubmatch(authorizationFailedErrMsg, -1)
if len(matches) == 0 {
return nil, errors.New("No matches found in 'AuthorizationFailed' error message")
}
scopePermissionsMap := make(map[string][]string)
// Iterate through the matches and populate the map
for _, match := range matches {
if len(match) == 5 {
// resourceType := match[1]
action := match[3]
scope := match[4]
if _, ok := scopePermissionsMap[scope]; !ok {
scopePermissionsMap[scope] = make([]string, 0)
}
scopePermissionsMap[scope] = append(scopePermissionsMap[scope], action)
}
}
// if map is empty, return error
if len(scopePermissionsMap) == 0 {
return nil, errors.New("No scope/permissions found in Multi error message")
}
return scopePermissionsMap, nil
}