From f5ca1655278d8b34a402120864a5a5c628b1c31d Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 10 Apr 2014 19:01:30 -0400
Subject: [PATCH] Rename SSH key store on user rename

---
 src/main/java/com/gitblit/manager/GitblitManager.java          |    3 +++
 src/main/java/com/gitblit/transport/ssh/IPublicKeyManager.java |   11 +++++++++++
 2 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/gitblit/manager/GitblitManager.java b/src/main/java/com/gitblit/manager/GitblitManager.java
index 5a7d15a..e3b6cf7 100644
--- a/src/main/java/com/gitblit/manager/GitblitManager.java
+++ b/src/main/java/com/gitblit/manager/GitblitManager.java
@@ -338,6 +338,9 @@
 					repositoryManager.updateRepositoryModel(model.name, model, false);
 				}
 			}
+
+			// rename the user's ssh public keystore
+			getPublicKeyManager().renameUser(username, user.username);
 		}
 		if (!userManager.updateUserModel(username, user)) {
 			throw new GitBlitException("Failed to update user!");
diff --git a/src/main/java/com/gitblit/transport/ssh/IPublicKeyManager.java b/src/main/java/com/gitblit/transport/ssh/IPublicKeyManager.java
index 0dbee63..1e74b2f 100644
--- a/src/main/java/com/gitblit/transport/ssh/IPublicKeyManager.java
+++ b/src/main/java/com/gitblit/transport/ssh/IPublicKeyManager.java
@@ -79,6 +79,17 @@
 		return null;
 	}
 
+	public final void renameUser(String oldName, String newName) {
+		List<SshKey> keys = getKeys(oldName);
+		if (keys == null || keys.isEmpty()) {
+			return;
+		}
+		removeAllKeys(oldName);
+		for (SshKey key : keys) {
+			addKey(newName, key);
+		}
+	}
+
 	protected abstract boolean isStale(String username);
 
 	protected abstract List<SshKey> getKeysImpl(String username);

--
Gitblit v1.9.1