Framework/Helpers/RemoteApiHelper.ps1

Set-StrictMode -Version Latest

class RemoteApiHelper {
    # TODO: Move to config
    hidden static [string] $ApiBaseEndpoint = [ConfigurationManager]::GetAzSdkConfigData().AzSDKApiBaseURL; #https://localhost:44380/api
    hidden static [Newtonsoft.Json.JsonSerializerSettings] $SerializerSettings;

    static RemoteApiHelper() {
        [RemoteApiHelper]::SerializerSettings = [Newtonsoft.Json.JsonSerializerSettings]::new()
        [RemoteApiHelper]::SerializerSettings.Converters.Add([Newtonsoft.Json.Converters.StringEnumConverter]::new())
        [RemoteApiHelper]::SerializerSettings.Formatting = [Newtonsoft.Json.Formatting]::None
        [RemoteApiHelper]::SerializerSettings.NullValueHandling = [Newtonsoft.Json.NullValueHandling]::Ignore
        [RemoteApiHelper]::SerializerSettings.ReferenceLoopHandling = [Newtonsoft.Json.ReferenceLoopHandling]::Ignore
    }

    hidden static [string] GetAccessToken() {
        #TODO: Move resource to config
        return [Helpers]::GetAccessToken("https://management.core.windows.net/");
    }

    hidden static [psobject] PostContent($uri, $content, $type) {
        try{
            $accessToken = [RemoteApiHelper]::GetAccessToken()
            $result = Invoke-WebRequest -Uri $([RemoteApiHelper]::ApiBaseEndpoint + $uri) `
                -Method Post `
                -Body $content `
                -ContentType $type `
                -Headers @{"Authorization" = "Bearer $accessToken"} `
                -UseBasicParsing
            return $result
        }
        catch{
            return "ERROR"
        }
    }

    hidden static [psobject] PostJsonContent($uri, $obj) {
        $postContent = [Newtonsoft.Json.JsonConvert]::SerializeObject($obj, [RemoteApiHelper]::SerializerSettings)
        return [RemoteApiHelper]::PostContent($uri, $postContent, "application/json")
    }

    static [void] PostSubscriptionScanResult($scanResult) {
        [RemoteApiHelper]::PostJsonContent("/scanresults/subscription", $scanResult) | Out-Null
    }

    static [void] PostServiceScanResult($scanResult) {
        [RemoteApiHelper]::PostJsonContent("/scanresults/service", $scanResult) | Out-Null
    }
}