All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.arbeitsagentur.opdt.keycloak.filestore.events.FileAdminEventQuery Maven / Gradle / Ivy

/*
 * Copyright 2024. IT-Systemhaus der Bundesagentur fuer Arbeit
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 */

package de.arbeitsagentur.opdt.keycloak.filestore.events;

import static org.keycloak.utils.StreamsUtil.paginatedStream;

import de.arbeitsagentur.opdt.keycloak.filestore.SearchPatterns;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.stream.Stream;
import org.keycloak.events.admin.AdminEvent;
import org.keycloak.events.admin.AdminEventQuery;
import org.keycloak.events.admin.OperationType;
import org.keycloak.events.admin.ResourceType;

public abstract class FileAdminEventQuery implements AdminEventQuery {

  private Integer firstResult;
  private Integer maxResults;
  private String order = "DESC";
  protected String realmId;
  private String authRealmId;
  private String authClientId;
  private String authUserId;
  private String authIpAddress;
  private List operationTypes;
  private List resourceTypes;
  private String resourcePath;
  private Long fromTimestamp;
  private Long toTimestamp;

  @Override
  public AdminEventQuery realm(String realmId) {
    this.realmId = realmId;
    return this;
  }

  @Override
  public AdminEventQuery authRealm(String realmId) {
    this.authRealmId = realmId;
    return this;
  }

  @Override
  public AdminEventQuery authClient(String clientId) {
    this.authClientId = clientId;
    return this;
  }

  @Override
  public AdminEventQuery authUser(String userId) {
    this.authUserId = userId;
    return this;
  }

  @Override
  public AdminEventQuery authIpAddress(String ipAddress) {
    this.authIpAddress = ipAddress;
    return this;
  }

  @Override
  public AdminEventQuery operation(OperationType... operations) {
    // mcb = mcb.compare(AdminSearchableFields.OPERATION_TYPE, IN, Arrays.stream(operations));
    this.operationTypes = Arrays.asList(operations);
    return this;
  }

  @Override
  public AdminEventQuery resourceType(ResourceType... resourceTypes) {
    this.resourceTypes = Arrays.asList(resourceTypes);
    return this;
  }

  @Override
  public AdminEventQuery resourcePath(String resourcePath) {
    this.resourcePath = resourcePath;
    return this;
  }

  @Override
  public AdminEventQuery fromTime(Date fromTime) {
    this.fromTimestamp = fromTime.getTime();
    return this;
  }

  @Override
  public AdminEventQuery toTime(Date toTime) {
    this.toTimestamp = toTime.getTime();
    return this;
  }

  @Override
  public AdminEventQuery firstResult(int first) {
    firstResult = first;
    return this;
  }

  @Override
  public AdminEventQuery maxResults(int max) {
    maxResults = max;
    return this;
  }

  @Override
  public AdminEventQuery orderByDescTime() {
    order = "DESC";
    return this;
  }

  @Override
  public AdminEventQuery orderByAscTime() {
    order = "ASC";
    return this;
  }

  @Override
  public Stream getResultStream() {
    Comparator ENTITY_COMPARATOR =
        Comparator.comparing(
            AdminEvent::getTime,
            "DESC".equals(this.order) ? Comparator.reverseOrder() : Comparator.naturalOrder());
    Stream adminEvents =
        read()
            .filter(ev -> this.realmId == null || this.realmId.equals(ev.getRealmId()))
            .filter(
                ev ->
                    this.authRealmId == null
                        || (ev.getAuthDetails() != null
                            && this.authRealmId.equals(ev.getAuthDetails().getRealmId())))
            .filter(
                ev ->
                    this.authClientId == null
                        || (ev.getAuthDetails() != null
                            && this.authClientId.equals(ev.getAuthDetails().getClientId())))
            .filter(
                ev ->
                    this.authUserId == null
                        || (ev.getAuthDetails() != null
                            && this.authUserId.equals(ev.getAuthDetails().getUserId())))
            .filter(
                ev ->
                    this.authIpAddress == null
                        || (ev.getAuthDetails() != null
                            && this.authIpAddress.equals(ev.getAuthDetails().getIpAddress())))
            .filter(
                ev ->
                    this.operationTypes == null
                        || ev.getOperationType() != null
                            && this.operationTypes.contains(ev.getOperationType()))
            .filter(
                ev ->
                    this.resourceTypes == null
                        || ev.getResourceType() != null
                            && this.resourceTypes.contains(ev.getResourceType()))
            .filter(
                ev ->
                    this.resourcePath == null
                        || (ev.getResourceType() != null
                            && SearchPatterns.like(
                                ev.getResourcePath(), this.resourcePath.replace('*', '%'))))
            .filter(ev -> this.fromTimestamp == null || ev.getTime() >= this.fromTimestamp)
            .filter(ev -> this.toTimestamp == null || ev.getTime() <= this.toTimestamp)
            .sorted(ENTITY_COMPARATOR);
    return paginatedStream(adminEvents, firstResult, maxResults);
  }

  protected abstract Stream read();
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy