public async Task <Result <List <ESightAppliance> > > LoadAll() { try { var getListResult = await OM12ESightApplianceRepo.Instance.All(); if (!getListResult.Success) { LogHelper.Error(getListResult.Cause, getListResult.Message); return(Result <List <ESightAppliance> > .Failed(getListResult.Code, getListResult.Message, getListResult.Cause)); } this.Items = getListResult.Data.Select(x => GetModelFromMpObject(x)).ToList(); foreach (var appliance in this.Items) { if (PingFd(appliance.Host)) { appliance.LatestStatus = Constants.ESightConnectionStatus.ONLINE; } else { appliance.LatestStatus = Constants.ESightConnectionStatus.FAILED; LogHelper.Info("Can not connect the remote server.", $"PingFd Error:"); } } Filter(); return(Result <List <ESightAppliance> > .Done(this.Items)); } catch (Exception ex) { LogHelper.Error(ex, "LoadAll"); return(Result <List <ESightAppliance> > .Failed("LoadAll", ex)); } }
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); } })); }
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 <EnterpriseManagementObject> > FindByHost(string host) { return(await Task.Run(() => { try { var objects = OM12Connection.Query <EnterpriseManagementObject>(ESightAppliance.EntityClassName, $"Host='{host}'"); return Result <EnterpriseManagementObject> .Done(objects.FirstOrDefault()); } catch (Exception e) { return Result <EnterpriseManagementObject> .Failed(100, $"Internal error caused by {e.Message}", e); } })); }
public async Task <Result <List <EnterpriseManagementObject> > > All() { return(await Task.Run(() => { try { var objects = OM12Connection.All <EnterpriseManagementObject>(ESightAppliance.EntityClassName); return Result <List <EnterpriseManagementObject> > .Done(objects.ToList()); } catch (Exception e) { return Result <List <EnterpriseManagementObject> > .Failed("Get List Error", e); } })); }
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()); }