diff --git a/li.strolch.agent/src/main/java/li/strolch/policy/ReloadPrivilegeHandlerJob.java b/li.strolch.agent/src/main/java/li/strolch/policy/ReloadPrivilegeHandlerJob.java new file mode 100644 index 000000000..a0283a63a --- /dev/null +++ b/li.strolch.agent/src/main/java/li/strolch/policy/ReloadPrivilegeHandlerJob.java @@ -0,0 +1,17 @@ +package li.strolch.policy; + +import li.strolch.agent.api.StrolchAgent; +import li.strolch.job.StrolchJob; +import li.strolch.privilege.model.PrivilegeContext; + +public class ReloadPrivilegeHandlerJob extends StrolchJob { + + public ReloadPrivilegeHandlerJob(StrolchAgent agent) { + super(agent); + } + + @Override + protected void execute(PrivilegeContext ctx) throws Exception { + getContainer().getPrivilegeHandler().reloadConfiguration(); + } +} diff --git a/li.strolch.agent/src/main/java/li/strolch/runtime/privilege/DefaultStrolchPrivilegeHandler.java b/li.strolch.agent/src/main/java/li/strolch/runtime/privilege/DefaultStrolchPrivilegeHandler.java index 5cc9dfeeb..a813088a9 100644 --- a/li.strolch.agent/src/main/java/li/strolch/runtime/privilege/DefaultStrolchPrivilegeHandler.java +++ b/li.strolch.agent/src/main/java/li/strolch/runtime/privilege/DefaultStrolchPrivilegeHandler.java @@ -66,6 +66,22 @@ public class DefaultStrolchPrivilegeHandler extends StrolchComponent implements this.privilegeHandler = initializeFromXml(configuration, privilegeConfigFile); } + @Override + public void reloadConfiguration() { + + try { + runAsAgent(ctx -> this.privilegeHandler.persistSessions(ctx.getCertificate(), getClass().getName())); + } catch (Exception e) { + logger.error("Failed to persist sessions", e); + } + + ComponentConfiguration configuration = getConfiguration(); + RuntimeConfiguration runtimeConfiguration = configuration.getRuntimeConfiguration(); + File privilegeConfigFile = configuration + .getConfigFile(PROP_PRIVILEGE_CONFIG_FILE, PRIVILEGE_CONFIG_XML, runtimeConfiguration); + this.privilegeHandler = initializeFromXml(configuration, privilegeConfigFile); + } + /** * Initializes the {@link DefaultPrivilegeHandler} from the configuration file * diff --git a/li.strolch.agent/src/main/java/li/strolch/runtime/privilege/PrivilegeHandler.java b/li.strolch.agent/src/main/java/li/strolch/runtime/privilege/PrivilegeHandler.java index f4f61f3c3..0af4f542b 100644 --- a/li.strolch.agent/src/main/java/li/strolch/runtime/privilege/PrivilegeHandler.java +++ b/li.strolch.agent/src/main/java/li/strolch/runtime/privilege/PrivilegeHandler.java @@ -29,6 +29,11 @@ import li.strolch.runtime.StrolchConstants; */ public interface PrivilegeHandler { + /** + * Reloads the configuration, by re-initializing the underlying privilege handler + */ + void reloadConfiguration(); + /** * Authenticate a user *