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 8f2616fc6..a695aa54a 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 @@ -183,7 +183,12 @@ public class DefaultStrolchPrivilegeHandler extends StrolchComponent implements } @Override - public li.strolch.privilege.handler.PrivilegeHandler getPrivilegeHandler() throws PrivilegeException { + public V runPrivileged(V action) throws PrivilegeException { + return super.runPrivileged(action); + } + + @Override + public li.strolch.privilege.handler.PrivilegeHandler getPrivilegeHandler() { return this.privilegeHandler; } } 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 675a7f84b..dc7d331b8 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 @@ -19,65 +19,116 @@ import li.strolch.privilege.base.PrivilegeException; import li.strolch.privilege.handler.SystemUserAction; import li.strolch.privilege.model.Certificate; import li.strolch.privilege.model.PrivilegeContext; +import li.strolch.runtime.StrolchConstants; /** + * The privilege handler for authenticating users and performing actions as a system user + * * @author Robert von Burg */ public interface PrivilegeHandler { /** + * Authenticate a user + * * @param username + * the username * @param password - * @return + * the password + * + * @return the certificate * * @see li.strolch.privilege.handler.PrivilegeHandler#authenticate(String, byte[]) */ - public abstract Certificate authenticate(String username, byte[] password); + public Certificate authenticate(String username, byte[] password); /** + * Validate that the certificate is still valid + * * @param certificate + * the certificate + * * @throws PrivilegeException + * if the certificate is not valid + * * @see li.strolch.privilege.handler.PrivilegeHandler#isCertificateValid(Certificate) */ - public abstract void isCertificateValid(Certificate certificate) throws PrivilegeException; + public void isCertificateValid(Certificate certificate) throws PrivilegeException; /** + * Invalidates the given certificate + * * @param certificate - * @return + * the certificate + * + * @return true if the certificate was invalidated, or false if it was already invalidated + * * @see li.strolch.privilege.handler.PrivilegeHandler#invalidateSession(li.strolch.privilege.model.Certificate) */ - public abstract boolean invalidateSession(Certificate certificate); + public boolean invalidateSession(Certificate certificate); /** + * Notifies that the session has timed out, i.e. the certificate must be invalidated + * * @param certificate - * @return + * the certificate that has timed out + * @return true if the certificate was invalidated, or false it was already invalidated + * * @see li.strolch.privilege.handler.PrivilegeHandler#invalidateSession(li.strolch.privilege.model.Certificate) */ - public abstract boolean sessionTimeout(Certificate certificate); + public boolean sessionTimeout(Certificate certificate); /** + * Returns the {@link PrivilegeContext} for the given certificate + * * @param certificate - * @return + * the certificate + * + * @return the {@link PrivilegeContext} for the given certificate + * * @throws PrivilegeException + * if the certificate is not valid anymore + * * @see li.strolch.privilege.handler.PrivilegeHandler#getPrivilegeContext(li.strolch.privilege.model.Certificate) */ - public abstract PrivilegeContext getPrivilegeContext(Certificate certificate) throws PrivilegeException; + public PrivilegeContext getPrivilegeContext(Certificate certificate) throws PrivilegeException; /** + * Run the given {@link SystemUserAction} as the given system user + * * @param systemUsername + * the system username * @param action + * the action to perform + * + * @return the action after performing the action + * * @throws PrivilegeException + * if there is something wrong + * * @see li.strolch.privilege.handler.PrivilegeHandler#runAsSystem(java.lang.String, * li.strolch.privilege.handler.SystemUserAction) */ - public abstract T runAsSystem(String systemUsername, T action) - throws PrivilegeException; + public T runAsSystem(String systemUsername, T action) throws PrivilegeException; /** - * @param certificate - * @return + * Run the given {@link SystemUserAction} as the system user {@link StrolchConstants#PRIVILEGED_SYSTEM_USER} + * + * @param action + * the action to perform + * + * @return the action after performing the action + * * @throws PrivilegeException + * if there is something wrong */ - public abstract li.strolch.privilege.handler.PrivilegeHandler getPrivilegeHandler() throws PrivilegeException; + public V runPrivileged(V action) throws PrivilegeException; + + /** + * Returns the {@link li.strolch.privilege.handler.PrivilegeHandler} + * + * @return the {@link li.strolch.privilege.handler.PrivilegeHandler} + */ + public abstract li.strolch.privilege.handler.PrivilegeHandler getPrivilegeHandler(); } \ No newline at end of file diff --git a/li.strolch.agent/src/main/java/li/strolch/service/api/AbstractService.java b/li.strolch.agent/src/main/java/li/strolch/service/api/AbstractService.java index b91546e8d..9ed3cedd3 100644 --- a/li.strolch.agent/src/main/java/li/strolch/service/api/AbstractService.java +++ b/li.strolch.agent/src/main/java/li/strolch/service/api/AbstractService.java @@ -33,6 +33,7 @@ import li.strolch.runtime.StrolchConstants; import li.strolch.runtime.configuration.RuntimeConfiguration; import li.strolch.runtime.privilege.PrivilegeHandler; import li.strolch.utils.dbc.DBC; +import li.strolch.utils.helper.StringHelper; /** * @author Robert von Burg @@ -149,7 +150,7 @@ public abstract class AbstractService */ @@ -33,10 +30,6 @@ public class ServiceArgument implements Serializable { *

* Set this to the realm in which the service should operate *

- * - *

- * realm = StrolchConstants.DEFAULT_REALM - *

*/ - public String realm = StrolchConstants.DEFAULT_REALM; + public String realm; } diff --git a/li.strolch.performancetest/src/test/java/li/strolch/performance/PerformanceTestService.java b/li.strolch.performancetest/src/test/java/li/strolch/performance/PerformanceTestService.java index 3126c48aa..fee089e10 100644 --- a/li.strolch.performancetest/src/test/java/li/strolch/performance/PerformanceTestService.java +++ b/li.strolch.performancetest/src/test/java/li/strolch/performance/PerformanceTestService.java @@ -25,6 +25,7 @@ import li.strolch.model.Resource; import li.strolch.persistence.api.StrolchTransaction; import li.strolch.service.api.AbstractService; import li.strolch.service.api.ServiceResult; +import li.strolch.service.api.ServiceResultState; import li.strolch.utils.helper.SystemHelper; public class PerformanceTestService extends AbstractService { @@ -35,7 +36,7 @@ public class PerformanceTestService extends AbstractService activities = new ArrayList<>(arg.locators.size()); for (Locator locator : arg.locators) { diff --git a/li.strolch.service/src/main/java/li/strolch/service/RemoveActivityService.java b/li.strolch.service/src/main/java/li/strolch/service/RemoveActivityService.java index 623a9364f..bdaaa43bb 100644 --- a/li.strolch.service/src/main/java/li/strolch/service/RemoveActivityService.java +++ b/li.strolch.service/src/main/java/li/strolch/service/RemoveActivityService.java @@ -37,7 +37,7 @@ public class RemoveActivityService extends AbstractService orders = new ArrayList<>(arg.locators.size()); for (Locator locator : arg.locators) { diff --git a/li.strolch.service/src/main/java/li/strolch/service/RemoveOrderService.java b/li.strolch.service/src/main/java/li/strolch/service/RemoveOrderService.java index f26263f06..a3f429a4e 100644 --- a/li.strolch.service/src/main/java/li/strolch/service/RemoveOrderService.java +++ b/li.strolch.service/src/main/java/li/strolch/service/RemoveOrderService.java @@ -37,7 +37,7 @@ public class RemoveOrderService extends AbstractService resources = new ArrayList<>(arg.locators.size()); for (Locator locator : arg.locators) { diff --git a/li.strolch.service/src/main/java/li/strolch/service/RemoveResourceService.java b/li.strolch.service/src/main/java/li/strolch/service/RemoveResourceService.java index 865d5e28d..aec150281 100644 --- a/li.strolch.service/src/main/java/li/strolch/service/RemoveResourceService.java +++ b/li.strolch.service/src/main/java/li/strolch/service/RemoveResourceService.java @@ -37,7 +37,7 @@ public class RemoveResourceService extends AbstractService parameter = tx.findElement(arg.locator); diff --git a/li.strolch.service/src/main/java/li/strolch/service/parameter/SetParameterService.java b/li.strolch.service/src/main/java/li/strolch/service/parameter/SetParameterService.java index c2cb937c6..8c6629788 100644 --- a/li.strolch.service/src/main/java/li/strolch/service/parameter/SetParameterService.java +++ b/li.strolch.service/src/main/java/li/strolch/service/parameter/SetParameterService.java @@ -39,7 +39,7 @@ public class SetParameterService extends AbstractService parameter = tx.findElement(arg.locator); diff --git a/li.strolch.service/src/main/java/li/strolch/service/privilege/roles/PrivilegeAddOrReplacePrivilegeOnRoleService.java b/li.strolch.service/src/main/java/li/strolch/service/privilege/roles/PrivilegeAddOrReplacePrivilegeOnRoleService.java index 8eb63d106..05b420122 100644 --- a/li.strolch.service/src/main/java/li/strolch/service/privilege/roles/PrivilegeAddOrReplacePrivilegeOnRoleService.java +++ b/li.strolch.service/src/main/java/li/strolch/service/privilege/roles/PrivilegeAddOrReplacePrivilegeOnRoleService.java @@ -45,7 +45,7 @@ public class PrivilegeAddOrReplacePrivilegeOnRoleService RoleRep role = privilegeHandler.addOrReplacePrivilegeOnRole(getCertificate(), arg.roleName, arg.privilegeRep); - try (StrolchTransaction tx = openUserTx(PrivilegeHandler.PRIVILEGE_MODIFY_ROLE)) { + try (StrolchTransaction tx = openArgOrUserTx(arg, PrivilegeHandler.PRIVILEGE_MODIFY_ROLE)) { tx.setSuppressAudits(true); Audit audit = tx.auditFrom(AccessType.UPDATE, StrolchPrivilegeConstants.PRIVILEGE, StrolchPrivilegeConstants.ROLE, role.getName()); diff --git a/li.strolch.service/src/main/java/li/strolch/service/privilege/roles/PrivilegeAddRoleService.java b/li.strolch.service/src/main/java/li/strolch/service/privilege/roles/PrivilegeAddRoleService.java index d283d7810..a9d9a684c 100644 --- a/li.strolch.service/src/main/java/li/strolch/service/privilege/roles/PrivilegeAddRoleService.java +++ b/li.strolch.service/src/main/java/li/strolch/service/privilege/roles/PrivilegeAddRoleService.java @@ -43,7 +43,7 @@ public class PrivilegeAddRoleService extends AbstractService