summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Branson <andrew.branson@cern.ch>2014-04-09 16:37:26 +0200
committerAndrew Branson <andrew.branson@cern.ch>2014-04-09 16:37:26 +0200
commit9bd010f09cff41f5d25763406a0ac4d61815a8c5 (patch)
tree93ea7324f4b8749fdb7cfd993b4dd97648968ece
parent58136e4e306af8fde3639d0779d11d5e1711295b (diff)
Expanded server predefined steps to include server and agent maintenance
steps. Fixes #174 Fixed schema of CreateNewItem and CreateNewAgent.
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/predefined/Erase.java8
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStep.java9
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStepContainer.java2
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/predefined/ServerPredefinedStepContainer.java20
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/CreateNewAgent.java1
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/CreateNewItem.java1
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/predefined/server/AddDomainContext.java54
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveAgent.java67
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveDomainContext.java47
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/predefined/server/SetAgentPassword.java56
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/predefined/server/SetAgentRoles.java79
-rw-r--r--src/main/java/com/c2kernel/lookup/LDAPLookup.java11
-rw-r--r--src/main/java/com/c2kernel/lookup/LDAPRoleManager.java13
-rw-r--r--src/test/resources/NewServerPredefStepTest.js12
14 files changed, 361 insertions, 19 deletions
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/Erase.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/Erase.java
index 84b1b78..c26d5b8 100644
--- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/Erase.java
+++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/Erase.java
@@ -22,9 +22,7 @@ import com.c2kernel.lookup.AgentPath;
import com.c2kernel.lookup.DomainPath;
import com.c2kernel.lookup.EntityPath;
import com.c2kernel.lookup.Path;
-import com.c2kernel.persistency.ClusterStorage;
import com.c2kernel.process.Gateway;
-import com.c2kernel.property.Property;
import com.c2kernel.utils.Logger;
@@ -53,12 +51,8 @@ public class Erase extends PredefinedStep
try
{
EntityPath entityPath = getItemEntityPath();
- // FIXME: This should search for the entity key. Name shouldn't be unique.
- // find entity name
- Property name = (Property)Gateway.getStorage().get(entityPath.getSysKey(), ClusterStorage.PROPERTY+"/Name", null);
-
// get all domain paths
- Enumeration<Path> domPaths = Gateway.getLDAPLookup().search(new DomainPath(), name.getValue());
+ Enumeration<Path> domPaths = Gateway.getLDAPLookup().searchAliases(new EntityPath(entityPath.getSysKey()));
while (domPaths.hasMoreElements()) {
DomainPath path = (DomainPath)domPaths.nextElement();
// delete them
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStep.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStep.java
index 9531ede..2e2869d 100644
--- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStep.java
+++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStep.java
@@ -33,6 +33,15 @@ public class PredefinedStep extends Activity
else
return super.getActive();
}
+
+ public PredefinedStep() {
+ super();
+ getProperties().put("SchemaType", "PredefinedStepOutcome");
+ getProperties().put("SchemaVersion", "0");
+ }
+
+ public static final int DONE = 0;
+ public static final int AVAILABLE = 0;
@Override
public String getTransitions()
{
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStepContainer.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStepContainer.java
index f17e5e8..340ce0b 100644
--- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStepContainer.java
+++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStepContainer.java
@@ -37,8 +37,6 @@ public class PredefinedStepContainer extends CompositeActivity
act.setName(alias);
act.setType(alias);
act.getProperties().put("Description", Description);
- act.getProperties().put("SchemaType", "PredefinedStepOutcome");
- act.getProperties().put("SchemaVersion", "0");
act.setCentrePoint(new GraphPoint());
act.setIsPredefined(true);
addChild(act, new GraphPoint(100, 75 * ++num));
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/ServerPredefinedStepContainer.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/ServerPredefinedStepContainer.java
index d11c05b..55bac52 100644
--- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/ServerPredefinedStepContainer.java
+++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/ServerPredefinedStepContainer.java
@@ -3,6 +3,11 @@ package com.c2kernel.lifecycle.instance.predefined;
import com.c2kernel.graph.model.GraphPoint;
import com.c2kernel.lifecycle.instance.predefined.entitycreation.CreateNewAgent;
import com.c2kernel.lifecycle.instance.predefined.entitycreation.CreateNewItem;
+import com.c2kernel.lifecycle.instance.predefined.server.AddDomainContext;
+import com.c2kernel.lifecycle.instance.predefined.server.RemoveAgent;
+import com.c2kernel.lifecycle.instance.predefined.server.RemoveDomainContext;
+import com.c2kernel.lifecycle.instance.predefined.server.SetAgentPassword;
+import com.c2kernel.lifecycle.instance.predefined.server.SetAgentRoles;
/**************************************************************************
*
@@ -21,18 +26,21 @@ public class ServerPredefinedStepContainer extends PredefinedStepContainer {
public void createChildren()
{
super.createChildren();
- serverPredInit("CreateNewItem", "Creates a new Item in this Server without description.", new CreateNewItem(), "NewItem");
- serverPredInit("CreateNewAgent", "Creates a new Agent in this Server without description.", new CreateNewAgent(), "NewAgent");
+ serverPredInit("CreateNewItem", "Creates a new Item in this Server without description.", new CreateNewItem());
+ serverPredInit("CreateNewAgent", "Creates a new Agent in this Server without description.", new CreateNewAgent());
+ serverPredInit("RemoveAgent", "Deletes the named Agent in this Server.", new RemoveAgent());
+ serverPredInit("SetAgentPassword", "Changes the named Agent's password in this Server.", new SetAgentPassword());
+ serverPredInit("SetAgentRoles", "Sets the roles of the named Agent.", new SetAgentRoles());
+ serverPredInit("RemoveDomainContext", "Deletes an existing context in the domain tree, but only if empty", new RemoveDomainContext());
+ serverPredInit("AddDomainContext", "Creates an empty domain context in the tree", new AddDomainContext());
}
- public void serverPredInit(String alias, String Description, PredefinedStep act, String schema)
+ public void serverPredInit(String alias, String Description, PredefinedStep act)
{
act.setName(alias);
act.setType(alias);
act.getProperties().put("Description", Description);
- act.getProperties().put("SchemaType", schema);
- act.getProperties().put("SchemaVersion", "0");
- act.getProperties().put("AgentRole", "Admin");
+ act.getProperties().put("Agent Role", "Admin");
act.setCentrePoint(new GraphPoint());
act.setIsPredefined(true);
addChild(act, new GraphPoint(100, 75 * ++num));
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/CreateNewAgent.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/CreateNewAgent.java
index 9ec6519..bf5449a 100644
--- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/CreateNewAgent.java
+++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/CreateNewAgent.java
@@ -20,6 +20,7 @@ public class CreateNewAgent extends PredefinedStep
public CreateNewAgent()
{
super();
+ getProperties().put("SchemaType", "Agent");
}
//requestdata is xmlstring
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/CreateNewItem.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/CreateNewItem.java
index 5776a5a..d29e8c0 100644
--- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/CreateNewItem.java
+++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/CreateNewItem.java
@@ -23,6 +23,7 @@ public class CreateNewItem extends PredefinedStep
public CreateNewItem()
{
super();
+ getProperties().put("SchemaType", "Item");
}
//requestdata is xmlstring
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/AddDomainContext.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/AddDomainContext.java
new file mode 100644
index 0000000..ebaf74b
--- /dev/null
+++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/AddDomainContext.java
@@ -0,0 +1,54 @@
+package com.c2kernel.lifecycle.instance.predefined.server;
+
+import java.util.Stack;
+
+import com.c2kernel.common.AccessRightsException;
+import com.c2kernel.common.InvalidDataException;
+import com.c2kernel.common.InvalidTransitionException;
+import com.c2kernel.common.ObjectAlreadyExistsException;
+import com.c2kernel.common.ObjectCannotBeUpdated;
+import com.c2kernel.lifecycle.instance.predefined.PredefinedStep;
+import com.c2kernel.lookup.AgentPath;
+import com.c2kernel.lookup.DomainPath;
+import com.c2kernel.process.Gateway;
+import com.c2kernel.utils.Logger;
+
+public class AddDomainContext extends PredefinedStep {
+
+ public AddDomainContext() {
+ super();
+ }
+
+ @Override
+ public void request(AgentPath agent, int transitionID, String requestData)
+ throws AccessRightsException,
+ InvalidTransitionException,
+ InvalidDataException
+ {
+
+ Logger.msg(1, "AddDomainContext::request() - Starting.");
+ checkAccessRights(agent);
+
+ DomainPath pathToAdd = new DomainPath(getDataList(requestData)[0]);
+ if (pathToAdd.exists())
+ throw new InvalidDataException("Context "+pathToAdd+" already exists", "");
+ // collect parent paths if they don't exist
+ Stack<DomainPath> pathsToAdd = new Stack<DomainPath>();
+ while(pathToAdd!= null && !pathToAdd.exists()) {
+ pathsToAdd.push(pathToAdd);
+ pathToAdd = pathToAdd.getParent();
+ }
+ while(!pathsToAdd.empty()) {
+ pathToAdd = pathsToAdd.pop();
+ try {
+ Gateway.getLDAPLookup().add(pathToAdd);
+ } catch (ObjectAlreadyExistsException e) {
+ Logger.error("Context "+pathToAdd+" inconsistently exists.");
+ } catch (ObjectCannotBeUpdated e) {
+ Logger.error(e);
+ throw new InvalidDataException("Exception adding path "+pathToAdd+": "+e.getMessage(), "");
+ }
+ }
+ sendEventStoreOutcome(transitionID, requestData, agent);
+ }
+}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveAgent.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveAgent.java
new file mode 100644
index 0000000..0ab042c
--- /dev/null
+++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveAgent.java
@@ -0,0 +1,67 @@
+package com.c2kernel.lifecycle.instance.predefined.server;
+
+import com.c2kernel.common.AccessRightsException;
+import com.c2kernel.common.InvalidDataException;
+import com.c2kernel.common.InvalidTransitionException;
+import com.c2kernel.common.ObjectCannotBeUpdated;
+import com.c2kernel.common.ObjectNotFoundException;
+import com.c2kernel.lifecycle.instance.predefined.PredefinedStep;
+import com.c2kernel.lookup.AgentPath;
+import com.c2kernel.lookup.RolePath;
+import com.c2kernel.persistency.ClusterStorageException;
+import com.c2kernel.process.Gateway;
+import com.c2kernel.utils.Logger;
+
+public class RemoveAgent extends PredefinedStep {
+
+ public RemoveAgent() {
+ super();
+ }
+
+ @Override
+ public void request(AgentPath agent, int transitionID, String requestData)
+ throws AccessRightsException,
+ InvalidTransitionException,
+ InvalidDataException
+ {
+
+ Logger.msg(1, "RemoveAgent::request() - Starting.");
+ checkAccessRights(agent);
+
+ String[] params = getDataList(requestData);
+ AgentPath targetAgent;
+ try {
+ targetAgent = Gateway.getLDAPLookup().getRoleManager().getAgentPath(params[0]);
+ } catch (ObjectNotFoundException e) {
+ throw new InvalidDataException("Agent "+params[0]+" not found", "");
+ }
+ //remove from roles
+ for (RolePath role: targetAgent.getRoles()) {
+ try {
+ role.removeAgent(targetAgent);
+ } catch (ObjectCannotBeUpdated e) {
+ Logger.error(e);
+ throw new InvalidDataException("Error removing "+params[0]+" from Role "+role.getName(), "");
+ } catch (ObjectNotFoundException e) {
+ Logger.error(e);
+ throw new InvalidDataException("Tried to remove "+params[0]+" from Role "+role.getName()+" that doesn't exist.", "");
+ }
+ }
+ //clear out all storages
+ try {
+ Gateway.getStorage().removeCluster(targetAgent.getSysKey(), "", null);
+ } catch (ClusterStorageException e) {
+ Logger.error(e);
+ throw new InvalidDataException("Error deleting storage for "+params[0], "");
+ }
+ //remove entity path
+ try {
+ Gateway.getLDAPLookup().delete(targetAgent);
+ } catch (ObjectCannotBeUpdated e) {
+ throw new InvalidDataException("Error deleting AgentPath for "+params[0], "");
+ }
+
+ sendEventStoreOutcome(transitionID, requestData, agent);
+ }
+
+}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveDomainContext.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveDomainContext.java
new file mode 100644
index 0000000..8bfa016
--- /dev/null
+++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveDomainContext.java
@@ -0,0 +1,47 @@
+package com.c2kernel.lifecycle.instance.predefined.server;
+
+import com.c2kernel.common.AccessRightsException;
+import com.c2kernel.common.InvalidDataException;
+import com.c2kernel.common.InvalidTransitionException;
+import com.c2kernel.common.ObjectCannotBeUpdated;
+import com.c2kernel.common.ObjectNotFoundException;
+import com.c2kernel.lifecycle.instance.predefined.PredefinedStep;
+import com.c2kernel.lookup.AgentPath;
+import com.c2kernel.lookup.DomainPath;
+import com.c2kernel.process.Gateway;
+import com.c2kernel.utils.Logger;
+
+public class RemoveDomainContext extends PredefinedStep {
+ public RemoveDomainContext() {
+ super();
+ }
+
+ @Override
+ public void request(AgentPath agent, int transitionID, String requestData)
+ throws AccessRightsException,
+ InvalidTransitionException,
+ InvalidDataException
+ {
+ Logger.msg(1, "RemoveDomainContext::request() - Starting.");
+
+ checkAccessRights(agent);
+
+ DomainPath pathToDelete = new DomainPath(getDataList(requestData)[0]);
+ if (!pathToDelete.exists())
+ throw new InvalidDataException("Context "+pathToDelete+" does not exist", "");
+ try {
+ pathToDelete.getEntity();
+ throw new InvalidDataException("Path "+pathToDelete+" is an Entity. Use its own Erase step instead, or RemoveAgent.", "");
+ } catch (ObjectNotFoundException ex) { }
+ if (pathToDelete.getChildren().hasMoreElements())
+ throw new InvalidDataException("Context "+pathToDelete+" is not empty. Cannot delete.", "");
+
+ try {
+ Gateway.getLDAPLookup().delete(pathToDelete);
+ } catch (ObjectCannotBeUpdated e) {
+ Logger.error(e);
+ throw new InvalidDataException("Exception deleting path"+pathToDelete+": "+e.getMessage(), "");
+ }
+ sendEventStoreOutcome(transitionID, requestData, agent);
+ }
+}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/SetAgentPassword.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/SetAgentPassword.java
new file mode 100644
index 0000000..bf4347e
--- /dev/null
+++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/SetAgentPassword.java
@@ -0,0 +1,56 @@
+package com.c2kernel.lifecycle.instance.predefined.server;
+
+import java.security.NoSuchAlgorithmException;
+
+import com.c2kernel.common.AccessRightsException;
+import com.c2kernel.common.InvalidDataException;
+import com.c2kernel.common.InvalidTransitionException;
+import com.c2kernel.common.ObjectCannotBeUpdated;
+import com.c2kernel.common.ObjectNotFoundException;
+import com.c2kernel.lifecycle.instance.predefined.PredefinedStep;
+import com.c2kernel.lookup.AgentPath;
+import com.c2kernel.process.Gateway;
+import com.c2kernel.utils.Logger;
+
+public class SetAgentPassword extends PredefinedStep {
+
+ public SetAgentPassword() {
+ super();
+ }
+
+ @Override
+ public void request(AgentPath agent, int transitionID, String requestData)
+ throws AccessRightsException,
+ InvalidTransitionException,
+ InvalidDataException
+ {
+ Logger.msg(1, "SetAgentPassword::request() - Starting.");
+ checkAccessRights(agent);
+
+ String[] params = getDataList(requestData);
+ if (params.length!=2)
+ throw new InvalidDataException("Requires 2 params: agent name and new password", "");
+ AgentPath targetAgent;
+ try {
+ targetAgent = Gateway.getLDAPLookup().getRoleManager().getAgentPath(params[0]);
+ } catch (ObjectNotFoundException e) {
+ throw new InvalidDataException("Agent "+params[0]+" not found", "");
+ }
+
+ try {
+ Gateway.getLDAPLookup().getRoleManager().setAgentPassword(targetAgent, params[1]);
+ } catch (ObjectNotFoundException e) {
+ Logger.error(e);
+ throw new InvalidDataException("Agent "+params[0]+" not found.", "");
+ } catch (ObjectCannotBeUpdated e) {
+ Logger.error(e);
+ throw new InvalidDataException("Error updating LDAP entry.", "");
+ } catch (NoSuchAlgorithmException e) {
+ Logger.error(e);
+ throw new InvalidDataException("Cryptographic libraries for password hashing not found.", "");
+ }
+
+ sendEventStoreOutcome(transitionID, requestData, agent);
+ }
+
+}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/SetAgentRoles.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/SetAgentRoles.java
new file mode 100644
index 0000000..4c36530
--- /dev/null
+++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/SetAgentRoles.java
@@ -0,0 +1,79 @@
+package com.c2kernel.lifecycle.instance.predefined.server;
+
+import java.util.ArrayList;
+
+import com.c2kernel.common.AccessRightsException;
+import com.c2kernel.common.InvalidDataException;
+import com.c2kernel.common.InvalidTransitionException;
+import com.c2kernel.common.ObjectNotFoundException;
+import com.c2kernel.lifecycle.instance.predefined.PredefinedStep;
+import com.c2kernel.lookup.AgentPath;
+import com.c2kernel.lookup.LDAPRoleManager;
+import com.c2kernel.lookup.RolePath;
+import com.c2kernel.process.Gateway;
+import com.c2kernel.utils.Logger;
+
+public class SetAgentRoles extends PredefinedStep {
+
+ public SetAgentRoles() {
+ super();
+ }
+
+ @Override
+ public void request(AgentPath agent, int transitionID, String requestData)
+ throws AccessRightsException,
+ InvalidTransitionException,
+ InvalidDataException
+ {
+ Logger.msg(1, "SetAgentRoles::request() - Starting.");
+ checkAccessRights(agent);
+
+ String[] params = getDataList(requestData);
+ AgentPath targetAgent;
+ try {
+ targetAgent = Gateway.getLDAPLookup().getRoleManager().getAgentPath(params[0]);
+ } catch (ObjectNotFoundException e) {
+ throw new InvalidDataException("Agent "+params[0]+" not found", "");
+ }
+
+ LDAPRoleManager roleMan = Gateway.getLDAPLookup().getRoleManager();
+ RolePath[] currentRoles = targetAgent.getRoles();
+ ArrayList<RolePath> requestedRoles = new ArrayList<RolePath>();
+ if (params.length>1)
+ for (int i=1; i<params.length; i++)
+ try {
+ requestedRoles.add(roleMan.getRolePath(params[i]));
+ } catch (ObjectNotFoundException e) {
+ throw new InvalidDataException("Role "+params[i]+" not found", "");
+ }
+
+ ArrayList<RolePath> rolesToRemove = new ArrayList<RolePath>();
+ for (RolePath existingRole : currentRoles) { //
+ if (requestedRoles.contains(existingRole)) // if we have it, and it's requested, then it will be kept
+ requestedRoles.remove(existingRole); // so remove it from request - this will be left with roles to be added
+ else
+ rolesToRemove.add(existingRole); // else this role will be removed
+ }
+
+ // remove roles not in new list
+ for (RolePath roleToRemove : rolesToRemove)
+ try {
+ roleToRemove.removeAgent(targetAgent);
+ } catch (Exception e) {
+ Logger.error(e);
+ throw new InvalidDataException("Error removing role "+roleToRemove.getName(), "");
+ }
+
+ // add requested roles we don't already have
+ for (RolePath roleToAdd : requestedRoles)
+ try {
+ roleToAdd.addAgent(targetAgent);
+ } catch (Exception e) {
+ Logger.error(e);
+ throw new InvalidDataException("Error adding role "+roleToAdd.getName(), "");
+ }
+
+ sendEventStoreOutcome(transitionID, requestData, agent);
+ }
+
+}
diff --git a/src/main/java/com/c2kernel/lookup/LDAPLookup.java b/src/main/java/com/c2kernel/lookup/LDAPLookup.java
index 996ca0e..2702122 100644
--- a/src/main/java/com/c2kernel/lookup/LDAPLookup.java
+++ b/src/main/java/com/c2kernel/lookup/LDAPLookup.java
@@ -360,10 +360,6 @@ public class LDAPLookup
else
return search(start.getFullDN(),LDAPConnection.SCOPE_SUB,"(&"+query.toString()+")",searchCons);
}
-
- public LDAPPathSet searchType(Path start, Path type) {
- return null;
- }
protected LDAPPathSet search(String startDN, int scope, String filter, LDAPSearchConstraints searchCons)
{
@@ -404,6 +400,13 @@ public class LDAPLookup
searchCons.setDereference(LDAPSearchConstraints.DEREF_NEVER);
return search(start.getFullDN(), LDAPConnection.SCOPE_SUB, "objectClass=aliasObject", searchCons);
}
+
+ public LDAPPathSet searchAliases(EntityPath entity) {
+ LDAPSearchConstraints searchCons = new LDAPSearchConstraints();
+ searchCons.setBatchSize(0);
+ searchCons.setDereference(LDAPSearchConstraints.DEREF_NEVER);
+ return search(new DomainPath().getDN(), LDAPConnection.SCOPE_SUB, "&(objectClass=aliasObject)(aliasedObjectName="+entity.getDN()+")", searchCons);
+ }
public boolean exists(Path path) {
return LDAPLookupUtils.exists(getConnection(), path.getFullDN());
diff --git a/src/main/java/com/c2kernel/lookup/LDAPRoleManager.java b/src/main/java/com/c2kernel/lookup/LDAPRoleManager.java
index b2cffc6..f40cd53 100644
--- a/src/main/java/com/c2kernel/lookup/LDAPRoleManager.java
+++ b/src/main/java/com/c2kernel/lookup/LDAPRoleManager.java
@@ -1,5 +1,6 @@
package com.c2kernel.lookup;
+import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Enumeration;
@@ -207,5 +208,17 @@ public class LDAPRoleManager {
// set attribute
LDAPLookupUtils.setAttributeValue(mLdap.getConnection(), roleEntry, "jobList", hasJobList?"TRUE":"FALSE");
}
+
+ public void setAgentPassword(AgentPath agent, String newPassword) throws ObjectNotFoundException, ObjectCannotBeUpdated, NoSuchAlgorithmException {
+ String encPasswd = AgentPath.generateUserPassword(newPassword, "SHA");
+ LDAPEntry agentEntry;
+ try {
+ agentEntry = LDAPLookupUtils.getEntry(mLdap.getConnection(), agent.getFullDN());
+ } catch (ObjectNotFoundException e) {
+ throw new ObjectNotFoundException("Agent "+agent.getAgentName()+" does not exist", "");
+ }
+ LDAPLookupUtils.setAttributeValue(mLdap.getConnection(), agentEntry, "userPassword", encPasswd);
+
+ }
}
diff --git a/src/test/resources/NewServerPredefStepTest.js b/src/test/resources/NewServerPredefStepTest.js
new file mode 100644
index 0000000..64d3d29
--- /dev/null
+++ b/src/test/resources/NewServerPredefStepTest.js
@@ -0,0 +1,12 @@
+var serverPath=new com.c2kernel.lookup.DomainPath("/servers/pcuwe04.cern.ch");
+var serverItem=proxy.getProxy(serverPath);
+
+var predef = "AddDomainContext"; var params = new Array(1); params[0] = "/test/context"; agent.execute(serverItem, predef, params);
+var predef = "RemoveDomainContext"; agent.execute(serverItem, predef, params);
+params[0] = "/test"; agent.execute(serverItem, predef, params);
+var predef = "SetAgentPassword"; params = Array(2); params[0] = "dev"; params[1] = "hunter2"; agent.execute(serverItem, predef, params);
+com.c2kernel.process.Gateway.login("dev", "hunter2");
+var predef = "SetAgentRoles"; agent.execute(serverItem, predef, params); //Role shouldn't exist
+params = Array(3); params[0] = "dev"; params[1] = "Admin"; params[2] = "UserCode"; agent.execute(serverItem, predef, params);
+params = Array(2); params[0] = "dev"; params[1] = "Admin"; agent.execute(serverItem, predef, params);
+var predef = "RemoveAgent"; var params = new Array(1); params[0] = "dev"; agent.execute(serverItem, predef, params);