blob: 75c61622f7727638ae1fe61cb35ec4f92fc669bc [file] [log] [blame]
package de.ids_mannheim.korap.config;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import de.ids_mannheim.korap.constant.AuthenticationMethod;
import de.ids_mannheim.korap.interfaces.EncryptionIface;
import de.ids_mannheim.korap.utils.TimeUtils;
/**
* Configuration for Kustvakt full version including properties
* concerning authentication and licenses.
*
* @author margaretha
*
*/
public class FullConfiguration extends KustvaktConfiguration {
public static Logger jlog = LogManager.getLogger(FullConfiguration.class);
private String ldapConfig;
private String freeOnlyRegex;
private String publicOnlyRegex;
private String allOnlyRegex;
private List<String> freeRegexList;
private List<String> publicRegexList;
private List<String> allRegexList;
private String authenticationScheme;
private EncryptionIface.Encryption secureHashAlgorithm;
private AuthenticationMethod OAuth2passwordAuthentication;
private String nativeClientHost;
private Set<String> clientCredentialsScopes;
private int maxAuthenticationAttempts;
private int accessTokenLongExpiry;
private int accessTokenExpiry;
private int refreshTokenLongExpiry;
private int refreshTokenExpiry;
private int authorizationCodeExpiry;
private int maxNumberOfUserQueries;
private URL issuer;
private String namedVCPath;
private boolean createInitialSuperClient;
public FullConfiguration (Properties properties) throws Exception {
super(properties);
}
public FullConfiguration () {
super();
}
@Override
public void load (Properties properties) throws Exception {
super.load(properties);
// EM: regex used for storing vc
setLicenseRegex(properties);
// EM: pattern for matching availability in Krill matches
setLicensePatterns(properties);
ldapConfig = properties.getProperty("ldap.config");
setSecurityConfiguration(properties);
setOAuth2Configuration(properties);
setNamedVCPath(properties.getProperty("krill.namedVC", ""));
// Cache cache = CacheManager.newInstance().getCache("named_vc");
// CacheConfiguration config = cache.getCacheConfiguration();
// config.setMaxBytesLocalHeap(properties.getProperty("cache.max.bytes.local.heap", "256m"));
// config.setMaxBytesLocalDisk(properties.getProperty("cache.max.bytes.local.disk", "2G"));
// jlog.info("max local heap:"+config.getMaxBytesLocalHeapAsString());
// jlog.info("max local disk:"+config.getMaxBytesLocalDiskAsString());
setMaxNumberOfUserQueries(Integer.parseInt(
properties.getProperty("max.user.persistent.queries", "20")));
}
private void setSecurityConfiguration (Properties properties)
throws MalformedURLException {
setSecureHashAlgorithm(Enum.valueOf(EncryptionIface.Encryption.class,
properties.getProperty("security.secure.hash.algorithm",
"BCRYPT")));
String issuerStr = properties.getProperty("security.jwt.issuer",
"https://korap.ids-mannheim.de");
if (!issuerStr.startsWith("http")) {
issuerStr = "http://" + issuerStr;
}
setIssuer(new URL(issuerStr));
}
private void setOAuth2Configuration (Properties properties) {
setOAuth2passwordAuthentication(
Enum.valueOf(AuthenticationMethod.class, properties.getProperty(
"oauth2.password.authentication", "TEST")));
setNativeClientHost(properties.getProperty("oauth2.native.client.host",
"korap.ids-mannheim.de"));
setCreateInitialSuperClient(Boolean.valueOf(properties
.getProperty("oauth2.initial.super.client", "false")));
setMaxAuthenticationAttempts(Integer
.parseInt(properties.getProperty("oauth2.max.attempts", "1")));
String clientScopes = properties
.getProperty("oauth2.client.credentials.scopes", "client_info");
setClientCredentialsScopes(Arrays.stream(clientScopes.split(" "))
.collect(Collectors.toSet()));
accessTokenExpiry = TimeUtils.convertTimeToSeconds(
properties.getProperty("oauth2.access.token.expiry", "1D"));
refreshTokenExpiry = TimeUtils.convertTimeToSeconds(
properties.getProperty("oauth2.refresh.token.expiry", "90D"));
authorizationCodeExpiry = TimeUtils.convertTimeToSeconds(properties
.getProperty("oauth2.authorization.code.expiry", "10M"));
setAccessTokenLongExpiry(TimeUtils.convertTimeToSeconds(properties
.getProperty("oauth2.access.token.long.expiry", "365D")));
setRefreshTokenLongExpiry(TimeUtils.convertTimeToSeconds(properties
.getProperty("oauth2.refresh.token.long.expiry", "365D")));
}
private void setLicensePatterns (Properties properties) {
setFreeLicensePattern(compilePattern(getFreeOnlyRegex()));
setPublicLicensePattern(compilePattern(
getFreeOnlyRegex() + "|" + getPublicOnlyRegex()));
setAllLicensePattern(compilePattern(getFreeOnlyRegex() + "|"
+ getPublicOnlyRegex() + "|" + getAllOnlyRegex()));
}
private void setLicenseRegex (Properties properties) {
setFreeOnlyRegex(properties.getProperty("availability.regex.free", ""));
freeRegexList = splitAndAddToList(getFreeOnlyRegex());
setPublicOnlyRegex(
properties.getProperty("availability.regex.public", ""));
publicRegexList = splitAndAddToList(getPublicOnlyRegex());
setAllOnlyRegex(properties.getProperty("availability.regex.all", ""));
allRegexList = splitAndAddToList(getAllOnlyRegex());
}
private List<String> splitAndAddToList (String regex) {
List<String> list;
if (regex.contains("|")) {
String[] regexes = regex.split("\\|");
list = new ArrayList<>(regexes.length);
for (String s : regexes) {
list.add(s.trim());
}
}
else {
list = new ArrayList<>(1);
list.add(regex);
}
return list;
}
private Pattern compilePattern (String patternStr) {
if (!patternStr.isEmpty()) {
return Pattern.compile(patternStr);
}
else {
return null;
}
}
public String getLdapConfig () {
return ldapConfig;
}
public Pattern getPublicLicensePattern () {
return publicLicensePattern;
}
public void setPublicLicensePattern (Pattern publicLicensePattern) {
this.publicLicensePattern = publicLicensePattern;
}
public Pattern getFreeLicensePattern () {
return freeLicensePattern;
}
public void setFreeLicensePattern (Pattern freeLicensePattern) {
this.freeLicensePattern = freeLicensePattern;
}
public Pattern getAllLicensePattern () {
return allLicensePattern;
}
public void setAllLicensePattern (Pattern allLicensePattern) {
this.allLicensePattern = allLicensePattern;
}
public String getAuthenticationScheme () {
return authenticationScheme;
}
public void setAuthenticationScheme (String authenticationScheme) {
this.authenticationScheme = authenticationScheme;
}
public List<String> getFreeRegexList () {
return freeRegexList;
}
public void setFreeRegexList (List<String> freeRegexList) {
this.freeRegexList = freeRegexList;
}
public List<String> getPublicRegexList () {
return publicRegexList;
}
public void setPublicRegexList (List<String> publicRegexList) {
this.publicRegexList = publicRegexList;
}
public List<String> getAllRegexList () {
return allRegexList;
}
public void setAllRegexList (List<String> allRegexList) {
this.allRegexList = allRegexList;
}
public String getFreeOnlyRegex () {
return freeOnlyRegex;
}
public void setFreeOnlyRegex (String freeOnlyRegex) {
this.freeOnlyRegex = freeOnlyRegex;
}
public String getPublicOnlyRegex () {
return publicOnlyRegex;
}
public void setPublicOnlyRegex (String publicOnlyRegex) {
this.publicOnlyRegex = publicOnlyRegex;
}
public String getAllOnlyRegex () {
return allOnlyRegex;
}
public void setAllOnlyRegex (String allOnlyRegex) {
this.allOnlyRegex = allOnlyRegex;
}
public EncryptionIface.Encryption getSecureHashAlgorithm () {
return secureHashAlgorithm;
}
public void setSecureHashAlgorithm (
EncryptionIface.Encryption secureHashAlgorithm) {
this.secureHashAlgorithm = secureHashAlgorithm;
}
public AuthenticationMethod getOAuth2passwordAuthentication () {
return OAuth2passwordAuthentication;
}
public void setOAuth2passwordAuthentication (
AuthenticationMethod oAuth2passwordAuthentication) {
OAuth2passwordAuthentication = oAuth2passwordAuthentication;
}
public String getNativeClientHost () {
return nativeClientHost;
}
public void setNativeClientHost (String nativeClientHost) {
this.nativeClientHost = nativeClientHost;
}
public int getMaxAuthenticationAttempts () {
return maxAuthenticationAttempts;
}
public void setMaxAuthenticationAttempts (int maxAuthenticationAttempts) {
this.maxAuthenticationAttempts = maxAuthenticationAttempts;
}
public Set<String> getClientCredentialsScopes () {
return clientCredentialsScopes;
}
public void setClientCredentialsScopes (
Set<String> clientCredentialsScopes) {
this.clientCredentialsScopes = clientCredentialsScopes;
}
public URL getIssuer () {
return issuer;
}
public void setIssuer (URL issuer) {
this.issuer = issuer;
}
public int getAccessTokenExpiry () {
return accessTokenExpiry;
}
public void setAccessTokenExpiry (int accessTokenExpiry) {
this.accessTokenExpiry = accessTokenExpiry;
}
public int getRefreshTokenExpiry () {
return refreshTokenExpiry;
}
public void setRefreshTokenExpiry (int refreshTokenExpiry) {
this.refreshTokenExpiry = refreshTokenExpiry;
}
public int getAuthorizationCodeExpiry () {
return authorizationCodeExpiry;
}
public void setAuthorizationCodeExpiry (int authorizationCodeExpiry) {
this.authorizationCodeExpiry = authorizationCodeExpiry;
}
public String getNamedVCPath () {
return namedVCPath;
}
public void setNamedVCPath (String namedVCPath) {
this.namedVCPath = namedVCPath;
}
public int getAccessTokenLongExpiry () {
return accessTokenLongExpiry;
}
public void setAccessTokenLongExpiry (int accessTokenLongExpiry) {
this.accessTokenLongExpiry = accessTokenLongExpiry;
}
public int getRefreshTokenLongExpiry () {
return refreshTokenLongExpiry;
}
public void setRefreshTokenLongExpiry (int refreshTokenLongExpiry) {
this.refreshTokenLongExpiry = refreshTokenLongExpiry;
}
public boolean createInitialSuperClient () {
return createInitialSuperClient;
}
public void setCreateInitialSuperClient (boolean initialSuperClient) {
this.createInitialSuperClient = initialSuperClient;
}
public int getMaxNumberOfUserQueries () {
return maxNumberOfUserQueries;
}
public void setMaxNumberOfUserQueries (int maxNumberOfUserQueries) {
this.maxNumberOfUserQueries = maxNumberOfUserQueries;
}
}