func parseLinkedAccessCheckFailedError()

in pkg/domain/linkedAccessCheckFailedErrorParser.go [31:66]


func parseLinkedAccessCheckFailedError(authorizationFailedErrMsg string) (map[string][]string, error) {

	log.Printf("Attempting to Parse LinkedAccessCheckFailedError Error: %s", authorizationFailedErrMsg)

	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 'LinkedAccessCheckFailedError' error message")
	}

	scopePermissionsMap := make(map[string][]string)

	// Iterate through the matches and populate the map
	for _, match := range matches {
		if len(match) == 4 {
			// resourceType := match[1]
			action := match[2]
			scope := match[3]

			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 LinkedAccessCheckFailedError message")
	}

	return scopePermissionsMap, nil

}