DEV Community

Cover image for Fazendo Backup dos App Profiles
Ivo Dias for M3Corp

Posted on

Fazendo Backup dos App Profiles

Utilizando o Wrapper, podemos fazer o download dos relatórios de falhas disponíveis na plataforma. A ideia desse artigo é demonstrar como escrever um script para entrar em todos os perfis e fazer o download de um PDF com o ultimo relatório detalhado.

Caso queira fazer isso para times específicos, utilize um usuário que tenha acesso aos times que quer fazer o backup.

Estou usando a combinação do Wrapper + Powershell rodando no Windows, mas pode facilmente se aproveitar da estrutura e converter para Shell (ou apenas instalar o Powershell for Linux).

Backup Geral
Nesse primeiro modelo, vamos fazer o backup de todos os projetos que o usuário tem acesso. No script, coloquei como parâmetro adicional a pasta onde quer salvar esse backup, mas deixando o Desktop como opção padrão.

Para utilizar ele corretamente, precisamos ter as ferramentas da Veracode configuradas no Windows.

Nosso script vai basicamente:

  1. Receber a lista de todos os projetos que o usuário tem acesso
  2. Converter todos os nomes em IDs
  3. Para cada um dos projetos, vai pegar o ultimo ID de Build (o ultimo scan realizado)
  4. Vai gerar um relatório detalhado e salvar na pasta escolhida

Traduzindo isso para código, temos:

param (
    [parameter(position = 0)]
    $pastaBackup = [Environment]::GetFolderPath("Desktop")
)

# Recebe a lista de todos os nomes e IDs
[xml]$listaPerfisApp = $(VeracodeAPI.exe -action GetAppList)
$nomesApps = $listaPerfisApp.applist.app.app_name
$idApps = $listaPerfisApp.applist.app.app_id

# Inicializa o índice
[int]$indice = 0

# Valida se existe algum nome com o prefixo
foreach ($nomeApp in $nomesApps) {
    $appID = $idApps[$indice]
    [xml]$buildINFO = $(VeracodeAPI.exe -action getbuildinfo -appid $appID)
    $buildID = $buildINFO.buildinfo.build_id

    # Faz o Backup
    VeracodeAPI.exe -action detailedreport -buildid "$buildID" -format pdf -outputfilepath "$pastaBackup\$nomeApp-$buildID.pdf"
    $indice = $indice + 1
}
Enter fullscreen mode Exit fullscreen mode

Como fazer filtrando pelo nome?
Caso queira fazer para projetos específicos ou filtrar por algum conjunto de caracteres em comum nos projetos, podemos alterar ligeiramente e utilizar uma string de validação.
Nesse exemplo, recebo ela como o primeiro parâmetro, e uso para buscar em cada um dos projetos:

param (
        [parameter(position=0,Mandatory=$True)]
        $validadorNome,
        [parameter(position=1)]
        $pastaBackup = [Environment]::GetFolderPath("Desktop")
)

# Recebe a lista de todos os nomes e IDs
[xml]$listaPerfisApp = $(VeracodeAPI.exe -action GetAppList)
$nomesApps = $listaPerfisApp.applist.app.app_name
$idApps = $listaPerfisApp.applist.app.app_id

# Inicializa o índice
[int]$indice = 0

# Valida se existe algum nome com o prefixo
foreach ($nomeApp in $nomesApps) {
    if ($nomeApp -like "*$validadorNome*") {
        $appID = $idApps[$indice]
        [xml]$buildINFO = $(VeracodeAPI.exe -action getbuildinfo -appid $appID)
        $buildID = $buildINFO.buildinfo.build_id

        # Faz o Backup
        VeracodeAPI.exe -action detailedreport -buildid "$buildID" -format pdf -outputfilepath "$pastaBackup\$nomeApp-$buildID.pdf"
    }
    $indice = $indice + 1
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)