1
0
mirror of https://github.com/bitwarden/server.git synced 2025-02-01 23:31:41 +01:00

user edit

This commit is contained in:
Kyle Spearrin 2018-03-22 15:50:56 -04:00
parent 6ecaaff94d
commit b011b4e970
7 changed files with 244 additions and 33 deletions

View File

@ -69,5 +69,16 @@ namespace Bit.Admin.Controllers
await _organizationRepository.ReplaceAsync(organization);
return RedirectToAction("Edit", new { id });
}
public async Task<IActionResult> Delete(Guid id)
{
var organization = await _organizationRepository.GetByIdAsync(id);
if(organization != null)
{
await _organizationRepository.DeleteAsync(organization);
}
return RedirectToAction("Index");
}
}
}

View File

@ -41,5 +41,41 @@ namespace Bit.Admin.Controllers
Count = count
});
}
public async Task<IActionResult> Edit(Guid id)
{
var user = await _userRepository.GetByIdAsync(id);
if(user == null)
{
return RedirectToAction("Index");
}
return View(new UserEditModel(user));
}
[HttpPost]
public async Task<IActionResult> Edit(Guid id, UserEditModel model)
{
var user = await _userRepository.GetByIdAsync(id);
if(user == null)
{
return RedirectToAction("Index");
}
model.ToUser(user);
await _userRepository.ReplaceAsync(user);
return RedirectToAction("Edit", new { id });
}
public async Task<IActionResult> Delete(Guid id)
{
var user = await _userRepository.GetByIdAsync(id);
if(user != null)
{
await _userRepository.DeleteAsync(user);
}
return RedirectToAction("Index");
}
}
}

View File

@ -0,0 +1,65 @@
using System;
using System.ComponentModel.DataAnnotations;
using Bit.Core.Models.Table;
namespace Bit.Admin.Models
{
public class UserEditModel
{
public UserEditModel() { }
public UserEditModel(User user)
{
User = user;
Name = user.Name;
Email = user.Email;
EmailVerified = user.EmailVerified;
Premium = user.Premium;
MaxStorageGb = user.MaxStorageGb;
Gateway = user.Gateway;
GatewayCustomerId = user.GatewayCustomerId;
GatewaySubscriptionId = user.GatewaySubscriptionId;
LicenseKey = user.LicenseKey;
PremiumExpirationDate = user.PremiumExpirationDate;
}
public User User { get; set; }
[Display(Name = "Name")]
public string Name { get; set; }
[Required]
[Display(Name = "Email")]
public string Email { get; set; }
[Display(Name = "Email Verified")]
public bool EmailVerified { get; set; }
[Display(Name = "Premium")]
public bool Premium { get; set; }
[Display(Name = "Max. Storage GB")]
public short? MaxStorageGb { get; set; }
[Display(Name = "Gateway")]
public Core.Enums.GatewayType? Gateway { get; set; }
[Display(Name = "Gateway Customer Id")]
public string GatewayCustomerId { get; set; }
[Display(Name = "Gateway Subscription Id")]
public string GatewaySubscriptionId { get; set; }
[Display(Name = "License Key")]
public string LicenseKey { get; set; }
[Display(Name = "Premium Expiration Date")]
public DateTime? PremiumExpirationDate { get; set; }
public User ToUser(User existingUser)
{
existingUser.Name = Name;
existingUser.Email = Email;
existingUser.EmailVerified = EmailVerified;
existingUser.Premium = Premium;
existingUser.MaxStorageGb = MaxStorageGb;
existingUser.Gateway = Gateway;
existingUser.GatewayCustomerId = GatewayCustomerId;
existingUser.GatewaySubscriptionId = GatewaySubscriptionId;
existingUser.LicenseKey = LicenseKey;
existingUser.PremiumExpirationDate = PremiumExpirationDate;
return existingUser;
}
}
}

View File

