UniversalAutomation.Dashboard.psm1

if ($Env:UADebug -eq $true) {
    $AssetId = [UniversalDashboard.Services.AssetService]::Instance.RegisterAsset("http://localhost:10002/ua.index.bundle.js")
    [UniversalDashboard.Services.AssetService]::Instance.RegisterAsset("http://localhost:10002/ua.vendors~index.bundle.js")
    [UniversalDashboard.Services.AssetService]::Instance.RegisterAsset("http://localhost:10002/editor.worker.js")
    [UniversalDashboard.Services.AssetService]::Instance.RegisterFramework('UniversalAutomation', "http://localhost:10002/ua.index.bundle.js")
} else {
    $IndexJs = Get-ChildItem "$PSScriptRoot\index.*.bundle.js"
    $JsFiles = Get-ChildItem "$PSScriptRoot\*.js"
    $Maps = Get-ChildItem "$PSScriptRoot\*.map"
    
    $AssetId = [UniversalDashboard.Services.AssetService]::Instance.RegisterAsset($IndexJs.FullName)
    [UniversalDashboard.Services.AssetService]::Instance.RegisterFramework('UniversalAutomation', $IndexJs.FullName)

    foreach($item in $JsFiles)
    {
        [UniversalDashboard.Services.AssetService]::Instance.RegisterAsset($item.FullName) | Out-Null
    }
    
    foreach($item in $Maps)
    {
        [UniversalDashboard.Services.AssetService]::Instance.RegisterAsset($item.FullName) | Out-Null
    }
}

function Start-UADashboard {
    param(
        [string]$ComputerName,
        [int]$Port,
        [UniversalDashboard.Models.LoginPage]$LoginPage,
        [Switch]$Wait,
        [Parameter()]
        [string]$CertificateFile,
        [Parameter()]
        [SecureString]$CertificateFilePassword
    )

    $GetEndpoint = New-UDEndpoint -Url 'universal-automation/.*' -Method Get -EvaluateUrlAsRegex -Endpoint {
        $UAToken = $Request.Headers["UAToken"]
        $Headers = @{}

        if ($UAToken) 
        {
            $Headers["Authorization"] = "Bearer $UAToken" 
        }

        $Url = $Request.Path.ToString().Replace('/api/universal-automation', '')

        try 
        {
            (Invoke-WebRequest "$($ComputerName)$Url" -Headers $Headers -UseBasicParsing).Content 
        }
        catch {
            Write-UDLog $_.Exception.Message
            [Microsoft.AspNetCore.Mvc.StatusCodeResult]::new(401)
        }
    } -Public

    $PostEndpoint = New-UDEndpoint -Url 'universal-automation/.*' -Method Post -EvaluateUrlAsRegex -Endpoint {

        $UAToken = $Request.Headers["UAToken"]
        $Headers = @{}

        if ($UAToken) 
        {
            $Headers["Authorization"] = "Bearer $UAToken" 
        }

        $Url = $Request.Path.ToString().Replace('/api/universal-automation', '')
        (Invoke-WebRequest "$($ComputerName)$Url" -Method Post -Body $Body -ContentType $Request.ContentType -Headers $Headers -UseBasicParsing).Content 
    } -Public

    $PutEndpoint = New-UDEndpoint -Url 'universal-automation/.*' -Method Put -EvaluateUrlAsRegex -Endpoint {

        $UAToken = $Request.Headers["UAToken"]
        $Headers = @{}

        if ($UAToken) 
        {
            $Headers["Authorization"] = "Bearer $UAToken" 
        }

        $Url = $Request.Path.ToString().Replace('/api/universal-automation', '')
        (Invoke-WebRequest "$($ComputerName)$Url" -Method Put -Body $Body -ContentType $Request.ContentType -Headers $Headers -UseBasicParsing).Content 
    } -Public

    $DeleteEndpoint = New-UDEndpoint -Url 'universal-automation/.*' -Method Delete -EvaluateUrlAsRegex -Endpoint {

        $UAToken = $Request.Headers["UAToken"]
        $Headers = @{}

        if ($UAToken) 
        {
            $Headers["Authorization"] = "Bearer $UAToken" 
        }

        $Url = $Request.Path.ToString().Replace('/api/universal-automation', '')
        (Invoke-WebRequest "$($ComputerName)$Url" -Method Delete -Headers $Headers -UseBasicParsing).Content
    } -Public

    $SessionEndpoint = New-UDEndpoint -Url 'sessionAppToken' -Method Get -Endpoint {
        $Session:AppToken
    } -Public

    $RoleEndpoint = New-UDEndpoint -Url 'sessionUserRole' -Method Get -Endpoint {
        $Session:UserRole
    } -Public

    $UserEndpoint = New-UDEndpoint -Url 'user' -Method Get -Endpoint {
        $User
    } -Public

    $Dashboard = New-UDDashboard -Content {} -LoginPage $LoginPage

    $Dashboard.FrameworkAssetId = [UniversalDashboard.Services.AssetService]::Instance.Frameworks['UniversalAutomation'];

    $Endpoints = @($GetEndpoint, $PostEndpoint, $PutEndpoint, $DeleteEndpoint, $SessionEndpoint, $RoleEndpoint, $UserEndpoint)

    $Arguments = @{
        Port = $Port
        Endpoint = $Endpoints
        Dashboard = $Dashboard 
    }

    if ($Wait) {
        $Arguments["Wait"] = $true 
    }

    if ($CertificateFile) {
        $Arguments["CertificateFile"] = $CertificateFile
    }

    if ($CertificateFilePassword) {
        $Arguments["CertificateFilePassword"] = $CertificateFilePassword
    }

    Start-UDDashboard @Arguments
}