Code Examples

Below are some code example for basic SentinelTrails functionality:

Inserting a single entry

Java

The Java example uses the logsentinel-java-client

//credentials obtained after registration
LogSentinelClientBuilder builder = LogSentinelClientBuilder
    .create(applicationId, organizationId, secret);
LogSentinelClient client = builder.build();

try {
    var result = client.getAuditLogActions().log(
        new ActorData().actorId(actorId).actorDisplayName(username).actorRoles(roles),
        new ActionData().details(details).action(action)
    );
    System.out.println(result);
} catch (ApiException e) {
    // handle exception
}

C#

The C# example uses the logsentinel-dotnet-core-client

LogSentinelClientBuilder builder = LogSentinelClientBuilder
        .create(applicationId, organizationId, secret);

builder.setEncryptionKey(encryptionKey); // Optional

LogSentinelClient client = builder.build();

try
{
        var result = client.getAuditLogActions().LogUsingPOST(
                new ActorData().setActorDisplayName(actorName).setActorRoles(actorRoles)
                        .setActorId(actorId),
                new ActionData().setDetails(details).setAction(act)
                        .setEntryType(entryType),
                applicationId);
        Console.WriteLine(result.LogEntryId);
}
catch (ApiException e)
{
        Console.WriteLine("Exception when calling AuditLogControllerApi#logAuthAction");
}

PHP

$data = <<<EOT
{
  "detail1": "detail 1",
  "detail2": "detail 2"
}
EOT;

$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

curl_setopt($curl, CURLOPT_URL, 'https://app.logsentinel.com/api/log/' . $actorId . '/' . $action . '/' . $entityType . '/' . $entityId);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Application-Id: ' . $applicationId;
));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, $ORG_ID . ":" . $SECRET);

// EXECUTE:
$result = curl_exec($curl);

Python

import requests
url = 'https://app.logsentinel.com/api/log/' + actorId + '/' + action + '/' + entityType + '/' + entityId;
data = '''{
  "detail1": "detail 1",
  "detail2": "detail 2"
}'''

response = requests.post(url, auth = HTTPBasicAuth(orgId, secret), data = data, headers = {"Content-Type": "application/json", "Application-Id": "applicationId"})

Node.js

var https = require('https');
var data = JSON.stringify({
  "detail1": "detail 1",
  "detail2": "detail 2"
});

var auth = 'Basic ' + Buffer.from(ORG_ID + ':' + ORG_SECRET).toString('base64')

var options = {
  host: 'app.logsentinel.com',
  path: '/api/log/' + actorId + '/' + action + '/' + entityType + '/' + entityId,
  method: 'POST',
  headers: {
        'Content-Type': 'application/json; charset = utf-8',
        'Application-Id': applicationId,
        'Authorization': auth;
  }
};

var req = https.request(options, function(res) {
  var res = JSON.parse(response.body)
  //...
});

req.write(data);
req.end();

Inserting batch entries

Java

The Java example uses the logsentinel-java-client

//credentials obtained after registration
LogSentinelClientBuilder builder = LogSentinelClientBuilder
    .create(applicationId, organizationId, secret);
LogSentinelClient client = builder.build();

List<BatchLogRequestEntry> batch = new ArrayList<>();
for (int i = 0; i < COUNT; i++) {
    String details = "details" + i;

    BatchLogRequestEntry entry = new BatchLogRequestEntry();
    entry.setActionData(new ActionData(details).setAction(action).setBinaryContent(false));
    entry.setActorData(new ActorData().actorId(actorId).actorDisplayName(username).actorRoles(roles));
    entry.setAdditionalParams(new HashMap<>());

    batch.add(entry);
}

try {
    client.getAuditLogActions().logBatch(batch);
} catch (ApiException e) {
    // handle exception
}

C#