@ -8,7 +8,7 @@
<form method="post">
<h2>General</h2>
<div class="row">
<div class="col">
<div class="col-sm">
<div class="form-group">
<label asp-for="Name"></label>
<input type="text" class="form-control" asp-for="Name">
@ -21,13 +21,13 @@
</div>
<h2>Business Information</h2>
<div class="row">
<div class="col">
<div class="col-sm">
<div class="form-group">
<label asp-for="BusinessName"></label>
<input type="text" class="form-control" asp-for="BusinessName">
</div>
</div>
<div class="col">
<div class="col-sm">
<div class="form-group">
<label asp-for="BusinessTaxNumber"></label>
<input type="text" class="form-control" asp-for="BusinessTaxNumber">
@ -35,13 +35,13 @@
</div>
</div>
<div class="row">
<div class="col">
<div class="col-sm">
<div class="form-group">
<label asp-for="BusinessAddress1"></label>
<input type="text" class="form-control" asp-for="BusinessAddress1">
</div>
</div>
<div class="col">
<div class="col-sm">
<div class="form-group">
<label asp-for="BusinessAddress2"></label>
<input type="text" class="form-control" asp-for="BusinessAddress2">
@ -49,13 +49,13 @@
</div>
</div>
<div class="row">
<div class="col">
<div class="col-sm">
<div class="form-group">
<label asp-for="BusinessAddress3"></label>
<input type="text" class="form-control" asp-for="BusinessAddress3">
</div>
</div>
<div class="col">
<div class="col-sm">
<div class="form-group">
<label asp-for="BusinessCountry"></label>
<select asp-for="BusinessCountry" class="form-control">
@ -316,14 +316,14 @@
</div>
<h2>Plan</h2>
<div class="row">
<div class="col">
<div class="col-sm">
<div class="form-group">
<label asp-for="PlanType"></label>
<select class="form-control" asp-for="PlanType"
asp-items="Html.GetEnumSelectList<Bit.Core.Enums.PlanType>()"></select>
</div>
</div>
<div class="col">
<div class="col-sm">
<div class="form-group">
<label asp-for="Plan"></label>
<input type="text" class="form-control" asp-for="Plan">
@ -331,19 +331,19 @@
</div>
</div>
<div class="row">
<div class="col">
<div class="col-sm">
<div class="form-group">
<label asp-for="Seats"></label>
<input type="number" class="form-control" asp-for="Seats" min="1">
</div>
</div>
<div class="col">
<div class="col-sm">
<div class="form-group">
<label asp-for="MaxCollections"></label>
<input type="number" class="form-control" asp-for="MaxCollections" min="1">
</div>
</div>
<div class="col">
<div class="col-sm">
<div class="form-group">
<label asp-for="MaxStorageGb"></label>
<input type="number" class="form-control" asp-for="MaxStorageGb" min="1">
@ -375,15 +375,30 @@
<input type="checkbox" class="form-check-input" asp-for="UsersGetPremium">
<label class="form-check-label" asp-for="UsersGetPremium"></label>
</div>
<h2>Licensing</h2>
<div class="row">
<div class="col-sm">
<div class="form-group">
<label asp-for="LicenseKey"></label>
<input type="text" class="form-control" asp-for="LicenseKey">
</div>
</div>
<div class="col-sm">
<div class="form-group">
<label asp-for="ExpirationDate"></label>
<input type="datetime-local" class="form-control" asp-for="ExpirationDate">
</div>
</div>
</div>
<h2>Billing</h2>
<div class="row">
<div class="col">
<div class="col-sm">
<div class="form-group">
<label asp-for="BillingEmail"></label>
<input type="email" class="form-control" asp-for="BillingEmail">
</div>
</div>
<div class="col">
<div class="col-sm">
<div class="form-group">
<div class="form-group">
<label asp-for="Gateway"></label>
@ -396,33 +411,24 @@
</div>
</div>
<div class="row">
<div class="col">
<div class="col-sm">
<div class="form-group">
<label asp-for="GatewayCustomerId"></label>
<input type="text" class="form-control" asp-for="GatewayCustomerId">
</div>
</div>
<div class="col">
<div class="col-sm">
<div class="form-group">
<label asp-for="GatewaySubscriptionId"></label>
<input type="text" class="form-control" asp-for="GatewaySubscriptionId">
</div>
</div>
</div>
<h2>Licensing</h2>
<div class="row">
<div class="col">
<div class="form-group">
<label asp-for="LicenseKey"></label>
<input type="text" class="form-control" asp-for="LicenseKey">
</div>
</div>
<div class="col">
<div class="form-group">
<label asp-for="ExpirationDate"></label>
<input type="datetime-local" class="form-control" asp-for="ExpirationDate">
</div>
</div>
<div class="d-flex mt-4">
<button type="submit" class="btn btn-primary">Save</button>
<a class="btn btn-danger ml-auto" asp-action="Delete" asp-route-id="@Model.Organization.Id"
onclick="return confirm('Are you sure you want to delete this organization (@Model.Organization.Name)?')">
Delete
</a>
</div>
<button type="submit" class="btn btn-primary">Save</button>
</form>

