namespace PS.IPAM.Cmdlets; using System; using System.Collections.Generic; using System.Management.Automation; using System.Net; using PS.IPAM.Helpers; /// /// Retrieves permission information from phpIPAM. /// [Cmdlet(VerbsCommon.Get, "Permissions")] public class GetPermissionsCmdlet : BaseCmdlet { [Parameter( Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, Position = 0, ParameterSetName = "ByID", HelpMessage = "The address ID.")] [ValidateNotNullOrEmpty] public string? Id { get; set; } [Parameter( Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, Position = 0, ParameterSetName = "ByIP", HelpMessage = "The IP address to search for.")] [Parameter( Mandatory = false, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, Position = 1, ParameterSetName = "BySubnetId")] [ValidateNotNullOrEmpty] public IPAddress? IP { get; set; } [Parameter( Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, Position = 0, ParameterSetName = "ByHostName", HelpMessage = "The hostname to search for.")] [ValidateNotNullOrEmpty] public string? HostName { get; set; } [Parameter( Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, Position = 0, ParameterSetName = "ByTag", HelpMessage = "The tag ID.")] [ValidateNotNullOrEmpty] public string? TagId { get; set; } [Parameter( Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, Position = 0, ParameterSetName = "BySubnetId", HelpMessage = "The subnet ID.")] [ValidateNotNullOrEmpty] public string? SubnetId { get; set; } [Parameter( Mandatory = true, ValueFromPipeline = true, ValueFromPipelineByPropertyName = true, Position = 0, ParameterSetName = "BySubnetCIDR", HelpMessage = "The subnet in CIDR notation.")] [ValidatePattern(@"^\d+\.\d+\.\d+\.\d+/\d{1,2}$")] [ValidateNotNullOrEmpty] public string? SubnetCIDR { get; set; } protected override void ProcessRecord() { try { var controller = ApiController.Addresses; var identifiers = new List(); switch (ParameterSetName) { case "ByID": identifiers.Add(Id!); break; case "ByIP": identifiers.Add("search"); identifiers.Add(IP!.ToString()); break; case "ByHostName": identifiers.Add("search_hostname"); identifiers.Add(HostName!); break; case "ByTag": identifiers.Add("tags"); identifiers.Add(TagId!); identifiers.Add("addresses"); break; case "BySubnetId": if (IP != null) { identifiers.Add(IP.ToString()); identifiers.Add(SubnetId!); } else { controller = ApiController.Subnets; identifiers.Add(SubnetId!); identifiers.Add("addresses"); } break; case "BySubnetCIDR": controller = ApiController.Subnets; var subnet = RequestHelper.InvokeRequest( "GET", ApiController.Subnets, ModelType.Subnetwork, null, null, new[] { "cidr", SubnetCIDR! } ).GetAwaiter().GetResult() as Subnetwork; if (subnet == null) { throw new ItemNotFoundException($"Subnet '{SubnetCIDR}' not found."); } identifiers.Add(subnet.Id.ToString()); identifiers.Add("addresses"); break; } var result = RequestHelper.InvokeRequest( "GET", controller, null, null, null, identifiers.ToArray() ).GetAwaiter().GetResult(); WriteResult(result); } catch (Exception ex) { WriteError(new ErrorRecord(ex, "GetPermissionsError", ErrorCategory.InvalidOperation, null)); } } }