diff --git a/src/main/scala/ScalatraBootstrap.scala b/src/main/scala/ScalatraBootstrap.scala index ab91570..323a9a2 100644 --- a/src/main/scala/ScalatraBootstrap.scala +++ b/src/main/scala/ScalatraBootstrap.scala @@ -6,6 +6,7 @@ override def init(context: ServletContext) { context.mount(new IndexController, "/") context.mount(new SignInController, "/*") + context.mount(new UsersController, "/*") context.mount(new WikiController, "/*") context.mount(new CreateRepositoryController, "/*") context.mount(new RepositoryViewerController, "/*") diff --git a/src/main/scala/app/UsersController.scala b/src/main/scala/app/UsersController.scala index ddd5c95..22332ea 100644 --- a/src/main/scala/app/UsersController.scala +++ b/src/main/scala/app/UsersController.scala @@ -1,9 +1,59 @@ package app -class UsersController extends ControllerBase { +import model._ +import service._ +import jp.sf.amateras.scalatra.forms._ - get("/"){ - +class UsersController extends UsersControllerBase with AccountService + +trait UsersControllerBase extends ControllerBase { self: AccountService => + + case class NewUserForm(userName: String, password: String, mailAddress: String, userType: Int, url: Option[String]) + + val newForm = mapping( + "userName" -> trim(label("Username" , text(required, maxlength(100), unique))), + "password" -> trim(label("Password" , text(required, maxlength(100)))), + "mailAddress" -> trim(label("Mail Address" , text(required, maxlength(100)))), + "userType" -> trim(label("User Type" , number())), + "url" -> trim(label("URL" , optional(text(maxlength(200))))) + )(NewUserForm.apply) + + + + get("/admin/users"){ + admin.html.userlist(getAllUsers()) } + get("/admin/users/_new"){ + admin.html.useredit(None) + } + + post("/admin/users/_new", newForm){ form => + val currentDate = new java.sql.Date(System.currentTimeMillis) + createAccount(Account( + userName = form.userName, + password = form.password, + mailAddress = form.mailAddress, + userType = form.userType, + url = form.url, + registeredDate = currentDate, + updatedDate = currentDate, + lastLoginDate = None)) + + redirect("/admin/users") + } + +// get("/admin/users/:name/_edit"){ +// +// } +// +// post("/admin/users/:name/_edit"){ +// +// } + + def unique: Constraint = new Constraint(){ + def validate(name: String, value: String): Option[String] = + getAccountByUserName(value).map { _ => "User already exists." } + } + } \ No newline at end of file diff --git a/src/main/scala/service/AccountService.scala b/src/main/scala/service/AccountService.scala index 45ee379..f3321e2 100644 --- a/src/main/scala/service/AccountService.scala +++ b/src/main/scala/service/AccountService.scala @@ -8,6 +8,11 @@ def getAccountByUserName(userName: String): Option[Account] = Query(Accounts) filter(_.userName is userName.bind) firstOption + + def getAllUsers(): List[Account] = + Query(Accounts) sortBy(_.userName) list + + def createAccount(account: Account): Unit = Accounts.* insert account } diff --git a/src/main/twirl/admin/useredit.scala.html b/src/main/twirl/admin/useredit.scala.html new file mode 100644 index 0000000..52dd242 --- /dev/null +++ b/src/main/twirl/admin/useredit.scala.html @@ -0,0 +1,38 @@ +@(account: Option[model.Account])(implicit context: app.Context) +@import context._ +@html.main("New User"){ +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ +
+
+} \ No newline at end of file diff --git a/src/main/twirl/admin/userlist.scala.html b/src/main/twirl/admin/userlist.scala.html new file mode 100644 index 0000000..c2f50ea --- /dev/null +++ b/src/main/twirl/admin/userlist.scala.html @@ -0,0 +1,29 @@ +@(users: List[model.Account])(implicit context: app.Context) +@import context._ +@html.main("Manage Users"){ +
+ New User +
+ + + + + + + + + + + @users.map { account => + + + + + + + + + + } +
UsernameMail AddressTypeURLRegisteredUpdatedLast Login
@account.userName@account.mailAddress@account.userType@account.url@account.registeredDate@account.updatedDate@account.lastLoginDate
+} \ No newline at end of file