Пример #1
0
        /// <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);
        }