View File

@ -0,0 +1,89 @@
@model UserEditModel
@{
ViewData["Title"] = "User Edit: " + Model.User.Email;
}
<h1>Edit User <small>@Model.User.Email</small></h1>
<form method="post">
<h2>General</h2>
<div class="row">
<div class="col-sm">
<div class="form-group">
<label asp-for="Name"></label>
<input type="text" class="form-control" asp-for="Name">
</div>
</div>
<div class="col-sm">
<div class="form-group">
<label asp-for="Email"></label>
<input type="email" class="form-control" asp-for="Email">
</div>
</div>
</div>
<div class="form-check">
<input type="checkbox" class="form-check-input" asp-for="EmailVerified">
<label class="form-check-label" asp-for="EmailVerified"></label>
</div>
<h2>Premium</h2>
<div class="row">
<div class="col-sm">
<div class="form-group">
<label asp-for="MaxStorageGb"></label>
<input type="number" class="form-control" asp-for="MaxStorageGb" min="1">
</div>
</div>
</div>
<div class="form-check">
<input type="checkbox" class="form-check-input" asp-for="Premium">
<label class="form-check-label" asp-for="Premium"></label>
</div>
<h2>Licensing</h2>
<div class="row">
<div class="col-sm">
<div class="form-group">
<label asp-for="LicenseKey"></label>
<input type="text" class="form-control" asp-for="LicenseKey">
</div>
</div>
<div class="col-sm">
<div class="form-group">
<label asp-for="PremiumExpirationDate"></label>
<input type="datetime-local" class="form-control" asp-for="PremiumExpirationDate">
</div>
</div>
</div>
<h2>Billing</h2>
<div class="row">
<div class="col-sm">
<div class="form-group">
<div class="form-group">
<label asp-for="Gateway"></label>
<select class="form-control" asp-for="Gateway"
asp-items="Html.GetEnumSelectList<Bit.Core.Enums.GatewayType>()">
<option value="">--</option>
</select>
</div>
</div>
</div>
<div class="col-sm">
<div class="form-group">
<label asp-for="GatewayCustomerId"></label>
<input type="text" class="form-control" asp-for="GatewayCustomerId">
</div>
</div>
<div class="col-sm">
<div class="form-group">
<label asp-for="GatewaySubscriptionId"></label>
<input type="text" class="form-control" asp-for="GatewaySubscriptionId">
</div>
</div>
</div>
<div class="d-flex mt-4">
<button type="submit" class="btn btn-primary">Save</button>
<a class="btn btn-danger ml-auto" asp-action="Delete" asp-route-id="@Model.User.Id"
onclick="return confirm('Are you sure you want to delete this user (@Model.User.Email)?')">
Delete
</a>
</div>
</form>

View File

@ -33,7 +33,7 @@
{
<tr>
<td>
<a href="#">@user.Email</a>
<a asp-action="Edit" asp-route-id="@user.Id">@user.Email</a>
</td>
<td>
<span title="@user.CreationDate.ToString()">

View File

@ -55,7 +55,11 @@ namespace Bit.Core.Repositories.SqlServer
new { Name = name, UserEmail = userEmail, Paid = paid, Skip = skip, Take = take },
commandType: CommandType.StoredProcedure);
return results.ToList();
// Select distinct results by Id
return results
.GroupBy(c => c.Id)
.Select(g => g.First())
.ToList();
}
}