using System; using System.Collections.Generic; using System.Linq; using System.Text; using Intel.Management.Wsman; namespace Intel.Management.PSModule.Amt { class Wired8021xService : SettingsContainer { public Wired8021xService(DriveItem parent) : base("Wired8021x",parent) { } public override void Update() { // only enable will update the container } public void Apply() { _refToSettings.Put(_settingsObj); } public override void GetChildItems(ChildWriter writer) { IWsmanConnection conn = ((AmtRootService)GetRoot()).Connection; _refToSettings = conn.NewReference("SELECT * FROM AMT_8021XProfile"); _settingsObj= _refToSettings.Get(); writer.Add(new EnableProfile(this)); writer.Add(new DriveEntry("SupportedProtocols", ValueList.AuthenticationProtocol.Values.ToArray(), this)); writer.Add(new DriveEntry("CertificateComparisonMethods", new string[] { "FullName", "DomainSuffix" }, this)); if (HasSetting("ActiveInS0")) writer.Add(new BooleanSetting("ActiveInS0", this)); writer.Add(new AuthenticationSetting(this)); writer.Add( new OptionalStringSetting("RoamingIdentity", this)); writer.Add(new OptionalStringSetting("ServerCertificateName", this)); writer.Add(new OptionalStringSetting("ServerCertificateNameComparison", this)); writer.Add(new OptionalStringSetting("Username", this)); writer.Add(new OptionalStringSetting("Password", this)); writer.Add(new OptionalStringSetting("Domain", this)); writer.Add(new ProtectedAccessCredential(this)); writer.Add(new OptionalStringSetting("PACPassword", this)); if (HasSetting("PxeTimeout")) writer.Add(new UIntSetting("PxeTimeout", this)); writer.Add(new CertificateCredential("ClientCertificate", this)); writer.Add(new CertificateCredential("ServerCertificateIssuer", this)); } class EnableProfile : SettingsItem { public EnableProfile(SettingsContainer container) : base("Enabled", container) { } public override object Value { get { SettingsContainer settings = _parent as SettingsContainer; return bool.Parse(settings.GetSetting(_name)); } } public override void SetItem(object values, DriveProvider provider) { Wired8021xService settings = _parent as Wired8021xService; settings.SetSetting("Enabled", values.ToString().ToLower()); settings.Apply(); _parent.Clear(); } } /// /// Wired 802.1x Authentiation protocol Setting /// class AuthenticationSetting : SettingsItem { public AuthenticationSetting(SettingsContainer container) : base("AuthenticationProtocol", container) { } public override object Value { get { SettingsContainer settings = _parent as SettingsContainer; if (settings.HasSetting(_name)) { return (AuthenticationProtocol)uint.Parse(settings.GetSetting(_name)); } else return string.Empty; } } public override void SetItem(object values, DriveProvider provider) { SettingsContainer settings = _parent as SettingsContainer; string value = null; if (values is string) { ValueMap map = ValueMap.Create("1", ValueList.AuthenticationProtocol); value = map.GetValueFromString(values.ToString()); } settings.SetSetting(_name, value); } }// end AuthenticationSetting class /// /// ProtectedAccessCredential /// class ProtectedAccessCredential : SettingsItem { public ProtectedAccessCredential(SettingsContainer container) : base("ProtectedAccessCredential", container) { } public override object Value { get { SettingsContainer settings = _parent as SettingsContainer; if (settings.HasSetting(_name)) return Convert.FromBase64String( settings.GetSetting(_name) ); return new byte[0]; } } public override void SetItem(object values, DriveProvider provider) { SettingsContainer settings = _parent as SettingsContainer; settings.SetSetting(_name, Convert.ToBase64String( (byte[])values)); } }// end ProtectedAccessCredential class /// /// CertificateCredential /// class CertificateCredential : DriveItem { public CertificateCredential(string name,SettingsContainer container) : base(name,null, container) { } public override object Value { get { if (_value == null) _value = new DeviceCertificate(); return _value; } } public override void SetItem(object values, DriveProvider provider) { SettingsContainer settings = _parent as SettingsContainer; IWsmanConnection conn = ((AmtRootService)GetRoot()).Connection; if (values == null) { settings.ChangeSetting(_name, null); } else if (values is DeviceCertificate) { DeviceCertificate devCert = (DeviceCertificate)values; settings.ChangeSetting(_name, TLSService.GetCertificateRef(devCert, conn)); _value = devCert; } else { throw new System.Management.Automation.PSArgumentException("DeviceCertificate required"); } //FirmwareCertificate firmware = new FirmwareCertificate("", "", ""); //IManagedReference refToValue = TLSService.GetTlsCertificate(_value.ToString(),conn); //settings.ChangeSetting(_name, refToValue); } public override object GetReturnObject() { return new NameValuePairItem(Name, Value); } }// end CertificateCredential class }//end Wired8021x } //end Namepace