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)
+
+
+