From 51b4260f3c0aa2e52fce0c48979ef28d5cb3222d Mon Sep 17 00:00:00 2001 From: Uncled1023 Date: Tue, 9 Jan 2018 22:06:43 -0800 Subject: [PATCH] - Added account status of either active or banned. - Cleaned up admin pages. - Added Type and Status to user's profile page. - Banned users cannot login, or associate API calls with their account --- Teknik/Areas/Admin/AdminAreaRegistration.cs | 12 +- .../Admin/Controllers/AdminController.cs | 30 +++-- Teknik/Areas/Admin/Scripts/UserInfo.js | 27 +++- .../Scripts/{Search.js => UserSearch.js} | 6 +- .../Admin/ViewModels/UserInfoViewModel.cs | 5 +- ...ultViewModel.cs => UserResultViewModel.cs} | 6 +- ...rchViewModel.cs => UserSearchViewModel.cs} | 6 +- .../Areas/Admin/Views/Admin/Dashboard.cshtml | 6 +- .../Areas/Admin/Views/Admin/UserInfo.cshtml | 40 ++++-- ...{SearchResult.cshtml => UserResult.cshtml} | 4 +- ...earchResults.cshtml => UserResults.cshtml} | 6 +- .../{Search.cshtml => UserSearch.cshtml} | 8 +- .../Error/Controllers/ErrorController.cs | 6 +- Teknik/Areas/Error/ErrorAreaRegistration.cs | 4 +- .../Areas/User/Controllers/UserController.cs | 15 ++- Teknik/Areas/User/Models/User.cs | 7 +- Teknik/Areas/User/Models/UserSettings.cs | 2 +- Teknik/Areas/User/Utility/UserHelper.cs | 114 ++++++++++++++++- .../User/ViewModels/EditSettingsViewModel.cs | 5 +- .../Areas/User/ViewModels/ProfileViewModel.cs | 9 +- .../Areas/User/Views/User/ViewProfile.cshtml | 25 +++- Teknik/Attributes/TeknikAuthorizeAttribute.cs | 7 +- Teknik/Global.asax.cs | 116 +++++++++--------- Teknik/Modules/UserCheckModule.cs | 113 +++++++++++++++++ Teknik/Security/TeknikPrincipal.cs | 21 +--- Teknik/Teknik.csproj | 14 ++- Teknik/Web.config | 5 +- Utilities/Utilities/AccountStatus.cs | 8 ++ Utilities/Utilities/AccountType.cs | 10 +- Utilities/Utilities/Utilities.csproj | 1 + 30 files changed, 476 insertions(+), 162 deletions(-) rename Teknik/Areas/Admin/Scripts/{Search.js => UserSearch.js} (90%) rename Teknik/Areas/Admin/ViewModels/{SearchResultViewModel.cs => UserResultViewModel.cs} (82%) rename Teknik/Areas/Admin/ViewModels/{SearchViewModel.cs => UserSearchViewModel.cs} (68%) rename Teknik/Areas/Admin/Views/Admin/{SearchResult.cshtml => UserResult.cshtml} (89%) rename Teknik/Areas/Admin/Views/Admin/{SearchResults.cshtml => UserResults.cshtml} (75%) rename Teknik/Areas/Admin/Views/Admin/{Search.cshtml => UserSearch.cshtml} (72%) create mode 100644 Teknik/Modules/UserCheckModule.cs create mode 100644 Utilities/Utilities/AccountStatus.cs diff --git a/Teknik/Areas/Admin/AdminAreaRegistration.cs b/Teknik/Areas/Admin/AdminAreaRegistration.cs index 439a97a..75ee7aa 100644 --- a/Teknik/Areas/Admin/AdminAreaRegistration.cs +++ b/Teknik/Areas/Admin/AdminAreaRegistration.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Web.Mvc; using System.Web.Optimization; using Teknik.Configuration; @@ -28,11 +28,11 @@ namespace Teknik.Areas.Admin new[] { typeof(Controllers.AdminController).Namespace } ); context.MapSubdomainRoute( - "Admin.Search", // Route name + "Admin.UserSearch", // Route name new List() { "admin" }, // Subdomains new List() { config.Host }, "Search/Users", // URL with parameters - new { controller = "Admin", action = "Search" }, // Parameter defaults + new { controller = "Admin", action = "UserSearch" }, // Parameter defaults new[] { typeof(Controllers.AdminController).Namespace } ); context.MapSubdomainRoute( @@ -61,8 +61,8 @@ namespace Teknik.Areas.Admin ); // Register Script Bundles - BundleTable.Bundles.Add(new CdnScriptBundle("~/bundles/Search", config.CdnHost).Include( - "~/Areas/Admin/Scripts/Search.js")); + BundleTable.Bundles.Add(new CdnScriptBundle("~/bundles/UserSearch", config.CdnHost).Include( + "~/Areas/Admin/Scripts/UserSearch.js")); // Register Script Bundles BundleTable.Bundles.Add(new CdnScriptBundle("~/bundles/UploadSearch", config.CdnHost).Include( @@ -73,4 +73,4 @@ namespace Teknik.Areas.Admin "~/Areas/Admin/Scripts/UserInfo.js")); } } -} \ No newline at end of file +} diff --git a/Teknik/Areas/Admin/Controllers/AdminController.cs b/Teknik/Areas/Admin/Controllers/AdminController.cs index 70aa5d9..008c148 100644 --- a/Teknik/Areas/Admin/Controllers/AdminController.cs +++ b/Teknik/Areas/Admin/Controllers/AdminController.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Web; @@ -27,9 +27,9 @@ namespace Teknik.Areas.Admin.Controllers } [HttpGet] - public ActionResult Search() + public ActionResult UserSearch() { - SearchViewModel model = new SearchViewModel(); + UserSearchViewModel model = new UserSearchViewModel(); return View(model); } @@ -42,6 +42,7 @@ namespace Teknik.Areas.Admin.Controllers UserInfoViewModel model = new UserInfoViewModel(); model.Username = user.Username; model.AccountType = user.AccountType; + model.AccountStatus = user.AccountStatus; return View(model); } return Redirect(Url.SubRouteUrl("error", "Error.Http404")); @@ -55,9 +56,9 @@ namespace Teknik.Areas.Admin.Controllers } [HttpPost] - public ActionResult GetSearchResults(string query) + public ActionResult GetUserSearchResults(string query) { - List models = new List(); + List models = new List(); var results = db.Users.Where(u => u.Username.Contains(query)).ToList(); if (results != null) @@ -66,7 +67,7 @@ namespace Teknik.Areas.Admin.Controllers { try { - SearchResultViewModel model = new SearchResultViewModel(); + UserResultViewModel model = new UserResultViewModel(); model.Username = user.Username; if (Config.EmailConfig.Enabled) { @@ -83,7 +84,7 @@ namespace Teknik.Areas.Admin.Controllers } } - return PartialView("~/Areas/Admin/Views/Admin/SearchResults.cshtml", models); + return PartialView("~/Areas/Admin/Views/Admin/UserResults.cshtml", models); } [HttpPost] @@ -118,5 +119,18 @@ namespace Teknik.Areas.Admin.Controllers } return Redirect(Url.SubRouteUrl("error", "Error.Http404")); } + + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult EditUserAccountStatus(string username, AccountStatus accountStatus) + { + if (UserHelper.UserExists(db, username)) + { + // Edit the user's account type + UserHelper.EditAccountStatus(db, Config, username, accountStatus); + return Json(new { result = new { success = true } }); + } + return Redirect(Url.SubRouteUrl("error", "Error.Http404")); + } } -} \ No newline at end of file +} diff --git a/Teknik/Areas/Admin/Scripts/UserInfo.js b/Teknik/Areas/Admin/Scripts/UserInfo.js index 05cd552..cff2c16 100644 --- a/Teknik/Areas/Admin/Scripts/UserInfo.js +++ b/Teknik/Areas/Admin/Scripts/UserInfo.js @@ -1,4 +1,4 @@ -$(function () { +$(function () { $('.userAccountType').on('change', function () { var selected = $(this).find("option:selected").val(); @@ -23,4 +23,27 @@ }); }); -}); \ No newline at end of file + $('.userAccountStatus').on('change', function () { + var selected = $(this).find("option:selected").val(); + + $.ajax({ + type: "POST", + url: editAccountStatus, + data: AddAntiForgeryToken({ username: username, accountStatus: selected }), + success: function (html) { + if (html) { + if (html.error) { + $("#top_msg").css('display', 'inline', 'important'); + $("#top_msg").html('
' + html.error.message + '
'); + } + else { + $("#top_msg").css('display', 'none'); + $("#top_msg").html(''); + alert('Successfully changed the account status for \'' + username + '\' to: ' + selected); + } + } + } + }); + }); + +}); diff --git a/Teknik/Areas/Admin/Scripts/Search.js b/Teknik/Areas/Admin/Scripts/UserSearch.js similarity index 90% rename from Teknik/Areas/Admin/Scripts/Search.js rename to Teknik/Areas/Admin/Scripts/UserSearch.js index bf95fb5..84a4dbf 100644 --- a/Teknik/Areas/Admin/Scripts/Search.js +++ b/Teknik/Areas/Admin/Scripts/UserSearch.js @@ -1,9 +1,9 @@ -$(document).ready(function () { +$(document).ready(function () { $('#Query').on('input', function (e) { query = $(this).val(); $.ajax({ type: "POST", - url: searchResultsURL, + url: userSearchResultsURL, data: { query: query }, success: function (html) { if (html) { @@ -18,4 +18,4 @@ } }); }); -}); \ No newline at end of file +}); diff --git a/Teknik/Areas/Admin/ViewModels/UserInfoViewModel.cs b/Teknik/Areas/Admin/ViewModels/UserInfoViewModel.cs index 109a11b..9c3901e 100644 --- a/Teknik/Areas/Admin/ViewModels/UserInfoViewModel.cs +++ b/Teknik/Areas/Admin/ViewModels/UserInfoViewModel.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Web; @@ -11,5 +11,6 @@ namespace Teknik.Areas.Admin.ViewModels { public string Username { get; set; } public AccountType AccountType { get; set; } + public AccountStatus AccountStatus { get; set; } } -} \ No newline at end of file +} diff --git a/Teknik/Areas/Admin/ViewModels/SearchResultViewModel.cs b/Teknik/Areas/Admin/ViewModels/UserResultViewModel.cs similarity index 82% rename from Teknik/Areas/Admin/ViewModels/SearchResultViewModel.cs rename to Teknik/Areas/Admin/ViewModels/UserResultViewModel.cs index 69e8b30..089ebc4 100644 --- a/Teknik/Areas/Admin/ViewModels/SearchResultViewModel.cs +++ b/Teknik/Areas/Admin/ViewModels/UserResultViewModel.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Web; @@ -6,7 +6,7 @@ using Teknik.ViewModels; namespace Teknik.Areas.Admin.ViewModels { - public class SearchResultViewModel : ViewModelBase + public class UserResultViewModel : ViewModelBase { public string Username { get; set; } @@ -16,4 +16,4 @@ namespace Teknik.Areas.Admin.ViewModels public DateTime LastSeen { get; set; } } -} \ No newline at end of file +} diff --git a/Teknik/Areas/Admin/ViewModels/SearchViewModel.cs b/Teknik/Areas/Admin/ViewModels/UserSearchViewModel.cs similarity index 68% rename from Teknik/Areas/Admin/ViewModels/SearchViewModel.cs rename to Teknik/Areas/Admin/ViewModels/UserSearchViewModel.cs index 2bb4e8d..0e1c45e 100644 --- a/Teknik/Areas/Admin/ViewModels/SearchViewModel.cs +++ b/Teknik/Areas/Admin/ViewModels/UserSearchViewModel.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Web; @@ -6,7 +6,7 @@ using Teknik.ViewModels; namespace Teknik.Areas.Admin.ViewModels { - public class SearchViewModel : ViewModelBase + public class UserSearchViewModel : ViewModelBase { } -} \ No newline at end of file +} diff --git a/Teknik/Areas/Admin/Views/Admin/Dashboard.cshtml b/Teknik/Areas/Admin/Views/Admin/Dashboard.cshtml index d7d4d34..fea3490 100644 --- a/Teknik/Areas/Admin/Views/Admin/Dashboard.cshtml +++ b/Teknik/Areas/Admin/Views/Admin/Dashboard.cshtml @@ -1,11 +1,11 @@ -@model Teknik.Areas.Admin.ViewModels.DashboardViewModel +@model Teknik.Areas.Admin.ViewModels.DashboardViewModel @using Teknik.Utilities
@@ -13,4 +13,4 @@ Upload Search
- \ No newline at end of file + diff --git a/Teknik/Areas/Admin/Views/Admin/UserInfo.cshtml b/Teknik/Areas/Admin/Views/Admin/UserInfo.cshtml index cb02e02..e25fedb 100644 --- a/Teknik/Areas/Admin/Views/Admin/UserInfo.cshtml +++ b/Teknik/Areas/Admin/Views/Admin/UserInfo.cshtml @@ -1,10 +1,11 @@ -@model Teknik.Areas.Admin.ViewModels.UserInfoViewModel +@model Teknik.Areas.Admin.ViewModels.UserInfoViewModel @using Teknik.Utilities @@ -12,20 +13,43 @@
-
+
+ Username: +
+
+
-
Account Type: +
+ Account Type: +
+
-
\ No newline at end of file +
+
+
+ Account Status: +
+
+ +
+
+
diff --git a/Teknik/Areas/Admin/Views/Admin/SearchResult.cshtml b/Teknik/Areas/Admin/Views/Admin/UserResult.cshtml similarity index 89% rename from Teknik/Areas/Admin/Views/Admin/SearchResult.cshtml rename to Teknik/Areas/Admin/Views/Admin/UserResult.cshtml index 9bb2982..b3f2995 100644 --- a/Teknik/Areas/Admin/Views/Admin/SearchResult.cshtml +++ b/Teknik/Areas/Admin/Views/Admin/UserResult.cshtml @@ -1,4 +1,4 @@ -@model Teknik.Areas.Admin.ViewModels.SearchResultViewModel +@model Teknik.Areas.Admin.ViewModels.UserResultViewModel @using Teknik.Utilities @@ -11,4 +11,4 @@
- \ No newline at end of file + diff --git a/Teknik/Areas/Admin/Views/Admin/SearchResults.cshtml b/Teknik/Areas/Admin/Views/Admin/UserResults.cshtml similarity index 75% rename from Teknik/Areas/Admin/Views/Admin/SearchResults.cshtml rename to Teknik/Areas/Admin/Views/Admin/UserResults.cshtml index 49f1055..9f25406 100644 --- a/Teknik/Areas/Admin/Views/Admin/SearchResults.cshtml +++ b/Teknik/Areas/Admin/Views/Admin/UserResults.cshtml @@ -1,4 +1,4 @@ -@model List +@model List @if (Model.Any()) { @@ -10,10 +10,10 @@ foreach (var post in Model) { - @Html.Partial("SearchResult", post) + @Html.Partial("UserResult", post) } } else {

No Results

-} \ No newline at end of file +} diff --git a/Teknik/Areas/Admin/Views/Admin/Search.cshtml b/Teknik/Areas/Admin/Views/Admin/UserSearch.cshtml similarity index 72% rename from Teknik/Areas/Admin/Views/Admin/Search.cshtml rename to Teknik/Areas/Admin/Views/Admin/UserSearch.cshtml index 6dab83b..42531d2 100644 --- a/Teknik/Areas/Admin/Views/Admin/Search.cshtml +++ b/Teknik/Areas/Admin/Views/Admin/UserSearch.cshtml @@ -1,13 +1,13 @@ -@model Teknik.Areas.Admin.ViewModels.SearchViewModel +@model Teknik.Areas.Admin.ViewModels.UserSearchViewModel @using Teknik.Utilities -@Scripts.Render("~/bundles/Search") +@Scripts.Render("~/bundles/UserSearch")
@@ -24,4 +24,4 @@
- \ No newline at end of file + diff --git a/Teknik/Areas/Error/Controllers/ErrorController.cs b/Teknik/Areas/Error/Controllers/ErrorController.cs index 99a72bc..36c6673 100644 --- a/Teknik/Areas/Error/Controllers/ErrorController.cs +++ b/Teknik/Areas/Error/Controllers/ErrorController.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Net.Mail; @@ -99,7 +99,7 @@ namespace Teknik.Areas.Error.Controllers return View("~/Areas/Error/Views/Error/Http403.cshtml", model); } - + [AllowAnonymous] public ActionResult Http404(Exception exception) { @@ -163,4 +163,4 @@ namespace Teknik.Areas.Error.Controllers Logger.WriteEntry(level, message, exception); } } -} \ No newline at end of file +} diff --git a/Teknik/Areas/Error/ErrorAreaRegistration.cs b/Teknik/Areas/Error/ErrorAreaRegistration.cs index eccaf2b..4503137 100644 --- a/Teknik/Areas/Error/ErrorAreaRegistration.cs +++ b/Teknik/Areas/Error/ErrorAreaRegistration.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Web.Mvc; using Teknik.Configuration; @@ -43,4 +43,4 @@ namespace Teknik.Areas.Error ); } } -} \ No newline at end of file +} diff --git a/Teknik/Areas/User/Controllers/UserController.cs b/Teknik/Areas/User/Controllers/UserController.cs index 3df086c..6358a7d 100644 --- a/Teknik/Areas/User/Controllers/UserController.cs +++ b/Teknik/Areas/User/Controllers/UserController.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; @@ -69,6 +69,8 @@ namespace Teknik.Areas.Users.Controllers } model.JoinDate = user.JoinDate; model.LastSeen = UserHelper.GetLastAccountActivity(db, Config, user); + model.AccountType = user.AccountType; + model.AccountStatus = user.AccountStatus; model.UserSettings = user.UserSettings; model.SecuritySettings = user.SecuritySettings; @@ -197,6 +199,15 @@ namespace Teknik.Areas.Users.Controllers db.Entry(user).State = EntityState.Modified; db.SaveChanges(); + // Make sure they aren't banned or anything + if (user.AccountStatus == AccountStatus.Banned) + { + model.Error = true; + model.ErrorMessage = "Account has been banned."; + + return GenerateActionResult(new { error = model.ErrorMessage }, View("/Areas/User/Views/User/ViewLogin.cshtml", model)); + } + // Let's double check their email and git accounts to make sure they exist string email = UserHelper.GetUserEmailAddress(Config, username); if (Config.EmailConfig.Enabled && !UserHelper.UserEmailExists(Config, email)) @@ -1012,4 +1023,4 @@ namespace Teknik.Areas.Users.Controllers } } } -} \ No newline at end of file +} diff --git a/Teknik/Areas/User/Models/User.cs b/Teknik/Areas/User/Models/User.cs index 9293a85..2b02f75 100644 --- a/Teknik/Areas/User/Models/User.cs +++ b/Teknik/Areas/User/Models/User.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ComponentModel.DataAnnotations; using Microsoft.AspNet.Identity.EntityFramework; using System.Collections.Generic; @@ -26,6 +26,8 @@ namespace Teknik.Areas.Users.Models public AccountType AccountType { get; set; } + public AccountStatus AccountStatus { get; set; } + public virtual ICollection Groups { get; set; } public virtual UserSettings UserSettings { get; set; } @@ -56,9 +58,10 @@ namespace Teknik.Areas.Users.Models JoinDate = DateTime.Now; LastSeen = DateTime.Now; AccountType = AccountType.Basic; + AccountStatus = AccountStatus.Active; Groups = new List(); TrustedDevices = new List(); AuthTokens = new List(); } } -} \ No newline at end of file +} diff --git a/Teknik/Areas/User/Models/UserSettings.cs b/Teknik/Areas/User/Models/UserSettings.cs index 09442ad..aa31d55 100644 --- a/Teknik/Areas/User/Models/UserSettings.cs +++ b/Teknik/Areas/User/Models/UserSettings.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; diff --git a/Teknik/Areas/User/Utility/UserHelper.cs b/Teknik/Areas/User/Utility/UserHelper.cs index b5b03ad..266fedb 100644 --- a/Teknik/Areas/User/Utility/UserHelper.cs +++ b/Teknik/Areas/User/Utility/UserHelper.cs @@ -261,6 +261,45 @@ namespace Teknik.Areas.Users.Utility } } + public static void EditAccountStatus(TeknikEntities db, Config config, string username, AccountStatus status) + { + try + { + if (!UserExists(db, username)) + throw new Exception($"The user provided does not exist: {username}"); + + // Get the user to edit + User user = GetUser(db, username); + + string email = GetUserEmailAddress(config, username); + + // Edit the user type + user.AccountStatus = status; + EditUser(db, config, user); + + // Add/Remove account type features depending on the type + switch (status) + { + case AccountStatus.Active: + // Enable Email + EnableUserEmail(config, email); + // Enable Git + EnableUserGit(config, username); + break; + case AccountStatus.Banned: + // Disable Email + DisableUserEmail(config, email); + // Disable Git + DisableUserGit(config, username); + break; + } + } + catch (Exception ex) + { + throw new Exception($"Unable to edit the account status [{status}] for: {username}", ex); + } + } + public static void DeleteAccount(TeknikEntities db, Config config, User user) { try @@ -385,7 +424,7 @@ namespace Teknik.Areas.Users.Utility return false; } - public static bool UserHasRoles(TeknikEntities db, User user, params string[] roles) + public static bool UserHasRoles(User user, params string[] roles) { bool hasRole = true; if (user != null) @@ -862,6 +901,38 @@ If you recieved this email and you did not reset your password, you can ignore t } } + public static void EnableUserEmail(Config config, string email) + { + EditUserEmailActivity(config, email, true); + } + + public static void DisableUserEmail(Config config, string email) + { + EditUserEmailActivity(config, email, false); + } + + public static void EditUserEmailActivity(Config config, string email, bool active) + { + try + { + // If Email Server is enabled + if (config.EmailConfig.Enabled) + { + var app = new hMailServer.Application(); + app.Connect(); + app.Authenticate(config.EmailConfig.Username, config.EmailConfig.Password); + var domain = app.Domains.ItemByName[config.EmailConfig.Domain]; + var account = domain.Accounts.ItemByAddress[email]; + account.Active = active; + account.Save(); + } + } + catch (Exception ex) + { + throw new Exception("Unable to edit email account mailbox size.", ex); + } + } + public static void EditUserEmailPassword(Config config, string email, string password) { try @@ -1069,6 +1140,47 @@ If you recieved this email and you did not reset your password, you can ignore t } } + public static void EnableUserGit(Config config, string username) + { + EditUserGitActivity(config, username, true); + } + + public static void DisableUserGit(Config config, string username) + { + EditUserGitActivity(config, username, false); + } + + public static void EditUserGitActivity(Config config, string username, bool active) + { + try + { + // If Git is enabled + if (config.GitConfig.Enabled) + { + // Git user exists? + if (!UserGitExists(config, username)) + { + throw new Exception($"Git User '{username}' does not exist."); + } + + string email = GetUserEmailAddress(config, username); + using (var client = new WebClient()) + { + var obj = new { active = active, email = email }; + string json = Newtonsoft.Json.JsonConvert.SerializeObject(obj); + client.Headers[HttpRequestHeader.ContentType] = "application/json"; + Uri baseUri = new Uri(config.GitConfig.Host); + Uri finalUri = new Uri(baseUri, "api/v1/admin/users/" + username + "?token=" + config.GitConfig.AccessToken); + string result = client.UploadString(finalUri, "PATCH", json); + } + } + } + catch (Exception ex) + { + throw new Exception("Unable to edit git account password.", ex); + } + } + public static void CreateUserGitTwoFactor(Config config, string username, string secret, int unixTime) { try diff --git a/Teknik/Areas/User/ViewModels/EditSettingsViewModel.cs b/Teknik/Areas/User/ViewModels/EditSettingsViewModel.cs index 169801c..18757ce 100644 --- a/Teknik/Areas/User/ViewModels/EditSettingsViewModel.cs +++ b/Teknik/Areas/User/ViewModels/EditSettingsViewModel.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Web; @@ -29,6 +29,7 @@ namespace Teknik.Areas.Users.ViewModels public string Quote { get; set; } + [AllowHtml] public string About { get; set; } public string BlogTitle { get; set; } @@ -37,4 +38,4 @@ namespace Teknik.Areas.Users.ViewModels public bool Encrypt { get; set; } } -} \ No newline at end of file +} diff --git a/Teknik/Areas/User/ViewModels/ProfileViewModel.cs b/Teknik/Areas/User/ViewModels/ProfileViewModel.cs index 652b45f..71b3a73 100644 --- a/Teknik/Areas/User/ViewModels/ProfileViewModel.cs +++ b/Teknik/Areas/User/ViewModels/ProfileViewModel.cs @@ -1,8 +1,9 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Web; using Teknik.Areas.Users.Models; +using Teknik.Utilities; using Teknik.ViewModels; namespace Teknik.Areas.Users.ViewModels @@ -19,6 +20,10 @@ namespace Teknik.Areas.Users.ViewModels public DateTime LastSeen { get; set; } + public AccountType AccountType { get; set; } + + public AccountStatus AccountStatus { get; set; } + public List Uploads { get; set; } public List Pastes { get; set; } @@ -35,4 +40,4 @@ namespace Teknik.Areas.Users.ViewModels public UploadSettings UploadSettings { get; set; } } -} \ No newline at end of file +} diff --git a/Teknik/Areas/User/Views/User/ViewProfile.cshtml b/Teknik/Areas/User/Views/User/ViewProfile.cshtml index 962ce85..ed18bcf 100644 --- a/Teknik/Areas/User/Views/User/ViewProfile.cshtml +++ b/Teknik/Areas/User/Views/User/ViewProfile.cshtml @@ -1,4 +1,4 @@ -@model Teknik.Areas.Users.ViewModels.ProfileViewModel +@model Teknik.Areas.Users.ViewModels.ProfileViewModel @using Teknik.Utilities @using Teknik.Utilities.Cryptography @@ -11,7 +11,7 @@
@if (!Model.Error) { - bool OwnProfile = (Model.Username == User.Identity.Name || User.IsInRole("Admin")); + bool OwnProfile = (Model.Username == User.Identity.Name || User.IsInRole("Admin")) && User.Identity.IsAuthenticated; string gitHost = Model.Config.GitConfig.Host; string gitFullUrl = string.Empty; if (!string.IsNullOrEmpty(gitHost)) @@ -32,6 +32,12 @@

@Model.Username

+ if (User.IsInRole("Admin")) + { +
+ +
+ }