From 34c15c775e95c4e8706e21ffdb4e5187444ff401 Mon Sep 17 00:00:00 2001 From: mindless Date: Tue, 24 Nov 2009 03:59:43 +0000 Subject: [PATCH] [FIXED HUDSON-1867] Add ability to delete users from Hudson git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@24009 71c3de6d-444a-0410-be80-ed276b4c234a --- core/src/main/java/hudson/model/User.java | 39 +++++++++++++++++++ .../resources/hudson/model/User/delete.jelly | 35 +++++++++++++++++ .../hudson/model/User/sidepanel.jelly | 7 +++- .../HudsonPrivateSecurityRealm/index.jelly | 7 +++- 4 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 core/src/main/resources/hudson/model/User/delete.jelly diff --git a/core/src/main/java/hudson/model/User.java b/core/src/main/java/hudson/model/User.java index 22aa5bb37a..5f302fe0c9 100644 --- a/core/src/main/java/hudson/model/User.java +++ b/core/src/main/java/hudson/model/User.java @@ -48,6 +48,7 @@ import org.kohsuke.stapler.export.ExportedBean; import org.apache.commons.io.filefilter.DirectoryFileFilter; import javax.servlet.ServletException; +import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.FileFilter; @@ -302,6 +303,7 @@ public class User extends AbstractModelObject implements AccessControlled, Savea } private static volatile long lastScanned; + /** * Gets all the users. */ @@ -406,6 +408,19 @@ public class User extends AbstractModelObject implements AccessControlled, Savea SaveableListener.fireOnChange(this, getConfigFile()); } + /** + * Deletes the data directory and removes this user from Hudson. + * + * @throws IOException + * if we fail to delete. + */ + public synchronized void delete() throws IOException { + synchronized (byName) { + byName.remove(id); + Util.deleteRecursive(new File(getRootDir(), id)); + } + } + /** * Exposed remote API. */ @@ -447,6 +462,22 @@ public class User extends AbstractModelObject implements AccessControlled, Savea rsp.sendRedirect("."); } + /** + * Deletes this user from Hudson. + */ + public void doDoDelete(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException { + requirePOST(); + checkPermission(Hudson.ADMINISTER); + if (id.equals(Hudson.getAuthentication().getName())) { + rsp.sendError(HttpServletResponse.SC_BAD_REQUEST, "Cannot delete self"); + return; + } + + delete(); + + rsp.sendRedirect2("../.."); + } + public void doRssAll( StaplerRequest req, StaplerResponse rsp ) throws IOException, ServletException { rss(req, rsp, " all builds", RunList.fromRuns(getBuilds())); } @@ -528,6 +559,14 @@ public class User extends AbstractModelObject implements AccessControlled, Savea return getACL().hasPermission(permission); } + /** + * With ADMINISTER permission, can delete users with persisted data but can't delete self. + */ + public boolean canDelete() { + return hasPermission(Hudson.ADMINISTER) && !id.equals(Hudson.getAuthentication().getName()) + && new File(getRootDir(), id).exists(); + } + public Object getDynamic(String token) { for (UserProperty property: getProperties().values()) { if (property instanceof Action) { diff --git a/core/src/main/resources/hudson/model/User/delete.jelly b/core/src/main/resources/hudson/model/User/delete.jelly new file mode 100644 index 0000000000..2b227b349d --- /dev/null +++ b/core/src/main/resources/hudson/model/User/delete.jelly @@ -0,0 +1,35 @@ + + + + + + +
+ ${%Are you sure about deleting the user from Hudson?} + + +
+
+
diff --git a/core/src/main/resources/hudson/model/User/sidepanel.jelly b/core/src/main/resources/hudson/model/User/sidepanel.jelly index 1c5230b838..ce3050a8af 100644 --- a/core/src/main/resources/hudson/model/User/sidepanel.jelly +++ b/core/src/main/resources/hudson/model/User/sidepanel.jelly @@ -33,8 +33,11 @@ THE SOFTWARE. - + + + + - \ No newline at end of file + diff --git a/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/index.jelly b/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/index.jelly index 1d92b01f24..77553dd122 100644 --- a/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/index.jelly +++ b/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/index.jelly @@ -39,7 +39,12 @@ THE SOFTWARE. ${user} - Setting + + Setting + + Delete + + -- GitLab