private static TaskType[] listTasks(modelPortType modelPort) { // Let's say we want to retrieve tasks' next scheduled time (because this may be a costly operation if // JDBC based quartz scheduler is used, the fetching of this attribute has to be explicitly requested) SelectorQualifiedGetOptionType getNextScheduledTimeOption = new SelectorQualifiedGetOptionType(); // prepare a selector (described by path) + options (saying to retrieve that attribute) ObjectSelectorType selector = new ObjectSelectorType(); selector.path = createItemPathType("nextRunStartTimestamp"); getNextScheduledTimeOption.selector = selector; GetOperationOptionsType selectorOptions = new GetOperationOptionsType(); selectorOptions.retrieve = RetrieveOptionType.include; selectorOptions.retrieveSpecified = true; getNextScheduledTimeOption.options = selectorOptions; SelectorQualifiedGetOptionType[] operationOptions = new SelectorQualifiedGetOptionType[] { getNextScheduledTimeOption }; searchObjects request = new searchObjects(TASK_TYPE, null, operationOptions); searchObjectsResponse response = modelPort.searchObjects(request); ObjectListType objectList = response.objectList; List <TaskType> tasks = new List <TaskType>(); foreach (ObjectType1 object1 in response.objectList.@object) { tasks.Add((TaskType)object1); } return(tasks.ToArray()); }
/// <summary> /// Creates a new userDelta with the new password for the given user, then uses /// the given model port to transmit userDelta to Midpoint. /// </summary> /// <param name="modelPort">The model port to transmit new userDelta back to Midpoint.</param> /// <param name="oid">The user ID.</param> /// <param name="newPassword">The new password value.</param> public static void changeUserPassword(modelPortType modelPort, string oid, string newPassword) { XmlDocument doc = new XmlDocument(); ObjectModificationType userDelta = new ObjectModificationType(); userDelta.oid = oid; ItemDeltaType passwordDelta = new ItemDeltaType(); passwordDelta.modificationType = ModificationTypeType.replace; // Set path value - webservices name is apparently 'Any'? passwordDelta.Any = createPathElement("credentials/password", doc); ItemDeltaTypeValue passwordValue = new ItemDeltaTypeValue(); // New passwordValue object so add at first index? passwordValue.Any = new XmlElement[1]; passwordValue.Any.SetValue(toPasswordElement(NS_COMMON, createProtectedString(newPassword), doc), 0); passwordDelta.value = passwordValue; // New userDelta object so add at first index? userDelta.modification = new ItemDeltaType[1]; userDelta.modification.SetValue(passwordDelta, 0); modifyObject request = new modifyObject(getTypeUri(new UserType()), userDelta); modifyObjectResponse response = modelPort.modifyObject(request); System.Console.WriteLine("Result: '" + response.result.status.ToString() + "' for user oid: '" + oid + "'"); }
private static SystemConfigurationType getConfiguration(modelPortType modelPort) { getObject request = new getObject(SYSTEM_CONFIGURATION_TYPE, SYSTEM_CONFIGURATION_OID, null); getObjectResponse response = modelPort.getObject(request); return((SystemConfigurationType)response.@object); }
private static void modifyRoleAssignment(modelPortType modelPort, String userOid, bool isAdd, String[] roleOids) { ItemDeltaType assignmentDelta = new ItemDeltaType(); if (isAdd) { assignmentDelta.modificationType = ModificationTypeType.add; } else { assignmentDelta.modificationType = ModificationTypeType.delete; } assignmentDelta.path = createItemPathType("assignment"); List <object> assignments = new List <object>(); foreach (String roleOid in roleOids) { assignments.Add(createRoleAssignment(roleOid)); } assignmentDelta.value = assignments.ToArray(); ObjectDeltaType objectDelta = new ObjectDeltaType(); objectDelta.objectType = USER_TYPE; objectDelta.changeType = ChangeTypeType.modify; objectDelta.oid = userOid; objectDelta.itemDelta = new ItemDeltaType[] { assignmentDelta }; executeChanges request = new executeChanges(new ObjectDeltaType[] { objectDelta }, null); executeChangesResponse response = modelPort.executeChanges(request); check(response); }
private static String createUserFromFile(modelPortType modelPort, String fileName) { StreamReader reader = new StreamReader(fileName); XmlSerializer xmlSerializer = new XmlSerializer(typeof(UserType)); UserType user = (UserType)xmlSerializer.Deserialize(reader); return(createUser(modelPort, user)); }
private static ObjectType1[] listObjects(modelPortType modelPort, XmlQualifiedName type) { searchObjects request = new searchObjects(type, null, null); searchObjectsResponse response = modelPort.searchObjects(request); ObjectListType objectList = response.objectList; ObjectType1[] objects = objectList.@object; return(objects); }
private static RoleType searchRoleByName(modelPortType modelPort, String roleName) { QueryType query = new QueryType(); query.filter = createNameFilter(roleName); searchObjects request = new searchObjects(ROLE_TYPE, query, null); searchObjectsResponse response = modelPort.searchObjects(request); return((RoleType)getOneObject(response, roleName)); }
private static UserType searchUserByName(modelPortType modelPort, String username) { QueryType query = new QueryType(); query.filter = createNameFilter(username); searchObjects request = new searchObjects(USER_TYPE, query, null); searchObjectsResponse response = modelPort.searchObjects(request); return((UserType)getOneObject(response, username)); }
private static String createUser(modelPortType modelPort, UserType userType) { ObjectDeltaType deltaType = new ObjectDeltaType(); deltaType.objectType = USER_TYPE; deltaType.changeType = ChangeTypeType.add; deltaType.objectToAdd = userType; executeChanges request = new executeChanges(new ObjectDeltaType[] { deltaType }, null); executeChangesResponse response = modelPort.executeChanges(request); return(getOidFromDeltaOperationList(response.deltaOperationList, deltaType)); }
private static void deleteUser(modelPortType modelPort, String oid) { ObjectDeltaType objectDelta = new ObjectDeltaType(); objectDelta.objectType = USER_TYPE; objectDelta.changeType = ChangeTypeType.delete; objectDelta.oid = oid; executeChanges request = new executeChanges(new ObjectDeltaType[] { objectDelta }, null); executeChangesResponse response = modelPort.executeChanges(request); check(response); }
private static ObjectType1[] listRequestableRoles(modelPortType modelPort) { SearchFilterType filter = createRequestableFilter(); QueryType query = new QueryType(); query.filter = filter; searchObjects request = new searchObjects(ROLE_TYPE, query, null); searchObjectsResponse response = modelPort.searchObjects(request); ObjectListType objectList = response.objectList; ObjectType1[] objects = objectList.@object; return(objects); }
private static void changeUserPassword(modelPortType modelPort, String oid, String newPassword) { ItemDeltaType passwordDelta = new ItemDeltaType(); passwordDelta.modificationType = ModificationTypeType.replace; passwordDelta.path = createItemPathType("credentials/password/value"); passwordDelta.value = new object[] { createProtectedStringType(newPassword) }; ObjectDeltaType deltaType = new ObjectDeltaType(); deltaType.objectType = USER_TYPE; deltaType.changeType = ChangeTypeType.modify; deltaType.oid = oid; deltaType.itemDelta = new ItemDeltaType[] { passwordDelta }; executeChanges request = new executeChanges(new ObjectDeltaType[] { deltaType }, null); executeChangesResponse response = modelPort.executeChanges(request); check(response); }
private static void changeUserGivenName(modelPortType modelPort, String oid, String newValue) { ItemDeltaType itemDelta = new ItemDeltaType(); itemDelta.modificationType = ModificationTypeType.replace; itemDelta.path = createItemPathType("givenName"); itemDelta.value = new object[] { createPolyStringType(newValue) }; ObjectDeltaType objectDelta = new ObjectDeltaType(); objectDelta.objectType = USER_TYPE; objectDelta.changeType = ChangeTypeType.modify; objectDelta.oid = oid; objectDelta.itemDelta = new ItemDeltaType[] { itemDelta }; executeChanges request = new executeChanges(new ObjectDeltaType[] { objectDelta }, null); executeChangesResponse response = modelPort.executeChanges(request); check(response); }
private static String createUserGuybrush(modelPortType modelPort, RoleType role) { UserType user = new UserType(); user.name = createPolyStringType("guybrush"); user.fullName = createPolyStringType("Guybrush Threepwood"); user.givenName = createPolyStringType("Guybrush"); user.familyName = createPolyStringType("Threepwood"); user.emailAddress = "*****@*****.**"; user.organization = new PolyStringType[] { createPolyStringType("Pirate Brethren International") }; user.organizationalUnit = new PolyStringType[] { createPolyStringType("Pirate Wannabes") }; user.credentials = createPasswordCredentials("IwannaBEaPIRATE"); if (role != null) { // create user with a role assignment AssignmentType roleAssignment = createRoleAssignment(role.oid); user.assignment = new AssignmentType[] { roleAssignment }; } return(createUser(modelPort, user)); }
private static String createUserLechuck(modelPortType modelPort) { UserType user = new UserType(); user.name = createPolyStringType("lechuck"); user.fullName = createPolyStringType("Ghost Pirate LeChuck"); user.givenName = createPolyStringType("Chuck"); user.familyName = createPolyStringType("LeChuck"); user.honorificPrefix = createPolyStringType("Ghost Pirate"); user.emailAddress = "*****@*****.**"; user.telephoneNumber = "555-1234"; user.employeeNumber = "emp1234"; user.employeeType = new string[] { "UNDEAD" }; user.locality = createPolyStringType("Monkey Island"); user.credentials = createPasswordCredentials("4rrrrghhhghghgh!123"); ActivationType activationType = new ActivationType(); activationType.administrativeStatus = ActivationStatusType.enabled; user.activation = activationType; return(createUser(modelPort, user)); }
private static ObjectType1[] listObjectsRestrictedAndSorted(modelPortType modelPort, XmlQualifiedName type) { // let's say we want to get first 3 users, sorted alphabetically by user name QueryType queryType = new QueryType(); // holds search query + paging options PagingType pagingType = new PagingType(); pagingType.maxSize = 3; ItemPathType orderBy = createItemPathType("name"); pagingType.orderBy = orderBy; pagingType.orderDirection = OrderDirectionType.ascending; queryType.paging = pagingType; searchObjects request = new searchObjects(type, queryType, null); searchObjectsResponse response = modelPort.searchObjects(request); ObjectListType objectList = response.objectList; ObjectType1[] objects = objectList.@object; return(objects); }
private static String createUserLechuck(modelPortType modelPort) { UserType user = new UserType(); user.name = createPolyStringType("lechuck"); user.fullName = createPolyStringType("Ghost Pirate LeChuck"); user.givenName = createPolyStringType("Chuck"); user.familyName = createPolyStringType("LeChuck"); user.honorificPrefix = createPolyStringType("Ghost Pirate"); user.emailAddress = "*****@*****.**"; user.telephoneNumber = "555-1234"; user.employeeNumber = "emp1234"; user.employeeType = new string[] { "UNDEAD" }; user.locality = createPolyStringType("Monkey Island"); user.credentials = createPasswordCredentials("4rrrrghhhghghgh!123"); ActivationType activationType = new ActivationType(); activationType.administrativeStatus = ActivationStatusType.enabled; user.activation = activationType; return createUser(modelPort, user); }
private static String createUserGuybrush(modelPortType modelPort, RoleType role) { UserType user = new UserType(); user.name = createPolyStringType("guybrush"); user.fullName = createPolyStringType("Guybrush Threepwood"); user.givenName = createPolyStringType("Guybrush"); user.familyName = createPolyStringType("Threepwood"); user.emailAddress = "*****@*****.**"; user.organization = new PolyStringType[] { createPolyStringType("Pirate Brethren International") }; user.organizationalUnit = new PolyStringType[] { createPolyStringType("Pirate Wannabes") }; user.credentials = createPasswordCredentials("IwannaBEaPIRATE"); if (role != null) { // create user with a role assignment AssignmentType roleAssignment = createRoleAssignment(role.oid); user.assignment = new AssignmentType[] { roleAssignment }; } return createUser(modelPort, user); }
private static RoleType searchRoleByName(modelPortType modelPort, String roleName) { QueryType query = new QueryType(); query.filter = createNameFilter(roleName); searchObjects request = new searchObjects(ROLE_TYPE, query, null); searchObjectsResponse response = modelPort.searchObjects(request); return (RoleType) getOneObject(response, roleName); }
private static UserType searchUserByName(modelPortType modelPort, String username) { QueryType query = new QueryType(); query.filter = createNameFilter(username); searchObjects request = new searchObjects(USER_TYPE, query, null); searchObjectsResponse response = modelPort.searchObjects(request); return (UserType) getOneObject(response, username); }
private static void unAssignRoles(modelPortType modelPort, String userOid, String[] roleOids) { modifyRoleAssignment(modelPort, userOid, false, roleOids); }
private static SystemConfigurationType getConfiguration(modelPortType modelPort) { getObject request = new getObject(SYSTEM_CONFIGURATION_TYPE, SYSTEM_CONFIGURATION_OID, null); getObjectResponse response = modelPort.getObject(request); return (SystemConfigurationType)response.@object; }
private static ObjectType1[] listRequestableRoles(modelPortType modelPort) { SearchFilterType filter = createRequestableFilter(); QueryType query = new QueryType(); query.filter = filter; searchObjects request = new searchObjects(ROLE_TYPE, query, null); searchObjectsResponse response = modelPort.searchObjects(request); ObjectListType objectList = response.objectList; ObjectType1[] objects = objectList.@object; return objects; }
static void Main1(string[] args) { modelPortType modelPort = openConnection(); Console.WriteLine("Getting system configuration..."); SystemConfigurationType configurationType = getConfiguration(modelPort); Console.WriteLine(dumpSystemConfiguration(configurationType)); Console.WriteLine("========================================================="); Console.WriteLine("Getting administrator user..."); UserType userAdministrator = searchUserByName(modelPort, "administrator"); Console.WriteLine(dumpUser(userAdministrator)); Console.WriteLine("========================================================="); Console.WriteLine("Getting Sailor role..."); RoleType sailorRole = searchRoleByName(modelPort, "Sailor"); if (sailorRole != null) { Console.WriteLine(dumpRole(sailorRole)); } else { Console.WriteLine("No Sailor role in the system."); } Console.WriteLine("========================================================="); Console.WriteLine("Getting resources..."); // please note: ObjectType is ObjectType in prism module, ObjectType1 is ObjectType in schema module (i.e. the "real" c:ObjectType) ObjectType1[] resources = listObjects(modelPort, RESOURCE_TYPE); Console.WriteLine(dump(resources)); Console.WriteLine("========================================================="); Console.WriteLine("Getting users..."); ObjectType1[] users = listObjects(modelPort, USER_TYPE); Console.WriteLine(dump(users)); Console.WriteLine("========================================================="); Console.WriteLine("Getting users (first three, sorted by name)..."); ObjectType1[] users2 = listObjectsRestrictedAndSorted(modelPort, USER_TYPE); Console.WriteLine(dump(users2)); Console.WriteLine("========================================================="); Console.WriteLine("Getting tasks..."); TaskType[] tasks = listTasks(modelPort); Console.WriteLine(dump(tasks)); Console.WriteLine("Next scheduled times: "); foreach (TaskType taskType in tasks) { Console.WriteLine(" - " + getOrig(taskType.name) + ": " + taskType.nextRunStartTimestamp); } Console.WriteLine("========================================================="); Console.WriteLine("Creating user guybrush..."); String userGuybrushoid = createUserGuybrush(modelPort, sailorRole); Console.WriteLine("Created with OID: " + userGuybrushoid); Console.WriteLine("========================================================="); Console.WriteLine("Creating user lechuck..."); //String userLeChuckOid = createUserFromFile(modelPort, USER_LECHUCK_FILE); deserializing from file doesn't work for unknown reason String userLeChuckOid = createUserLechuck(modelPort); Console.WriteLine("Created with OID: " + userLeChuckOid); Console.WriteLine("========================================================="); Console.WriteLine("Changing password for guybrush..."); changeUserPassword(modelPort, userGuybrushoid, "MIGHTYpirate"); Console.WriteLine("Done."); Console.WriteLine("========================================================="); Console.WriteLine("Changing given name for lechuck..."); changeUserGivenName(modelPort, userLeChuckOid, "CHUCK"); Console.WriteLine("Done."); Console.WriteLine("========================================================="); Console.WriteLine("Assigning roles to guybrush..."); assignRoles(modelPort, userGuybrushoid, new string[] { ROLE_PIRATE_OID, ROLE_CAPTAIN_OID }); Console.WriteLine("Done."); Console.WriteLine("========================================================="); Console.WriteLine("Unassigning a role from guybrush..."); unAssignRoles(modelPort, userGuybrushoid, new string[] { ROLE_CAPTAIN_OID }); Console.WriteLine("Done."); Console.WriteLine("========================================================="); Console.WriteLine("Getting requestable roles..."); ObjectType1[] roles = listRequestableRoles(modelPort); Console.WriteLine(dump(roles)); // Comment-out the following lines if you want to see what midPoint really did // ... because deleting the user will delete also all the traces (except logs and audit of course). Console.WriteLine("========================================================="); Console.WriteLine("Deleting users guybrush and lechuck..."); deleteUser(modelPort, userGuybrushoid); deleteUser(modelPort, userLeChuckOid); Console.WriteLine("Done."); }
private static String createUserFromFile(modelPortType modelPort, String fileName) { StreamReader reader = new StreamReader(fileName); XmlSerializer xmlSerializer = new XmlSerializer(typeof(UserType)); UserType user = (UserType) xmlSerializer.Deserialize(reader); return createUser(modelPort, user); }
private static String createUser(modelPortType modelPort, UserType userType) { ObjectDeltaType deltaType = new ObjectDeltaType(); deltaType.objectType = USER_TYPE; deltaType.changeType = ChangeTypeType.add; deltaType.objectToAdd = userType; executeChanges request = new executeChanges(new ObjectDeltaType[] { deltaType }, null); executeChangesResponse response = modelPort.executeChanges(request); return getOidFromDeltaOperationList(response.deltaOperationList, deltaType); }
private static ObjectType1[] listObjects(modelPortType modelPort, XmlQualifiedName type) { searchObjects request = new searchObjects(type, null, null); searchObjectsResponse response = modelPort.searchObjects(request); ObjectListType objectList = response.objectList; ObjectType1[] objects = objectList.@object; return objects; }
private static ObjectType1[] listObjectsRestrictedAndSorted(modelPortType modelPort, XmlQualifiedName type) { // let's say we want to get first 3 users, sorted alphabetically by user name QueryType queryType = new QueryType(); // holds search query + paging options PagingType pagingType = new PagingType(); pagingType.maxSize = 3; ItemPathType orderBy = createItemPathType("name"); pagingType.orderBy = orderBy; pagingType.orderDirection = OrderDirectionType.ascending; queryType.paging = pagingType; searchObjects request = new searchObjects(type, queryType, null); searchObjectsResponse response = modelPort.searchObjects(request); ObjectListType objectList = response.objectList; ObjectType1[] objects = objectList.@object; return objects; }
private static void modifyRoleAssignment(modelPortType modelPort, String userOid, bool isAdd, String[] roleOids) { ItemDeltaType assignmentDelta = new ItemDeltaType(); if (isAdd) { assignmentDelta.modificationType = ModificationTypeType.add; } else { assignmentDelta.modificationType = ModificationTypeType.delete; } assignmentDelta.path = createItemPathType("assignment"); List<object> assignments = new List<object>(); foreach (String roleOid in roleOids) { assignments.Add(createRoleAssignment(roleOid)); } assignmentDelta.value = assignments.ToArray(); ObjectDeltaType objectDelta = new ObjectDeltaType(); objectDelta.objectType = USER_TYPE; objectDelta.changeType = ChangeTypeType.modify; objectDelta.oid = userOid; objectDelta.itemDelta = new ItemDeltaType[] { assignmentDelta }; executeChanges request = new executeChanges(new ObjectDeltaType[] { objectDelta }, null); executeChangesResponse response = modelPort.executeChanges(request); check(response); }
private static TaskType[] listTasks(modelPortType modelPort) { // Let's say we want to retrieve tasks' next scheduled time (because this may be a costly operation if // JDBC based quartz scheduler is used, the fetching of this attribute has to be explicitly requested) SelectorQualifiedGetOptionType getNextScheduledTimeOption = new SelectorQualifiedGetOptionType(); // prepare a selector (described by path) + options (saying to retrieve that attribute) ObjectSelectorType selector = new ObjectSelectorType(); selector.path = createItemPathType("nextRunStartTimestamp"); getNextScheduledTimeOption.selector = selector; GetOperationOptionsType selectorOptions = new GetOperationOptionsType(); selectorOptions.retrieve = RetrieveOptionType.include; selectorOptions.retrieveSpecified = true; getNextScheduledTimeOption.options = selectorOptions; SelectorQualifiedGetOptionType[] operationOptions = new SelectorQualifiedGetOptionType[] { getNextScheduledTimeOption }; searchObjects request = new searchObjects(TASK_TYPE, null, operationOptions); searchObjectsResponse response = modelPort.searchObjects(request); ObjectListType objectList = response.objectList; List<TaskType> tasks = new List<TaskType>(); foreach (ObjectType1 object1 in response.objectList.@object) { tasks.Add((TaskType)object1); } return tasks.ToArray(); }
/// <summary> /// Searches for the given user using the given Midpoint model port. /// Returns the UserType object for the user if they exist. /// </summary> /// <param name="modelPort">The model port used to run search Midpoint.</param> /// <param name="username">The username to search for.</param> /// <returns>The UserType object for the requested user, or null if not found.</returns> public static UserType searchUserByName(modelPortType modelPort, string username) { // WARNING: in a real case make sure that the username is properly escaped before putting it in XML XmlElement filter = parseElement( "<equal xmlns='" + SEARCHUSER_NS + "' xmlns:c='" + NS_COMMON + "' >" + "<path>c:name</path>" + "<value>" + username + "</value>" + "</equal>" ); QueryType query = new QueryType(); // Set filter value - webservices name is apparently 'Any'? query.Any = filter; // Create an empty array since it can't be uninitialised ObjectOperationOptionsType[] options = new ObjectOperationOptionsType[0]; searchObjects request = new searchObjects(getTypeUri(new UserType()), query, options); searchObjectsResponse response = modelPort.searchObjects(request); ObjectListType objectList = response.objectList; ObjectType[] objects = objectList.@object; if (objects != null) { switch (objects.Length) { case 0: return null; break; case 1: return (UserType)objects[0]; break; default: throw new ArgumentException("Expected to find a single user with username '" + username + "' but found " + objects.Length + " users instead"); } } else { return null; } }