diff --git a/README.md b/README.md index 429587b..ee24a25 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,98 @@ # OWC IDP UserData -This repository contains interfaces for userdata objects to be used by IDP plugins (e.g. DigiD, eHerkenning) \ No newline at end of file +This package provides common `UserData` and `Session` classes for identity provider (IDP) plugins such as DigiD, eHerkenning, and eIDAS. + +## Installation + +Install via Composer: + +```bash +composer require owc/idp-userdata +``` + +### Example: Providing User Data via IDP-Specific Filters + +To provide user data to the session classes, use the IDP-specific WordPress filters in your plugin or theme: + +```php +use OWC\IdpUserData\DigiDUserData; + +add_filter('owc_digid_is_logged_in', function (bool $isLoggedIn): bool { + // Your logic to determine if the user is logged in with DigiD + return true; +}); + +add_filter('owc_digid_userdata', function (?DigiDUserData $userData): ?DigiDUserData { + return new DigiDUserData([ + 'bsn' => '123456789', + ]); +}); +``` + +### Example: Providing User Data via Generic Filter (with switch) + +You can also use the generic filters and handle multiple IDPs with a switch statement: + +```php + +use OWC\IdpUserData\DigiDUserData; +use OWC\IdpUserData\eHerkenningUserData; +use OWC\IdpUserData\eIDASUserData; +use OWC\IdpUserData\IdpSession; +use OWC\IdpUserData\Idp; +use OWC\IdpUserData\UserData; + + +add_filter('owc_idp_is_logged_in', function (bool $isLoggedIn, string $idp): bool { + switch ($idp) { + case Idp::DIGID: + // Your logic for DigiD + return true; + case Idp::EHERKENNING: + // Your logic for eHerkenning + return false; + case Idp::EIDAS: + // Your logic for eIDAS + return false; + default: + return $isLoggedIn; + } +}, 10, 2); + +add_filter('owc_idp_userdata', function (?UserData $userData, string $idp): ?UserData { + switch ($idp) { + case Idp::DIGID: + return new DigiDUserData([ + 'bsn' => '123456789', + ]); + case Idp::EHERKENNING: + return new eHerkenningUserData([ + 'kvk' => '987654321', + 'rsin' => '123456789', + 'vestigingsnummer' => '001', + 'bsn' => null, + ]); + case Idp::EIDAS: + return new eIDASUserData([ + 'bsn' => '555555555', + ]); + default: + return $userData; + } +}, 10, 2); +``` + +### Example: Getting User Data + +```php +use OWC\IdpUserData\DigiDSession; +use OWC\IdpUserData\DigiDUserData; + +if (DigiDSession::isLoggedIn()) { + $userData = DigiDSession::getUserData(); + if ($userData instanceof DigiDUserData) { + $bsn = $userData->getBsn(); + // ... + } +} +``` diff --git a/composer.json b/composer.json index e75daf2..d3a4f35 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "owc/idp-userdata", "type": "library", - "description": "Common interfaces for IDP userdata (DigiD, eHerkenning)", + "description": "Common userdata classes and session helpers for IDP userdata (DigiD, eHerkenning)", "authors": [ { "name": "Yard | Digital Agency", diff --git a/src/DigiDSession.php b/src/DigiDSession.php index 47be9cd..450e1d9 100644 --- a/src/DigiDSession.php +++ b/src/DigiDSession.php @@ -8,10 +8,10 @@ class DigiDSession extends IdpSession { protected static function get_idp(): string { - return 'digid'; + return Idp::DIGID; } - public static function getUserData(): ?DigiDUserDataInterface + public static function getUserData(): ?DigiDUserData { return parent::getUserData(); } diff --git a/src/DigiDUserData.php b/src/DigiDUserData.php new file mode 100644 index 0000000..bdc60d5 --- /dev/null +++ b/src/DigiDUserData.php @@ -0,0 +1,14 @@ +bsn; + } + +} \ No newline at end of file diff --git a/src/DigiDUserDataInterface.php b/src/DigiDUserDataInterface.php deleted file mode 100644 index 48f8fd8..0000000 --- a/src/DigiDUserDataInterface.php +++ /dev/null @@ -1,10 +0,0 @@ - $value) { + $this->$key = $value; + } + } +} \ No newline at end of file diff --git a/src/UserDataInterface.php b/src/UserDataInterface.php deleted file mode 100644 index a702e91..0000000 --- a/src/UserDataInterface.php +++ /dev/null @@ -1,9 +0,0 @@ -kvk; + } + + public function getBsn(): ?string + { + return $this->bsn; + } + + public function getRsin(): ?string { + return $this->rsin; + } + + public function getVestigingsnummer(): ?string { + return $this->vestigingsnummer; + } +} \ No newline at end of file diff --git a/src/eHerkenningUserDataInterface.php b/src/eHerkenningUserDataInterface.php deleted file mode 100644 index 9f4508f..0000000 --- a/src/eHerkenningUserDataInterface.php +++ /dev/null @@ -1,10 +0,0 @@ -bsn; + } +} diff --git a/src/eIDASUserDataInterface.php b/src/eIDASUserDataInterface.php deleted file mode 100644 index af608d4..0000000 --- a/src/eIDASUserDataInterface.php +++ /dev/null @@ -1,10 +0,0 @@ -