Module/Rule.VsphereNtpSettings/Convert/VsphereNtpSettingsRule.Convert.psm1

# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
using module .\..\..\Common\Common.psm1
using module .\..\VsphereNtpSettingsRule.psm1

$exclude = @($MyInvocation.MyCommand.Name,'Template.*.txt')
$supportFileList = Get-ChildItem -Path $PSScriptRoot -Exclude $exclude
foreach ($supportFile in $supportFileList)
{
    Write-Verbose -Message "Loading $($supportFile.FullName)"
    . $supportFile.FullName
}

<#
    .SYNOPSIS
        Convert the contents of an xccdf check-content element into a Vsphere Ntp Settings object.
    .DESCRIPTION
        The Vsphere Ntp Settings Rule class is used to extract the Vsphere Ntp settings
        from the check-content of the xccdf. Once a STIG rule is identified a
        Vsphere Ntp Settings rule, it is passed to the Vsphere Ntp Settings Rule class for parsing
        and validation.
#>

class VsphereNtpSettingsRuleConvert : VsphereNtpSettingsRule
{
    <#
        .SYNOPSIS
            Empty constructor for SplitFactory.
    #>

    VsphereNtpSettingsRuleConvert ()
    {
    }

    <#
        .SYNOPSIS
            Converts an xccdf stig rule element into a Vsphere Rule.
        .PARAMETER XccdfRule
            The STIG rule to convert.
    #>

    VsphereNtpSettingsRuleConvert ([xml.xmlelement] $XccdfRule) : base ($XccdfRule, $true)
    {
        if ($this.IsOrganizationalSetting())
        {
            $this.SetOrganizationValueTestString()
        }

        $this.SetVsphereNtpSettings()
        $this.SetDscResource()
    }

    <#
        .SYNOPSIS
            Tests if and organizational value is required.
        .DESCRIPTION
            Tests if and organizational value is required.
    #>

    [bool] IsOrganizationalSetting ()
    {
        if ([String]::IsNullOrEmpty($this.NtpServer))
        {
            return $true
        }
        else
        {
            return $false
        }
    }

    <#
    .SYNOPSIS
        Set the organizational value.
    .DESCRIPTION
        Extracts the organizational value from the key and then sets the value.
    #>

    [void] SetOrganizationValueTestString ()
    {
        $OrganizationValueTestString = Get-VsphereNtpSettingsOrganizationValueTestString -CheckContent $this.SplitCheckContent

        if (-not $this.SetStatus($OrganizationValueTestString))
        {
            $this.set_OrganizationValueTestString($OrganizationValueTestString)
            $this.set_OrganizationValueRequired($true)
        }
    }

    <#
        .SYNOPSIS
            Extracts the Vsphere NTP settings from the check-content and sets the value.
        .DESCRIPTION
            Gets the NTP server list from the xccdf content and sets the value.
            If the value that is returned is not valid, the parser status is
            set to fail.
    #>

    [void] SetVsphereNtpSettings ()
    {
        $vsphereNtpSettings = Get-VsphereNtpSettings -CheckContent $this.SplitCheckContent
        $this.set_NtpServer($vsphereNtpSettings)
    }

    hidden [void] SetDscResource ()
    {
        if ($null -eq $this.DuplicateOf)
        {
            $this.DscResource = 'VMHostNtpSettings'
        }
        else
        {
            $this.DscResource = 'None'
        }
    }

    static [bool] Match ([string] $CheckContent)
    {
        if ($CheckContent -match 'Get-VMHostNTPServer')
        {
            return $true
        }
        return $false
    }
}