> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Journal des événements de sécurité de Processing Monitor

> Téléchargez, à l’aide d’un script, le journal des événements de sécurité de Processing Monitor dans ABBYY FlexiCapture concernant les modifications de permissions au format CSV via la requête POST GetSecurityEventsCSV.

Ce journal enregistre des événements liés à l’ajout, à la suppression et à d’autres modifications des permissions des utilisateurs. La journalisation des événements de sécurité est désactivée par défaut et ne peut être activée que par le System Administrator, directement dans une base de données FlexiCapture. Pour plus d’informations, consultez [Journal des événements de sécurité](/fr/flexi-capture/web-stations/monitoring-console/mmc-security-event-log).

<Warning>
  Seuls les utilisateurs disposant du rôle d’administrateur du tenant (ou du rôle de System Administrator dans le cas du tenant par défaut) peuvent télécharger les journaux des événements de sécurité depuis Processing Monitor.
</Warning>

Pour télécharger ce journal, utilisez une requête POST :

```http theme={null}
POST https://<server address>/FlexiCapture12/Monitoring/Project/GetSecurityEventsCSV
```

<div id="request-parameters">
  ## Paramètres de la requête
</div>

Tous les paramètres sont obligatoires. Assurez-vous qu’ils sont correctement renseignés.

<Info>
  La recherche dans Oracle Database est sensible à la casse. Tenez-en compte si vous utilisez Oracle Database.
</Info>

