Skip to content

Commit 4a08270

Browse files
committed
Allow rewrite of UID for SSO
Signed-off-by: Ingo Koinzer <[email protected]>
1 parent 020d57d commit 4a08270

File tree

4 files changed

+34
-2
lines changed

4 files changed

+34
-2
lines changed

lib/Controller/SAMLController.php

+6
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,12 @@ private function autoprovisionIfPossible(array $auth) {
113113
$uid = $auth[$uidMapping];
114114
}
115115

116+
$uidRewritePattern = $this->config->getAppValue('user_saml', $prefix . 'general-uid_rewrite_pattern');
117+
$uidRewriteReplacement = $this->config->getAppValue('user_saml', $prefix . 'general-uid_rewrite_replacement');
118+
if (!empty($uidRewritePattern) && !empty($uidRewriteReplacement)) {
119+
$uid = preg_replace($uidRewritePattern, $uidRewriteReplacement, $uid);
120+
}
121+
116122
// make sure that a valid UID is given
117123
if (empty($uid)) {
118124
$this->logger->error('Uid "' . $uid . '" is not a valid uid please check your attribute mapping', ['app' => $this->appName]);

lib/DavPlugin.php

+7-1
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,14 @@ public function beforeMethod(RequestInterface $request, ResponseInterface $respo
5858
!$this->session->exists('user_saml.samlUserData')
5959
) {
6060
$uidMapping = $this->config->getAppValue('user_saml', 'general-uid_mapping');
61+
$uidRewritePattern = $this->config->getAppValue('user_saml', 'general-uid_rewrite_pattern');
62+
$uidRewriteReplacement = $this->config->getAppValue('user_saml', 'general-uid_rewrite_replacement');
6163
if (isset($this->auth[$uidMapping])) {
62-
$this->session->set(Auth::DAV_AUTHENTICATED, $this->auth[$uidMapping]);
64+
$uid = $this->auth[$uidMapping];
65+
if (!empty($uidRewritePattern) && !empty($uidRewriteReplacement)) {
66+
$uid = preg_replace($uidRewritePattern, $uidRewriteReplacement, $uid);
67+
}
68+
$this->session->set(Auth::DAV_AUTHENTICATED, $uid);
6369
$this->session->set('user_saml.samlUserData', $this->auth);
6470
}
6571
}

lib/Settings/Admin.php

+8
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,14 @@ public function getForm() {
9393
'type' => 'line',
9494
'required' => true,
9595
],
96+
'uid_rewrite_pattern' => [
97+
'text' => $this->l10n->t('UID rewrite pattern RegEx (PHP preg_replace pattern)'),
98+
'type' => 'line',
99+
],
100+
'uid_rewrite_replacement' => [
101+
'text' => $this->l10n->t('UID rewrite replacement (PHP preg_replace pattern)'),
102+
'type' => 'line',
103+
],
96104
'require_provisioned_account' => [
97105
'text' => $this->l10n->t('Only allow authentication if an account exists on some other backend. (e.g. LDAP)'),
98106
'type' => 'checkbox',

lib/UserBackend.php

+13-1
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,14 @@ private function formatUserData($attributes) {
493493
$uidMapping = $this->config->getAppValue('user_saml', $prefix . 'general-uid_mapping');
494494
$result['formatted']['uid'] = '';
495495
if (isset($attributes[$uidMapping])) {
496-
$result['formatted']['uid'] = $attributes[$uidMapping][0];
496+
$uid = $attributes[$uidMapping][0];
497+
$uidRewritePattern = $this->config->getAppValue('user_saml', $prefix . 'general-uid_rewrite_pattern');
498+
$uidRewriteReplacement = $this->config->getAppValue('user_saml', $prefix . 'general-uid_rewrite_replacement');
499+
if (!empty($uidRewritePattern) && !empty($uidRewriteReplacement)) {
500+
$uid = preg_replace($uidRewritePattern, $uidRewriteReplacement, $uid);
501+
}
502+
503+
$result['formatted']['uid'] = $uid;
497504
}
498505

499506
return $result;
@@ -515,6 +522,11 @@ public function getCurrentUserId() {
515522
} else {
516523
$uid = $samlData[$uidMapping];
517524
}
525+
$uidRewritePattern = $this->config->getAppValue('user_saml', $prefix . 'general-uid_rewrite_pattern');
526+
$uidRewriteReplacement = $this->config->getAppValue('user_saml', $prefix . 'general-uid_rewrite_replacement');
527+
if (!empty($uidRewritePattern) && !empty($uidRewriteReplacement)) {
528+
$uid = preg_replace($uidRewritePattern, $uidRewriteReplacement, $uid);
529+
}
518530
if($this->userExists($uid)) {
519531
$this->session->set('last-password-confirm', time());
520532
return $uid;

0 commit comments

Comments
 (0)