diff --git a/src/main/scala/gitbucket/core/api/UpdateAUser.scala b/src/main/scala/gitbucket/core/api/UpdateAUser.scala new file mode 100644 index 0000000..e584a7d --- /dev/null +++ b/src/main/scala/gitbucket/core/api/UpdateAUser.scala @@ -0,0 +1,11 @@ +package gitbucket.core.api + +case class UpdateAUser( + name: String, + email: String, + blog: String, + company: String, + location: String, + hireable: Boolean, + bio: String +) diff --git a/src/main/scala/gitbucket/core/controller/api/ApiUserControllerBase.scala b/src/main/scala/gitbucket/core/controller/api/ApiUserControllerBase.scala index dc708d9..eef2c68 100644 --- a/src/main/scala/gitbucket/core/controller/api/ApiUserControllerBase.scala +++ b/src/main/scala/gitbucket/core/controller/api/ApiUserControllerBase.scala @@ -1,12 +1,13 @@ package gitbucket.core.controller.api -import gitbucket.core.api.{ApiUser, CreateAUser, JsonFormat} +import gitbucket.core.api.{ApiUser, CreateAUser, JsonFormat, UpdateAUser} import gitbucket.core.controller.ControllerBase import gitbucket.core.service.{AccountService, RepositoryService} -import gitbucket.core.util.AdminAuthenticator +import gitbucket.core.util.{AdminAuthenticator, UsersAuthenticator} import gitbucket.core.util.Implicits._ +import org.scalatra.NoContent trait ApiUserControllerBase extends ControllerBase { - self: RepositoryService with AccountService with AdminAuthenticator => + self: RepositoryService with AccountService with AdminAuthenticator with UsersAuthenticator => /** * i. Get a single user @@ -33,6 +34,18 @@ * iii. Update the authenticated user * https://developer.github.com/v3/users/#update-the-authenticated-user */ + patch("/api/v3/user")(usersOnly{ + (for{ + data <- extractFromJsonBody[UpdateAUser] + } yield { + val updatedAccount = context.loginAccount.get.copy( + mailAddress = data.email, + description = Some(data.bio) + ) + updateAccount(updatedAccount) + JsonFormat(ApiUser(updatedAccount)) + }) + }) /* * iv. Get contextual information about a user @@ -43,9 +56,12 @@ * v. Get all users * https://developer.github.com/v3/users/#get-all-users */ + get("/api/v3/users") { + JsonFormat(getAllUsers(false, false).map(a => ApiUser(a))) + } /* - * ghe: i. Create a new use + * ghe: i. Create a new user * https://developer.github.com/enterprise/2.14/v3/enterprise-admin/users/#create-a-new-user */ post("/api/v3/admin/users")(adminOnly { @@ -69,8 +85,30 @@ * ghe: vii. Suspend a user * https://developer.github.com/enterprise/2.14/v3/enterprise-admin/users/#suspend-a-user */ + put("/api/v3/users/:userName/suspended")(adminOnly{ + val userName = params("userName") + getAccountByUserName(userName) match { + case Some(targetAccount) => + removeUserRelatedData(userName) + updateAccount(targetAccount.copy(isRemoved = true)) + NoContent() + case None => + NotFound() + } + }) + /* - * ghe: vii. Unsuspend a user - * https://developer.github.com/enterprise/2.14/v3/enterprise-admin/users/#unsuspend-a-user - */ + * ghe: vii. Unsuspend a user + * https://developer.github.com/enterprise/2.14/v3/enterprise-admin/users/#unsuspend-a-user + */ + delete("/api/v3/users/:userName/suspended")(adminOnly{ + val userName = params("userName") + getAccountByUserName(userName) match { + case Some(targetAccount) => + updateAccount(targetAccount.copy(isRemoved = false)) + NoContent() + case None => + NotFound() + } + }) }