| Paramètre         | Type   | Description                                                                                                                                                                                                                                      |
| ----------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `filter`          | string | Conditions de filtrage du log. Combinez les conditions uniquement à l’aide des opérateurs `AND` et `OR` définis dans le paramètre `GeneralOperator`. Pour plus d’informations, voir [Créer le paramètre de filtre](#build-the-filter-parameter). |
| `columnsOrder`    | string | Liste des colonnes à inclure dans le rapport, séparées par des virgules : `ID`, `Date`, `EventType`, `Details`, `RemoteHost`, `Principal`, `TenantName`, `Writer`, `WriterTenantName`.                                                           |
| `sortColumnindex` | int    | Indice de la colonne utilisée pour trier les enregistrements du log.                                                                                                                                                                             |
| `sortOrder`       | bool   | Ordre de tri : `true` trie par ordre décroissant, `false` trie par ordre croissant.                                                                                                                                                              |

<div id="build-the-filter-parameter">
  ### Définir le paramètre de filtre `filter`
</div>

Le paramètre `filter` accepte un objet JSON. Par exemple :

```json theme={null}
{
  "GeneralOperator": "AND",
  "FilterItems": [
    {
      "PropertyKey": "Date",
      "PropertyOperator": "BETWEEN",
      "PropertyValues": [
        "2021-08-28",
        "00:00:00",
        "2023-09-28",
        "23:59:59"
      ]
    }
  ]
}
```

Pour trouver les valeurs des paramètres `PropertyKey` et `PropertyOperator`, créez un filtre dans l’Administration and Monitoring Console :

<Steps>
  <Step title="Ouvrir les outils de développement du navigateur">
    Dans le menu du navigateur, cliquez sur **More tools → Developer tools**, puis accédez à l’onglet **Network**.
  </Step>

  <Step title="Créer un filtre dans la console">
    Lancez l’Administration and Monitoring Console, accédez à **Processing Monitor → journal des événements de sécurité**, puis cliquez sur le bouton <img src="https://mintcdn.com/abbyy/39LtOHLEp1q7pm1x/images/flexi-capture/Add_filter.png?fit=max&auto=format&n=39LtOHLEp1q7pm1x&q=85&s=7fca1d511f8470021946ae439989fb68" alt="Bouton Ajouter un filtre" style={{display:"inline-block",verticalAlign:"middle",margin:0}} width="22" height="22" data-path="images/flexi-capture/Add_filter.png" />.
  </Step>

  <Step title="Appliquer les critères de filtrage">
    Définissez les critères de filtrage, puis cliquez sur **Apply**.
  </Step>

  <Step title="Lire les paramètres de filtre">
    Cliquez sur la requête `GetFilteredSecurityEvent`. Les paramètres de filtrage sont indiqués dans l’onglet **Payload**.
  </Step>
</Steps>

<div id="example-script">
  ## Exemple de script
</div>

Le script PowerShell suivant montre comment utiliser cette API pour télécharger le journal des événements de sécurité.

<Note>
  Remplacez les paramètres de ce script par l’adresse de votre serveur, le nom de votre tenant et vos identifiants.
</Note>

```powershell theme={null}
# paramètres
$server = "https://<server address>"
$tenant = "<tenant name>"
$user = "<user name>"
$password = "<password>"
#chemin vers le dossier où le log sera enregistré
$folder = "C:\Temp\Logs\Stage"
$reportFileName = "Project_SecurityEvents-{0:yyMMdd-HHmmss}.csv" -f (Get-Date)
# paramètres du log
$requestBody = @"
filter={
    "Name": "Filter By Date",
    "GeneralOperator": "AND",
    "FilterItems": [
        {
            "PropertyKey": "Date",
            "PropertyOperator": "BETWEEN",
            "PropertyValues": [
                "2021-08-28",
                "00:00:00",
                "2023-09-28",
                "23:59:59"
            ]
        }
    ]
}
&columnsOrder=Id,Date,EventType,Details,RemoteHost,Principal,TenantName,Writer,WriterTenantName,
&sortColumnindex=1
&sortOrder=true
"@
#------------------------------------------------------------------------------
$methodUri = "/Project/GetSecurityEventsCSV"
$authServer = $server
$ServerSitePath = "/FlexiCapture12/Monitoring"

function Write-Line($str, $color = "White")
{
    Write-Host $str -ForegroundColor $color
}

function Join-Uri
{
    param([Parameter(Mandatory, ValueFromPipeline)] [string]$parent, [string]$child)
    if ($parent -eq "") {return $child;}
    if ($child -eq ""){return $parent}
    if ($parent.endswith("/") -or $parent.endswith("\\")) {$parent = $parent.substring(0,$parent.Length-1)}
    if ($child.startswith("/") -or $child.startswith("\\")) {$child = $child.substring(1,$child.Length-1)}
    return "$parent/$child"
}

function Get-AuthTicket($server, $user, $password, $tenant)
{
    $tenantSuffix=""
    if ($tenant -ne ''){ $tenantSuffix = "?tenant=$tenant"}
    $URL = Join-Uri $authServer "/FlexiCapture12/Server/FCAuth/API/Soap$tenantSuffix"
    $SOAPRequest = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><FindUser xmlns="urn:http://www.abbyy.com/FlexiCapture"><userLogin>user</userLogin></FindUser></soap:Body></soap:Envelope>'
    $Headers = @{
        'SOAPAction' = '"#FindUser"'
        'Content-Type' = 'text/xml; charset=utf-8'
        'Authorization' = "Basic $([System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes("$($user):$($password)")))"
    }
    try
    {
        $response1 = Invoke-WebRequest -Uri $URL -Headers $Headers -Body $SOAPRequest -Method 'POST'
        return $response1.Headers['AuthTicket']
    }
    catch{
        Write-Line -str "Couldn't get 'AuthTicket': $_" -color "Red"
        return ""
    }
}

function Download-CSVReport($server, $tenant, $authTicket, $methodUri, $requestBody, $folder, $reportFileName)
{
    $reportFullFilePath = Join-Path $folder $reportFileName
    #créer le dossier silencieusement (s'il n'existe pas)
    New-Item -ItemType Directory -Force -Path $folder | Out-Null
    if ($authTicket -eq "" -or $authTicket -eq $null)
    {
        Write-Line -str "Couldn't get 'CSV-Report'" -color "Red"
    }
    else
    {
        $header = @{ "Accept" = "*/*"}
        $session = [Microsoft.PowerShell.Commands.WebRequestSession]::new()
        $session.Cookies.Add($server, [System.NET.Cookie]::new("FlexiCaptureTmpPrn$tenant", "Ticket=$authTicket"))
        $tenantInUrl=""
        if ($tenant -ne '') { $tenantInUrl = "/$tenant"}
        $uri = Join-Uri $server $ServerSitePath | Join-Uri -child $tenantInUrl | Join-Uri -child $methodUri
        try{
            $response = Invoke-WebRequest -Uri $uri -Method 'POST' -Headers $header -WebSession $session -Body $requestBody -OutFile $reportFullFilePath -MaximumRedirection 0 -ErrorAction Ignore -PassThru
            if ($response.StatusCode -lt 300)
            {
                Write-Line "CSV-Report done: $reportFullFilePath" "Green"
            }
            else
            {
                Write-Line -str "HttpStatus $($response.StatusCode) in getting CSV-Report." -color "Red"
            }
        }
        catch{
            Write-Line -str "Couldn't get CSV-Report: $_" -color "Red"
            return ""
        }
    }
}

$authTicket = Get-AuthTicket -server $server -user $user -password $password -tenant $tenant
Download-CSVReport -server $server -tenant $tenant -authTicket $authTicket -methodUri $methodUri -requestBody $requestBody -folder $folder -reportFileName $reportFileName
```
