diff --git a/src/main/scala/app/AccountController.scala b/src/main/scala/app/AccountController.scala
index f89cb74..d35379b 100644
--- a/src/main/scala/app/AccountController.scala
+++ b/src/main/scala/app/AccountController.scala
@@ -11,6 +11,7 @@
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 @@
// 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 @@
_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 @@
}
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 @@
// 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 37d5e06..dc3543c 100644
--- a/src/main/scala/app/UserManagementController.scala
+++ b/src/main/scala/app/UserManagementController.scala
@@ -69,11 +69,11 @@
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 @@
}
})
- 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 2357f58..c57d0ce 100644
--- a/src/main/scala/service/AccountService.scala
+++ b/src/main/scala/service/AccountService.scala
@@ -129,11 +129,10 @@
}
}
- 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 76e09a9..9038ea5 100644
--- a/src/main/scala/service/RepositoryService.scala
+++ b/src/main/scala/service/RepositoryService.scala
@@ -204,7 +204,7 @@
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 0c56abf..f40af7b 100644
--- a/src/main/scala/util/Authenticator.scala
+++ b/src/main/scala/util/Authenticator.scala
@@ -40,8 +40,8 @@
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 @@
{
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 7afdbc3..4826352 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)
-
+
@@ -102,8 +102,8 @@
return confirm('Once you delete this group, there is no going back.\nAre you sure?');
});
- @members.map { case (userName, isManager) =>
- addMemberHTML('@userName', @isManager);
+ @members.map { member =>
+ addMemberHTML('@member.userName', @member.isManager);
}
function addMemberHTML(userName, isManager){
diff --git a/src/main/twirl/admin/users/group.scala.html b/src/main/twirl/admin/users/group.scala.html
index 5661d8e..37369aa 100644
--- a/src/main/twirl/admin/users/group.scala.html
+++ b/src/main/twirl/admin/users/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) "New Group" else "Update Group"){
@@ -38,7 +38,7 @@
@helper.html.account("memberName", 200)
-
+
@@ -97,8 +97,8 @@
return !(e.keyCode == 13);
});
- @members.map { case (userName, isManager) =>
- addMemberHTML('@userName', @isManager);
+ @members.map { member =>
+ addMemberHTML('@member.userName', @member.isManager);
}
function addMemberHTML(userName, isManager){
diff --git a/src/test/scala/service/AccountServiceServiceSpec.scala b/src/test/scala/service/AccountServiceServiceSpec.scala
deleted file mode 100644
index 2c307f1..0000000
--- a/src/test/scala/service/AccountServiceServiceSpec.scala
+++ /dev/null
@@ -1,78 +0,0 @@
-package service
-
-import org.specs2.mutable.Specification
-import java.util.Date
-
-class AccountServiceServiceSpec extends Specification with ServiceSpecBase {
-
- "AccountService" should {
- val RootMailAddress = "root@localhost"
-
- "getAllUsers" in { withTestDB{
- AccountService.getAllUsers() must be like{
- case List(model.Account("root", "root", RootMailAddress, _, true, _, _, _, None, None, false, false)) => ok
- }
- }}
-
- "getAccountByUserName" in { withTestDB{
- AccountService.getAccountByUserName("root") must beSome.like{
- case user => user.userName must_== "root"
- }
-
- AccountService.getAccountByUserName("invalid user name") must beNone
- }}
-
- "getAccountByMailAddress" in { withTestDB{
- AccountService.getAccountByMailAddress(RootMailAddress) must beSome
- }}
-
- "updateLastLoginDate" in { withTestDB{
- val root = "root"
- def user() =
- AccountService.getAccountByUserName(root).getOrElse(sys.error(s"user $root does not exists"))
-
- user().lastLoginDate must beNone
- val date1 = new Date
- AccountService.updateLastLoginDate(root)
- user().lastLoginDate must beSome.like{ case date =>
- date must be_>(date1)
- }
- val date2 = new Date
- Thread.sleep(1000)
- AccountService.updateLastLoginDate(root)
- user().lastLoginDate must beSome.like{ case date =>
- date must be_>(date2)
- }
- }}
-
- "updateAccount" in { withTestDB{
- val root = "root"
- def user() =
- AccountService.getAccountByUserName(root).getOrElse(sys.error(s"user $root does not exists"))
-
- val newAddress = "new mail address"
- AccountService.updateAccount(user().copy(mailAddress = newAddress))
- user().mailAddress must_== newAddress
- }}
-
- "group" in { withTestDB {
- val group1 = "group1"
- val user1 = "root"
- AccountService.createGroup(group1, None)
-
- AccountService.getGroupMembers(group1) must_== Nil
- AccountService.getGroupsByUserName(user1) must_== Nil
-
- AccountService.updateGroupMembers(group1, List((user1, true)))
-
- AccountService.getGroupMembers(group1) must_== List((user1, true))
- AccountService.getGroupsByUserName(user1) must_== List(group1)
-
- AccountService.updateGroupMembers(group1, Nil)
-
- AccountService.getGroupMembers(group1) must_== Nil
- AccountService.getGroupsByUserName(user1) must_== Nil
- }}
- }
-}
-
diff --git a/src/test/scala/service/AccountServiceSpec.scala b/src/test/scala/service/AccountServiceSpec.scala
new file mode 100644
index 0000000..344f8e3
--- /dev/null
+++ b/src/test/scala/service/AccountServiceSpec.scala
@@ -0,0 +1,79 @@
+package service
+
+import org.specs2.mutable.Specification
+import java.util.Date
+import model.GroupMember
+
+class AccountServiceSpec extends Specification with ServiceSpecBase {
+
+ "AccountService" should {
+ val RootMailAddress = "root@localhost"
+
+ "getAllUsers" in { withTestDB{
+ AccountService.getAllUsers() must be like{
+ case List(model.Account("root", "root", RootMailAddress, _, true, _, _, _, None, None, false, false)) => ok
+ }
+ }}
+
+ "getAccountByUserName" in { withTestDB{
+ AccountService.getAccountByUserName("root") must beSome.like{
+ case user => user.userName must_== "root"
+ }
+
+ AccountService.getAccountByUserName("invalid user name") must beNone
+ }}
+
+ "getAccountByMailAddress" in { withTestDB{
+ AccountService.getAccountByMailAddress(RootMailAddress) must beSome
+ }}
+
+ "updateLastLoginDate" in { withTestDB{
+ val root = "root"
+ def user() =
+ AccountService.getAccountByUserName(root).getOrElse(sys.error(s"user $root does not exists"))
+
+ user().lastLoginDate must beNone
+ val date1 = new Date
+ AccountService.updateLastLoginDate(root)
+ user().lastLoginDate must beSome.like{ case date =>
+ date must be_>(date1)
+ }
+ val date2 = new Date
+ Thread.sleep(1000)
+ AccountService.updateLastLoginDate(root)
+ user().lastLoginDate must beSome.like{ case date =>
+ date must be_>(date2)
+ }
+ }}
+
+ "updateAccount" in { withTestDB{
+ val root = "root"
+ def user() =
+ AccountService.getAccountByUserName(root).getOrElse(sys.error(s"user $root does not exists"))
+
+ val newAddress = "new mail address"
+ AccountService.updateAccount(user().copy(mailAddress = newAddress))
+ user().mailAddress must_== newAddress
+ }}
+
+ "group" in { withTestDB {
+ val group1 = "group1"
+ val user1 = "root"
+ AccountService.createGroup(group1, None)
+
+ AccountService.getGroupMembers(group1) must_== Nil
+ AccountService.getGroupsByUserName(user1) must_== Nil
+
+ AccountService.updateGroupMembers(group1, List((user1, true)))
+
+ AccountService.getGroupMembers(group1) must_== List(GroupMember(group1, user1, true))
+ AccountService.getGroupsByUserName(user1) must_== List(group1)
+
+ AccountService.updateGroupMembers(group1, Nil)
+
+ AccountService.getGroupMembers(group1) must_== Nil
+ AccountService.getGroupsByUserName(user1) must_== Nil
+ }}
+ }
+}
+