aboutsummaryrefslogtreecommitdiff
path: root/src/DevHive.Services
diff options
context:
space:
mode:
Diffstat (limited to 'src/DevHive.Services')
-rw-r--r--src/DevHive.Services/Configurations/Mapping/UserMappings.cs10
-rw-r--r--src/DevHive.Services/Models/Cloud/CloudinaryService.cs26
-rw-r--r--src/DevHive.Services/Services/UserService.cs23
3 files changed, 36 insertions, 23 deletions
diff --git a/src/DevHive.Services/Configurations/Mapping/UserMappings.cs b/src/DevHive.Services/Configurations/Mapping/UserMappings.cs
index 096af38..68a81e8 100644
--- a/src/DevHive.Services/Configurations/Mapping/UserMappings.cs
+++ b/src/DevHive.Services/Configurations/Mapping/UserMappings.cs
@@ -2,6 +2,7 @@ using DevHive.Data.Models;
using AutoMapper;
using DevHive.Services.Models.Identity.User;
using DevHive.Common.Models.Misc;
+using DevHive.Data.RelationModels;
namespace DevHive.Services.Configurations.Mapping
{
@@ -11,12 +12,17 @@ namespace DevHive.Services.Configurations.Mapping
{
CreateMap<UserServiceModel, User>();
CreateMap<RegisterServiceModel, User>();
- CreateMap<FriendServiceModel, User>();
+ CreateMap<FriendServiceModel, User>()
+ .ForMember(dest => dest.Friends, src => src.Ignore());
+ CreateMap<UserFriends, FriendServiceModel>()
+ .ForMember(dest => dest.UserName, src => src.MapFrom(p => p.Friend.UserName));
CreateMap<UpdateUserServiceModel, User>()
+ .ForMember(dest => dest.Friends, src => src.Ignore())
.AfterMap((src, dest) => dest.PasswordHash = PasswordModifications.GeneratePasswordHash(src.Password));
CreateMap<UpdateFriendServiceModel, User>();
- CreateMap<User, UserServiceModel>();
+ CreateMap<User, UserServiceModel>()
+ .ForMember(dest => dest.Friends, src => src.MapFrom(p => p.Friends));
CreateMap<User, UpdateUserServiceModel>()
.ForMember(x => x.Password, opt => opt.Ignore());
CreateMap<User, FriendServiceModel>();
diff --git a/src/DevHive.Services/Models/Cloud/CloudinaryService.cs b/src/DevHive.Services/Models/Cloud/CloudinaryService.cs
index a9bc9bd..bbf9606 100644
--- a/src/DevHive.Services/Models/Cloud/CloudinaryService.cs
+++ b/src/DevHive.Services/Models/Cloud/CloudinaryService.cs
@@ -4,6 +4,7 @@ using System.IO;
using System.Threading.Tasks;
using CloudinaryDotNet;
using CloudinaryDotNet.Actions;
+using DevHive.Data.Migrations;
using DevHive.Services.Interfaces;
using Microsoft.AspNetCore.Http;
@@ -25,22 +26,19 @@ namespace DevHive.Services.Services
{
string formFileId = Guid.NewGuid().ToString();
- if (formFile.Length > 0)
+ using (var ms = new MemoryStream())
{
- using (var ms = new MemoryStream())
+ formFile.CopyTo(ms);
+ byte[] formBytes = ms.ToArray();
+
+ RawUploadParams rawUploadParams = new()
{
- formFile.CopyTo(ms);
- byte[] formBytes = ms.ToArray();
-
- ImageUploadParams imageUploadParams = new()
- {
- File = new FileDescription(formFileId, new MemoryStream(formBytes)),
- PublicId = formFileId
- };
-
- ImageUploadResult uploadResult = await this._cloudinary.UploadAsync(imageUploadParams);
- fileUrls.Add(uploadResult.Url.AbsoluteUri);
- }
+ File = new FileDescription(formFileId, new MemoryStream(formBytes)),
+ PublicId = formFileId
+ };
+
+ RawUploadResult rawUploadResult = await this._cloudinary.UploadAsync(rawUploadParams);
+ fileUrls.Add(rawUploadResult.Url.AbsoluteUri);
}
}
diff --git a/src/DevHive.Services/Services/UserService.cs b/src/DevHive.Services/Services/UserService.cs
index dd44358..c8624ee 100644
--- a/src/DevHive.Services/Services/UserService.cs
+++ b/src/DevHive.Services/Services/UserService.cs
@@ -249,16 +249,25 @@ namespace DevHive.Services.Services
User user = this._userMapper.Map<User>(updateUserServiceModel);
/* Fetch Roles and replace model's*/
- HashSet<Role> roles = new();
- int rolesCount = updateUserServiceModel.Roles.Count;
- for (int i = 0; i < rolesCount; i++)
+ //Do NOT allow a user to change his roles, unless he is an Admin
+ bool isAdmin = (await this._userRepository.GetByIdAsync(updateUserServiceModel.Id))
+ .Roles.Any(r => r.Name == Role.AdminRole);
+
+ if (isAdmin)
{
- Role role = await this._roleRepository.GetByNameAsync(updateUserServiceModel.Roles.ElementAt(i).Name) ??
- throw new ArgumentException("Invalid role name!");
+ HashSet<Role> roles = new();
+ foreach (var role in updateUserServiceModel.Roles)
+ {
+ Role returnedRole = await this._roleRepository.GetByNameAsync(role.Name) ??
+ throw new ArgumentException($"Role {role.Name} does not exist!");
- roles.Add(role);
+ roles.Add(returnedRole);
+ }
+ user.Roles = roles;
}
- user.Roles = roles;
+ //Preserve original user roles
+ else
+ user.Roles = (await this._userRepository.GetByIdAsync(updateUserServiceModel.Id)).Roles;
/* Fetch Friends and replace model's*/
HashSet<UserFriends> friends = new();