// [PolicyPermission(System.Security.Permissions.SecurityAction.Demand, PolicyId = PermissionPolicyIdentifiers.CreateDevice)] internal static void AlterDevice(AddDeviceParms parms) { // Retrieve device foreach (var deviceName in parms.DeviceId) { int tr = 0; var device = m_client.Query <SecurityDevice>(o => o.Name == deviceName, 0, 1, out tr).CollectionItem.FirstOrDefault() as SecurityDeviceInfo; // Grant policies if (parms.GrantPolicies?.Count > 0 || parms.DenyPolicies?.Count > 0) { var policies = new List <SecurityPolicyInfo>(); if (parms.GrantPolicies?.Count > 0) { policies = parms.GrantPolicies.OfType <String>().Select(o => m_client.GetPolicies(r => r.Oid == o).CollectionItem.FirstOrDefault()).OfType <SecurityPolicy>().Select(o => new SecurityPolicyInfo(o)).ToList(); } if (parms.DenyPolicies?.Count > 0) { policies = policies.Union(parms.DenyPolicies.OfType <String>().Select(o => m_client.GetPolicies(r => r.Oid == o).CollectionItem.FirstOrDefault()).OfType <SecurityPolicy>().Select(o => new SecurityPolicyInfo(o))).ToList(); } policies.ForEach(o => o.Grant = parms.GrantPolicies?.Contains(o.Oid) == true ? Core.Model.Security.PolicyGrantType.Grant : PolicyGrantType.Deny); // Altering policies? if (policies.Count != (parms.DenyPolicies?.Count ?? 0) + (parms.GrantPolicies?.Count ?? 0)) { throw new InvalidOperationException("Could not find one or more policies"); } device.Policies = policies; } // Changing secret? if (!String.IsNullOrEmpty(parms.Secret)) { device.Entity.DeviceSecret = parms.Secret; } m_client.UpdateDevice(device.Entity.Key.Value, device); Console.WriteLine("ALTER {0}", device.Entity.Name); } }
// [PolicyPermission(System.Security.Permissions.SecurityAction.Demand, PolicyId = PermissionPolicyIdentifiers.CreateDevice)] internal static void AddDevice(AddDeviceParms parms) { var policies = new List <SecurityPolicyInfo>(); if (parms.GrantPolicies?.Count > 0) { policies = parms.GrantPolicies.OfType <String>().Select(o => m_client.GetPolicies(r => r.Oid == o).CollectionItem.FirstOrDefault()).OfType <SecurityPolicy>().Select(o => new SecurityPolicyInfo(o)).ToList(); } if (parms.DenyPolicies?.Count > 0) { policies = policies.Union(parms.DenyPolicies.OfType <String>().Select(o => m_client.GetPolicies(r => r.Oid == o).CollectionItem.FirstOrDefault()).OfType <SecurityPolicy>().Select(o => new SecurityPolicyInfo(o))).ToList(); } policies.ForEach(o => o.Grant = parms.GrantPolicies?.Contains(o.Oid) == true ? Core.Model.Security.PolicyGrantType.Grant : PolicyGrantType.Deny); if (policies.Count != (parms.DenyPolicies?.Count ?? 0) + (parms.GrantPolicies?.Count ?? 0)) { throw new InvalidOperationException("Could not find one or more policies"); } if (String.IsNullOrEmpty(parms.Secret)) { parms.Secret = BitConverter.ToString(Guid.NewGuid().ToByteArray()).Replace("-", ""); Console.WriteLine("Device secret: {0}", parms.Secret); } m_client.CreateDevice(new SecurityDeviceInfo() { Policies = policies, Entity = new Core.Model.Security.SecurityDevice() { Name = parms.DeviceId.OfType <String>().First(), DeviceSecret = parms.Secret, } }); Console.WriteLine("CREATE {0}", parms.DeviceId[0]); }