aboutsummaryrefslogtreecommitdiff
path: root/Timeline/Controllers/AdminUserController.cs
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2019-04-18 21:23:21 +0800
committercrupest <crupest@outlook.com>2019-04-18 21:23:21 +0800
commitb86c8cf5130d21ac56e733640cecd08945d30e6d (patch)
tree5b5a3b8d524cfc5f81b5af98de83d5070df4b68c /Timeline/Controllers/AdminUserController.cs
parent1cb92b8f2a98005b793c00e0191903c0792d540a (diff)
downloadtimeline-b86c8cf5130d21ac56e733640cecd08945d30e6d.tar.gz
timeline-b86c8cf5130d21ac56e733640cecd08945d30e6d.tar.bz2
timeline-b86c8cf5130d21ac56e733640cecd08945d30e6d.zip
Add user management REST api.
Diffstat (limited to 'Timeline/Controllers/AdminUserController.cs')
-rw-r--r--Timeline/Controllers/AdminUserController.cs83
1 files changed, 83 insertions, 0 deletions
diff --git a/Timeline/Controllers/AdminUserController.cs b/Timeline/Controllers/AdminUserController.cs
new file mode 100644
index 00000000..7cc8c150
--- /dev/null
+++ b/Timeline/Controllers/AdminUserController.cs
@@ -0,0 +1,83 @@
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Threading.Tasks;
+using Timeline.Entities;
+using Timeline.Services;
+
+namespace Timeline.Controllers
+{
+ [Route("admin")]
+ [Authorize(Roles = "admin")]
+ public class AdminUserController : Controller
+ {
+ private readonly IUserService _userService;
+
+ public AdminUserController(IUserService userService)
+ {
+ _userService = userService;
+ }
+
+ [HttpGet("users")]
+ public async Task<ActionResult<UserInfo[]>> List()
+ {
+ return Ok(await _userService.ListUsers());
+ }
+
+ [HttpGet("user/{username}")]
+ public async Task<IActionResult> Get([FromRoute] string username)
+ {
+ var user = await _userService.GetUser(username);
+ if (user == null)
+ {
+ return NotFound();
+ }
+ return Ok(user);
+ }
+
+ [HttpPut("user/{username}")]
+ public async Task<IActionResult> Put([FromBody] AdminUserEntityRequest request, [FromRoute] string username)
+ {
+ var result = await _userService.PutUser(username, request.Password, request.Roles);
+ switch (result)
+ {
+ case PutUserResult.Created:
+ return CreatedAtAction("Get", new { username }, AdminUserPutResponse.Created);
+ case PutUserResult.Modified:
+ return Ok(AdminUserPutResponse.Modified);
+ default:
+ throw new Exception("Unreachable code.");
+ }
+ }
+
+ [HttpPatch("user/{username}")]
+ public async Task<IActionResult> Patch([FromBody] AdminUserEntityRequest request, [FromRoute] string username)
+ {
+ var result = await _userService.PatchUser(username, request.Password, request.Roles);
+ switch (result)
+ {
+ case PatchUserResult.Success:
+ return Ok();
+ case PatchUserResult.NotExists:
+ return NotFound();
+ default:
+ throw new Exception("Unreachable code.");
+ }
+ }
+
+ [HttpDelete("user/{username}")]
+ public async Task<ActionResult<AdminUserDeleteResponse>> Delete([FromRoute] string username)
+ {
+ var result = await _userService.DeleteUser(username);
+ switch (result)
+ {
+ case DeleteUserResult.Success:
+ return Ok(AdminUserDeleteResponse.Success);
+ case DeleteUserResult.NotExists:
+ return Ok(AdminUserDeleteResponse.NotExists);
+ default:
+ throw new Exception("Uncreachable code.");
+ }
+ }
+ }
+}