in controllers/permission_template/chain/sync_permissiontemplate_groups.go [30:98]
func (h SyncPermissionTemplateGroups) ServeRequest(ctx context.Context, template *sonarApi.SonarPermissionTemplate) error {
log := ctrl.LoggerFrom(ctx).WithValues("name", template.Spec.Name)
log.Info("Syncing permission template groups in sonar")
sonarTemplate, err := h.sonarApiClient.GetPermissionTemplate(ctx, template.Spec.Name)
if err != nil {
return fmt.Errorf("failed to get permission template: %w", err)
}
existingTemplates, err := h.sonarApiClient.GetPermissionTemplateGroups(ctx, sonarTemplate.ID)
if err != nil {
return fmt.Errorf("failed to get permission template groups: %w", err)
}
for groupName, existingPermissions := range existingTemplates {
if currentPermissions, ok := template.Spec.GroupsPermissions[groupName]; ok {
existingPermissionsMap := helper.SliceToMap(existingPermissions)
for _, p := range currentPermissions {
if _, ok = existingPermissionsMap[p]; ok {
delete(existingPermissionsMap, p)
continue
}
log.Info("Adding permission template group", logKeyGroup, groupName, logKeyPerm, p)
if err = h.sonarApiClient.AddGroupToPermissionTemplate(ctx, sonarTemplate.ID, groupName, p); err != nil {
return fmt.Errorf("failed to add permission template group: %w", err)
}
}
for p := range existingPermissionsMap {
log.Info("Removing permission template group", logKeyGroup, groupName, logKeyPerm, p)
if err = h.sonarApiClient.RemoveGroupFromPermissionTemplate(ctx, sonarTemplate.ID, groupName, p); err != nil {
return fmt.Errorf("failed to remove permission template group: %w", err)
}
}
continue
}
for _, p := range existingPermissions {
log.Info("Removing permission template group", logKeyGroup, groupName, logKeyPerm, p)
if err = h.sonarApiClient.RemoveGroupFromPermissionTemplate(ctx, sonarTemplate.ID, groupName, p); err != nil {
return fmt.Errorf("failed to add permission template group: %w", err)
}
}
}
for groupName, permissions := range template.Spec.GroupsPermissions {
if _, ok := existingTemplates[groupName]; ok {
continue
}
for _, p := range permissions {
log.Info("Adding permission template group", logKeyGroup, groupName, logKeyPerm, p)
if err = h.sonarApiClient.AddGroupToPermissionTemplate(ctx, sonarTemplate.ID, groupName, p); err != nil {
return fmt.Errorf("failed to add permission template group: %w", err)
}
}
}
log.Info("Permission template groups have been synced successfully")
return nil
}