internal async Task <Result> Add(ESightAppliance appliance)
        {
            try
            {
                Result validateResult = Validate(appliance);
                if (!validateResult.Success)
                {
                    return(validateResult);
                }
                var client = new ESightClient(appliance);
                var result = await client.TestCredential();

                if (!result.Success)
                {
                    return(result);
                }
                var addResult = await OM12ESightApplianceRepo.Instance.Add(appliance);

                if (addResult.Success)
                {
                    await this.LoadAll();
                }
                return(addResult);
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex, "Add");
                return(Result.Failed(100, "Add", ex));
            }
        }
Exemple #2
0
        private async void OnSaveBtnClicked(object sender, RoutedEventArgs e)
        {
            this.ActionResult = Result.Done();
            ESightAppliance appliance = new ESightAppliance
            {
                Host             = txtHost.Text,
                Port             = txtPort.Text,
                SystemId         = txtSystemId.Text,
                AliasName        = txtAlias.Text,
                LoginAccount     = txtAccount.Text,
                LoginPassword    = txtPassword.Password,
                UpdateCredential = true,
            };

            LogHelper.Info($"Add eSight:{txtHost.Text}、{txtPort.Text}、{txtSystemId.Text}、{txtAlias.Text}、{txtAccount.Text})");

            this.ActionResult = await ESightApplianceRepo.Add(appliance);

            this.btnSave.IsEnabled = true;
            this.btnSave.Content   = "Save";
            if (this.ActionResult.Success)
            {
                LogHelper.Info($"Add eSight ({appliance.Host}) Success.");
                this.Close();
            }
            else
            {
                LogHelper.Error(this.ActionResult.Cause, $"Add eSight ({appliance.Host}) Faild:" + this.ActionResult.Message);
            }
        }
        private async void OnDeleteESight(object sender, RoutedEventArgs e)
        {
            int selectedIndex = Grid.SelectedIndex;

            if (Grid.SelectedIndex > -1 && selectedIndex < this.ESightApplianceRepo.FilteredItems.Count)
            {
                ESightAppliance  appliance     = this.ESightApplianceRepo.FilteredItems[Grid.SelectedIndex];
                MessageBoxResult confirmResult =
                    MessageBox.Show("Are you sure you want to delete the eSight?",
                                    "Confirm", MessageBoxButton.YesNo, MessageBoxImage.Question);

                if (confirmResult == MessageBoxResult.Yes)
                {
                    this.ActionResult = await this.ESightApplianceRepo.Delete(appliance);

                    if (!this.ActionResult.Success)
                    {
                        LogHelper.Error(this.ActionResult.Cause, $"Delete eSight ({appliance.Host}) Faild:" + this.ActionResult.Message);
                        MessageBox.Show(this.ActionResult.Message);
                    }
                    else
                    {
                        LogHelper.Info($"Delete eSight ({appliance.Host}) Success.");
                    }
                }
            }
        }
        public async Task <Result> Add(ESightAppliance appliance)
        {
            return(await Task.Run(() =>
            {
                try
                {
                    if (OM12Connection.Exsits(ESightAppliance.EntityClassName, $"Host='{appliance.Host}'"))
                    {
                        return Result.Failed(101, $"ESight {appliance.Host} already exsits.");
                    }

                    IncrementalDiscoveryData incrementalDiscoveryData = new IncrementalDiscoveryData();

                    // add appliance record
                    ManagementPackClass MPClass = GetMPClass();
                    CreatableEnterpriseManagementObject EMOAppliance =
                        new CreatableEnterpriseManagementObject(OM12Connection.HuaweiESightMG, MPClass);
                    IDictionary <string, ManagementPackProperty> props =
                        OM12Connection.GetManagementPackProperties(EMOAppliance);
                    EMOAppliance[props["Host"]].Value = appliance.Host;
                    EMOAppliance[props["Port"]].Value = appliance.Port;
                    EMOAppliance[props["AliasName"]].Value = appliance.AliasName;
                    EMOAppliance[props["SystemId"]].Value = appliance.SystemId;
                    EMOAppliance[props["LoginAccount"]].Value = appliance.LoginAccount;
                    EMOAppliance[props["LoginPassword"]].Value = RijndaelManagedCrypto.Instance
                                                                 .EncryptForCS(appliance.LoginPassword);
                    EMOAppliance[props["LastModifiedOn"]].Value = DateTime.UtcNow;
                    EMOAppliance[props["CreatedOn"]].Value = DateTime.UtcNow;

                    EMOAppliance[props["OpenID"]].Value = Guid.NewGuid().ToString("D");
                    EMOAppliance[props["SubscribeID"]].Value = Guid.NewGuid().ToString("D");
                    EMOAppliance[props["SubKeepAliveStatus"]].Value = 0;
                    EMOAppliance[props["SubscriptionAlarmStatus"]].Value = 0;
                    EMOAppliance[props["SubscriptionNeDeviceStatus"]].Value = 0;

                    EMOAppliance[props["SubKeepAliveError"]].Value = string.Empty;
                    EMOAppliance[props["SubscripeAlarmError"]].Value = string.Empty;
                    EMOAppliance[props["SubscripeNeDeviceError"]].Value = string.Empty;
                    //EMOAppliance[props["LatestConnectInfo"]].Value = string.Empty;

                    //EMOAppliance[props["LatestStatus"]].Value = Constants.ESightConnectionStatus.NONE;

                    ManagementPackClass baseEntity = OM12Connection.GetManagementPackClass("System.Entity");
                    EMOAppliance[baseEntity, "DisplayName"].Value = appliance.Host;
                    incrementalDiscoveryData.Add(EMOAppliance);
                    incrementalDiscoveryData.Commit(OM12Connection.HuaweiESightMG);
                    return Result.Done();
                }
                catch (Exception e)
                {
                    return Result.Failed(100, $"Internal error caused by {e.Message}", e);
                }
            }));
        }
        internal async Task <Result> Update(ESightAppliance appliance)
        {
            try
            {
                Result validateResult = Validate(appliance);
                if (!validateResult.Success)
                {
                    return(validateResult);
                }
                if (appliance.UpdateCredential)//修改了密码
                {
                    var client = new ESightClient(appliance);
                    var result = await client.TestCredential();

                    if (!result.Success)
                    {
                        return(result);
                    }
                }
                else
                {
                    var oldESightObj = await OM12ESightApplianceRepo.Instance.FindByHost(appliance.Host);

                    if (oldESightObj.Data == null)
                    {
                        return(Result.Failed(104, $"eSight {appliance.Host} can not find."));
                    }
                    var oldESight = GetModelFromMpObject(oldESightObj.Data);
                    if (oldESight.Port != appliance.Port) //修改了端口
                    {
                        appliance.LoginPassword = oldESight.LoginPassword;
                        var client = new ESightClient(appliance);
                        var result = await client.TestCredential();

                        if (!result.Success)
                        {
                            return(result);
                        }
                    }
                }
                var updateResult = await OM12ESightApplianceRepo.Instance.Update(appliance);

                if (updateResult.Success)
                {
                    await this.LoadAll();
                }
                return(updateResult);
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex, "Update");
                return(Result.Failed(100, "Update", ex));
            }
        }
 public void SetItem(ESightAppliance item)
 {
     this.Item = item;
     // using binding instead?
     txtHost.Text     = item.Host;
     txtAlias.Text    = item.AliasName;
     txtPort.Text     = item.Port;
     txtSystemId.Text = item.SystemId;
     txtAccount.Text  = item.LoginAccount;
     // txtPassword.Password = item.LoginPd;
 }
        public async Task <Result> Update(ESightAppliance appliance)
        {
            return(await Task.Run(async() =>
            {
                try
                {
                    var obj = await this.FindByHost(appliance.Host);
                    var exsitObj = obj.Data;
                    if (exsitObj == null)
                    {
                        return Result.Failed(104, $"ESight {appliance.Host} can not find.");
                    }
                    IncrementalDiscoveryData incrementalDiscoveryData = new IncrementalDiscoveryData();

                    // update appliance record
                    ManagementPackClass MPClass = GetMPClass();
                    EnterpriseManagementObject managementObject = obj.Data;
                    var props = OM12Connection.GetManagementPackProperties(managementObject);
                    managementObject[props["Port"]].Value = appliance.Port;
                    managementObject[props["AliasName"]].Value = appliance.AliasName;
                    string currentSystemId = managementObject[props["SystemId"]].Value as string;
                    bool IsSystemIdChanged = currentSystemId != appliance.SystemId;
                    if (IsSystemIdChanged)
                    {
                        managementObject[props["SystemId"]].Value = appliance.SystemId;
                        managementObject[props["SubscribeID"]].Value = Guid.NewGuid().ToString("D");
                        managementObject[props["SubKeepAliveStatus"]].Value = 0;
                        managementObject[props["SubscriptionAlarmStatus"]].Value = 0;
                        managementObject[props["SubscriptionNeDeviceStatus"]].Value = 0;
                        managementObject[props["SubKeepAliveError"]].Value = string.Empty;
                        managementObject[props["SubscripeAlarmError"]].Value = string.Empty;
                        managementObject[props["SubscripeNeDeviceError"]].Value = string.Empty;
                    }
                    if (appliance.UpdateCredential)
                    {
                        managementObject[props["LoginAccount"]].Value = appliance.LoginAccount;
                        managementObject[props["LoginPassword"]].Value = RijndaelManagedCrypto.Instance
                                                                         .EncryptForCS(appliance.LoginPassword);
                    }
                    managementObject[props["LastModifiedOn"]].Value = DateTime.UtcNow;
                    incrementalDiscoveryData.Add(managementObject);
                    incrementalDiscoveryData.Commit(OM12Connection.HuaweiESightMG);
                    return Result.Done();
                }
                catch (Exception e)
                {
                    return Result.Failed(100, $"Internal error caused by {e.Message}", e);
                }
            }));
        }
        public async Task <Result> Delete(ESightAppliance appliance)
        {
            try
            {
                var deleteResult = await OM12ESightApplianceRepo.Instance.Delete(appliance);

                if (deleteResult.Success)
                {
                    await this.LoadAll();
                }
                return(deleteResult);
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex, "Test");
                return(Result.Failed(100, "Test", ex));
            }
        }
 internal async Task <Result> Test(ESightAppliance appliance)
 {
     try
     {
         Result validateResult = Validate(appliance);
         if (!validateResult.Success)
         {
             return(validateResult);
         }
         var client = new ESightClient(appliance);
         return(await client.TestCredential());
     }
     catch (Exception ex)
     {
         LogHelper.Error(ex, "Test");
         return(Result.Failed(100, "Test", ex));
     }
 }
        private ESightAppliance GetModelFromMpObject(EnterpriseManagementObject obj)
        {
            var props = OM12Connection.GetManagementPackProperties(obj);
            var model = new ESightAppliance()
            {
                Host                       = obj[props["Host"]].Value as String,
                Port                       = obj[props["Port"]].Value.ToString(),
                AliasName                  = obj[props["AliasName"]].Value as String,
                SystemId                   = obj[props["SystemId"]].Value as String,
                LoginAccount               = obj[props["LoginAccount"]].Value as String,
                LoginPassword              = obj[props["LoginPassword"]].Value as String,
                CreatedOn                  = ((DateTime)obj[props["CreatedOn"]].Value).ToLocalTime(),
                LastModifiedOn             = ((DateTime)obj[props["LastModifiedOn"]].Value).ToLocalTime(),
                SubscriptionAlarmStatus    = Convert.ToInt32(obj[props["SubscriptionAlarmStatus"]].Value),
                SubscriptionNeDeviceStatus = Convert.ToInt32(obj[props["SubscriptionNeDeviceStatus"]].Value),
                //LatestStatus = obj[props["LatestStatus"]].Value as string,
                SubscribeID = obj[props["SubscribeID"]].Value as string,
            };

            LogHelper.Info($"Host[{model.Host}]  Port[{model.Port}] LoginAccount[{model.LoginAccount}] SubscribeID[{model.SubscribeID}] ");
            return(model);
        }
 public async Task <Result> Delete(ESightAppliance appliance)
 {
     return(await Task.Run(async() =>
     {
         IncrementalDiscoveryData incrementalDiscoveryData = new IncrementalDiscoveryData();
         try
         {
             var obj = await this.FindByHost(appliance.Host);
             var exsitObj = obj.Data;
             if (exsitObj == null)
             {
                 return Result.Failed(104, $"{appliance.Host} does not exists, delete failed.");
             }
             incrementalDiscoveryData.Remove(obj.Data);
             incrementalDiscoveryData.Commit(OM12Connection.HuaweiESightMG);
             return Result.Done();
         }
         catch (Exception e)
         {
             return Result.Failed(100, $"Internal error caused by {e.Message}", e);
         }
     }));
 }
        public Result Validate(ESightAppliance appliance)
        {
            // host
            if (string.IsNullOrEmpty(appliance.Host))
            {
                return(Result.Failed(1000, "Host should not be null or empty."));
            }


            IPAddress Address;
            bool      isValidIPAddr = IPAddress.TryParse(appliance.Host, out Address);
            bool      isValidDomain = Uri.CheckHostName(appliance.Host) != UriHostNameType.Unknown;

            if (!isValidIPAddr && !isValidDomain)
            {
                return(Result.Failed(1000, "Host should be a valid IP adress or domain name."));
            }
            if (isValidIPAddr)
            {
                if (Address.AddressFamily.Equals(AddressFamily.InterNetwork))
                {
                    if (!Regex.IsMatch(appliance.Host, "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"))
                    {
                        return(Result.Failed(1000, "Host should be a valid IP adress or domain name."));
                    }
                }
            }


            // port
            if (string.IsNullOrEmpty(appliance.Port))
            {
                return(Result.Failed(1001, "Port should not be null or empty."));
            }

            int  PortAsInt;
            bool isNumeric = int.TryParse(appliance.Port, out PortAsInt);

            if (isNumeric)
            {
                if (PortAsInt < 1 || PortAsInt > 65535)
                {
                    return(Result.Failed(1001, "Port should be a digits between 1 and 65535."));
                }
            }
            else
            {
                return(Result.Failed(1001, "Port should be a digits between 1 and 65535."));
            }

            // System Id
            if (string.IsNullOrEmpty(appliance.SystemId))
            {
                return(Result.Failed(1001, "SystemId should not be null or empty."));
            }

            if (!Regex.IsMatch(appliance.SystemId, PatternDigits))
            {
                return(Result.Failed(1001, "SystemId should contains 1 to 100 characters, which can include letters, digits, hyphens (-), underscores (_), and periods(.)."));
            }


            if (appliance.UpdateCredential)
            {
                // Login Account
                if (string.IsNullOrEmpty(appliance.LoginAccount))
                {
                    return(Result.Failed(1001, "Account should not be null or empty."));
                }
                if (appliance.LoginAccount.Length > 32 || appliance.LoginAccount.Length < 6)
                {
                    return(Result.Failed(1001, "Account should contains 6 to 32 characters. The following special characters are not allowed: \"#%&'+/;<=>?\\©®"));
                }
                if (Regex.Match(appliance.LoginAccount, PatternAccount).Success)
                {
                    return(Result.Failed(1001, "Account should contains 6 to 32 characters. The following special characters are not allowed: \"#%&'+/;<=>?\\©®"));
                }
                // Login Password
                if (string.IsNullOrEmpty(appliance.LoginPassword))
                {
                    return(Result.Failed(1001, "Password should not be null or empty."));
                }
                if (appliance.LoginPassword.Length > 32 || appliance.LoginPassword.Length < 8)
                {
                    return(Result.Failed(1001, "The password can contain only 8 to 32 characters"));
                }
                char[] charArray = appliance.LoginAccount.ToCharArray();
                Array.Reverse(charArray);
                var reverseAccount = new string(charArray);
                if (Regex.Match(appliance.LoginPassword, appliance.LoginAccount).Success || Regex.Match(appliance.LoginPassword, reverseAccount).Success)
                {
                    return(Result.Failed(1001, "The password cannot contain the user name or the reverse of the user name."));
                }
                var regexPwd = new Regex(@"
(?=.*[0-9])                              #必须包含数字
(?=.*[a-z])                              #必须包含小写字母
(?=.*[A-Z])                              #必须包含大写字母
.{8,32}                                  #至少8个字符,最多32个字符
", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace);

                if (!regexPwd.IsMatch(appliance.LoginPassword))
                {
                    return(Result.Failed(1001, "The password must contain 1 uppercase letter, 1 lowercase letter, and 1 digit."));
                }
                char[] charArray1 = appliance.LoginPassword.ToCharArray();
                var    count      = charArray1.GroupBy(e => e).OrderByDescending(e => e.Count()).First().ToList().Count();
                if (count > 2)
                {
                    return(Result.Failed(1001, "Each character in the password cannot be used more than 2 times"));
                }
            }
            return(Result.Done());
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="ESightSession"/> class.
 /// </summary>
 /// <param name="eSight">The e sight.</param>
 public ESightClient(ESightAppliance eSight)
 {
     this.Appliance = eSight;
     AcceptAllHTTPS();
 }