From 0aa8cf8606600d628b2c491e52e9e3c901f9cc80 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 25 Apr 2012 19:55:41 -0400
Subject: [PATCH] Allow user services to control editing of display name and email address

---
 src/com/gitblit/LdapUserService.java |   63 ++++++++++++++++++++++---------
 1 files changed, 45 insertions(+), 18 deletions(-)

diff --git a/src/com/gitblit/LdapUserService.java b/src/com/gitblit/LdapUserService.java
index 80a966d..78b5f99 100644
--- a/src/com/gitblit/LdapUserService.java
+++ b/src/com/gitblit/LdapUserService.java
@@ -106,6 +106,29 @@
 	}
 	
 	/**
+	 * If no displayName pattern is defined then Gitblit can manage the display name.
+	 *
+	 * @return true if Gitblit can manage the user display name
+	 * @since 1.0.0
+	 */
+	@Override
+	public boolean supportsDisplayNameChanges() {
+		return StringUtils.isEmpty(settings.getString(Keys.realm.ldap.displayName, ""));
+	}
+	
+	/**
+	 * If no email pattern is defined then Gitblit can manage the email address.
+	 *
+	 * @return true if Gitblit can manage the user email address
+	 * @since 1.0.0
+	 */
+	@Override
+	public boolean supportsEmailAddressChanges() {
+		return StringUtils.isEmpty(settings.getString(Keys.realm.ldap.email, ""));
+	}
+
+	
+	/**
 	 * If the LDAP server will maintain team memberships then LdapUserService
 	 * will not allow team membership changes.  In this scenario all team
 	 * changes must be made on the LDAP server by the LDAP administrator.
@@ -194,27 +217,31 @@
 		// Don't want visibility into the real password, make up a dummy
 		user.password = "StoredInLDAP";
 		
-		// Get Attributes for full name / email
-		String displayName = settings.getString(Keys.realm.ldap.displayName, "displayName");
-		String email = settings.getString(Keys.realm.ldap.email, "email");
+		// Get full name Attribute
+		String displayName = settings.getString(Keys.realm.ldap.displayName, "");		
+		if (!StringUtils.isEmpty(displayName)) {
+			// Replace embedded ${} with attributes
+			if (displayName.contains("${")) {
+				for (Attribute userAttribute : userEntry.getAttributes())
+					displayName = StringUtils.replace(displayName, "${" + userAttribute.getName() + "}", userAttribute.getValue());
 
-		// Replace embedded ${} with attributes
-		if (displayName.contains("${")) {
-			for (Attribute userAttribute : userEntry.getAttributes())
-				displayName = StringUtils.replace(displayName, "${" + userAttribute.getName() + "}", userAttribute.getValue());
-			
-			user.displayName = displayName;
-		} else {
-			user.displayName = userEntry.getAttribute(displayName).getValue();
+				user.displayName = displayName;
+			} else {
+				user.displayName = userEntry.getAttribute(displayName).getValue();
+			}
 		}
 		
-		if (email.contains("${")) {
-			for (Attribute userAttribute : userEntry.getAttributes())
-				email = StringUtils.replace(email, "${" + userAttribute.getName() + "}", userAttribute.getValue());
-			
-			user.emailAddress = email;
-		} else {
-			user.emailAddress = userEntry.getAttribute(email).getValue();
+		// Get email address Attribute
+		String email = settings.getString(Keys.realm.ldap.email, "");
+		if (!StringUtils.isEmpty(email)) {
+			if (email.contains("${")) {
+				for (Attribute userAttribute : userEntry.getAttributes())
+					email = StringUtils.replace(email, "${" + userAttribute.getName() + "}", userAttribute.getValue());
+
+				user.emailAddress = email;
+			} else {
+				user.emailAddress = userEntry.getAttribute(email).getValue();
+			}
 		}
 	}
 

--
Gitblit v1.9.1