Skip to content
Snippets Groups Projects
Unverified Commit d65d2f52 authored by Thijs Kinkhorst's avatar Thijs Kinkhorst Committed by GitHub
Browse files

Merge pull request #942 from pradtke/655/php-edit-state

#655 allow core:php to manipulate all of the state
parents 4c345710 57bc4f5f
No related branches found
No related tags found
No related merge requests found
`core:PHP` `core:PHP`
========== ==========
This is a filter which makes it possible to run arbitrary PHP code to modify the attributes of an user. This is a filter which makes it possible to run arbitrary PHP code to modify the attributes or state of an user.
Parameters Parameters
---------- ----------
...@@ -11,8 +11,14 @@ Parameters ...@@ -11,8 +11,14 @@ Parameters
It must be `'core:PHP'`. It must be `'core:PHP'`.
`code` `code`
: The PHP code that should be run. This code will have only one variable available: `$attributes`. : The PHP code that should be run. This code will have two variables available:
* `$attributes`.
This is an associative array of attributes, and can be modified to add or remove attributes. This is an associative array of attributes, and can be modified to add or remove attributes.
* `$state`.
This is an associative array of request state. It can be modified to adjust data related to the authentication
such as desired NameId, requested Attributes, authnContextRef and many more.
Examples Examples
-------- --------
...@@ -43,3 +49,10 @@ Create a random number variable: ...@@ -43,3 +49,10 @@ Create a random number variable:
); );
', ',
), ),
Force a specific NameIdFormat. Useful if an SP misbehaves and requests (or publishes) an incorrect NameId
90 => array(
'class' => 'core:PHP',
'code' => '$state["saml:NameIDFormat"] = "urn:oasis:names:tc:SAML:2.0:nameid-format:transient";'
),
\ No newline at end of file
...@@ -49,9 +49,9 @@ class PHP extends \SimpleSAML\Auth\ProcessingFilter ...@@ -49,9 +49,9 @@ class PHP extends \SimpleSAML\Auth\ProcessingFilter
assert(is_array($request)); assert(is_array($request));
assert(array_key_exists('Attributes', $request)); assert(array_key_exists('Attributes', $request));
$function = function (/** @scrutinizer ignore-unused */ &$attributes) { $function = function (/** @scrutinizer ignore-unused */ &$attributes, &$state) {
eval($this->code); eval($this->code);
}; };
$function($request['Attributes']); $function($request['Attributes'], $request);
} }
} }
...@@ -111,4 +111,42 @@ class Test_Core_Auth_Process_PHP extends TestCase ...@@ -111,4 +111,42 @@ class Test_Core_Auth_Process_PHP extends TestCase
); );
$this->processFilter($config, $request); $this->processFilter($config, $request);
} }
/**
* Check that the entire state can be adjusted.
*/
public function testStateCanBeModified()
{
$config = array(
'code' => '
$attributes["orig2"] = array("value0");
$state["newKey"] = ["newValue"];
$state["Destination"]["attributes"][] = "givenName";
',
);
$request = array(
'Attributes' => array(
'orig1' => array('value1', 'value2'),
'orig2' => array('value3'),
'orig3' => array('value4')
),
'Destination' => [
'attributes' => ['eduPersonPrincipalName']
],
);
$expected = array(
'Attributes' => array(
'orig1' => array('value1', 'value2'),
'orig2' => array('value0'),
'orig3' => array('value4')
),
'Destination' => [
'attributes' => ['eduPersonPrincipalName', 'givenName']
],
'newKey' => ['newValue']
);
$this->assertEquals($expected, $this->processFilter($config, $request));
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment