From 6a32bc4fa98f3a894fcbe9bc4b8df3a361e0e7d9 Mon Sep 17 00:00:00 2001 From: Vitalick Kovalenko Date: Sat, 23 Dec 2023 18:34:51 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CyberBoom/Controllers/UserController.cs | 104 ++++++++++++++++++------ CyberBoom/DbContext/User.cs | 16 ++++ 2 files changed, 94 insertions(+), 26 deletions(-) diff --git a/CyberBoom/Controllers/UserController.cs b/CyberBoom/Controllers/UserController.cs index 4baab17..e2cfd1e 100644 --- a/CyberBoom/Controllers/UserController.cs +++ b/CyberBoom/Controllers/UserController.cs @@ -22,10 +22,13 @@ public class UsersController : ControllerBase private readonly UserManager _userManager; - public UsersController(ApplicationContext applicationContext, UserManager userManager) + private readonly RoleManager _roleManager; + + public UsersController(ApplicationContext applicationContext, UserManager userManager, RoleManager roleManager) { _applicationContext = applicationContext; _userManager = userManager; + _roleManager = roleManager; } [HttpPost] @@ -49,36 +52,85 @@ public class UsersController : ControllerBase return BadRequest(result.Errors); } - // [HttpGet("google-auth")] - // public IActionResult Regiester() - // { - // var properties = new AuthenticationProperties{ - // RedirectUri = Url.Action("GoogleResponse") - // }; - // return Challenge(properties, GoogleDefaults.AuthenticationScheme); - // } + [HttpPut] + public async Task Put([FromForm]UserPut user) + { + await user.Avatar.WriteFileToDirectory(); + + var fuser = await _userManager.FindByIdAsync(user.Id); - // [Route("google-response")] - // public async Task GoogleResponse() - // { - // var result = await HttpContext.AuthenticateAsync(JwtBearerDefaults.AuthenticationScheme); + if(fuser is null) + throw new Exception("user not found"); - // var claims = result?.Principal?.Identities.First().Claims; - // var jwt = new JwtSecurityToken( - // issuer: AuthOptions.ISSUER, - // audience: AuthOptions.AUDIENCE, - // claims: claims, - // expires: DateTime.UtcNow.Add(TimeSpan.FromMinutes(2)), - // signingCredentials: new SigningCredentials(AuthOptions.GetSymmetricSecurityKey(), SecurityAlgorithms.HmacSha256)); + + fuser.AvatarUrl = user.Avatar.FileName; + fuser.Fio = user.Fio; + fuser.Specialities = user.Specialities; + fuser.TelegramBotUrl = user.TelegramBotUrl; + fuser.UserName = user.Username; + + var result = await _userManager.UpdateAsync(fuser); + if(result.Succeeded) + return Ok( + + ); + return BadRequest(result.Errors); + } + + [HttpPost("moderator")] + public async Task PostModerator([FromForm]UserPost user) + { + + await user.Avatar.WriteFileToDirectory(); + var userWr = new User { + AvatarUrl = user.Avatar.FileName, + Fio = user.Fio, + Specialities = user.Specialities, + TelegramBotUrl = user.TelegramBotUrl, + UserName = user.Username + }; + + + + var result = await _userManager.CreateAsync(userWr); + + if(!result.Succeeded) + return BadRequest(result.Errors); + + var isExists = await _roleManager.RoleExistsAsync("модератор"); + + if(!isExists){ + var roleResult = await _roleManager.CreateAsync(new IdentityRole("модератор")); + if(!roleResult.Succeeded) + throw new Exception("cannot create role"); + } - // var strJwt = new JwtSecurityTokenHandler().WriteToken(jwt); + var addingRole = await _userManager.AddToRoleAsync(userWr, "модератор"); - // return Ok(new { - // Token = strJwt - // }); - // } + if(!addingRole.Succeeded) + throw new Exception("cannot create role"); - + return Ok( + new { + userWr.Id + } + ); + } + + [HttpGet] + public async Task GetUserData(string id) + { + var user = await _userManager.FindByIdAsync(id); + + if(user is null) + return BadRequest(); + + var role = await _userManager.GetRolesAsync(user); + return Ok(new { + user, + role + }); + } } diff --git a/CyberBoom/DbContext/User.cs b/CyberBoom/DbContext/User.cs index 95558fc..ab8689c 100644 --- a/CyberBoom/DbContext/User.cs +++ b/CyberBoom/DbContext/User.cs @@ -30,6 +30,22 @@ public class UserPost public string TelegramBotUrl { get; set; } = null!; } + +public class UserPut +{ + public string Id { get; set; } = null!; + + public IFormFile Avatar { get; set; } = null!; + + public string Fio { get; set; } = null!; + + public string Username { get; set; } = null!; + + public string Specialities { get; set; } = null!; + + public string TelegramBotUrl { get; set; } = null!; +} + public class PostMeetingDto { public DateTime Time { get; set; }