From 23a3c7f96063f27fc72f2bae37ca7d7082abb841 Mon Sep 17 00:00:00 2001 From: Petri Pyy Date: Fri, 22 Feb 2019 11:01:41 +0200 Subject: [PATCH] Implement creation of group via api --- .../gitbucket/core/api/CreateAGroup.scala | 8 ++++++++ .../api/ApiOrganizationControllerBase.scala | 19 ++++++++++++++++--- .../core/service/AccountService.scala | 7 +++++-- 3 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 src/main/scala/gitbucket/core/api/CreateAGroup.scala diff --git a/src/main/scala/gitbucket/core/api/CreateAGroup.scala b/src/main/scala/gitbucket/core/api/CreateAGroup.scala new file mode 100644 index 000000000..742d4bc9c --- /dev/null +++ b/src/main/scala/gitbucket/core/api/CreateAGroup.scala @@ -0,0 +1,8 @@ +package gitbucket.core.api + +case class CreateAGroup( + login: String, + admin: String, + profile_name: Option[String], + url: Option[String] +) diff --git a/src/main/scala/gitbucket/core/controller/api/ApiOrganizationControllerBase.scala b/src/main/scala/gitbucket/core/controller/api/ApiOrganizationControllerBase.scala index 85ca93cde..7c6375390 100644 --- a/src/main/scala/gitbucket/core/controller/api/ApiOrganizationControllerBase.scala +++ b/src/main/scala/gitbucket/core/controller/api/ApiOrganizationControllerBase.scala @@ -1,12 +1,12 @@ package gitbucket.core.controller.api -import gitbucket.core.api.{ApiGroup, ApiRepository, ApiUser, JsonFormat} +import gitbucket.core.api.{ApiGroup, CreateAGroup, ApiRepository, ApiUser, JsonFormat} import gitbucket.core.controller.ControllerBase import gitbucket.core.service.{AccountService, RepositoryService} import gitbucket.core.util.Implicits._ -import gitbucket.core.util.UsersAuthenticator +import gitbucket.core.util.{AdminAuthenticator, UsersAuthenticator} trait ApiOrganizationControllerBase extends ControllerBase { - self: RepositoryService with AccountService with UsersAuthenticator => + self: RepositoryService with AccountService with AdminAuthenticator with UsersAuthenticator => /* * i. List your organizations @@ -51,6 +51,19 @@ trait ApiOrganizationControllerBase extends ControllerBase { * ghe: i. Create an organization * https://developer.github.com/enterprise/2.14/v3/enterprise-admin/orgs/#create-an-organization */ + post("/api/v3/admin/organizations")(adminOnly { + for { + data <- extractFromJsonBody[CreateAGroup] + } yield { + val group = createGroup( + data.login, + data.profile_name, + data.url + ) + updateGroupMembers(data.login, List(data.admin -> true)) + JsonFormat(ApiGroup(group)) + } + }) /* * ghe: ii. Rename an organization diff --git a/src/main/scala/gitbucket/core/service/AccountService.scala b/src/main/scala/gitbucket/core/service/AccountService.scala index 151edb070..bc35262eb 100644 --- a/src/main/scala/gitbucket/core/service/AccountService.scala +++ b/src/main/scala/gitbucket/core/service/AccountService.scala @@ -240,8 +240,8 @@ trait AccountService { def updateLastLoginDate(userName: String)(implicit s: Session): Unit = Accounts.filter(_.userName === userName.bind).map(_.lastLoginDate).update(currentDate) - def createGroup(groupName: String, description: Option[String], url: Option[String])(implicit s: Session): Unit = - Accounts insert Account( + def createGroup(groupName: String, description: Option[String], url: Option[String])(implicit s: Session): Account = { + val group = Account( userName = groupName, password = "", fullName = groupName, @@ -256,6 +256,9 @@ trait AccountService { isRemoved = false, description = description ) + Accounts insert group + group + } def updateGroup(groupName: String, description: Option[String], url: Option[String], removed: Boolean)( implicit s: Session