added possibility to get Configuration folder outside tomcat

This commit is contained in:
lucio 2024-03-22 16:39:57 +01:00
parent 82c155e3a4
commit 1fbd524fc4
5 changed files with 56 additions and 5 deletions

View File

@ -37,13 +37,13 @@
<url>https://code-repo.d4science.org/gCubeSystem/common-smartgears</url>
</scm>
<dependencies>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<!--
https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.reflections</groupId>

View File

@ -1,6 +1,6 @@
package org.gcube.smartgears.context.application;
import jakarta.servlet.ServletContext;
import java.nio.file.Path;
import org.gcube.common.events.Hub;
import org.gcube.smartgears.configuration.application.ApplicationConfiguration;
@ -10,6 +10,8 @@ import org.gcube.smartgears.lifecycle.application.ApplicationLifecycle;
import org.gcube.smartgears.persistence.PersistenceWriter;
import org.gcube.smartgears.security.AuthorizationProvider;
import jakarta.servlet.ServletContext;
/**
* The management context of an application.
*
@ -83,4 +85,11 @@ public interface ApplicationContext {
**/
AuthorizationProvider authorizationProvider();
/**
* Returns the Path to the configuration Folder for the current app
*
* @return the Path to the folder , null if the Path is not present
*/
Path appSpecificConfigurationFolder();
}

View File

@ -5,10 +5,10 @@ import static org.gcube.smartgears.Constants.profile_file_path;
import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.UUID;
import jakarta.servlet.ServletContext;
import org.gcube.common.events.Hub;
import org.gcube.smartgears.configuration.PersistenceConfiguration;
import org.gcube.smartgears.configuration.application.ApplicationConfiguration;
@ -17,9 +17,12 @@ import org.gcube.smartgears.context.container.ContainerContext;
import org.gcube.smartgears.lifecycle.application.ApplicationLifecycle;
import org.gcube.smartgears.persistence.PersistenceWriter;
import org.gcube.smartgears.security.AuthorizationProvider;
import org.gcube.smartgears.utils.Utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import jakarta.servlet.ServletContext;
/**
* Default {@link ApplicationContext} implementation.
*
@ -38,6 +41,9 @@ public class DefaultApplicationContext implements ApplicationContext {
private final Hub hub;
private final PersistenceWriter persistenceWriter;
private final String id;
private Path appSpecificConfigurationFolder;
private final static String APPS_CONFIG__DIR = "config/apps";
/**
* Crates an intance with mandatory parameters
@ -78,6 +84,7 @@ public class DefaultApplicationContext implements ApplicationContext {
this.configuration=configuration;
this.hub=hub;
this.lifecycle = lifecycle;
this.appSpecificConfigurationFolder = getApplicationSpecificConfig();
this.properties=properties;
}
@ -154,4 +161,34 @@ public class DefaultApplicationContext implements ApplicationContext {
return container().authorizationProvider();
}
@Override
public Path appSpecificConfigurationFolder() {
return this.appSpecificConfigurationFolder;
}
private Path getApplicationSpecificConfig(){
String home = Utils.home();
File homeDir = new File(home);
if (!(homeDir.exists() && homeDir.isDirectory() && homeDir.canRead()))
throw new IllegalStateException("invalid node configuration: home " + home
+ " does not exist or is not a directory or cannot be accessed in read mode");
String appName = this.configuration.name();
Path appSpecificConfigurationPath = Paths.get(home, APPS_CONFIG__DIR, appName);
File appSpecificConfiguration = appSpecificConfigurationPath.toFile();
if (!(appSpecificConfiguration.exists() && appSpecificConfiguration.isDirectory() && appSpecificConfiguration.canRead())) {
log.warn("specific configuration folder for {} not found", appName);
return null;
}
log.info("reading specific app configuration folder @ {} ", appSpecificConfiguration.getAbsolutePath());
return appSpecificConfigurationPath;
}
}

View File

@ -150,7 +150,11 @@ public class RequestValidator extends RequestHandler {
RequestError.internal_server_error.fire("error contacting keycloak client", e);
}
} else if (token!=null && !token.isEmpty())
try {
secret = new GCubeSecret(token);
}catch(Throwable t) {
RequestError.request_not_authorized_error.fire("gcube token verification error ("+t.getMessage()+")");
}
return secret;
}

View File

@ -101,7 +101,8 @@ public class ApplicationManager {
//adding the context name to the configuration
context.configuration().context(application.getContextPath());
// we're in business
context.lifecycle().moveTo(active);