Resources/Marketplace-GET.ps1

function Get-S1MarketplaceAppCatalog {
<#
    .SYNOPSIS
        Get the Marketplace Application Catalog.
 
    .DESCRIPTION
        The Get-S1MarketplaceAppCatalog cmdlet gets the Marketplace Application Catalog.
 
    .PARAMETER category__contains
        Free-text filter by catalog application category.
 
        Example: "Service Pack 1".
 
    .PARAMETER description__contains
        Free-text filter by catalog application description
 
        Example: "Service Pack 1".
 
    .PARAMETER id
        Filter results by application catalog id.
 
        Example: "225494730938493804,225494730938493915".
 
    .PARAMETER name__contains
        Free-text filter by catalog application name
 
        Example: "Service Pack 1".
 
    .PARAMETER query
        Free-text filter by S1 query
 
        Example: "Service Pack 1".
 
    .EXAMPLE
        Get-S1MarketplaceAppCatalog
 
        Returns all the Marketplace Applications
 
    .EXAMPLE
        Get-S1MarketplaceAppCatalog -category__contains Threat
 
        Returns the Marketplace Applications whose category contains the defined value
 
    .NOTES
        N\A
 
    .LINK
        https://github.com/Celerium/S1-PowerShellWrapper
 
#>


    [CmdletBinding( DefaultParameterSetName = 'index' )]
    Param (
        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [ValidateNotNullOrEmpty()]
        [String[]]$category__contains,

        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [ValidateNotNullOrEmpty()]
        [String[]]$description__contains,

        [Parameter( Mandatory = $false, ValueFromPipeline = $true, ParameterSetName = 'index' )]
        [ValidateNotNullOrEmpty()]
        [Int64[]]$id,

        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [ValidateNotNullOrEmpty()]
        [String[]]$name__contains,

        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [ValidateNotNullOrEmpty()]
        [String[]]$query

    )

    process {

        Write-Verbose "Running the [ $($PSCmdlet.ParameterSetName) ] parameterSet"

        Switch ($PSCmdlet.ParameterSetName){
            'index'  {$resource_uri = "/singularity-marketplace/applications-catalog"}
        }

        $excludedParameters =   'Debug','ErrorAction','ErrorVariable','InformationAction',
                                'InformationVariable','OutBuffer','OutVariable','PipelineVariable',
                                'Verbose','WarningAction','WarningVariable'

        $body = @{}

        ForEach ( $Key in $PSBoundParameters.GetEnumerator() ){

            if( $excludedParameters -contains $Key.Key ){$null}
            elseif ( $Key.Value.GetType().IsArray ){
                Write-Verbose "[ $($Key.Key) ] is an array parameter"
                $body += @{ $Key.Key = $Key.Value -join (',') }
            }
            else{
                $body += @{ $Key.Key = $Key.Value }
            }

        }

        try {
            $ApiToken = Get-S1APIKey -PlainText
            $S1_Headers.Add('Authorization', "ApiToken $ApiToken")

            $rest_output = Invoke-RestMethod -Method Get -Uri ( $S1_Base_URI + $resource_uri ) -Headers $S1_Headers -Body $body -ErrorAction Stop -ErrorVariable rest_error
        } catch {
            Write-Error $_
        } finally {
            [void] ( $S1_Headers.Remove('Authorization') )
        }

        $data = @{}
        $data = $rest_output
        return $data

    }

}



function Get-S1MarketplaceAppConfigFields {
<#
    .SYNOPSIS
        Get the Catalog Application Configuration Fields.
 
    .DESCRIPTION
        The Get-S1MarketplaceAppConfigFields cmdlet gets the Catalog Application Configuration Fields.
 
    .PARAMETER application_catalog_id
        Application Catalog ID.
 
        Example: "225494730938493804".
 
    .EXAMPLE
        Get-S1MarketplaceAppConfigFields -application_catalog_id 225494730938493804
 
        Returns the defined Marketplace catalog applications configuration fields.
 
    .EXAMPLE
        225494730938493804 | Get-S1MarketplaceAppConfigFields
 
        Returns the defined Marketplace catalog applications configuration fields.
 
    .NOTES
        N\A
 
    .LINK
        https://github.com/Celerium/S1-PowerShellWrapper
 
#>


    [CmdletBinding( DefaultParameterSetName = 'index' )]
    Param (
        [Parameter( Mandatory = $true, ValueFromPipeline = $true, ParameterSetName = 'index' )]
        [ValidateNotNullOrEmpty()]
        [String]$application_catalog_id
    )

    process {

        Write-Verbose "Running the [ $($PSCmdlet.ParameterSetName) ] parameterSet"

        Switch ($PSCmdlet.ParameterSetName){
            'index'  {$resource_uri = "/singularity-marketplace/applications-catalog/$application_catalog_id/config"}
        }

        try {
            $ApiToken = Get-S1APIKey -PlainText
            $S1_Headers.Add('Authorization', "ApiToken $ApiToken")

            $rest_output = Invoke-RestMethod -Method Get -Uri ( $S1_Base_URI + $resource_uri ) -Headers $S1_Headers -ErrorAction Stop -ErrorVariable rest_error
        } catch {
            Write-Error $_
        } finally {
            [void] ( $S1_Headers.Remove('Authorization') )
        }

        $data = @{}
        $data = $rest_output
        return $data

    }

}



