diff --git a/BTCPayServer/BTCPayServer.csproj b/BTCPayServer/BTCPayServer.csproj index 5da02bdcf..94138345a 100644 --- a/BTCPayServer/BTCPayServer.csproj +++ b/BTCPayServer/BTCPayServer.csproj @@ -2,7 +2,7 @@ Exe netcoreapp2.0 - 1.0.1.57 + 1.0.1.58 NU1701,CA1816,CA1308,CA1810,CA2208 diff --git a/BTCPayServer/Controllers/ServerController.cs b/BTCPayServer/Controllers/ServerController.cs index 76f38f25d..649e8fd2c 100644 --- a/BTCPayServer/Controllers/ServerController.cs +++ b/BTCPayServer/Controllers/ServerController.cs @@ -43,6 +43,50 @@ namespace BTCPayServer.Controllers return View(users); } + [Route("server/users/{userId}")] + public new async Task User(string userId) + { + var user = await _UserManager.FindByIdAsync(userId); + if (user == null) + return NotFound(); + var roles = await _UserManager.GetRolesAsync(user); + var userVM = new UserViewModel(); + userVM.Id = user.Id; + userVM.IsAdmin = IsAdmin(roles); + return View(userVM); + } + + private static bool IsAdmin(IList roles) + { + return roles.Contains(Roles.ServerAdmin, StringComparer.Ordinal); + } + + [Route("server/users/{userId}")] + [HttpPost] + public new async Task User(string userId, UserViewModel viewModel) + { + var user = await _UserManager.FindByIdAsync(userId); + if (user == null) + return NotFound(); + var roles = await _UserManager.GetRolesAsync(user); + var isAdmin = IsAdmin(roles); + bool updated = false; + + if(isAdmin != viewModel.IsAdmin) + { + if (viewModel.IsAdmin) + await _UserManager.AddToRoleAsync(user, Roles.ServerAdmin); + else + await _UserManager.RemoveFromRoleAsync(user, Roles.ServerAdmin); + updated = true; + } + if(updated) + { + viewModel.StatusMessage = "User successfully updated"; + } + return View(viewModel); + } + [Route("server/users/{userId}/delete")] public async Task DeleteUser(string userId) diff --git a/BTCPayServer/Models/ServerViewModels/UserViewModel.cs b/BTCPayServer/Models/ServerViewModels/UserViewModel.cs new file mode 100644 index 000000000..eddce628f --- /dev/null +++ b/BTCPayServer/Models/ServerViewModels/UserViewModel.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; + +namespace BTCPayServer.Models.ServerViewModels +{ + public class UserViewModel + { + public string Id { get; set; } + public string Email { get; set; } + [Display(Name = "Is admin")] + public bool IsAdmin { get; set; } + public string StatusMessage { get; set; } + } +} diff --git a/BTCPayServer/Properties/launchSettings.json b/BTCPayServer/Properties/launchSettings.json index f192356af..9fc74619b 100644 --- a/BTCPayServer/Properties/launchSettings.json +++ b/BTCPayServer/Properties/launchSettings.json @@ -13,7 +13,7 @@ "BTCPAY_BTCLIGHTNING": "http://api-token:foiewnccewuify@127.0.0.1:54938/", "BTCPAY_POSTGRES": "User ID=postgres;Host=127.0.0.1;Port=39372;Database=btcpayserver" }, - "applicationUrl": "http://localhost:14142/" + "applicationUrl": "http://127.0.0.1:14142/" } } } diff --git a/BTCPayServer/Views/Server/ListUsers.cshtml b/BTCPayServer/Views/Server/ListUsers.cshtml index c62c6a0cb..44694ffe5 100644 --- a/BTCPayServer/Views/Server/ListUsers.cshtml +++ b/BTCPayServer/Views/Server/ListUsers.cshtml @@ -23,7 +23,8 @@ @user.Name @user.Email - Remove - } + Modify - Remove + + } diff --git a/BTCPayServer/Views/Server/User.cshtml b/BTCPayServer/Views/Server/User.cshtml new file mode 100644 index 000000000..56a1d8d05 --- /dev/null +++ b/BTCPayServer/Views/Server/User.cshtml @@ -0,0 +1,22 @@ +@model UserViewModel +@{ + ViewData["Title"] = Model.Email; + ViewData.AddActivePage(ServerNavPages.Users); +} + + +

@ViewData["Title"]

+@Html.Partial("_StatusMessage", Model.StatusMessage) + + +
+
+
+
+ + +
+ +
+
+