/// <summary> /// Sets up properties by given XML file. /// </summary> /// <param name="fileName">Path to import profile XML</param> public static string InitializeImportProfile(string fileName) { // Reset error validationError = null; try { // Set profile path ImportProfileFilename = fileName; if (File.Exists(ImportProfileFilename)) { using (var schemaStream = Assembly.GetExecutingAssembly().GetManifestResourceStream( GetManifestResourceName(typeof(ImportProfile), PROFILE_XSD))) { // Set profile path ImportProfileFilename = fileName; // Load XML with import profile XmlDocument profile = new XmlDocument(); // Load XML schema XmlSchema xmlSchema = XmlSchema.Read(schemaStream, xmlReaderSettings_ValidationEventHandler); // Initialize reader settings XmlReaderSettings xmlReaderSettings = new XmlReaderSettings(); xmlReaderSettings.ValidationType = ValidationType.Schema; xmlReaderSettings.ValidationEventHandler += xmlReaderSettings_ValidationEventHandler; xmlReaderSettings.Schemas.Add(xmlSchema); // Load and validate profile using (XmlReader reader = XmlReader.Create(fileName, xmlReaderSettings)) { profile.Load(reader); } if (String.IsNullOrEmpty(validationError)) { // Get settings node XmlNodeList settings = profile.GetElementsByTagName("setting"); foreach (XmlNode setting in settings) { if (setting.Attributes != null) { object value = setting.Attributes["value"].Value; switch (setting.Attributes["key"].Value) { case "SQLServerAddress": SQLServerAddress = ValidationHelper.GetString(value.ToString(), string.Empty); break; case "SQLServerDatabase": SQLServerDatabase = ValidationHelper.GetString(value.ToString(), string.Empty); break; case "SQLServerUsername": SQLServerUsername = ValidationHelper.GetString(value.ToString(), string.Empty); break; case "SQLServerPassword": string sqlPassword = ValidationHelper.GetString(value.ToString(), string.Empty); try { // Try to decrypt password SQLServerPassword = DecryptPassword(sqlPassword); } catch { // Password is probably in plaintext form SQLServerPassword = sqlPassword; } break; case "SQLUseTrustedConnection": SQLUseTrustedConnection = ValidationHelper.GetBoolean(value.ToString(), true); break; case "ADControllerAddress": ADControllerAddress = ValidationHelper.GetString(value.ToString(), string.Empty); break; case "ADUseCurrentUserAccount": ADUseCurrentUserAccount = ValidationHelper.GetBoolean(value.ToString(), true); break; case "ADUsername": ADUsername = ValidationHelper.GetString(value.ToString(), string.Empty); break; case "ADPassword": string adPassword = ValidationHelper.GetString(value.ToString(), string.Empty); try { // Try to decrypt password ADPassword = DecryptPassword(adPassword); } catch { // Password is probably in plaintext form ADPassword = adPassword; } break; case "ImportUsersType": ImportUsersType = (ImportType)Enum.Parse(typeof(ImportType), value.ToString()); break; case "ImportRolesType": ImportRolesType = (ImportType)Enum.Parse(typeof(ImportType), value.ToString()); break; case "UpdateObjectData": UpdateObjectData = ValidationHelper.GetBoolean(value.ToString(), true); break; case "ImportOnlyUsersFromSelectedRoles": ImportNewUsersOnlyFromSelectedRoles = ValidationHelper.GetBoolean(value.ToString(), false); break; case "ImportAllUsersFromSelectedRolesAndIgnoreOthers": ImportUsersOnlyFromSelectedRoles = ValidationHelper.GetBoolean(value.ToString(), false); break; case "UpdateMemberships": UpdateMemberships = ValidationHelper.GetBoolean(value.ToString(), true); break; case "DeleteNotExistingObjects": DeleteNotExistingObjects = ValidationHelper.GetBoolean(value.ToString(), true); break; case "LogImportProcess": LogImportProcess = ValidationHelper.GetBoolean(value.ToString(), true); break; case "LogPath": LogPath = ValidationHelper.GetString(value.ToString(), string.Empty); break; case "UsernameFormat": UsernameFormat = (CodenameFormat)Enum.Parse(typeof(CodenameFormat), value.ToString()); break; case "ConfigureAsCMSEditor": ConfigureAsCMSEditor = ValidationHelper.GetBoolean(value.ToString(), true); break; case "BindingEditorMode": BindingEditorMode = (BindingEditorMode)Enum.Parse(typeof(BindingEditorMode), value.ToString()); break; case "RoleDisplayNameFormat": RoleDisplayNameFormat = (CodenameFormat)Enum.Parse(typeof(CodenameFormat), value.ToString()); break; case "RoleCodeNameFormat": RoleCodeNameFormat = (CodenameFormat)Enum.Parse(typeof(CodenameFormat), value.ToString()); break; case "ImportRoleDescription": ImportRoleDescription = ValidationHelper.GetBoolean(value.ToString(), true); break; case "ImportNow": ImportNow = ValidationHelper.GetBoolean(value.ToString(), true); break; } } } // Get user properties bindings XmlNodeList properties = profile.GetElementsByTagName("property"); UserProperties.Clear(); foreach (XmlNode property in properties) { if ((property.Attributes != null) && ((property.Attributes["cmsname"] != null) && (property.Attributes["adname"] != null))) { string cmsPropertyName = property.Attributes["cmsname"].Value; string adPropertyName = property.Attributes["adname"].Value; UserProperties.Add(cmsPropertyName, adPropertyName); } } // Get users to import XmlNodeList users = profile.GetElementsByTagName("user"); Users.Clear(); foreach (XmlNode user in users) { if ((user.Attributes) != null && (user.Attributes["guid"] != null)) { Guid userGuid = ValidationHelper.GetGuid(user.Attributes["guid"].Value, Guid.Empty); Users.Add(userGuid); } } // Get groups to import XmlNodeList groups = profile.GetElementsByTagName("group"); Groups.Clear(); foreach (XmlNode group in groups) { if ((group.Attributes) != null && (group.Attributes["guid"] != null)) { Guid groupGuid = ValidationHelper.GetGuid(group.Attributes["guid"].Value, Guid.Empty); Groups.Add(groupGuid); } } // Get sites & roles XmlNodeList sites = profile.GetElementsByTagName("site"); Sites.Clear(); foreach (XmlNode site in sites) { if ((site.Attributes != null) && (site.Attributes["codename"] != null)) { string siteCodeName = site.Attributes["codename"].Value; List <Guid> roles = new List <Guid>(); foreach (XmlNode role in site.ChildNodes) { if (role.Attributes != null) { if (role.Attributes["guid"] != null) { XmlAttribute roleGuidAttr = role.Attributes["guid"]; // Get guid of CMS role Guid roleGuid = Guid.Empty; if (roleGuidAttr != null) { roleGuid = ValidationHelper.GetGuid(roleGuidAttr.Value, Guid.Empty); } roles.Add(roleGuid); } } } Sites.Add(siteCodeName.ToLowerCSafe(), roles); } } } } } else { return(ResHelper.GetString("Error_ProfileDoesNotExist", ImportProfileFilename)); } } catch (System.IO.IOException ex) { return(ex.Message); } catch (UnauthorizedAccessException ex) { return(ex.Message); } catch (Exception ex) { // Log detailed information when unexpected exception occurs return(LogHelper.GetExceptionLogMessage(ex)); } return(validationError); }