PingOne Platform APIs

Update AITM Predictor

 

PUT {{apiPath}}/environments/{{envID}}/riskPredictors/{{aitmPredictorID}}

This request updates an existing Adversary-in-the-Middle (AitM) predictor, providing an updated list of domains.

The whiteList parameter is used to specify the domains.

Note that while the predictor is identified by the predictor ID in the URL of the request, the following parameters are also required in order for the request to succeed: name, compactName, type.

Prerequisites

Request Model

Refer to Risk Predictors for the complete data models.

Base data model

Property Type Required?

compactName

String

Required

name

String

Required

type

String

Required

whiteList

List[]

Optional

Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/json

Body

raw ( application/json )

{
  "name": "Adversary In The Middle",
  "compactName": "adversaryInTheMiddle",
  "type": "ADVERSARY_IN_THE_MIDDLE",
  "domainWhiteList": [
    "example.com"
    ]
}

Example Request

  • cURL

  • C#

  • Go

  • HTTP

  • Java

  • jQuery

  • NodeJS

  • Python

  • PHP

  • Ruby

  • Swift

curl --location --globoff --request PUT '{{apiPath}}/environments/{{envID}}/riskPredictors/{{aitmPredictorID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
  "name": "Adversary In The Middle",
  "compactName": "adversaryInTheMiddle",
  "type": "ADVERSARY_IN_THE_MIDDLE",
  "domainWhiteList": [
    "example.com"
    ]
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/riskPredictors/{{aitmPredictorID}}")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("", Method.Put);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer {{accessToken}}");
var body = @"{" + "\n" +
@"  ""name"": ""Adversary In The Middle""," + "\n" +
@"  ""compactName"": ""adversaryInTheMiddle""," + "\n" +
@"  ""type"": ""ADVERSARY_IN_THE_MIDDLE""," + "\n" +
@"  ""domainWhiteList"": [" + "\n" +
@"    ""example.com""" + "\n" +
@"    ]" + "\n" +
@"}";
request.AddStringBody(body, DataFormat.Json);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io"
)

func main() {

  url := "{{apiPath}}/environments/{{envID}}/riskPredictors/{{aitmPredictorID}}"
  method := "PUT"

  payload := strings.NewReader(`{
  "name": "Adversary In The Middle",
  "compactName": "adversaryInTheMiddle",
  "type": "ADVERSARY_IN_THE_MIDDLE",
  "domainWhiteList": [
    "example.com"
    ]
}`)

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/json")
  req.Header.Add("Authorization", "Bearer {{accessToken}}")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := io.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
PUT /environments/{{envID}}/riskPredictors/{{aitmPredictorID}} HTTP/1.1
Host: {{apiPath}}
Content-Type: application/json
Authorization: Bearer {{accessToken}}

{
  "name": "Adversary In The Middle",
  "compactName": "adversaryInTheMiddle",
  "type": "ADVERSARY_IN_THE_MIDDLE",
  "domainWhiteList": [
    "example.com"
    ]
}
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n  \"name\": \"Adversary In The Middle\",\n  \"compactName\": \"adversaryInTheMiddle\",\n  \"type\": \"ADVERSARY_IN_THE_MIDDLE\",\n  \"domainWhiteList\": [\n    \"example.com\"\n    ]\n}");
Request request = new Request.Builder()
  .url("{{apiPath}}/environments/{{envID}}/riskPredictors/{{aitmPredictorID}}")
  .method("PUT", body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "Bearer {{accessToken}}")
  .build();
