Skip to content

Commit 9010a2d

Browse files
committed
5124: Added some logging
1 parent f267d5f commit 9010a2d

File tree

8 files changed

+103
-34
lines changed

8 files changed

+103
-34
lines changed

web/profiles/custom/os2loop/modules/os2loop_cura_login/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ drush os2loop-cura-login:get-login-url --help
3838
```
3939

4040
``` shell name=drush-get-login-url
41-
drush os2loop-cura-login:get-login-url [email protected] --get=jwt --destination=/user \
41+
drush os2loop-cura-login:get-login-url az000000 --get=jwt --destination=/user \
4242
--algorithm="$(drush config:get --format string os2loop_cura_login.settings cura.signing_algorithm --include-overridden)" \
4343
--secret="$(drush config:get --format string os2loop_cura_login.settings cura.signing_secret --include-overridden)"
4444
```

web/profiles/custom/os2loop/modules/os2loop_cura_login/os2loop_cura_login.info.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ package: "OS2Loop"
55
core_version_requirement: ^10 || ^11
66
dependencies:
77
- drupal:user
8+
- openid_connect:openid_connect
89

910
configure: os2loop_cura_login.settings

web/profiles/custom/os2loop/modules/os2loop_cura_login/src/Controller/Os2loopCuraLoginController.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ public function __construct(
4444
#[Autowire(service: 'logger.channel.os2loop_cura_login')]
4545
private readonly LoggerInterface $logger,
4646
) {
47+
$this->curaHelper->setController($this);
48+
$this->idPHelper->setController($this);
49+
$this->userHelper->setController($this);
4750
}
4851

4952
/**
@@ -107,7 +110,7 @@ public function start(Request $request, ?string $jwt): Response {
107110

108111
$this->debug('@debug', [
109112
'@debug' => json_encode([
110-
'user' => $user,
113+
'user' => $user->toArray(),
111114
]),
112115
]);
113116

@@ -227,7 +230,7 @@ public function log($level, \Stringable|string $message, array $context = []): v
227230
LogLevel::DEBUG => RfcLogLevel::DEBUG,
228231
];
229232
$rfcLogLevel = $levels[$level] ?? RfcLogLevel::ERROR;
230-
if ((int) $this->settings->getLogLevel() >= $rfcLogLevel) {
233+
if ($this->settings->getLogLevel() >= $rfcLogLevel) {
231234
$this->logger->log($level, $message, $context);
232235
}
233236
}

web/profiles/custom/os2loop/modules/os2loop_cura_login/src/CuraHelper.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33
namespace Drupal\os2loop_cura_login;
44

55
use Drupal\os2loop_cura_login\Settings\Cura;
6+
use Drupal\os2loop_cura_login\Trait\ControllerAwareTrait;
67
use Firebase\JWT\JWT;
78
use Firebase\JWT\Key;
89

910
/**
1011
* Cura helper.
1112
*/
1213
final class CuraHelper {
14+
use ControllerAwareTrait;
15+
1316
/**
1417
* The settings.
1518
*/

web/profiles/custom/os2loop/modules/os2loop_cura_login/src/IdPHelper.php

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33
namespace Drupal\os2loop_cura_login;
44

55
use Drupal\os2loop_cura_login\Settings\IdP;
6+
use Drupal\os2loop_cura_login\Trait\ControllerAwareTrait;
67

78
/**
89
* IdP helper.
910
*/
1011
final class IdPHelper {
12+
use ControllerAwareTrait;
13+
1114
/**
1215
* The settings.
1316
*/
@@ -23,31 +26,44 @@ public function __construct(
2326
* Get user info from userinfo endpoint.
2427
*/
2528
public function fetchUserinfo(string $username): array {
26-
$query = [
27-
$this->settings->getUsernameClaim() => $username,
28-
];
29+
// @todo Call some API here …
30+
// $query = [
31+
// $this->settings->getUsernameClaim() => $username,
32+
// ];
2933
// $result = fetch($query)
30-
return [
34+
// Mock up some user data matching claims from OIDC login.
35+
$result = [
3136
// Drupal user fields.
37+
'upn' => $username,
3238
'name' => $username,
33-
'mail' => $username . '@cura.example.com',
34-
35-
// OS2Lloop fields
36-
// 'os2loop_user_address' => '',
37-
// 'os2loop_user_areas_of_expertise' => '',
38-
// 'os2loop_user_biography' => '',
39-
// 'os2loop_user_city' => '',
40-
// 'os2loop_user_external_list' => '',.
41-
'os2loop_user_family_name' => 'Cura',
42-
'os2loop_user_given_name' => 'User',
43-
// 'os2loop_user_image' => '',
44-
// 'os2loop_user_internal_list' => '',
45-
// 'os2loop_user_job_title' => '',
46-
// 'os2loop_user_phone_number' => '',
47-
// 'os2loop_user_place' => '',
48-
// 'os2loop_user_postal_code' => '',
49-
// 'os2loop_user_professions' => '',
39+
'email' => filter_var($username, FILTER_VALIDATE_EMAIL) ? $username : $username . '@cura.example.com',
40+
'samaccountname' => $username,
41+
'given_name' => 'Cura',
42+
'family_name' => 'User',
43+
'groups' => [
44+
'GG-Rolle-B2C-Loop-AuthenticatedUser-Prod',
45+
// 'GG-Rolle-B2C-Loop-Administrator-Prod',
46+
// 'GG-Rolle-B2C-Loop-Administrator-Test',
47+
// 'GG-Rolle-B2C-Loop-DocumentAuthor-Prod',
48+
// 'GG-Rolle-B2C-Loop-DocumentAuthor-Test',
49+
// 'GG-Rolle-B2C-Loop-DocumentCollectionEditor-Prod',
50+
// 'GG-Rolle-B2C-Loop-DocumentCollectionEditor-Test',
51+
// 'GG-Rolle-B2C-Loop-DocumentationCoordinator-Prod',
52+
// 'GG-Rolle-B2C-Loop-DocumentationCoordinator-Test',
53+
// 'GG-Rolle-B2C-Loop-ExternalSourcesEditor-Prod',
54+
// 'GG-Rolle-B2C-Loop-ExternalSourcesEditor-Test',
55+
// 'GG-Rolle-B2C-Loop-Manager-Prod',
56+
// 'GG-Rolle-B2C-Loop-Manager-Test',
57+
// 'GG-Rolle-B2C-Loop-PostAuthor-Prod',
58+
// 'GG-Rolle-B2C-Loop-PostAuthor-Test',
59+
// 'GG-Rolle-B2C-Loop-ReadOnly-Prod',
60+
// 'GG-Rolle-B2C-Loop-ReadOnly-Test',
61+
// 'GG-Rolle-B2C-Loop-UserAdministrator-Prod',
62+
// 'GG-Rolle-B2C-Loop-UserAdministrator-Test',
63+
],
5064
];
65+
66+
return $result;
5167
}
5268

5369
}

web/profiles/custom/os2loop/modules/os2loop_cura_login/src/Settings.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public function getIdpSettings() {
6868
* Get log level.
6969
*/
7070
public function getLogLevel() {
71-
return (int) $this->config->get(self::SETTING_LOG_LEVEL) ?? RfcLogLevel::ERROR;
71+
return (int) ($this->config->get(self::NAME)[self::SETTING_LOG_LEVEL] ?? RfcLogLevel::ERROR);
7272
}
7373

7474
/**
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
namespace Drupal\os2loop_cura_login\Trait;
4+
5+
use Drupal\os2loop_cura_login\Controller\Os2loopCuraLoginController;
6+
use Psr\Log\LoggerTrait;
7+
8+
/**
9+
* Controller aware trait to let services use the logger.
10+
*/
11+
trait ControllerAwareTrait {
12+
use LoggerTrait;
13+
14+
/**
15+
* The controller.
16+
*/
17+
private Os2loopCuraLoginController $controller;
18+
19+
/**
20+
* Set controller.
21+
*/
22+
public function setController(Os2loopCuraLoginController $controller) {
23+
$this->controller = $controller;
24+
}
25+
26+
/**
27+
* {@inheritdoc}
28+
*/
29+
public function log($level, \Stringable|string $message, array $context = []): void {
30+
if ($this->controller) {
31+
$this->controller->log($level, $message, $context);
32+
}
33+
}
34+
35+
}

web/profiles/custom/os2loop/modules/os2loop_cura_login/src/UserHelper.php

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,26 @@
33
namespace Drupal\os2loop_cura_login;
44

55
use Drupal\Core\Entity\EntityTypeManagerInterface;
6+
use Drupal\openid_connect\OpenIDConnect;
7+
use Drupal\os2loop_cura_login\Trait\ControllerAwareTrait;
68
use Drupal\user\UserInterface;
79
use Drupal\user\UserStorageInterface;
10+
use Symfony\Component\DependencyInjection\Attribute\Autowire;
811

912
/**
1013
* User helper.
1114
*/
1215
final class UserHelper {
16+
use ControllerAwareTrait;
17+
1318
/**
1419
* The user storage.
1520
*/
1621
private readonly UserStorageInterface $userStorage;
1722

1823
public function __construct(
24+
#[Autowire(service: 'openid_connect.openid_connect')]
25+
private readonly OpenIDConnect $openidConnect,
1926
EntityTypeManagerInterface $entityTypeManager,
2027
) {
2128
$this->userStorage = $entityTypeManager->getStorage('user');
@@ -39,17 +46,21 @@ public function ensureUser(string $username, array $userinfo): UserInterface {
3946
$user = $this->userStorage->create();
4047
}
4148

42-
foreach ($userinfo as $field => $value) {
43-
$currentValue = $user->get($field);
44-
if ($currentValue !== $value) {
45-
$user->set($field, $value);
46-
}
49+
// Make sure that the user is active.
50+
$user->activate();
51+
// saveUserinfo below needs a user id (uid).
52+
if ($user->isNew()) {
53+
$user->setUsername($username);
54+
$user->save();
4755
}
4856

49-
// Make sure that the user is active.
50-
$user
51-
->activate()
52-
->save();
57+
// We piggyback on the OpenId Connect module to set user fields and roles.
58+
if ($this->openidConnect->saveUserinfo($user, ['userinfo' => $userinfo])) {
59+
$this->info('Userinfo saved on user @user (@username)', ['@user' => $user->label(), '@username' => $username]);
60+
}
61+
else {
62+
$this->error('Error saving info on user @user (@username)', ['@user' => $user->label(), '@username' => $username]);
63+
}
5364

5465
return $user;
5566
}

0 commit comments

Comments
 (0)