diff --git a/src/Admin/Admin.csproj b/src/Admin/Admin.csproj index 16ba9e4f0c..ae34c6abb7 100644 --- a/src/Admin/Admin.csproj +++ b/src/Admin/Admin.csproj @@ -20,6 +20,7 @@ + diff --git a/src/Admin/Controllers/OrganizationsController.cs b/src/Admin/Controllers/OrganizationsController.cs index dce59ec0c4..f91607dbca 100644 --- a/src/Admin/Controllers/OrganizationsController.cs +++ b/src/Admin/Controllers/OrganizationsController.cs @@ -53,6 +53,18 @@ namespace Bit.Admin.Controllers }); } + public async Task View(Guid id) + { + var organization = await _organizationRepository.GetByIdAsync(id); + if(organization == null) + { + return RedirectToAction("Index"); + } + + var users = await _organizationUserRepository.GetManyDetailsByOrganizationAsync(id); + return View(new OrganizationViewModel(organization, users)); + } + public async Task Edit(Guid id) { var organization = await _organizationRepository.GetByIdAsync(id); diff --git a/src/Admin/Controllers/UsersController.cs b/src/Admin/Controllers/UsersController.cs index 0602762ab6..0833ddc440 100644 --- a/src/Admin/Controllers/UsersController.cs +++ b/src/Admin/Controllers/UsersController.cs @@ -50,6 +50,18 @@ namespace Bit.Admin.Controllers }); } + public async Task View(Guid id) + { + var user = await _userRepository.GetByIdAsync(id); + if(user == null) + { + return RedirectToAction("Index"); + } + + var ciphers = await _cipherRepository.GetManyByUserIdAsync(id); + return View(new UserViewModel(user, ciphers)); + } + public async Task Edit(Guid id) { var user = await _userRepository.GetByIdAsync(id); diff --git a/src/Admin/Models/OrganizationEditModel.cs b/src/Admin/Models/OrganizationEditModel.cs index 62f120bcfa..fbf5b27b3f 100644 --- a/src/Admin/Models/OrganizationEditModel.cs +++ b/src/Admin/Models/OrganizationEditModel.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Linq; using Bit.Core; using Bit.Core.Enums; using Bit.Core.Models.Data; @@ -10,17 +9,14 @@ using Bit.Core.Utilities; namespace Bit.Admin.Models { - public class OrganizationEditModel + public class OrganizationEditModel : OrganizationViewModel { public OrganizationEditModel() { } public OrganizationEditModel(Organization org, IEnumerable orgUsers, GlobalSettings globalSettings) + : base(org, orgUsers) { - Organization = org; - UserCount = orgUsers.Count(); - Owners = string.Join(", ", orgUsers.Where(u => u.Type == OrganizationUserType.Owner).Select(u => u.Email)); - Admins = string.Join(", ", orgUsers.Where(u => u.Type == OrganizationUserType.Admin).Select(u => u.Email)); BraintreeMerchantId = globalSettings.Braintree.MerchantId; Name = org.Name; @@ -50,10 +46,6 @@ namespace Bit.Admin.Models ExpirationDate = org.ExpirationDate; } - public Organization Organization { get; set; } - public string Owners { get; set; } - public string Admins { get; set; } - public int UserCount { get; set; } public string RandomLicenseKey => CoreHelpers.SecureRandomString(20); public string FourteenDayExpirationDate => DateTime.Now.AddDays(14).ToString("yyyy-MM-ddTHH:mm"); public string BraintreeMerchantId { get; set; } diff --git a/src/Admin/Models/OrganizationViewModel.cs b/src/Admin/Models/OrganizationViewModel.cs new file mode 100644 index 0000000000..fbab7d2cc7 --- /dev/null +++ b/src/Admin/Models/OrganizationViewModel.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Bit.Core.Enums; +using Bit.Core.Models.Data; +using Bit.Core.Models.Table; + +namespace Bit.Admin.Models +{ + public class OrganizationViewModel + { + public OrganizationViewModel() { } + + public OrganizationViewModel(Organization org, IEnumerable orgUsers) + { + Organization = org; + UserCount = orgUsers.Count(); + Owners = string.Join(", ", orgUsers.Where(u => u.Type == OrganizationUserType.Owner).Select(u => u.Email)); + Admins = string.Join(", ", orgUsers.Where(u => u.Type == OrganizationUserType.Admin).Select(u => u.Email)); + } + + public Organization Organization { get; set; } + public string Owners { get; set; } + public string Admins { get; set; } + public int UserCount { get; set; } + } +} diff --git a/src/Admin/Models/UserEditModel.cs b/src/Admin/Models/UserEditModel.cs index 981e092900..65bf0bc813 100644 --- a/src/Admin/Models/UserEditModel.cs +++ b/src/Admin/Models/UserEditModel.cs @@ -8,14 +8,13 @@ using Bit.Core.Utilities; namespace Bit.Admin.Models { - public class UserEditModel + public class UserEditModel : UserViewModel { public UserEditModel() { } public UserEditModel(User user, IEnumerable ciphers, GlobalSettings globalSettings) + : base(user, ciphers) { - User = user; - CipherCount = ciphers.Count(); BraintreeMerchantId = globalSettings.Braintree.MerchantId; Name = user.Name; @@ -30,8 +29,6 @@ namespace Bit.Admin.Models PremiumExpirationDate = user.PremiumExpirationDate; } - public User User { get; set; } - public int CipherCount { get; set; } public string RandomLicenseKey => CoreHelpers.SecureRandomString(20); public string OneYearExpirationDate => DateTime.Now.AddYears(1).ToString("yyyy-MM-ddTHH:mm"); public string BraintreeMerchantId { get; set; } diff --git a/src/Admin/Models/UserViewModel.cs b/src/Admin/Models/UserViewModel.cs new file mode 100644 index 0000000000..1bf4095ff3 --- /dev/null +++ b/src/Admin/Models/UserViewModel.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Bit.Core.Models.Table; + +namespace Bit.Admin.Models +{ + public class UserViewModel + { + public UserViewModel() { } + + public UserViewModel(User user, IEnumerable ciphers) + { + User = user; + CipherCount = ciphers.Count(); + } + + public User User { get; set; } + public int CipherCount { get; set; } + } +} diff --git a/src/Admin/Views/Organizations/Edit.cshtml b/src/Admin/Views/Organizations/Edit.cshtml index e2d3d6ce13..400eb52904 100644 --- a/src/Admin/Views/Organizations/Edit.cshtml +++ b/src/Admin/Views/Organizations/Edit.cshtml @@ -74,25 +74,7 @@

Organization @Model.Organization.Name

Information

-
-
Id
-
@Model.Organization.Id
- -
Users
-
@Model.UserCount
- -
Owners
-
@(string.IsNullOrWhiteSpace(Model.Owners) ? "None" : Model.Owners)
- -
Admins
-
@(string.IsNullOrWhiteSpace(Model.Admins) ? "None" : Model.Admins)
- -
Created
-
@Model.Organization.CreationDate.ToString()
- -
Modified
-
@Model.Organization.RevisionDate.ToString()
-
+@Html.Partial("_ViewInformation", Model)

General

diff --git a/src/Admin/Views/Organizations/View.cshtml b/src/Admin/Views/Organizations/View.cshtml new file mode 100644 index 0000000000..9d5c7fafeb --- /dev/null +++ b/src/Admin/Views/Organizations/View.cshtml @@ -0,0 +1,13 @@ +@model OrganizationViewModel +@{ + ViewData["Title"] = "Organization: " + Model.Organization.Name; +} + +

Organization @Model.Organization.Name

+ +

Information

+@Html.Partial("_ViewInformation", Model) + + + diff --git a/src/Admin/Views/Organizations/_ViewInformation.cshtml b/src/Admin/Views/Organizations/_ViewInformation.cshtml new file mode 100644 index 0000000000..6a80a398fd --- /dev/null +++ b/src/Admin/Views/Organizations/_ViewInformation.cshtml @@ -0,0 +1,20 @@ +@model OrganizationViewModel +
+
Id
+
@Model.Organization.Id
+ +
Users
+
@Model.UserCount
+ +
Owners
+
@(string.IsNullOrWhiteSpace(Model.Owners) ? "None" : Model.Owners)
+ +
Admins
+
@(string.IsNullOrWhiteSpace(Model.Admins) ? "None" : Model.Admins)
+ +
Created
+
@Model.Organization.CreationDate.ToString()
+ +
Modified
+
@Model.Organization.RevisionDate.ToString()
+
diff --git a/src/Admin/Views/Users/Edit.cshtml b/src/Admin/Views/Users/Edit.cshtml index 5e9d992ead..bbae6c5b03 100644 --- a/src/Admin/Views/Users/Edit.cshtml +++ b/src/Admin/Views/Users/Edit.cshtml @@ -57,22 +57,7 @@

User @Model.User.Email

Information

-
-
Id
-
@Model.User.Id
- -
Items
-
@Model.CipherCount
- -
Created
-
@Model.User.CreationDate.ToString()
- -
Modified
-
@Model.User.RevisionDate.ToString()
- -
Account Modified
-
@Model.User.AccountRevisionDate.ToString()
-
+@Html.Partial("_ViewInformation", Model)

General

diff --git a/src/Admin/Views/Users/View.cshtml b/src/Admin/Views/Users/View.cshtml new file mode 100644 index 0000000000..32227d9792 --- /dev/null +++ b/src/Admin/Views/Users/View.cshtml @@ -0,0 +1,13 @@ +@model UserViewModel +@{ + ViewData["Title"] = "User: " + Model.User.Email; +} + +

User @Model.User.Email

+ +

Information

+@Html.Partial("_ViewInformation", Model) + + + diff --git a/src/Admin/Views/Users/_ViewInformation.cshtml b/src/Admin/Views/Users/_ViewInformation.cshtml new file mode 100644 index 0000000000..f010a22379 --- /dev/null +++ b/src/Admin/Views/Users/_ViewInformation.cshtml @@ -0,0 +1,17 @@ +@model UserViewModel +
+
Id
+
@Model.User.Id
+ +
Items
+
@Model.CipherCount
+ +
Created
+
@Model.User.CreationDate.ToString()
+ +
Modified
+
@Model.User.RevisionDate.ToString()
+ +
Account Modified
+
@Model.User.AccountRevisionDate.ToString()
+