package org.apereo.cas.util.spring.boot;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.apereo.cas.util.AsciiArtUtils;
import org.apereo.cas.util.CasVersion;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringBootVersion;
import org.springframework.core.env.Environment;
import javax.crypto.Cipher;
import java.io.PrintStream;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.Formatter;
import java.util.Properties;
/**
* This is {@link AbstractCasBanner}.
*
* @author Misagh Moayyed
* @since 5.0.0
*/
public abstract class AbstractCasBanner implements Banner {
/** Line separator length. */
public static final int SEPARATOR_REPEAT_COUNT = 60;
/** A line separator. */
public static final String LINE_SEPARATOR = String.join(StringUtils.EMPTY, Collections.nCopies(SEPARATOR_REPEAT_COUNT, "-"));
@Override
public void printBanner(final Environment environment, final Class<?> sourceClass, final PrintStream out) {
AsciiArtUtils.printAsciiArt(out, getTitle(), collectEnvironmentInfo(environment, sourceClass));
}
protected String getTitle() {
return "(CAS)";
}
/**
* Collect environment info with
* details on the java and os deployment
* versions.
*
* @param environment the environment
* @param sourceClass the source class
* @return environment info
*/
private String collectEnvironmentInfo(final Environment environment, final Class<?> sourceClass) {
final Properties properties = System.getProperties();
if (properties.containsKey("CAS_BANNER_SKIP")) {
try (Formatter formatter = new Formatter()) {
formatter.format("CAS Version: %s%n", CasVersion.getVersion());
return formatter.toString();
}
}
try (Formatter formatter = new Formatter()) {
formatter.format("CAS Version: %s%n", CasVersion.getVersion());
formatter.format("CAS Commit Id: %s%n", CasVersion.getSpecificationVersion());
formatter.format("CAS Build Date/Time: %s%n", CasVersion.getDateTime());
formatter.format("Spring Boot Version: %s%n", SpringBootVersion.getVersion());
formatter.format("%s%n", LINE_SEPARATOR);
formatter.format("System Date/Time: %s%n", LocalDateTime.now());
formatter.format("System Temp Directory: %s%n", FileUtils.getTempDirectoryPath());
formatter.format("%s%n", LINE_SEPARATOR);
formatter.format("Java Home: %s%n", properties.get("java.home"));
formatter.format("Java Vendor: %s%n", properties.get("java.vendor"));
formatter.format("Java Version: %s%n", properties.get("java.version"));
formatter.format("JCE Installed: %s%n", BooleanUtils.toStringYesNo(isJceInstalled()));
formatter.format("%s%n", LINE_SEPARATOR);
formatter.format("OS Architecture: %s%n", properties.get("os.arch"));
formatter.format("OS Name: %s%n", properties.get("os.name"));
formatter.format("OS Version: %s%n", properties.get("os.version"));
formatter.format("%s%n", LINE_SEPARATOR);
injectEnvironmentInfoIntoBanner(formatter, environment, sourceClass);
return formatter.toString();
}
}
/**
* Inject environment info into banner.
*
* @param formatter the formatter
* @param environment the environment
* @param sourceClass the source class
*/
protected void injectEnvironmentInfoIntoBanner(final Formatter formatter,
final Environment environment,
final Class<?> sourceClass) {
}
private static boolean isJceInstalled() {
try {
final int maxKeyLen = Cipher.getMaxAllowedKeyLength("AES");
return maxKeyLen == Integer.MAX_VALUE;
} catch (final Exception e) {
return false;
}
}
}