aboutsummaryrefslogtreecommitdiff
path: root/ExamTemplate
diff options
context:
space:
mode:
authorSyndamia <kamen.d.mladenov@protonmail.com>2021-05-07 15:27:34 +0300
committerSyndamia <kamen.d.mladenov@protonmail.com>2021-05-07 15:27:34 +0300
commit5f2abdf275c3765290ee7d6728842cba6d3af184 (patch)
treec9393ac6375db139f2d8388fc03ed1c9bfe2405b /ExamTemplate
parent7470da2719a404b344fec4d6b2fefd92f4ce22a5 (diff)
downloadit-kariera-exam-template-5f2abdf275c3765290ee7d6728842cba6d3af184.tar
it-kariera-exam-template-5f2abdf275c3765290ee7d6728842cba6d3af184.tar.gz
it-kariera-exam-template-5f2abdf275c3765290ee7d6728842cba6d3af184.zip
Implemented editing user
Diffstat (limited to 'ExamTemplate')
-rw-r--r--ExamTemplate/Data/Repositories/UserRepository.cs13
-rw-r--r--ExamTemplate/Services/Models/EditUserServiceModel.cs9
-rw-r--r--ExamTemplate/Services/UserService.cs26
-rw-r--r--ExamTemplate/Web/Configurations/UserMappings.cs2
-rw-r--r--ExamTemplate/Web/Controllers/UserController.cs38
-rw-r--r--ExamTemplate/Web/Models/User/EditUserViewModel.cs9
-rw-r--r--ExamTemplate/Web/Views/User/EditProfile.cshtml19
-rw-r--r--ExamTemplate/Web/Views/User/Profile.cshtml14
8 files changed, 127 insertions, 3 deletions
diff --git a/ExamTemplate/Data/Repositories/UserRepository.cs b/ExamTemplate/Data/Repositories/UserRepository.cs
index 04e1f45..3e5ceaa 100644
--- a/ExamTemplate/Data/Repositories/UserRepository.cs
+++ b/ExamTemplate/Data/Repositories/UserRepository.cs
@@ -1,3 +1,4 @@
+using System.Security.Claims;
using System.Threading.Tasks;
using ExamTemplate.Data.Models;
using Microsoft.AspNetCore.Identity;
@@ -25,6 +26,11 @@ namespace ExamTemplate.Data.Repositories
.FirstOrDefaultAsync(x => x.UserName == username);
}
+ public async Task<User> GetByClaimsAsync(ClaimsPrincipal claimsPrincipal)
+ {
+ return await this._userManager.GetUserAsync(claimsPrincipal);
+ }
+
public async Task<bool> AddAsync(User user, string password)
{
user.PasswordHash = this._userManager.PasswordHasher.HashPassword(user, password);
@@ -45,6 +51,13 @@ namespace ExamTemplate.Data.Repositories
return succeeded;
}
+ public async Task<bool> EditUserAsync(User user)
+ {
+ IdentityResult result = await this._userManager.UpdateAsync(user);
+
+ return result.Succeeded;
+ }
+
public async Task<bool> VerifyPasswordAsync(User user, string password)
{
return await this._userManager.CheckPasswordAsync(user, password);
diff --git a/ExamTemplate/Services/Models/EditUserServiceModel.cs b/ExamTemplate/Services/Models/EditUserServiceModel.cs
new file mode 100644
index 0000000..80e5501
--- /dev/null
+++ b/ExamTemplate/Services/Models/EditUserServiceModel.cs
@@ -0,0 +1,9 @@
+namespace ExamTemplate.Services.Models
+{
+ public class EditUserServiceModel
+ {
+ public string FirstName { get; set; }
+ public string LastName { get; set; }
+ public string Username { get; set; }
+ }
+}
diff --git a/ExamTemplate/Services/UserService.cs b/ExamTemplate/Services/UserService.cs
index 6b5078b..329d21e 100644
--- a/ExamTemplate/Services/UserService.cs
+++ b/ExamTemplate/Services/UserService.cs
@@ -1,4 +1,5 @@
-using System.Threading.Tasks;
+using System.Security.Claims;
+using System.Threading.Tasks;
using AutoMapper;
using ExamTemplate.Data.Models;
using ExamTemplate.Data.Repositories;
@@ -50,5 +51,28 @@ namespace ExamTemplate.Services
return this._autoMapper.Map<UserServiceModel>(user);
}
+
+ public async Task<UserServiceModel> GetUserByClaimsAsync(ClaimsPrincipal claimsPrincipal)
+ {
+ User user = await this._userRepository.GetByClaimsAsync(claimsPrincipal);
+
+ return this._autoMapper.Map<UserServiceModel>(user);
+ }
+
+ public async Task<bool> EditUserAsync(ClaimsPrincipal claimsPrincipal, EditUserServiceModel editUserServiceModel)
+ {
+ User user = await this._userRepository.GetByClaimsAsync(claimsPrincipal);
+
+ user.UserName = editUserServiceModel.Username;
+ user.FirstName = editUserServiceModel.FirstName;
+ user.LastName = editUserServiceModel.LastName;
+
+ return await this._userRepository.EditUserAsync(user);
+ }
+
+ public bool IsSignedIn(ClaimsPrincipal claimsPrincipal)
+ {
+ return this._signInManager.IsSignedIn(claimsPrincipal);
+ }
}
}
diff --git a/ExamTemplate/Web/Configurations/UserMappings.cs b/ExamTemplate/Web/Configurations/UserMappings.cs
index 6a98477..1bba602 100644
--- a/ExamTemplate/Web/Configurations/UserMappings.cs
+++ b/ExamTemplate/Web/Configurations/UserMappings.cs
@@ -11,6 +11,8 @@ namespace ExamTemplate.Services.Configurations
CreateMap<RegisterUserViewModel, RegisterUserServiceModel>();
CreateMap<LoginUserViewModel, LoginUserServiceModel>();
CreateMap<UserServiceModel, UserViewModel>();
+ CreateMap<UserServiceModel, EditUserViewModel>();
+ CreateMap<EditUserViewModel, EditUserServiceModel>();
}
}
}
diff --git a/ExamTemplate/Web/Controllers/UserController.cs b/ExamTemplate/Web/Controllers/UserController.cs
index 4a9cf31..2e5978b 100644
--- a/ExamTemplate/Web/Controllers/UserController.cs
+++ b/ExamTemplate/Web/Controllers/UserController.cs
@@ -81,13 +81,47 @@ namespace ExamTemplate.Web.Controllers
UserServiceModel userServiceModel = await this._userService.GetUserByUsernameAsync(username);
if (userServiceModel == default(UserServiceModel))
- {
return RedirectToAction("Login");
- }
UserViewModel userViewModel = this._autoMapper.Map<UserViewModel>(userServiceModel);
return View(userViewModel);
}
+
+ [HttpGet]
+ [Route("/EditProfile")]
+ public async Task<IActionResult> EditProfile()
+ {
+ UserServiceModel userServiceModel = await this._userService.GetUserByClaimsAsync(this.HttpContext.User);
+
+ if (userServiceModel == default(UserServiceModel))
+ return RedirectToAction("Login");
+
+ EditUserViewModel editUserViewModel = this._autoMapper.Map<EditUserViewModel>(userServiceModel);
+
+ return View(editUserViewModel);
+ }
+
+ [HttpPost]
+ [Route("/EditProfile")]
+ public async Task<IActionResult> EditProfile(EditUserViewModel editUserViewModel)
+ {
+ if (!this._userService.IsSignedIn(HttpContext.User))
+ return RedirectToAction("Login");
+
+ EditUserServiceModel editUserServiceModel = this._autoMapper.Map<EditUserServiceModel>(editUserViewModel);
+ bool result = await this._userService.EditUserAsync(HttpContext.User, editUserServiceModel);
+
+ if (result)
+ {
+ await this._userService.LogoutAsync();
+ return RedirectToAction("Profile", new { username = editUserViewModel.Username });
+ }
+ else
+ {
+ UserServiceModel userServiceModel = await this._userService.GetUserByClaimsAsync(HttpContext.User);
+ return RedirectToAction("Profile", new { username = userServiceModel.Username });
+ }
+ }
}
}
diff --git a/ExamTemplate/Web/Models/User/EditUserViewModel.cs b/ExamTemplate/Web/Models/User/EditUserViewModel.cs
new file mode 100644
index 0000000..baae751
--- /dev/null
+++ b/ExamTemplate/Web/Models/User/EditUserViewModel.cs
@@ -0,0 +1,9 @@
+namespace ExamTemplate.Web.Models.User
+{
+ public class EditUserViewModel
+ {
+ public string FirstName { get; set; }
+ public string LastName { get; set; }
+ public string Username { get; set; }
+ }
+}
diff --git a/ExamTemplate/Web/Views/User/EditProfile.cshtml b/ExamTemplate/Web/Views/User/EditProfile.cshtml
new file mode 100644
index 0000000..fef77f1
--- /dev/null
+++ b/ExamTemplate/Web/Views/User/EditProfile.cshtml
@@ -0,0 +1,19 @@
+@model EditUserViewModel
+@{
+ ViewData["Title"] = "Edit Profile";
+}
+
+<p>
+ <form asp-controller="User" asp-action="EditProfile" method="post">
+ <label asp-for="Username">Username:</label>
+ <input type="text" asp-for="Username" placeholder="@Model.Username">
+
+ <label asp-for="FirstName">First Name:</label>
+ <input type="text" asp-for="FirstName" placeholder="@Model.FirstName">
+
+ <label asp-for="LastName">Last Name:</label>
+ <input type="text" asp-for="LastName" placeholder="@Model.LastName">
+
+ <input type="submit" value="Update Profile">
+ </form>
+</p>
diff --git a/ExamTemplate/Web/Views/User/Profile.cshtml b/ExamTemplate/Web/Views/User/Profile.cshtml
index 279de82..7883f2b 100644
--- a/ExamTemplate/Web/Views/User/Profile.cshtml
+++ b/ExamTemplate/Web/Views/User/Profile.cshtml
@@ -1,3 +1,8 @@
+@using Microsoft.AspNetCore.Identity
+
+@inject SignInManager<User> SignInManager
+@inject UserManager<User> UserManager
+
@model UserViewModel
@{
ViewData["Title"] = Model.Username + "'s Profile";
@@ -10,4 +15,13 @@
<div>
@Model.Username
</div>
+ @if (SignInManager.IsSignedIn(User))
+ {
+ @if(UserManager.GetUserName(User) == Model.Username)
+ {
+ <form asp-controller="User" asp-action="EditProfile" method="get">
+ <input type="submit" value="Edit Profile">
+ </form>
+ }
+ }
</p>