Esempio n. 1
0
        // [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);
            }
        }
Esempio n. 2
0
        // [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]);
        }