public/functions/HostFilter.ps1

function Add-AvmHostFilterHostEntryToProfile {
    <#
        .SYNOPSIS
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Add-AvmHostFilterHostEntryToProfile
        .DESCRIPTION
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Add-AvmHostFilterHostEntryToProfile
        .NOTES
            Author: chikenborgir
            Website: https://github.com/chikenborgir/avmtools
            License: https://github.com/chikenborgir/avmtools/blob/main/LICENSE
        .LINK
            https://github.com/chikenborgir/avmtools
            https://github.com/chikenborgir/avmtools/blob/main/LICENSE
    #>


    Param
    (
        [Alias("i")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$Insecure = $false,

        [Alias("r")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$RemoteAccess = $false,

        [Alias("t")]
        [Parameter()]
        [System.String]$Token,

        [Alias("u")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$Url,

        [Alias("p")]
        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$Port,

        [Alias("c")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$NewIPv4Address,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.UInt32]$NewFilterProfileID
    )

    $AvmWebrequestBody = [AvmBody]::new()
    $AvmWebrequestBody.SoapAction = "urn:dslforum-org:service:X_AVM-DE_HostFilter:1"
    $AvmWebrequestBody.UrlPath = "$(if ($RemoteAccess) { "/tr064" })/upnp/control/x_hostfilter"
    $AvmWebrequestBody.Action = "AddHostEntryToFilterProfile"
    $AvmWebrequestBody.Token = $Token
    $AvmWebrequestBody.InnerBody = @"
<s:NewIPv4Address>{0}</s:NewIPv4Address>
<s:NewFilterProfileID>{1}</s:NewFilterProfileID>
"@
 -f $NewIPv4Address, $NewFilterProfileID

    [System.Collections.Hashtable]$SplatParameters = @{
        Insecure = $Insecure
        Url = $Url
        Port = $Port
        Credential = $Credential
        SoapAction = $AvmWebrequestBody.GenerateSoapAction()
        UrlPath = $AvmWebrequestBody.UrlPath
        Body = $AvmWebrequestBody.GenerateBody()
        XmlResponse = $AvmWebrequestBody.GenerateXmlResponse()
    }

    Connect-AvmDevice @SplatParameters
}
function Add-AvmHostFilterTicketTimeByIp {
    <#
        .SYNOPSIS
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Add-AvmHostFilterTicketTimeByIp
        .DESCRIPTION
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Add-AvmHostFilterTicketTimeByIp
        .NOTES
            Author: chikenborgir
            Website: https://github.com/chikenborgir/avmtools
            License: https://github.com/chikenborgir/avmtools/blob/main/LICENSE
        .LINK
            https://github.com/chikenborgir/avmtools
            https://github.com/chikenborgir/avmtools/blob/main/LICENSE
    #>


    Param
    (
        [Alias("i")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$Insecure = $false,

        [Alias("r")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$RemoteAccess = $false,

        [Alias("t")]
        [Parameter()]
        [System.String]$Token,

        [Alias("u")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$Url,

        [Alias("p")]
        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$Port,

        [Alias("c")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$NewIPv4Address
    )

    $AvmWebrequestBody = [AvmBody]::new()
    $AvmWebrequestBody.SoapAction = "urn:dslforum-org:service:X_AVM-DE_HostFilter:1"
    $AvmWebrequestBody.UrlPath = "$(if ($RemoteAccess) { "/tr064" })/upnp/control/x_hostfilter"
    $AvmWebrequestBody.Action = "AddTicketTimeToHostEntryByIP"
    $AvmWebrequestBody.Token = $Token
    $AvmWebrequestBody.InnerBody = "<s:NewIPv4Address>{0}</s:NewIPv4Address>" -f $NewIPv4Address

    [System.Collections.Hashtable]$SplatParameters = @{
        Insecure = $Insecure
        Url = $Url
        Port = $Port
        Credential = $Credential
        SoapAction = $AvmWebrequestBody.GenerateSoapAction()
        UrlPath = $AvmWebrequestBody.UrlPath
        Body = $AvmWebrequestBody.GenerateBody()
        XmlResponse = $AvmWebrequestBody.GenerateXmlResponse()
    }

    Connect-AvmDevice @SplatParameters
}
function Deny-AvmHostFilterWanAccessByIp {
    <#
        .SYNOPSIS
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Deny-AvmHostFilterWanAccessByIp
        .DESCRIPTION
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Deny-AvmHostFilterWanAccessByIp
        .NOTES
            Author: chikenborgir
            Website: https://github.com/chikenborgir/avmtools
            License: https://github.com/chikenborgir/avmtools/blob/main/LICENSE
        .LINK
            https://github.com/chikenborgir/avmtools
            https://github.com/chikenborgir/avmtools/blob/main/LICENSE
    #>


    Param
    (
        [Alias("i")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$Insecure = $false,

        [Alias("r")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$RemoteAccess = $false,

        [Alias("t")]
        [Parameter()]
        [System.String]$Token,

        [Alias("u")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$Url,

        [Alias("p")]
        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$Port,

        [Alias("c")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$NewIPv4Address,

        [Parameter()]
        [System.SByte][System.Boolean]$NewDisallow = 0
    )

    $AvmWebrequestBody = [AvmBody]::new()

    $AvmWebrequestBody.Token = $Token
    $AvmWebrequestBody.SoapAction = "urn:dslforum-org:service:X_AVM-DE_HostFilter:1"
    $AvmWebrequestBody.UrlPath = "$(if ($RemoteAccess) { "/tr064" })/upnp/control/x_hostfilter"
    $AvmWebrequestBody.Action = "DisallowWANAccessByIP"
    $AvmWebrequestBody.InnerBody = @"
<s:NewIPv4Address>{0}</s:NewIPv4Address>
<s:NewDisallow>{1}</s:NewDisallow>
"@
 -f $NewIPv4Address, $NewDisallow

    [System.Collections.Hashtable]$SplatParameters = @{
        Insecure = $Insecure
        Url = $Url
        Port = $Port
        Credential = $Credential
        Body = $AvmWebrequestBody.GenerateBody()
        SoapAction = $AvmWebrequestBody.GenerateSoapAction()
        UrlPath = $AvmWebrequestBody.UrlPath
        XmlResponse = $AvmWebrequestBody.GenerateXmlResponse()
    }

    Connect-AvmDevice @SplatParameters
}

function Get-AvmHostFilterHostEntryByIp {
    <#
        .SYNOPSIS
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Get-AvmHostFilterHostEntryByIp
        .DESCRIPTION
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Get-AvmHostFilterHostEntryByIp
        .NOTES
            Author: chikenborgir
            Website: https://github.com/chikenborgir/avmtools
            License: https://github.com/chikenborgir/avmtools/blob/main/LICENSE
        .LINK
            https://github.com/chikenborgir/avmtools
            https://github.com/chikenborgir/avmtools/blob/main/LICENSE
    #>


    Param
    (
        [Alias("i")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$Insecure = $false,

        [Alias("r")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$RemoteAccess = $false,


        [Alias("u")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$Url,

        [Alias("p")]
        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$Port,

        [Alias("c")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$NewIPv4Address
    )

    $AvmWebrequestBody = [AvmBody]::new()
    $AvmWebrequestBody.SoapAction = "urn:dslforum-org:service:X_AVM-DE_HostFilter:1"
    $AvmWebrequestBody.UrlPath = "$(if ($RemoteAccess) { "/tr064" })/upnp/control/x_hostfilter"
    $AvmWebrequestBody.Action = "GetHostEntryByIP"
    $AvmWebrequestBody.InnerBody = "<s:NewIPv4Address>{0}</s:NewIPv4Address>" -f $NewIPv4Address

    [System.Collections.Hashtable]$SplatParameters = @{
        Insecure = $Insecure
        Url = $Url
        Port = $Port
        Credential = $Credential
        SoapAction = $AvmWebrequestBody.GenerateSoapAction()
        UrlPath = $AvmWebrequestBody.UrlPath
        Body = $AvmWebrequestBody.GenerateBody()
        XmlResponse = $AvmWebrequestBody.GenerateXmlResponse()
    }

    Connect-AvmDevice @SplatParameters
}
function Get-AvmHostFilterProfileById {
    <#
        .SYNOPSIS
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Get-AvmHostFilterProfileById
        .DESCRIPTION
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Get-AvmHostFilterProfileById
        .NOTES
            Author: chikenborgir
            Website: https://github.com/chikenborgir/avmtools
            License: https://github.com/chikenborgir/avmtools/blob/main/LICENSE
        .LINK
            https://github.com/chikenborgir/avmtools
            https://github.com/chikenborgir/avmtools/blob/main/LICENSE
    #>


    Param
    (
        [Alias("i")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$Insecure = $false,

        [Alias("r")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$RemoteAccess = $false,


        [Alias("u")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$Url,

        [Alias("p")]
        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$Port,

        [Alias("c")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.UInt32]$NewFilterProfileID
    )

    $AvmWebrequestBody = [AvmBody]::new()
    $AvmWebrequestBody.SoapAction = "urn:dslforum-org:service:X_AVM-DE_HostFilter:1"
    $AvmWebrequestBody.UrlPath = "$(if ($RemoteAccess) { "/tr064" })/upnp/control/x_hostfilter"
    $AvmWebrequestBody.Action = "GetFilterProfileByID"
    $AvmWebrequestBody.InnerBody = "<s:NewFilterProfileID>{0}</s:NewFilterProfileID>" -f $NewFilterProfileID

    [System.Collections.Hashtable]$SplatParameters = @{
        Insecure = $Insecure
        Url = $Url
        Port = $Port
        Credential = $Credential
        SoapAction = $AvmWebrequestBody.GenerateSoapAction()
        UrlPath = $AvmWebrequestBody.UrlPath
        Body = $AvmWebrequestBody.GenerateBody()
        XmlResponse = $AvmWebrequestBody.GenerateXmlResponse()
    }

    Connect-AvmDevice @SplatParameters
}
function Get-AvmHostFilterProfileList {
    <#
        .SYNOPSIS
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Get-AvmHostFilterProfileList
        .DESCRIPTION
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Get-AvmHostFilterProfileList
        .NOTES
            Author: chikenborgir
            Website: https://github.com/chikenborgir/avmtools
            License: https://github.com/chikenborgir/avmtools/blob/main/LICENSE
        .LINK
            https://github.com/chikenborgir/avmtools
            https://github.com/chikenborgir/avmtools/blob/main/LICENSE
    #>


    Param
    (
        [Alias("i")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$Insecure = $false,

        [Alias("r")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$RemoteAccess = $false,


        [Alias("u")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$Url,

        [Alias("p")]
        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$Port,

        [Alias("c")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential
    )

    [System.Collections.Hashtable]$SplatParameters = @{
        Insecure = $Insecure
        Url = $Url
        Port = $Port
        Credential = $Credential
        SoapAction = "urn:dslforum-org:service:X_AVM-DE_HostFilter:1#GetFilterProfiles"
        UrlPath = "$(if ($RemoteAccess) { "/tr064" })/upnp/control/x_hostfilter"
        XmlResponse = "GetFilterProfilesResponse"
    }

    Connect-AvmDevice @SplatParameters
}
function Get-AvmHostFilterTicketIdStatus {
    <#
        .SYNOPSIS
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Get-AvmHostFilterTicketIdStatus
        .DESCRIPTION
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Get-AvmHostFilterTicketIdStatus
        .NOTES
            Author: chikenborgir
            Website: https://github.com/chikenborgir/avmtools
            License: https://github.com/chikenborgir/avmtools/blob/main/LICENSE
        .LINK
            https://github.com/chikenborgir/avmtools
            https://github.com/chikenborgir/avmtools/blob/main/LICENSE
    #>


    Param
    (
        [Alias("i")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$Insecure = $false,

        [Alias("r")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$RemoteAccess = $false,

        [Alias("u")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$Url,

        [Alias("p")]
        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$Port,

        [Alias("c")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$NewTicketID
    )

    $AvmWebrequestBody = [AvmBody]::new()
    $AvmWebrequestBody.SoapAction = "urn:dslforum-org:service:X_AVM-DE_HostFilter:1"
    $AvmWebrequestBody.UrlPath = "$(if ($RemoteAccess) { "/tr064" })/upnp/control/x_hostfilter"
    $AvmWebrequestBody.Action = "GetTicketIDStatus"
    $AvmWebrequestBody.InnerBody = "<s:NewTicketID>{0}</s:NewTicketID>" -f $NewTicketID

    [System.Collections.Hashtable]$SplatParameters = @{
        Insecure = $Insecure
        Url = $Url
        Port = $Port
        Credential = $Credential
        Body = $AvmWebrequestBody.GenerateBody()
        SoapAction = $AvmWebrequestBody.GenerateSoapAction()
        UrlPath = $AvmWebrequestBody.UrlPath
        XmlResponse = $AvmWebrequestBody.GenerateXmlResponse()
    }

    Connect-AvmDevice @SplatParameters
}

function Get-AvmHostFilterWanAccessByIp {
    <#
        .SYNOPSIS
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Get-AvmHostFilterWanAccessByIp
        .DESCRIPTION
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Get-AvmHostFilterWanAccessByIp
        .NOTES
            Author: chikenborgir
            Website: https://github.com/chikenborgir/avmtools
            License: https://github.com/chikenborgir/avmtools/blob/main/LICENSE
        .LINK
            https://github.com/chikenborgir/avmtools
            https://github.com/chikenborgir/avmtools/blob/main/LICENSE
    #>


    Param
    (
        [Alias("i")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$Insecure = $false,

        [Alias("r")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$RemoteAccess = $false,

        [Alias("u")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$Url,

        [Alias("p")]
        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$Port,

        [Alias("c")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Net.IPAddress]$NewIPv4Address
    )

    $AvmWebrequestBody = [AvmBody]::new()
    $AvmWebrequestBody.SoapAction = "urn:dslforum-org:service:X_AVM-DE_HostFilter:1"
    $AvmWebrequestBody.UrlPath = "$(if ($RemoteAccess) { "/tr064" })/upnp/control/x_hostfilter"
    $AvmWebrequestBody.Action = "GetWANAccessByIP"
    $AvmWebrequestBody.InnerBody = "<s:NewIPv4Address>{0}</s:NewIPv4Address>" -f $NewIPv4Address

    [System.Collections.Hashtable]$SplatParameters = @{
        Insecure = $Insecure
        Url = $Url
        Port = $Port
        Credential = $Credential
        Body = $AvmWebrequestBody.GenerateBody()
        SoapAction = $AvmWebrequestBody.GenerateSoapAction()
        UrlPath = $AvmWebrequestBody.UrlPath
        XmlResponse = $AvmWebrequestBody.GenerateXmlResponse()
    }

    Connect-AvmDevice @SplatParameters
}

function Set-AvmHostFilterTicketMarked {
    <#
        .SYNOPSIS
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Set-AvmHostFilterTicketMarked
        .DESCRIPTION
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Set-AvmHostFilterTicketMarked
        .NOTES
            Author: chikenborgir
            Website: https://github.com/chikenborgir/avmtools
            License: https://github.com/chikenborgir/avmtools/blob/main/LICENSE
        .LINK
            https://github.com/chikenborgir/avmtools
            https://github.com/chikenborgir/avmtools/blob/main/LICENSE
    #>


    Param
    (
        [Alias("i")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$Insecure = $false,

        [Alias("r")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$RemoteAccess = $false,

        [Alias("t")]
        [Parameter()]
        [System.String]$Token,

        [Alias("u")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$Url,

        [Alias("p")]
        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$Port,

        [Alias("c")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential
    )

    $AvmWebrequestBody = [AvmBody]::new()
    $AvmWebrequestBody.SoapAction = "urn:dslforum-org:service:X_AVM-DE_HostFilter:1"
    $AvmWebrequestBody.UrlPath = "$(if ($RemoteAccess) { "/tr064" })/upnp/control/x_hostfilter"
    $AvmWebrequestBody.Action = "MarkTicket"
    $AvmWebrequestBody.Token = $Token

    [System.Collections.Hashtable]$SplatParameters = @{
        Insecure = $Insecure
        Url = $Url
        Port = $Port
        Credential = $Credential
        SoapAction = $AvmWebrequestBody.GenerateSoapAction()
        UrlPath = $AvmWebrequestBody.UrlPath
        Body = $AvmWebrequestBody.GenerateBody()
        XmlResponse = $AvmWebrequestBody.GenerateXmlResponse()
    }

    Connect-AvmDevice @SplatParameters
}

function Update-AvmHostFilterTickets {
    <#
        .SYNOPSIS
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Update-AvmHostFilterTickets
        .DESCRIPTION
            Wiki: https://github.com/chikenborgir/avmtools/wiki/Update-AvmHostFilterTickets
        .NOTES
            Author: chikenborgir
            Website: https://github.com/chikenborgir/avmtools
            License: https://github.com/chikenborgir/avmtools/blob/main/LICENSE
        .LINK
            https://github.com/chikenborgir/avmtools
            https://github.com/chikenborgir/avmtools/blob/main/LICENSE
    #>


    Param
    (
        [Alias("i")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$Insecure = $false,

        [Alias("r")]
        [Parameter()]
        [System.Management.Automation.SwitchParameter]$RemoteAccess = $false,

        [Alias("t")]
        [Parameter()]
        [System.String]$Token,

        [Alias("u")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.String]$Url,

        [Alias("p")]
        [Parameter(Mandatory)]
        [ValidateRange(0,65535)]
        [System.UInt16]$Port,

        [Alias("c")]
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.PSCredential]$Credential
    )

    $AvmWebrequestBody = [AvmBody]::new()
    $AvmWebrequestBody.SoapAction = "urn:dslforum-org:service:X_AVM-DE_HostFilter:1"
    $AvmWebrequestBody.UrlPath = "$(if ($RemoteAccess) { "/tr064" })/upnp/control/x_hostfilter"
    $AvmWebrequestBody.Action = "DiscardAllTickets"
    $AvmWebrequestBody.Token = $Token

    [System.Collections.Hashtable]$SplatParameters = @{
        Insecure = $Insecure
        Url = $Url
        Port = $Port
        Credential = $Credential
        SoapAction = $AvmWebrequestBody.GenerateSoapAction()
        UrlPath = $AvmWebrequestBody.UrlPath
        Body = $AvmWebrequestBody.GenerateBody()
        XmlResponse = $AvmWebrequestBody.GenerateXmlResponse()
    }

    Connect-AvmDevice @SplatParameters
}