mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-07 22:15:51 +01:00
(refs #114)Remove user related data when user is removed.
This commit is contained in:
@@ -171,12 +171,12 @@ trait AccountManagementControllerBase extends ControllerBase with FileUploadCont
|
|||||||
|
|
||||||
protected def uniqueUserName: Constraint = new Constraint(){
|
protected def uniqueUserName: Constraint = new Constraint(){
|
||||||
override def validate(name: String, value: String, messages: Messages): Option[String] =
|
override def validate(name: String, value: String, messages: Messages): Option[String] =
|
||||||
getAccountByUserName(value).map { _ => "User already exists." }
|
getAccountByUserName(value, true).map { _ => "User already exists." }
|
||||||
}
|
}
|
||||||
|
|
||||||
protected def uniqueMailAddress(paramName: String = ""): Constraint = new Constraint(){
|
protected def uniqueMailAddress(paramName: String = ""): Constraint = new Constraint(){
|
||||||
override def validate(name: String, value: String, params: Map[String, String], messages: Messages): Option[String] =
|
override def validate(name: String, value: String, params: Map[String, String], messages: Messages): Option[String] =
|
||||||
getAccountByMailAddress(value)
|
getAccountByMailAddress(value, true)
|
||||||
.filter { x => if(paramName.isEmpty) true else Some(x.userName) != params.get(paramName) }
|
.filter { x => if(paramName.isEmpty) true else Some(x.userName) != params.get(paramName) }
|
||||||
.map { _ => "Mail address is already registered." }
|
.map { _ => "Mail address is already registered." }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import util.AdminAuthenticator
|
|||||||
import util.StringUtil._
|
import util.StringUtil._
|
||||||
import util.ControlUtil._
|
import util.ControlUtil._
|
||||||
import jp.sf.amateras.scalatra.forms._
|
import jp.sf.amateras.scalatra.forms._
|
||||||
|
import org.apache.commons.io.FileUtils
|
||||||
|
import util.Directory._
|
||||||
|
|
||||||
class UserManagementController extends UserManagementControllerBase
|
class UserManagementController extends UserManagementControllerBase
|
||||||
with AccountService with RepositoryService with AdminAuthenticator
|
with AccountService with RepositoryService with AdminAuthenticator
|
||||||
@@ -85,12 +87,25 @@ trait UserManagementControllerBase extends AccountManagementControllerBase {
|
|||||||
|
|
||||||
get("/admin/users/:userName/_edituser")(adminOnly {
|
get("/admin/users/:userName/_edituser")(adminOnly {
|
||||||
val userName = params("userName")
|
val userName = params("userName")
|
||||||
admin.users.html.user(getAccountByUserName(userName))
|
admin.users.html.user(getAccountByUserName(userName, true))
|
||||||
})
|
})
|
||||||
|
|
||||||
post("/admin/users/:name/_edituser", editUserForm)(adminOnly { form =>
|
post("/admin/users/:name/_edituser", editUserForm)(adminOnly { form =>
|
||||||
val userName = params("userName")
|
val userName = params("userName")
|
||||||
getAccountByUserName(userName).map { account =>
|
getAccountByUserName(userName, true).map { account =>
|
||||||
|
|
||||||
|
if(account.isRemoved == false && form.isRemoved == true){
|
||||||
|
// Remove repositories
|
||||||
|
getRepositoryNamesOfUser(userName).foreach { repositoryName =>
|
||||||
|
deleteRepository(userName, repositoryName)
|
||||||
|
FileUtils.deleteDirectory(getRepositoryDir(userName, repositoryName))
|
||||||
|
FileUtils.deleteDirectory(getWikiRepositoryDir(userName, repositoryName))
|
||||||
|
FileUtils.deleteDirectory(getTemporaryDir(userName, repositoryName))
|
||||||
|
}
|
||||||
|
// Remove from GROUP_MEMBER, COLLABORATOR and REPOSITORY
|
||||||
|
removeUserRelatedData(userName)
|
||||||
|
}
|
||||||
|
|
||||||
updateAccount(getAccountByUserName(userName).get.copy(
|
updateAccount(getAccountByUserName(userName).get.copy(
|
||||||
password = form.password.map(sha1).getOrElse(account.password),
|
password = form.password.map(sha1).getOrElse(account.password),
|
||||||
fullName = form.fullName,
|
fullName = form.fullName,
|
||||||
@@ -118,13 +133,13 @@ trait UserManagementControllerBase extends AccountManagementControllerBase {
|
|||||||
|
|
||||||
get("/admin/users/:groupName/_editgroup")(adminOnly {
|
get("/admin/users/:groupName/_editgroup")(adminOnly {
|
||||||
defining(params("groupName")){ groupName =>
|
defining(params("groupName")){ groupName =>
|
||||||
admin.users.html.group(getAccountByUserName(groupName), getGroupMembers(groupName))
|
admin.users.html.group(getAccountByUserName(groupName, true), getGroupMembers(groupName))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
post("/admin/users/:groupName/_editgroup", editGroupForm)(adminOnly { form =>
|
post("/admin/users/:groupName/_editgroup", editGroupForm)(adminOnly { form =>
|
||||||
defining(params("groupName"), form.memberNames.map(_.split(",").toList).getOrElse(Nil)){ case (groupName, memberNames) =>
|
defining(params("groupName"), form.memberNames.map(_.split(",").toList).getOrElse(Nil)){ case (groupName, memberNames) =>
|
||||||
getAccountByUserName(groupName).map { account =>
|
getAccountByUserName(groupName, true).map { account =>
|
||||||
updateGroup(groupName, form.url)
|
updateGroup(groupName, form.url)
|
||||||
updateGroupMembers(form.groupName, memberNames)
|
updateGroupMembers(form.groupName, memberNames)
|
||||||
|
|
||||||
|
|||||||
@@ -51,11 +51,11 @@ trait AccountService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def getAccountByUserName(userName: String): Option[Account] =
|
def getAccountByUserName(userName: String, includeRemoved: Boolean = false): Option[Account] =
|
||||||
Query(Accounts) filter(_.userName is userName.bind) firstOption
|
Query(Accounts) filter(t => (t.userName is userName.bind) && (t.removed is false.bind, !includeRemoved)) firstOption
|
||||||
|
|
||||||
def getAccountByMailAddress(mailAddress: String): Option[Account] =
|
def getAccountByMailAddress(mailAddress: String, includeRemoved: Boolean = false): Option[Account] =
|
||||||
Query(Accounts) filter(_.mailAddress is mailAddress.bind) firstOption
|
Query(Accounts) filter(t => (t.mailAddress is mailAddress.bind) && (t.removed is false.bind, !includeRemoved)) firstOption
|
||||||
|
|
||||||
def getAllUsers(includeRemoved: Boolean = true): List[Account] =
|
def getAllUsers(includeRemoved: Boolean = true): List[Account] =
|
||||||
if(includeRemoved){
|
if(includeRemoved){
|
||||||
@@ -139,6 +139,12 @@ trait AccountService {
|
|||||||
.map(_.groupName)
|
.map(_.groupName)
|
||||||
.list
|
.list
|
||||||
|
|
||||||
|
def removeUserRelatedData(userName: String): Unit = {
|
||||||
|
Query(GroupMembers).filter(_.userName is userName.bind).delete
|
||||||
|
Query(Collaborators).filter(_.collaboratorName is userName.bind).delete
|
||||||
|
Query(Repositories).filter(_.userName is userName.bind).delete
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
object AccountService extends AccountService
|
//object AccountService extends AccountService
|
||||||
|
|||||||
Reference in New Issue
Block a user