/*
* Copyright 2017 Red Hat, Inc. and/or its affiliates
* and other contributors as indicated by the @author tags.
*
* 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 org.keycloak.authentication.actiontoken;
import org.keycloak.TokenVerifier;
import org.keycloak.TokenVerifier.Predicate;
import org.keycloak.representations.JsonWebToken;
import java.util.function.BooleanSupplier;
/**
*
* @author hmlnarik
*/
public class TokenUtils {
/**
* Returns a predicate for use in {@link TokenVerifier} using the given boolean-returning function.
* When the function return {@code false}, this predicate throws a {@link ExplainedTokenVerificationException}
* with {@code message} and {@code errorEvent} set from {@code errorMessage} and {@code errorEvent}, .
*
* @param function
* @param errorEvent
* @param errorMessage
* @return
*/
public static Predicate<JsonWebToken> checkThat(BooleanSupplier function, String errorEvent, String errorMessage) {
return (JsonWebToken t) -> {
if (! function.getAsBoolean()) {
throw new ExplainedTokenVerificationException(t, errorEvent, errorMessage);
}
return true;
};
}
/**
* Returns a predicate for use in {@link TokenVerifier} using the given boolean-returning function.
* When the function return {@code false}, this predicate throws a {@link ExplainedTokenVerificationException}
* with {@code message} and {@code errorEvent} set from {@code errorMessage} and {@code errorEvent}, .
*
* @param function
* @param errorEvent
* @param errorMessage
* @return
*/
public static <T extends JsonWebToken> Predicate<T> checkThat(java.util.function.Predicate<T> function, String errorEvent, String errorMessage) {
return (T t) -> {
if (! function.test(t)) {
throw new ExplainedTokenVerificationException(t, errorEvent, errorMessage);
}
return true;
};
}
/**
* Returns a predicate that is applied only if the given {@code condition} evaluates to {@true}. In case
* it evaluates to {@code false}, the predicate passes.
* @param <T>
* @param condition Condition guarding execution of the predicate
* @param predicate Predicate that gets tested if the condition evaluates to {@code true}
* @return
*/
public static <T extends JsonWebToken> Predicate<T> onlyIf(java.util.function.Predicate<T> condition, Predicate<T> predicate) {
return t -> (! condition.test(t)) || predicate.test(t);
}
public static <T extends JsonWebToken> Predicate<? super T>[] predicates(Predicate<? super T>... predicate) {
return predicate;
}
}