Skip to content

Commit 7507075

Browse files
authored
Merge pull request #2 from securenative/dev
Updated event structure
2 parents a7e5dce + 98ef2da commit 7507075

17 files changed

Lines changed: 779 additions & 267 deletions

README.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ require_once __DIR__ . '/vendor/autoload.php';
2020
use SecureNative\sdk\SecureNative;
2121
use SecureNative\sdk\SecureNativeOptions;
2222
use SecureNative\sdk\EventTypes;
23+
use SecureNative\sdk\SecureNativeContext;
2324
```
2425

2526
#### Initializing SDK
@@ -40,31 +41,30 @@ SecureNative::init("YOUR_API_KEY", new SecureNativeOptions());
4041
## Event tracking
4142

4243
```
44+
$context = SecureNative::contextFromContext();
45+
4346
SecureNative::track(array(
44-
'eventType' => EventTypes::LOG_IN,
45-
'ip' => '137.74.169.241',
46-
'userAgent' => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ',
47-
'user' => (object)[
48-
'id' => '556595',
49-
'name' => '',
47+
'event' => EventTypes::LOG_IN,
48+
'context' => $context,
49+
'userId' => '556595',
50+
'userTraits' => (object)[
51+
'name' => 'Your name',
5052
'email' => 'test@test.com'
5153
],
52-
// Custom params, key-value array `param_{1-6}`
53-
'params' => [
54-
"param_1" => "test",
55-
"param_2" => "custom param 2"
54+
// Custom properties
55+
'properties' => (object)[
56+
"prop1" => "test",
57+
"prop2" => 3
5658
]
5759
));
5860
5961
or
6062
6163
$ver = SecureNative::verify(array(
62-
'eventType' => EventTypes::VERIFY,
63-
'ip' => '103.234.220.197',
64-
'userAgent' => 'Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405',
65-
'user' => (object)[
66-
'id' => '12345',
67-
'name' => '',
64+
'event' => EventTypes::VERIFY,
65+
'context' => SecureNative::contextFromContext()
66+
'userTraits' => (object)[
67+
'name' => 'Your name',
6868
'email' => 'amit@phptest.com'
6969
]
7070
));

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
"require": {
2626
"php": ">=7.2.0",
2727
"guzzlehttp/guzzle": "^6.0",
28-
"antecedent/patchwork": "~2.0"
28+
"antecedent/patchwork": "~2.0",
29+
"monolog/monolog": "2.0.2"
2930
},
3031
"require-dev": {
3132
"phpunit/phpunit": "^8",

src/Agent.php

Lines changed: 0 additions & 32 deletions
This file was deleted.

src/EventManager.php

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace SecureNative\sdk;
44

5+
use DateTime;
6+
use DateTimeZone;
57
use GuzzleHttp\Psr7\Request;
68
use GuzzleHttp\Exception\RequestException;
79
use phpDocumentor\Reflection\Types\Array_;
@@ -23,24 +25,32 @@ public function __construct($apiKey, SecureNativeOptions $secureNativeOptions)
2325

2426
public function buildEvent(EventOptions $opts)
2527
{
26-
$cookie = Utils::cookieIdFromRequest() ? Utils::cookieIdFromRequest() : Utils::securHeaderFromRequest();
28+
$cookie = $opts->context->clientToken;
2729
$cookieDecoded = Utils::decrypt($cookie, $this->apiKey);
28-
$clientFP = json_decode($cookieDecoded);
29-
$eventType = $opts->eventType ? $opts->eventType : EventTypes::LOG_IN;
30-
31-
$cid = $clientFP && $clientFP->cid ? $clientFP->cid : '';
32-
$fp = $clientFP && $clientFP->fp ? $clientFP->fp : '';
33-
34-
$vid = Utils::generateGuidV4();
35-
$ip = $opts->ip ? $opts->ip : Utils::clientIpFromRequest();
36-
$remoteIP = $opts->remoteIp ? $opts->remoteIp : Utils::clientIpFromRequest();
37-
$userAgent = $opts->userAgent ? $opts->userAgent : Utils::userAgentFromRequest();
38-
$user = $opts->user ? $opts->user : new User('anonymous');
39-
$ts = round(microtime(true) * 1000);
40-
$device = $opts->device;
41-
$params = $opts->params;
30+
$clientToken = json_decode($cookieDecoded);
31+
32+
$rid = Utils::generateGuidV4();
33+
$eventType = $opts->event ? $opts->event : EventTypes::LOG_IN;
34+
$userId = $opts->userId ? $opts->userId : '';
35+
$userTraits = $opts->userTraits ? $opts->userTraits : new UserTraits('anonymous');
36+
$cid = $clientToken && $clientToken->cid ? $clientToken->cid : '';
37+
$vid = $clientToken && $clientToken->vid ? $clientToken->vid : '';
38+
$fp = $clientToken && $clientToken->fp ? $clientToken->fp : '';
39+
$ip = $opts->context->ip ? $opts->context->ip : '';
40+
$remoteIp = $opts->context->remoteIp ? $opts->context->remoteIp : '';
41+
$method = $opts->context->method ? $opts->context->method : '';
42+
$url = $opts->context->url ? $opts->context->url : '';
43+
$headers =$opts->context->headers ? $opts->context->headers : null;
44+
45+
$reqCtx = new RequestContext($cid, $vid, $fp, $ip, $remoteIp, $method, $url, $headers);
46+
47+
$properties = $opts->properties;
48+
$timestamp = null;
49+
try {
50+
$timestamp = $opts->timestamp ? $opts->timestamp : (new DateTime("now", new DateTimeZone("UTC")))->format(DateTime::ISO8601);
51+
} catch (\Exception $e) {}
4252

43-
$event = new SecurenativeEvent($eventType, $cid, $vid, $fp, $ip, $remoteIP, $userAgent, $user, $ts, $device, $params);
53+
$event = new SecurenativeEvent($rid, $eventType, $userId, $userTraits, $reqCtx, $properties, $timestamp);
4454

4555
Logger::debug('Created event', $event);
4656

@@ -56,7 +66,7 @@ public function sendSync(SecurenativeEvent $event, $requestUrl)
5666
Logger::debug('Successfully sent event', $event);
5767
return json_decode($body);
5868
} catch (RequestException $e) {
59-
Logger::debug('Failed to send event', $e->getMessage());
69+
Logger::error('Failed to send event', $e->getMessage());
6070
return null;
6171
}
6272
}
@@ -75,7 +85,7 @@ public function sendAsync(SecurenativeEvent $event, $requestUrl)
7585
try {
7686
$this::sendEvents();
7787
} catch (Exception $e) {
78-
Logger::debug("Failed to send queue events", $e->getMessage());
88+
Logger::error("Failed to send queue events", $e->getMessage());
7989
return;
8090
}
8191
}
@@ -90,10 +100,10 @@ private function sendEvents()
90100
if (($key = array_search($request, $this->eventsQueue)) !== false) {
91101
unset($this->eventsQueue[$key]);
92102
}
93-
}, function (RequestException $e) {
94-
Logger::debug("Failed to send event request", $e->getMessage());
103+
}, function (Exception $e) {
104+
Logger::error("Failed to send event request", $e->getMessage());
95105
});
96-
$promise->wait();
106+
$promise->wait(false);
97107
}
98108
}
99109