Response response = client.newCall(request).execute();
var settings = {
  "url": "{{apiPath}}/environments/{{envID}}/riskPredictors/{{aitmPredictorID}}",
  "method": "PUT",
  "timeout": 0,
  "headers": {
    "Content-Type": "application/json",
    "Authorization": "Bearer {{accessToken}}"
  },
  "data": JSON.stringify({
    "name": "Adversary In The Middle",
    "compactName": "adversaryInTheMiddle",
    "type": "ADVERSARY_IN_THE_MIDDLE",
    "domainWhiteList": [
      "example.com"
    ]
  }),
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
var request = require('request');
var options = {
  'method': 'PUT',
  'url': '{{apiPath}}/environments/{{envID}}/riskPredictors/{{aitmPredictorID}}',
  'headers': {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {{accessToken}}'
  },
  body: JSON.stringify({
    "name": "Adversary In The Middle",
    "compactName": "adversaryInTheMiddle",
    "type": "ADVERSARY_IN_THE_MIDDLE",
    "domainWhiteList": [
      "example.com"
    ]
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
import requests
import json

url = "{{apiPath}}/environments/{{envID}}/riskPredictors/{{aitmPredictorID}}"

payload = json.dumps({
  "name": "Adversary In The Middle",
  "compactName": "adversaryInTheMiddle",
  "type": "ADVERSARY_IN_THE_MIDDLE",
  "domainWhiteList": [
    "example.com"
  ]
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer {{accessToken}}'
}

response = requests.request("PUT", url, headers=headers, data=payload)

print(response.text)
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{apiPath}}/environments/{{envID}}/riskPredictors/{{aitmPredictorID}}');
$request->setMethod(HTTP_Request2::METHOD_PUT);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Content-Type' => 'application/json',
  'Authorization' => 'Bearer {{accessToken}}'
));
$request->setBody('{\n  "name": "Adversary In The Middle",\n  "compactName": "adversaryInTheMiddle",\n  "type": "ADVERSARY_IN_THE_MIDDLE",\n  "domainWhiteList": [\n    "example.com"\n    ]\n}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
require "uri"
require "json"
require "net/http"

url = URI("{{apiPath}}/environments/{{envID}}/riskPredictors/{{aitmPredictorID}}")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Put.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer {{accessToken}}"
request.body = JSON.dump({
  "name": "Adversary In The Middle",
  "compactName": "adversaryInTheMiddle",
  "type": "ADVERSARY_IN_THE_MIDDLE",
  "domainWhiteList": [
    "example.com"
  ]
})

response = http.request(request)
puts response.read_body
let parameters = "{\n  \"name\": \"Adversary In The Middle\",\n  \"compactName\": \"adversaryInTheMiddle\",\n  \"type\": \"ADVERSARY_IN_THE_MIDDLE\",\n  \"domainWhiteList\": [\n    \"example.com\"\n    ]\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/riskPredictors/{{aitmPredictorID}}")!,timeoutInterval: Double.infinity)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("Bearer {{accessToken}}", forHTTPHeaderField: "Authorization")

request.httpMethod = "PUT"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in
  guard let data = data else {
    print(String(describing: error))
    return
  }
  print(String(data: data, encoding: .utf8)!)
}

task.resume()

Example Response

200 OK

{
    "_links": {
        "self": {
            "href": "https://api.pingone.eu/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/riskPredictors/7a6e027b-8d24-039b-055a-1d4994050d52"
        },
        "environment": {
            "href": "https://api.pingone.eu/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
        }
    },
    "id": "7a6e027b-8d24-039b-055a-1d4994050d52",
    "environment": {
        "id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
    },
    "createdAt": "2021-05-12T13:11:50.960Z",
    "createdBy": "SYSTEM_GENERATED",
    "updatedAt": "2024-01-24T16:49:11.532Z",
    "name": "Adversary In The Middle",
    "compactName": "adversaryInTheMiddle",
    "licensed": true,
    "domainWhiteList": [
        "example.com"
    ],
    "type": "ADVERSARY_IN_THE_MIDDLE",
    "condition": {
        "scores": [
            {
                "name": "HIGH",
                "value": "HIGH"
            },
            {
                "name": "MEDIUM",
                "value": "MEDIUM"
            },
            {
                "name": "LOW",
                "value": "LOW"
            }
        ]
    },
    "deletable": false,
    "tooltip": "predictor.tooltip.adversary.in.the.middle",
    "default": {
        "weight": 5,
        "score": 80,
        "result": {
            "type": "VALUE"
        },
        "evaluated": true
    }
}