diff --git a/src/main/scala/app/AccountController.scala b/src/main/scala/app/AccountController.scala index f89cb7424..d35379b88 100644 --- a/src/main/scala/app/AccountController.scala +++ b/src/main/scala/app/AccountController.scala @@ -11,6 +11,7 @@ import org.scalatra.i18n.Messages import org.eclipse.jgit.api.Git import org.eclipse.jgit.lib.{FileMode, Constants} import org.eclipse.jgit.dircache.DirCache +import model.GroupMember class AccountController extends AccountControllerBase with AccountService with RepositoryService with ActivityService with WikiService with LabelsService @@ -94,8 +95,8 @@ trait AccountControllerBase extends AccountManagementControllerBase { // Members case "members" if(account.isGroupAccount) => { val members = getGroupMembers(account.userName) - _root_.account.html.members(account, members.map(_._1), - context.loginAccount.exists(x => members.exists { case (userName, isManager) => userName == x.userName && isManager })) + _root_.account.html.members(account, members.map(_.userName), + context.loginAccount.exists(x => members.exists { member => member.userName == x.userName && member.isManager })) } // Repositories @@ -104,7 +105,7 @@ trait AccountControllerBase extends AccountManagementControllerBase { _root_.account.html.repositories(account, if(account.isGroupAccount) Nil else getGroupsByUserName(userName), getVisibleRepositories(context.loginAccount, baseUrl, Some(userName)), - context.loginAccount.exists(x => members.exists { case (userName, isManager) => userName == x.userName && isManager })) + context.loginAccount.exists(x => members.exists { member => member.userName == x.userName && member.isManager })) } } } getOrElse NotFound @@ -182,7 +183,7 @@ trait AccountControllerBase extends AccountManagementControllerBase { } get("/groups/new")(usersOnly { - account.html.group(None, List((context.loginAccount.get.userName, true))) + account.html.group(None, List(GroupMember("", context.loginAccount.get.userName, true))) }) post("/groups/new", newGroupForm)(usersOnly { form => @@ -265,8 +266,8 @@ trait AccountControllerBase extends AccountManagementControllerBase { // Add collaborators for group repository if(ownerAccount.isGroupAccount){ - getGroupMembers(form.owner).foreach { case (userName, isManager) => - addCollaborator(form.owner, form.name, userName) + getGroupMembers(form.owner).foreach { member => + addCollaborator(form.owner, form.name, member.userName) } } diff --git a/src/main/scala/app/UserManagementController.scala b/src/main/scala/app/UserManagementController.scala index 37d5e0631..dc3543c00 100644 --- a/src/main/scala/app/UserManagementController.scala +++ b/src/main/scala/app/UserManagementController.scala @@ -69,11 +69,11 @@ trait UserManagementControllerBase extends AccountManagementControllerBase { get("/admin/users")(adminOnly { val includeRemoved = params.get("includeRemoved").map(_.toBoolean).getOrElse(false) - val users = getAllUsers(includeRemoved) - - val members = users.collect { case account if(account.isGroupAccount) => - account.userName -> getGroupMembers(account.userName).map(_._1) + val users = getAllUsers(includeRemoved) + val members = users.collect { case account if(account.isGroupAccount) => + account.userName -> getGroupMembers(account.userName).map(_.userName) }.toMap + admin.users.html.list(users, members, includeRemoved) }) @@ -181,9 +181,10 @@ trait UserManagementControllerBase extends AccountManagementControllerBase { } }) - post("/admin/users/_usercheck")(adminOnly { + // TODO Move to other generic controller? + post("/admin/users/_usercheck"){ getAccountByUserName(params("userName")).isDefined - }) + } private def members: Constraint = new Constraint(){ override def validate(name: String, value: String, messages: Messages): Option[String] = { diff --git a/src/main/scala/service/AccountService.scala b/src/main/scala/service/AccountService.scala index 2357f58b9..c57d0ce06 100644 --- a/src/main/scala/service/AccountService.scala +++ b/src/main/scala/service/AccountService.scala @@ -129,11 +129,10 @@ trait AccountService { } } - def getGroupMembers(groupName: String): List[(String, Boolean)] = + def getGroupMembers(groupName: String): List[GroupMember] = Query(GroupMembers) .filter(_.groupName is groupName.bind) .sortBy(_.userName) - .map(m => m.userName ~ m.isManager) .list def getGroupsByUserName(userName: String): List[String] = diff --git a/src/main/scala/service/RepositoryService.scala b/src/main/scala/service/RepositoryService.scala index 76e09a949..9038ea54d 100644 --- a/src/main/scala/service/RepositoryService.scala +++ b/src/main/scala/service/RepositoryService.scala @@ -204,7 +204,7 @@ trait RepositoryService { self: AccountService => private def getRepositoryManagers(userName: String): Seq[String] = if(getAccountByUserName(userName).exists(_.isGroupAccount)){ - getGroupMembers(userName).filter(_._2).map(_._1) + getGroupMembers(userName).collect { case x if(x.isManager) => x.userName } } else { Seq(userName) } diff --git a/src/main/scala/util/Authenticator.scala b/src/main/scala/util/Authenticator.scala index 0c56abff6..f40af7bcc 100644 --- a/src/main/scala/util/Authenticator.scala +++ b/src/main/scala/util/Authenticator.scala @@ -40,8 +40,8 @@ trait OwnerAuthenticator { self: ControllerBase with RepositoryService with Acco context.loginAccount match { case Some(x) if(x.isAdmin) => action(repository) case Some(x) if(repository.owner == x.userName) => action(repository) - case Some(x) if(getGroupMembers(repository.owner).exists { - case (userName, isManager) => userName == x.userName && isManager == true + case Some(x) if(getGroupMembers(repository.owner).exists { member => + member.userName == x.userName && member.isManager == true }) => action(repository) case _ => Unauthorized() } @@ -170,7 +170,9 @@ trait GroupManagerAuthenticator { self: ControllerBase with AccountService => { defining(request.paths){ paths => context.loginAccount match { - case Some(x) if(getGroupMembers(paths(0)).exists { case (userName, isManager) => userName == x.userName && isManager }) => action + case Some(x) if(getGroupMembers(paths(0)).exists { member => + member.userName == x.userName && member.isManager + }) => action case _ => Unauthorized() } } diff --git a/src/main/twirl/account/group.scala.html b/src/main/twirl/account/group.scala.html index 7afdbc338..482635229 100644 --- a/src/main/twirl/account/group.scala.html +++ b/src/main/twirl/account/group.scala.html @@ -1,4 +1,4 @@ -@(account: Option[model.Account], members: List[(String, Boolean)])(implicit context: app.Context) +@(account: Option[model.Account], members: List[model.GroupMember])(implicit context: app.Context) @import context._ @import view.helpers._ @html.main(if(account.isEmpty) "Create group" else "Edit group"){ @@ -32,7 +32,7 @@ @helper.html.account("memberName", 200) - +