Src/Private/Get-AbrFgtVPNIPsec.ps1


function Get-AbrFgtVPNIPsec {
    <#
    .SYNOPSIS
        Used by As Built Report to returns VPN IPsec settings.
    .DESCRIPTION
        Documents the configuration of Fortinet FortiGate in Word/HTML/Text formats using PScribo.
    .NOTES
        Version: 0.2.0
        Author: Alexis La Goutte
        Twitter: @alagoutte
        Github: alagoutte
        Credits: Iain Brighton (@iainbrighton) - PScribo module
 
    .LINK
        https://github.com/AsBuiltReport/AsBuiltReport.Fortinet.FortiGate
    #>

    [CmdletBinding()]
    param (

    )

    begin {
        Write-PScriboMessage "Discovering VPN IPsec settings information from $System."
    }

    process {

        Section -Style Heading2 'VPN IPsec' {
            Paragraph "The following section details VPN IPsec settings configured on FortiGate."
            BlankLine

            $vpn_ph1 = Get-FGTVpnIpsecPhase1Interface
            $vpn_ph2 = Get-FGTVpnIpsecPhase2Interface

            if ($InfoLevel.VPNIPsec -ge 1) {
                Section -Style Heading3 'Summary' {
                    Paragraph "The following section provides a summary of VPN IPsec settings."
                    BlankLine
                    $OutObj = [pscustomobject]@{
                        "VPN IPsec Phase 1" = @($vpn_ph1).count
                        "VPN IPsec Phase 2" = @($vpn_ph2).count
                    }

                    $TableParams = @{
                        Name         = "Summary"
                        List         = $true
                        ColumnWidths = 50, 50
                    }

                    if ($Report.ShowTableCaptions) {
                        $TableParams['Caption'] = "- $($TableParams.Name)"
                    }

                    $OutObj | Table @TableParams
                }
            }

            if ($vpn_ph1 -and $InfoLevel.VPNIPsec -ge 1) {
                Section -Style Heading3 'VPN IPsec Phase 1' {
                    Section -Style NOTOCHeading4 -ExcludeFromTOC 'Summary' {
                        $OutObj = @()

                        foreach ($v1 in $vpn_ph1) {

                            $OutObj += [pscustomobject]@{
                                "Name"           = $v1.name
                                "Type"           = $v1.type
                                "Interface"      = $v1.interface
                                "Remote Gateway" = $v1.'remote-gw'
                                "Mode"           = $v1.mode
                                "Auth method"    = $v1.authmethod
                            }
                        }

                        $TableParams = @{
                            Name         = "VPN IPsec Phase 1 Summary"
                            List         = $false
                            ColumnWidths = 20, 16, 16, 16, 16, 16
                        }

                        if ($Report.ShowTableCaptions) {
                            $TableParams['Caption'] = "- $($TableParams.Name)"
                        }

                        $OutObj | Table @TableParams
                    }

                    if ($vpn_ph1 -and $InfoLevel.VPNIPsec -ge 2) {


                        foreach ($v1 in $vpn_ph1) {
                            Section -Style Heading3 "Phase 1: $($v1.name)" {
                                BlankLine
                                $OutObj = @()

                                $OutObj += [pscustomobject]@{
                                    "Name"           = $v1.name
                                    "Type"           = $v1.type
                                    "Interface"      = $v1.interface
                                    "IP Version"     = $v1.'ip-version'
                                    "IKE Version"    = $v1.'ike-version'
                                    "Local Gateway"  = $v1.'local-gw'
                                    "Remote Gateway" = $v1.'remote-gw'
                                    "Mode"           = $v1.mode
                                    "Auth method"    = $v1.authmethod
                                    "Peer Type"      = $v1.peertype
                                    "Comments"       = $v1.comments
                                    "Mode CFG"       = $v1.'mode-cfg'
                                    "Proposal"       = $v1.proposal -replace " ", ", "
                                    "DH Group"       = $v1.dhgrp -replace " ", ", "
                                    "Local ID"       = $v1.localid
                                    "DPD"            = $v1.dpd
                                    "xAuth Type"     = $v1.xauthtype
                                    "NAT Traversal"  = $v1.nattraversal
                                    "Rekey"          = $v1.rekey
                                }


                                $TableParams = @{
                                    Name         = "VPN IPsec Phase 1: $($v1.name)"
                                    List         = $true
                                    ColumnWidths = 50, 50
                                }

                                if ($Report.ShowTableCaptions) {
                                    $TableParams['Caption'] = "- $($TableParams.Name)"
                                }

                                $OutObj | Table @TableParams
                            }
                        }
                    }
                }

            }

            if ($vpn_ph2 -and $InfoLevel.VPNIPsec -ge 1) {
                Section -Style Heading3 'VPN IPsec Phase 2' {
                    Section -Style NOTOCHeading4 -ExcludeFromTOC 'Summary' {
                        $OutObj = @()

                        foreach ($v2 in $vpn_ph2) {
                            switch ($v2.'src-addr-type') {
                                "name" {
                                    $src = $v2.'src-name'
                                }
                                "subnet" {
                                    $src = $v2.'src-subnet' -replace " ", "/"
                                }
                                Default {}
                            }
                            switch ($v2.'dst-addr-type') {
                                "name" {
                                    $dst = $v2.'dst-name'
                                }
                                "subnet" {
                                    $dst = $v2.'dst-subnet' -replace " ", "/"
                                }
                                Default {}
                            }
                            $OutObj += [pscustomobject]@{
                                "Name"                     = $v2.name
                                "Phase 1 Name"             = $v2.phase1name
                                "Source Address Type"      = $v2.'src-addr-type'
                                "Source Address"           = $src
                                "Destination Address Type" = $v2.'dst-addr-type'
                                "Destination Address"      = $dst
                            }
                        }

                        $TableParams = @{
                            Name         = "VPN IPsec Phase 1 Summary"
                            List         = $false
                            ColumnWidths = 20, 16, 16, 16, 16, 16
                        }

                        if ($Report.ShowTableCaptions) {
                            $TableParams['Caption'] = "- $($TableParams.Name)"
                        }

                        $OutObj | Table @TableParams
                    }

                    if ($vpn_ph1 -and $InfoLevel.VPNIPsec -ge 2) {

                        foreach ($v2 in $vpn_ph2) {
                            Section -Style Heading3 "Phase 2: $($v2.name) ($($v2.phase1name))" {
                                BlankLine
                                $OutObj = @()

                                $OutObj += [pscustomobject]@{
                                    "Name"                       = $v2.name
                                    "Phase 1 Name"               = $v2.phase1name
                                    "Commnets"                   = $v2.comments
                                    "Proposal"                   = $v2.proposal -replace " ", ", "
                                    "DH Group"                   = $v2.dhgrp -replace " ", ", "
                                    "Replay"                     = $v2.replay
                                    "KeepAlive"                  = $v2.keepalive
                                    "Keylife Type"               = $v2.'keylife-type'
                                    "Keylife Seconds"            = $v2.keylifeseconds
                                    "Keylife Kbs"                = $v2.keylifekbs
                                    'Source Address Type'        = $v2.'src-addr-type'
                                    'Source Address Name'        = $v2.'src-name'
                                    'Source Address Subnet'      = $v2.'src-subnet'
                                    'Destination Address Type'   = $v2.'dst-addr-type'
                                    'Destination Address Name'   = $v2.'dst-name'
                                    'Destination Address Subnet' = $v2.'dst-subnet'
                                }


                                $TableParams = @{
                                    Name         = "VPN IPsec Phase 2: $($v2.name)"
                                    List         = $true
                                    ColumnWidths = 50, 50
                                }

                                if ($Report.ShowTableCaptions) {
                                    $TableParams['Caption'] = "- $($TableParams.Name)"
                                }

                                $OutObj | Table @TableParams
                            }
                        }
                    }
                }

            }

        }
    }

    end {

    }

}