function Get-S1MarketplaceAppConfigSchema {
<#
    .SYNOPSIS
        Get the configuration schema for a requested Application Catalog.
 
    .DESCRIPTION
        The Get-S1MarketplaceAppConfigSchema cmdlet gets the configuration schema for a requested Application Catalog.
 
    .PARAMETER application_id
        Application ID.
 
        Example: "225494730938493804".
 
    .EXAMPLE
        Get-S1MarketplaceAppConfigSchema -application_id 225494730938493804
 
        Returns the defined Marketplace configuration schema for a requested Application Catalog.
 
    .EXAMPLE
        225494730938493804 | Get-S1MarketplaceAppConfigSchema
 
        Returns the defined Marketplace configuration schema for a requested Application Catalog.
 
    .NOTES
        AS of 2022-10
            Cannot fully validate due to permissions
 
    .LINK
        https://github.com/Celerium/S1-PowerShellWrapper
 
#>


    [CmdletBinding( DefaultParameterSetName = 'index' )]
    Param (
        [Parameter( Mandatory = $true, ValueFromPipeline = $true, ParameterSetName = 'index' )]
        [ValidateNotNullOrEmpty()]
        [String]$application_id
    )

    process {

        Write-Verbose "Running the [ $($PSCmdlet.ParameterSetName) ] parameterSet"

        Switch ($PSCmdlet.ParameterSetName){
            'index'  {$resource_uri = "/singularity-marketplace/applications/$application_id/config"}
        }

        try {
            $ApiToken = Get-S1APIKey -PlainText
            $S1_Headers.Add('Authorization', "ApiToken $ApiToken")

            $rest_output = Invoke-RestMethod -Method Get -Uri ( $S1_Base_URI + $resource_uri ) -Headers $S1_Headers -ErrorAction Stop -ErrorVariable rest_error
        } catch {
            Write-Error $_
        } finally {
            [void] ( $S1_Headers.Remove('Authorization') )
        }

        $data = @{}
        $data = $rest_output
        return $data

    }

}



