Skip to content
This repository was archived by the owner on May 6, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions src/extension/ddappsec.c
Original file line number Diff line number Diff line change
Expand Up @@ -412,9 +412,19 @@ static PHP_MINFO_FUNCTION(ddappsec)
PUTS("(c) Datadog 2021\n");
php_info_print_box_end();

char *state;
if (DDAPPSEC_G(enabled) == ENABLED) {
state = "Enabled";
} else if (DDAPPSEC_G(enabled) == DISABLED) {
state = "Disabled";
} else {
state = "Not configured";
}

php_info_print_table_start();
php_info_print_table_row(2, "Datadog AppSec support",
DDAPPSEC_G(enabled) == ENABLED ? "enabled" : "disabled");
php_info_print_table_row(2, "State managed by remote config",
DDAPPSEC_G(enabled_by_configuration) == NOT_CONFIGURED ? "Yes" : "No");
php_info_print_table_row(2, "Current state", state);
php_info_print_table_row(2, "Version", PHP_DDAPPSEC_VERSION);
php_info_print_table_end();

Expand Down
18 changes: 18 additions & 0 deletions tests/extension/inc/phpinfo.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

function get_php_info_as_string() {
ob_start();
phpinfo();
$variable = ob_get_contents();
ob_get_clean();
return $variable;
}

function get_configuration_value($configuration) {
$separator = "=>";
$phpinfo = get_php_info_as_string();
$start = strpos($phpinfo, $configuration);
$start = strpos($phpinfo,$separator , $start);
$end = strpos($phpinfo, "\n", $start);
return trim(substr($phpinfo, $start + strlen($separator), $end - $start - strlen($separator)));
}
12 changes: 12 additions & 0 deletions tests/extension/phpinfo_enabled_01.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
--TEST--
Check enablement status by default
--FILE--
<?php
include __DIR__ . '/inc/phpinfo.php';

var_dump(get_configuration_value("State managed by remote config"));
var_dump(get_configuration_value("Current state"));

--EXPECT--
string(3) "Yes"
string(14) "Not configured"
14 changes: 14 additions & 0 deletions tests/extension/phpinfo_enabled_02.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
--TEST--
Check enablement status when enabled by config
--INI--
datadog.appsec.enabled=1
--FILE--
<?php
include __DIR__ . '/inc/phpinfo.php';

var_dump(get_configuration_value("State managed by remote config"));
var_dump(get_configuration_value("Current state"));

--EXPECT--
string(2) "No"
string(7) "Enabled"
14 changes: 14 additions & 0 deletions tests/extension/phpinfo_enabled_03.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
--TEST--
Check enablement status when disabled by config
--INI--
datadog.appsec.enabled=0
--FILE--
<?php
include __DIR__ . '/inc/phpinfo.php';

var_dump(get_configuration_value("State managed by remote config"));
var_dump(get_configuration_value("Current state"));

--EXPECT--
string(2) "No"
string(8) "Disabled"
40 changes: 40 additions & 0 deletions tests/extension/phpinfo_enabled_04.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
--TEST--
Check enablement status when configured by remote config
--FILE--
<?php
include __DIR__ . '/inc/phpinfo.php';
use function datadog\appsec\testing\{rinit, rshutdown};

include __DIR__ . '/inc/mock_helper.php';
$helper = Helper::createInitedRun([
response_list(response_config_features(true)), //First rinit enables
response_list(response_request_init(['ok'])), //Since it got enabled, it should call to request init
response_list(response_request_shutdown(['ok', [], new ArrayObject(), new ArrayObject()])), //End of request
response_list(response_config_features(false)), //Second call at rinit disabled it
response_list(response_config_sync()), //Third call which does not change anything
]);

//Enabled not configured
var_dump(get_configuration_value("State managed by remote config"));
var_dump(get_configuration_value("Current state"));
rinit(); //On this rinit it gets enabled
var_dump(get_configuration_value("State managed by remote config"));
var_dump(get_configuration_value("Current state"));
rshutdown();
rinit(); //Second rinit. This time it got disabled
var_dump(get_configuration_value("State managed by remote config"));
var_dump(get_configuration_value("Current state"));
rshutdown();
rinit(); //Third rinit. Nothing changes
rshutdown();
var_dump(get_configuration_value("State managed by remote config"));
var_dump(get_configuration_value("Current state"));
--EXPECT--
string(3) "Yes"
string(14) "Not configured"
string(3) "Yes"
string(7) "Enabled"
string(3) "Yes"
string(8) "Disabled"
string(3) "Yes"
string(8) "Disabled"