feat: extended oauth2 user info and refactored authenticator

This commit is contained in:
Björn Fromme
2025-12-12 19:57:34 +01:00
parent 6315fbd0f7
commit 42f17db542
7 changed files with 75 additions and 40 deletions
+1 -5
View File
@@ -14,10 +14,6 @@ class CrmAttributes
{
public ?array $selectionGroups = null;
public ?array $crmActions = null;
public bool $admin = false;
public bool $manager = false;
public bool $houseManager = false;
public bool $teamer = false;
public ?string $hotelCode = null;
public array $hotelCodes = [];
public array $roles = [];
}
+4 -1
View File
@@ -50,6 +50,7 @@ class PersonalData
public Communication $communication;
public array $roles = [];
public array $hotelCodes = [];
public function __construct()
{
@@ -135,12 +136,13 @@ class PersonalData
'title' => $this->title,
'salutation' => $this->salutation,
'gender' => $this->gender,
'date_of_birth' => $this->dateOfBirth?->format('Y-m-d'),
'nationality' => $this->nationality,
'address' => [
'street' => $this->address->street,
'postcode' => $this->address->postCode,
'city' => $this->address->city,
'disctrict' => $this->address->district,
'district' => $this->address->district,
'country' => $this->address->country,
],
'communication' => [
@@ -149,6 +151,7 @@ class PersonalData
'phone' => $this->communication->phone,
'newsletter' => $this->communication->newsletter,
],
'hotel_codes' => $this->hotelCodes,
'height' => $this->height,
'weight' => $this->weight,
'shoe_size' => $this->shoeSize,
@@ -16,13 +16,14 @@ class CrmAttributesResponseParser
private const BPN_CRM_ID_ADMIN = 1292;
private const BPN_CRM_ID_MANAGER = 1293;
private const BPN_CRM_ID_TEAMER = 1070;
private const BPN_DEFAULT_HOTEL_CODE = 'SSL';
public function parse(Crawler $result): CrmAttributes
{
$groups = [];
$actions = [];
$roles = [];
$hotelCode = null;
$hotelCodes = [];
$result
->filterXPath('//selektionsmerkmale/selektionsgruppe')
@@ -35,7 +36,7 @@ class CrmAttributesResponseParser
$node
->filterXPath('//selektion')
->each(function (Crawler $node) use (&$attributes, &$roles, &$hotelCode) {
->each(function (Crawler $node) use (&$attributes, &$roles, &$hotelCodes) {
$attribute = new CrmSelection();
$attribute->id = (int) $node->attr('id');
$attribute->label = $node->attr('bezeichnung');
@@ -44,10 +45,11 @@ class CrmAttributesResponseParser
if (1 === preg_match('/^Hausleitung ([A-Z0-9]+)$/', $attribute->label, $matches) && true === $attribute->selected) {
$roles[] = 'ROLE_HOUSE_MANAGER';
$hotelCode = $matches[1];
$hotelCodes[] = $matches[1];
}
if (static::BPN_CRM_ID_ADMIN === $attribute->id && true === $attribute->selected) {
$roles[] = 'ROLE_ADMIN';
$roles[] = 'ROLE_HOUSE_MANAGER';
}
if (static::BPN_CRM_ID_MANAGER === $attribute->id && true === $attribute->selected) {
$roles[] = 'ROLE_MANAGER';
@@ -65,6 +67,13 @@ class CrmAttributesResponseParser
})
;
$roles = array_unique($roles);
// Assign default role if none could be resolved
if (0 === count($roles)) {
$roles = ['ROLE_CUSTOMER'];
}
$result
->filterXPath('//crmaktionen/crmaktion')
->each(function (Crawler $node) use (&$actions) {
@@ -80,15 +89,15 @@ class CrmAttributesResponseParser
})
;
if (true === in_array('ROLE_ADMIN', $roles, true)) {
$hotelCodes[] = static::BPN_DEFAULT_HOTEL_CODE;
}
$response = new CrmAttributes();
$response->selectionGroups = $groups;
$response->crmActions = $actions;
$response->roles = $roles;
$response->admin = in_array('ROLE_ADMIN', $roles);
$response->manager = in_array('ROLE_MANAGER', $roles);
$response->houseManager = in_array('ROLE_HOUSE_MANAGER', $roles);
$response->teamer = in_array('ROLE_TEAMER', $roles);
$response->hotelCode = $hotelCode;
$response->hotelCodes = $hotelCodes;
return $response;
}