From 5be8582bfdbb200837c204b99360e02c17ca2fa8 Mon Sep 17 00:00:00 2001
From: DenisSinelnikov <142215442+DenisSinelnikov@users.noreply.github.com>
Date: Thu, 25 Jul 2024 15:22:31 +0400
Subject: [PATCH] CB-5415. Added full name header for RP (#2795)
* CB-5415. Added full name header for RP
* CB-5415. Refactor after review
* CB-5415. Refactor after review
---------
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
---
.../src/io/cloudbeaver/service/auth/RPConstants.java | 1 +
.../src/io/cloudbeaver/service/auth/RPSessionHandler.java | 4 ++++
.../cloudbeaver/service/auth/ReverseProxyConfigurator.java | 1 +
server/bundles/io.cloudbeaver.service.security/plugin.xml | 1 +
.../src/io/cloudbeaver/auth/provider/rp/RPAuthProvider.java | 6 ++++++
5 files changed, 13 insertions(+)
diff --git a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/RPConstants.java b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/RPConstants.java
index ec933d3ca2..0341ab59a7 100644
--- a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/RPConstants.java
+++ b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/RPConstants.java
@@ -22,6 +22,7 @@ interface RPConstants {
String PARAM_TEAM = "team-header";
String PARAM_FIRST_NAME = "first-name-header";
String PARAM_LAST_NAME = "last-name-header";
+ String PARAM_FULL_NAME = "full-name-header";
String PARAM_ROLE_NAME = "role-header";
String PARAM_TEAM_DELIMITER = "team-delimiter";
}
diff --git a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/RPSessionHandler.java b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/RPSessionHandler.java
index e2bb777865..62277e7e89 100644
--- a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/RPSessionHandler.java
+++ b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/RPSessionHandler.java
@@ -97,6 +97,7 @@ public class RPSessionHandler implements DBWSessionHandler {
String role = request.getHeader(resolveParam(paramConfigMap.get(RPConstants.PARAM_ROLE_NAME), RPAuthProvider.X_ROLE_TE));
String firstName = request.getHeader(resolveParam(paramConfigMap.get(RPConstants.PARAM_FIRST_NAME), RPAuthProvider.X_FIRST_NAME));
String lastName = request.getHeader(resolveParam(paramConfigMap.get(RPConstants.PARAM_LAST_NAME), RPAuthProvider.X_LAST_NAME));
+ String fullName = request.getHeader(resolveParam(paramConfigMap.get(RPConstants.PARAM_FULL_NAME), RPAuthProvider.X_FULL_NAME));
String logoutUrl = Objects.requireNonNull(configuration).getParameter(RPConstants.PARAM_LOGOUT_URL);
String teamDelimiter = JSONUtils.getString(configuration.getParameters(),
RPConstants.PARAM_TEAM_DELIMITER, "\\|");
@@ -111,6 +112,9 @@ public class RPSessionHandler implements DBWSessionHandler {
if (!CommonUtils.isEmpty(lastName)) {
credentials.put(SMStandardMeta.META_LAST_NAME, lastName);
}
+ if (!CommonUtils.isEmpty(fullName)) {
+ credentials.put("fullName", fullName);
+ }
if (CommonUtils.isNotEmpty(logoutUrl)) {
credentials.put("logoutUrl", logoutUrl);
}
diff --git a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/ReverseProxyConfigurator.java b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/ReverseProxyConfigurator.java
index ee415c0ffc..430ff16a77 100644
--- a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/ReverseProxyConfigurator.java
+++ b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/ReverseProxyConfigurator.java
@@ -77,6 +77,7 @@ public class ReverseProxyConfigurator implements DBWServiceServerConfigurator {
parameters.put(RPConstants.PARAM_TEAM, RPAuthProvider.X_TEAM);
parameters.put(RPConstants.PARAM_FIRST_NAME, RPAuthProvider.X_FIRST_NAME);
parameters.put(RPConstants.PARAM_LAST_NAME, RPAuthProvider.X_LAST_NAME);
+ parameters.put(RPConstants.PARAM_FULL_NAME, RPAuthProvider.X_FULL_NAME);
smReverseProxyProviderConfiguration.setParameters(parameters);
authApplication.getAuthConfiguration().addAuthProviderConfiguration(smReverseProxyProviderConfiguration );
try {
diff --git a/server/bundles/io.cloudbeaver.service.security/plugin.xml b/server/bundles/io.cloudbeaver.service.security/plugin.xml
index 2a079301e4..e9ef310594 100644
--- a/server/bundles/io.cloudbeaver.service.security/plugin.xml
+++ b/server/bundles/io.cloudbeaver.service.security/plugin.xml
@@ -34,6 +34,7 @@
+
diff --git a/server/bundles/io.cloudbeaver.service.security/src/io/cloudbeaver/auth/provider/rp/RPAuthProvider.java b/server/bundles/io.cloudbeaver.service.security/src/io/cloudbeaver/auth/provider/rp/RPAuthProvider.java
index 14106ec3cb..0c895857d8 100644
--- a/server/bundles/io.cloudbeaver.service.security/src/io/cloudbeaver/auth/provider/rp/RPAuthProvider.java
+++ b/server/bundles/io.cloudbeaver.service.security/src/io/cloudbeaver/auth/provider/rp/RPAuthProvider.java
@@ -49,6 +49,7 @@ public class RPAuthProvider implements SMAuthProviderExternal, SMSign
public static final String X_ROLE_TE = "X-Role-TE";
public static final String X_FIRST_NAME = "X-First-name";
public static final String X_LAST_NAME = "X-Last-name";
+ public static final String X_FULL_NAME = "X-Full-name";
public static final String AUTH_PROVIDER = "reverseProxy";
public static final String LOGOUT_URL = "logout-url";
@@ -82,6 +83,7 @@ public class RPAuthProvider implements SMAuthProviderExternal, SMSign
Map userMeta = new HashMap<>();
String firstName = JSONUtils.getString(authParameters, SMStandardMeta.META_FIRST_NAME);
String lastName = JSONUtils.getString(authParameters, SMStandardMeta.META_LAST_NAME);
+ String fullName = JSONUtils.getString(authParameters, "fullName");
if (CommonUtils.isNotEmpty(firstName)) {
nameBuilder.append(firstName);
userMeta.put(SMStandardMeta.META_FIRST_NAME, firstName);
@@ -92,6 +94,10 @@ public class RPAuthProvider implements SMAuthProviderExternal, SMSign
userMeta.put(SMStandardMeta.META_LAST_NAME, lastName);
}
+ if (CommonUtils.isNotEmpty(fullName)) {
+ nameBuilder = new StringBuilder(fullName);
+ }
+
return new DBWUserIdentity(
userName,
nameBuilder.length() > 0 ? nameBuilder.toString() : userName,