The C# example uses the logsentinel-dotnet-core-client

    LogSentinelClientBuilder builder = LogSentinelClientBuilder
            .create(applicationId, organizationId, secret);

    builder.setEncryptionKey(encryptionKey); // Optional

    LogSentinelClient client = builder.build();

    try
    {
            List<BatchLogRequestEntry> batch = new List<BatchLogRequestEntry>();
            for (int i = 0; i < COUNT; i++) {
                string details = "details" + i;

                BatchLogRequestEntry entry = new BatchLogRequestEntry(
new ActorData().setActorDisplayName(actorName).setActorRoles(actorRoles).setActorId(actorId),
                    new ActionData().setDetails(details).setAction(act).setEntryType(entryType));

batch.Add(entry);
            }
            var result = client.getAuditLogActions().LogBatchUsingPOST(batch, applicationId);
            Console.WriteLine(result.LogEntryId);
    }
    catch (ApiException e)
    {
            Console.WriteLine("Exception when calling AuditLogControllerApi#logAuthAction");
    }

PHP

$data = <<<EOT
[{
  "actorData": {
    "actorId":"actor1",
    "actorDisplayName":"actor 1",
    "department":"IT"
  },
  "actionData": {
    "action":"VIEW",
    "entityId":"123",
    "entityType":"Deposit",
    "details":{
          "detail1": "detail 1",
          "detail2": "detail 2"
    }
},{
  "actorData": {
    "actorId":"actor2",
    "actorDisplayName":"actor 2",
    "department":"IT"
  },
  "actionData": {
    "action":"WITHDRAW",
    "entityId":"123",
    "entityType":"Deposit",
    "details":{
          "detail1": "detail 1",
          "detail2": "detail 2"
    }]
EOT;

$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

curl_setopt($curl, CURLOPT_URL, 'https://app.logsentinel.com/api/log/batch');
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Application-Id: ' . $applicationId
));

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, $ORG_ID . ":" . $SECRET);

// EXECUTE:
$result = curl_exec($curl);

Python

import requests
url = 'https://app.logsentinel.com/api/log/batch';
data = '''[{
  "actorData": {
    "actorId":"actor1",
    "actorDisplayName":"actor 1",
    "department":"IT"
  },
  "actionData": {
    "action":"VIEW",
    "entityId":"123",
    "entityType":"Deposit",
    "details":{
          "detail1": "detail 1",
          "detail2": "detail 2"
    }
},{
  "actorData": {
    "actorId":"actor2",
    "actorDisplayName":"actor 2",
    "department":"IT"
  },
  "actionData": {
    "action":"WITHDRAW",
    "entityId":"123",
    "entityType":"Deposit",
    "details":{
          "detail1": "detail 1",
          "detail2": "detail 2"
    }]'''

response = requests.post(url, auth = HTTPBasicAuth(orgId, secret), data = data, headers = {"Content-Type": "application/json", "Application-Id": "applicationId"})

Node.js

var https = require('https');
var data = JSON.stringify([{
  "actorData": {
    "actorId":"actor1",
    "actorDisplayName":"actor 1",
    "department":"IT"
  },
  "actionData": {
    "action":"VIEW",
    "entityId":"123",
    "entityType":"Deposit",
    "details":{
          "detail1": "detail 1",
          "detail2": "detail 2"
    }
},{
  "actorData": {
    "actorId":"actor2",
    "actorDisplayName":"actor 2",
    "department":"IT"
  },
  "actionData": {
    "action":"WITHDRAW",
    "entityId":"123",
    "entityType":"Deposit",
    "details":{
          "detail1": "detail 1",
          "detail2": "detail 2"
    }]);

var auth = 'Basic ' + (Buffer.from(ORG_ID + ':' + ORG_SECRET).toString('base64'))

var options = {
  host: 'app.logsentinel.com',
  path: '/api/log/batch',
  method: 'POST',
  headers: {
        'Content-Type': 'application/json; charset = utf-8',
        'Application-Id': applicationId,
        'Authorization': auth;
  }
};

var req = https.request(options, function(res) {
  var res = JSON.parse(response.body)
  //...
});

req.write(data);
req.end();

Merkle proofs

For consistency and inclusion proofs, see our example verification application: logsentinel-java-client-verification-ui