Skip to content

Commit 8848fa8

Browse files
committed
Allow rewrite of UID for SSO
Signed-off-by: Ingo Koinzer <ingo@koinzer.net>
1 parent f7f2813 commit 8848fa8

4 files changed

Lines changed: 34 additions & 2 deletions

File tree

lib/Controller/SAMLController.php

Lines changed: 6 additions & 0 deletions
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

Lines changed: 7 additions & 1 deletion
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

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

lib/UserBackend.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,14 @@ private function formatUserData($attributes) {
484484
$uidMapping = $this->config->getAppValue('user_saml', $prefix . 'general-uid_mapping');
485485
$result['formatted']['uid'] = '';
486486
if (isset($attributes[$uidMapping])) {
487-
$result['formatted']['uid'] = $attributes[$uidMapping][0];
487+
$uid = $attributes[$uidMapping][0];
488+
$uidRewritePattern = $this->config->getAppValue('user_saml', $prefix . 'general-uid_rewrite_pattern');
489+
$uidRewriteReplacement = $this->config->getAppValue('user_saml', $prefix . 'general-uid_rewrite_replacement');
490+
if (!empty($uidRewritePattern) && !empty($uidRewriteReplacement)) {
491+
$uid = preg_replace($uidRewritePattern, $uidRewriteReplacement, $uid);
492+
}
493+
494+
$result['formatted']['uid'] = $uid;
488495
}
489496

490497
return $result;
@@ -506,6 +513,11 @@ public function getCurrentUserId() {
506513
} else {
507514
$uid = $samlData[$uidMapping];
508515
}
516+
$uidRewritePattern = $this->config->getAppValue('user_saml', $prefix . 'general-uid_rewrite_pattern');
517+
$uidRewriteReplacement = $this->config->getAppValue('user_saml', $prefix . 'general-uid_rewrite_replacement');
518+
if (!empty($uidRewritePattern) && !empty($uidRewriteReplacement)) {
519+
$uid = preg_replace($uidRewritePattern, $uidRewriteReplacement, $uid);
520+
}
509521
if($this->userExists($uid)) {
510522
$this->session->set('last-password-confirm', strtotime('+4 year', time()));
511523
return $uid;

0 commit comments

Comments
 (0)