src/HttpClient.php

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,13 @@ public function __construct($apiKey, SecureNativeOptions $options)
2121
]
2222
];
2323

24-
// $eventOptions = array_merge($defaultOptions, $options);
25-
$eventOptions = $defaultOptions; // TODO: Combine options
24+
$eventOptions = $defaultOptions;
2625
parent::__construct($eventOptions);
2726
}
2827

2928
protected function getHandlerStack()
3029
{
31-
$handlerStack = HandlerStack::create($this->getHandler());
32-
33-
return $handlerStack;
30+
return HandlerStack::create($this->getHandler());
3431
}
3532

3633
protected function getHandler()

src/Logger.php

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,44 @@
22

33
namespace SecureNative\sdk;
44

5+
use Monolog\Logger as MonoLogger;
6+
use Monolog\Handler\StreamHandler;
57

68
class Logger
79
{
8-
private static $debugEnabled = false;
10+
private static $logger;
11+
private static $logLevels = [
12+
'debug' => MonoLogger::DEBUG,
13+
'info' => MonoLogger::INFO,
14+
'warning' => MonoLogger::WARNING,
15+
'error' => MonoLogger::ERROR,
16+
'fatal' => MonoLogger::CRITICAL,
17+
];
918

1019
public static function init(SecureNativeOptions $options) {
11-
if ($options->getDebugMode()) {
12-
self::$debugEnabled = true;
13-
}
14-
}
15-
16-
private static function baseMessage($message, ...$args) {
17-
// TODO: Add log library
18-
echo "\n" . $message . " " . json_encode($args);
20+
Logger::$logger = new MonoLogger('securenative-sdk');
21+
//$logLevel = Logger::$logLevels[$options->getLogLevel()];
22+
$logLevel = Logger::$logLevels['debug'];
23+
Logger::$logger->pushHandler(new StreamHandler('php://stdout', $level = $logLevel, $bubble = true));
1924
}
2025

2126
public static function debug($message, ...$args) {
22-
if (self::$debugEnabled) {
23-
self::baseMessage($message, $args);
24-
}
27+
Logger::$logger->debug($message, $args);
2528
}
2629

2730
public static function info($message, ...$args) {
28-
self::baseMessage($message, $args);
31+
Logger::$logger->info($message, $args);
32+
}
33+
34+
public static function error($message, ...$args) {
35+
Logger::$logger->error($message, $args);
36+
}
37+
38+
public static function warning($message, ...$args) {
39+
Logger::$logger->warning($message, $args);
40+
}
41+
42+
public static function fatal($message, ...$args) {
43+
Logger::$logger->critical($message, $args);
2944
}
3045
}

src/Models/Context.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace SecureNative\sdk;
4+
5+
class Context
6+
{
7+
public $clientToken;
8+
public $ip;
9+
public $remoteIp;
10+
public $headers;
11+
public $url;
12+
public $method;
13+
14+
public function __construct($clientToken = null, $ip = null, $remoteIp = null, $headers = null, $url= null, $method = null)
15+
{
16+
$this->clientToken = $clientToken;
17+
$this->ip = $ip;
18+
$this->remoteIp = $remoteIp;
19+
$this->headers = $headers;
20+
$this->url = $url;
21+
$this->method = $method;
22+
}
23+
}

0 commit comments

Comments
 (0)