function Get-S1MarketplaceAppInstalls {
<#
    .SYNOPSIS
        Get the installed Marketplace applications for a scope specified.
 
    .DESCRIPTION
        The Get-S1MarketplaceAppInstalls cmdlet gets the installed Marketplace
        applications for a scope specified.
 
    .PARAMETER accountIds
        List of Account IDs to filter by.
 
        Example: "225494730938493804,225494730938493915".
 
    .PARAMETER application_catalog_id
        A list of catalog applications IDs.
 
        Example: "225494730938493804,225494730938493915".
 
    .PARAMETER countOnly
        If true, only total number of items will be returned, without any of the actual objects.
 
    .PARAMETER creator__contains
        Free-text filter by application creator
 
        Example: "Service Pack 1".
 
    .PARAMETER cursor
        Cursor position returned by the last request. Should be used for iterating over more than 1000 items.
 
        Example: "YWdlbnRfaWQ6NTgwMjkzODE=".
 
    .PARAMETER disablePagination
        If true, all installed applications for requested scope will be returned
 
    .PARAMETER groupIds
        List of Group IDs to filter by.
 
        Example: "225494730938493804,225494730938493915".
 
    .PARAMETER id
        Filter results by application catalog id.
 
        Example: "225494730938493804,225494730938493915".
 
    .PARAMETER limit
        Limit number of returned items (1-1000).
 
        Example: "10".
 
    .PARAMETER name__contains
        Free-text filter by application name
 
        Example: "Service Pack 1".
 
    .PARAMETER query
        Free-text filter by S1 query
 
        Example: "Service Pack 1".
 
    .PARAMETER scopes
        Filter results by scope.
 
        Allowed values:
        'account', 'global', 'group', 'site'
 
    .PARAMETER siteIds
        List of Site IDs to filter by
 
        Example: "225494730938493804,225494730938493915".
 
    .PARAMETER skip
        Skip first number of items (0-1000). To iterate over more than 1000 items, use "cursor".
 
        Example: "150".
 
    .PARAMETER skipCount
        If true, total number of items will not be calculated, which speeds up execution time.
 
    .PARAMETER sortBy
        Sorts the returned results by a defined value
 
        Allowed values:
        'id', 'name', 'queryType', 'scope'
 
    .PARAMETER sortOrder
        Sort direction
 
        Allowed values:
        'asc', 'desc'
 
    .EXAMPLE
        Get-S1MarketplaceAppInstalls
 
        Returns installed Marketplace applications from a global scope
 
    .EXAMPLE
        Get-S1MarketplaceAppInstalls -siteIds 225494730938493804
 
        Returns installed Marketplace applications for a defined scope
 
    .EXAMPLE
        225494730938493804 | Get-S1MarketplaceAppInstalls
 
        Returns installed Marketplace applications for a defined scope
 
    .EXAMPLE
        Get-S1MarketplaceAppInstalls -name__contains jira,azure
 
        Returns installed Marketplace applications from a global scope whose name is like the defined values
 
    .EXAMPLE
        Get-S1MarketplaceAppInstalls -cursor 'YWdlbnRfaWQ6NTgwMjkzODE='
 
        Returns accounts after the first 10 results
 
        The cursor value can be found under pagination
 
    .NOTES
        As of 2022-11
            The "scopes" parameter returns a 500 error and appears to be bugged as it does it in the management portal as well.
 
    .LINK
        https://github.com/Celerium/S1-PowerShellWrapper
 
#>


    [CmdletBinding( DefaultParameterSetName = 'index' )]
    Param (
        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [ValidateNotNullOrEmpty()]
        [Int64[]]$accountIds,

        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [ValidateNotNullOrEmpty()]
        [String[]]$application_catalog_id,

        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [Switch]$countOnly,

        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [ValidateNotNullOrEmpty()]
        [String[]]$creator__contains,

        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [ValidateNotNullOrEmpty()]
        [String]$cursor,

        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [Switch]$disablePagination,

        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [ValidateNotNullOrEmpty()]
        [Int64[]]$groupIds,

        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [ValidateNotNullOrEmpty()]
        [Int64[]]$id,

        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [ValidateRange(1, 1000)]
        [Int64]$limit,

        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [ValidateNotNullOrEmpty()]
        [String[]]$name__contains,

        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [ValidateNotNullOrEmpty()]
        [String[]]$query,

        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [ValidateSet( 'account', 'global', 'group', 'site' )]
        [String[]]$scopes,

        [Parameter( Mandatory = $false, ValueFromPipeline = $true, ParameterSetName = 'index' )]
        [ValidateNotNullOrEmpty()]
        [Int64[]]$siteIds,

        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [ValidateRange(1, 1000)]
        [Int64]$skip,

        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [Switch]$skipCount,

        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [ValidateSet( 'id', 'name', 'queryType', 'scope' )]
        [String]$sortBy,

        [Parameter( Mandatory = $false, ParameterSetName = 'index' )]
        [ValidateSet( 'asc', 'desc' )]
        [String]$sortOrder

    )

    process {

        Write-Verbose "Running the [ $($PSCmdlet.ParameterSetName) ] parameterSet"

        Switch ($PSCmdlet.ParameterSetName){
            'index'  {$resource_uri = "/singularity-marketplace/applications"}
        }

        $excludedParameters =   'Debug','ErrorAction','ErrorVariable','InformationAction',
                                'InformationVariable','OutBuffer','OutVariable','PipelineVariable',
                                'Verbose','WarningAction','WarningVariable'

        $body = @{}

        ForEach ( $Key in $PSBoundParameters.GetEnumerator() ){

            if( $excludedParameters -contains $Key.Key ){$null}
            elseif ( $Key.Value.GetType().IsArray ){
                Write-Verbose "[ $($Key.Key) ] is an array parameter"
                $body += @{ $Key.Key = $Key.Value -join (',') }
            }
            else{
                $body += @{ $Key.Key = $Key.Value }
            }

        }

        try {
            $ApiToken = Get-S1APIKey -PlainText
            $S1_Headers.Add('Authorization', "ApiToken $ApiToken")

            $rest_output = Invoke-RestMethod -Method Get -Uri ( $S1_Base_URI + $resource_uri ) -Headers $S1_Headers -Body $body -ErrorAction Stop -ErrorVariable rest_error
        } catch {
            Write-Error $_
        } finally {
            [void] ( $S1_Headers.Remove('Authorization') )
        }

        $data = @{}
        $data = $rest_output
        return $data

    }

}