Recording and resources for Ping Identity | ForgeRock Developer: Customizing Journeys with Scripted Nodes. Example Autonomous Access Logic

ipqs-isAnonymized.js

/*
IPQualityScore's Proxy Detection & Fraud Scoring API allows you to
Proactively Prevent Fraud™ via a simple API that provides over 25 data
points for risk analysis, geo location, and IP intelligence.
​
https://www.ipqualityscore.com/documentation/proxy-detection/overview
​
Outcomes:
  "error"
  "tor"
  "vpn"
  "proxy"
  "not_detected"
*/
​
var USER_AGENT = "Put Your User Agent Here"
var API_KEY = "Put Your API Key Here"
​
outcome = "error";
​
var payload = sharedState.get("IPQualityScore")
​
if (payload) {
  var jsonResult = JSON.parse(payload);
} else {
  var ipaddress = requestHeaders.get("X-FORWARDED-FOR").get(0).split(",")[0].trim();
​
  var request = new org.forgerock.http.protocol.Request();
  request.setMethod("GET");
  request.setUri("https://ipqualityscore.com/api/json/ip/" + API_KEY + "/" + ipaddress + "?strictness=0&allow_public_access_points=false&fast=false&lighter_penalties=false&mobile=false");
  request.getHeaders().add("Accept","application/json");
  request.getHeaders().add("User-Agent", USER_AGENT);
​
  var response = httpClient.send(request).get();
  if (response.getStatus().getCode() === 200) {
    var payload = response.getEntity().getString();
    var jsonResult = JSON.parse(payload)
	  if (jsonResult.success === true) {
      sharedState.put("IPQualityScore", payload);
    }
  }
}
​
if (jsonResult) {
  if (jsonResult.tor === true) {
    outcome = "tor";
  } else if (jsonResult.vpn === true) {
    outcome = "vpn";
  } else if (jsonResult.proxy === true) {
    outcome = "proxy";
  } else {
    outcome = "not_detected";
  }
}