Files: removed .result

This commit is contained in:
pavelbannov 2022-08-12 16:26:57 +03:00
parent a941da35b4
commit 0973f4e8d1
15 changed files with 412 additions and 497 deletions

View File

@ -55,7 +55,7 @@ public class EmployeeDtoHelper
private readonly ApiContext _httpContext;
private readonly DisplayUserSettingsHelper _displayUserSettingsHelper;
private readonly CommonLinkUtility _commonLinkUtility;
private readonly ConcurrentDictionary<Guid, EmployeeDto> _concurrentDictionary;
private readonly Dictionary<Guid, EmployeeDto> _dictionary;
public EmployeeDtoHelper(
ApiContext httpContext,
@ -69,27 +69,34 @@ public class EmployeeDtoHelper
_httpContext = httpContext;
_displayUserSettingsHelper = displayUserSettingsHelper;
_commonLinkUtility = commonLinkUtility;
_concurrentDictionary = new ConcurrentDictionary<Guid, EmployeeDto>();
_dictionary = new Dictionary<Guid, EmployeeDto>();
}
public EmployeeDto Get(UserInfo userInfo)
{
return _concurrentDictionary.GetOrAdd(userInfo.Id, (id) => Init(new EmployeeDto(), userInfo));
public async Task<EmployeeDto> Get(UserInfo userInfo)
{
if (_dictionary.ContainsKey(userInfo.Id))
{
return _dictionary[userInfo.Id];
}
var employee = await Init(new EmployeeDto(), userInfo);
_dictionary.Add(userInfo.Id, employee);
return employee;
}
public EmployeeDto Get(Guid userId)
public async Task<EmployeeDto> Get(Guid userId)
{
try
{
return Get(_userManager.GetUsers(userId));
return await Get(_userManager.GetUsers(userId));
}
catch (Exception)
{
return Get(ASC.Core.Users.Constants.LostUser);
return await Get(ASC.Core.Users.Constants.LostUser);
}
}
protected EmployeeDto Init(EmployeeDto result, UserInfo userInfo)
protected async Task<EmployeeDto> Init(EmployeeDto result, UserInfo userInfo)
{
result.Id = userInfo.Id;
result.DisplayName = _displayUserSettingsHelper.GetFullUserName(userInfo);
@ -103,8 +110,7 @@ public class EmployeeDtoHelper
if (_httpContext.Check("avatarSmall"))
{
result.AvatarSmall = _userPhotoManager.GetSmallPhotoURL(userInfo.Id, out var isdef)
+ (isdef ? "" : $"?_={userInfoLM}");
result.AvatarSmall = (await _userPhotoManager.GetSmallPhotoURL(userInfo.Id)) + $"?_={userInfoLM}";
}
if (result.Id != Guid.Empty)

View File

@ -169,7 +169,7 @@ public class EmployeeFullDtoHelper : EmployeeDtoHelper
return result;
}
public EmployeeFullDto GetFull(UserInfo userInfo)
public async Task<EmployeeFullDto> GetFull(UserInfo userInfo)
{
var result = new EmployeeFullDto
{
@ -189,7 +189,7 @@ public class EmployeeFullDtoHelper : EmployeeDtoHelper
IsSSO = userInfo.IsSSO()
};
Init(result, userInfo);
await Init(result, userInfo);
if (userInfo.Sex.HasValue)
{
@ -225,17 +225,17 @@ public class EmployeeFullDtoHelper : EmployeeDtoHelper
if (_context.Check("avatarMax"))
{
result.AvatarMax = _userPhotoManager.GetMaxPhotoURL(userInfo.Id, out var isdef) + (isdef ? "" : $"?_={userInfoLM}");
result.AvatarMax = await _userPhotoManager.GetMaxPhotoURL(userInfo.Id) + $"?_={userInfoLM}";
}
if (_context.Check("avatarMedium"))
{
result.AvatarMedium = _userPhotoManager.GetMediumPhotoURL(userInfo.Id, out var isdef) + (isdef ? "" : $"?_={userInfoLM}");
result.AvatarMedium = await _userPhotoManager.GetMediumPhotoURL(userInfo.Id) + $"?_={userInfoLM}";
}
if (_context.Check("avatar"))
{
result.Avatar = _userPhotoManager.GetBigPhotoURL(userInfo.Id, out var isdef) + (isdef ? "" : $"?_={userInfoLM}");
result.Avatar = await _userPhotoManager.GetBigPhotoURL(userInfo.Id) + $"?_={userInfoLM}";
}
if (_context.Check("listAdminModules"))

View File

@ -48,15 +48,11 @@ public abstract class FileEntryDto
public string ProviderKey { get; set; }
public int? ProviderId { get; set; }
protected FileEntryDto(FileEntry entry, EmployeeDtoHelper employeeWraperHelper, ApiDateTimeHelper apiDateTimeHelper)
protected FileEntryDto(FileEntry entry)
{
Title = entry.Title;
Access = entry.Access;
Shared = entry.Shared;
Created = apiDateTimeHelper.Get(entry.CreateOn);
CreatedBy = employeeWraperHelper.Get(entry.CreateBy);
Updated = apiDateTimeHelper.Get(entry.ModifiedOn);
UpdatedBy = employeeWraperHelper.Get(entry.ModifiedBy);
RootFolderType = entry.RootFolderType;
ProviderItem = entry.ProviderEntry.NullIfDefault();
ProviderKey = entry.ProviderKey;
@ -73,8 +69,8 @@ public abstract class FileEntryDto<T> : FileEntryDto
public bool CanShare { get; set; }
public bool CanEdit { get; set; }
protected FileEntryDto(FileEntry<T> entry, EmployeeDtoHelper employeeWraperHelper, ApiDateTimeHelper apiDateTimeHelper)
: base(entry, employeeWraperHelper, apiDateTimeHelper)
protected FileEntryDto(FileEntry<T> entry)
: base(entry)
{
Id = entry.Id;
RootFolderId = entry.RootId;
@ -112,9 +108,9 @@ public class FileEntryDtoHelper
Access = entry.Access,
Shared = entry.Shared,
Created = _apiDateTimeHelper.Get(entry.CreateOn),
CreatedBy = _employeeWraperHelper.Get(entry.CreateBy),
CreatedBy = await _employeeWraperHelper.Get(entry.CreateBy),
Updated = _apiDateTimeHelper.Get(entry.ModifiedOn),
UpdatedBy = _employeeWraperHelper.Get(entry.ModifiedBy),
UpdatedBy = await _employeeWraperHelper.Get(entry.ModifiedBy),
RootFolderType = entry.RootFolderType,
RootFolderId = entry.RootId,
ProviderItem = entry.ProviderEntry.NullIfDefault(),

View File

@ -97,7 +97,7 @@ public class FilesSpaceUsageStatManager : SpaceUsageStatManager
else
{
item.Name = user.DisplayUserName(false, _displayUserSettingsHelper);
item.ImgUrl = user.GetSmallPhotoURL(_userPhotoManager);
item.ImgUrl = await user.GetSmallPhotoURL(_userPhotoManager);
item.Url = user.GetUserProfilePageURL(_commonLinkUtility);
item.Disabled = user.Status == EmployeeStatus.Terminated;
}

View File

@ -44,7 +44,7 @@ public class ContactsController : PeopleControllerBase
}
[HttpDelete("{userid}/contacts")]
public EmployeeFullDto DeleteMemberContacts(string userid, UpdateMemberRequestDto inDto)
public async Task<EmployeeFullDto> DeleteMemberContacts(string userid, UpdateMemberRequestDto inDto)
{
var user = GetUserInfo(userid);
@ -56,11 +56,11 @@ public class ContactsController : PeopleControllerBase
DeleteContacts(inDto.Contacts, user);
_userManager.SaveUserInfo(user, syncCardDav: true);
return _employeeFullDtoHelper.GetFull(user);
return await _employeeFullDtoHelper.GetFull(user);
}
[HttpPost("{userid}/contacts")]
public EmployeeFullDto SetMemberContacts(string userid, UpdateMemberRequestDto inDto)
public async Task<EmployeeFullDto> SetMemberContacts(string userid, UpdateMemberRequestDto inDto)
{
var user = GetUserInfo(userid);
@ -73,11 +73,11 @@ public class ContactsController : PeopleControllerBase
UpdateContacts(inDto.Contacts, user);
_userManager.SaveUserInfo(user, syncCardDav: true);
return _employeeFullDtoHelper.GetFull(user);
return await _employeeFullDtoHelper.GetFull(user);
}
[HttpPut("{userid}/contacts")]
public EmployeeFullDto UpdateMemberContacts(string userid, UpdateMemberRequestDto inDto)
public async Task<EmployeeFullDto> UpdateMemberContacts(string userid, UpdateMemberRequestDto inDto)
{
var user = GetUserInfo(userid);
@ -89,7 +89,7 @@ public class ContactsController : PeopleControllerBase
UpdateContacts(inDto.Contacts, user);
_userManager.SaveUserInfo(user, syncCardDav: true);
return _employeeFullDtoHelper.GetFull(user);
return await _employeeFullDtoHelper.GetFull(user);
}
private void DeleteContacts(IEnumerable<Contact> contacts, UserInfo user)

View File

@ -67,7 +67,7 @@ public class GroupController : ControllerBase
}
[HttpGet("full")]
public IEnumerable<GroupDto> GetAllWithMembers()
public async IAsyncEnumerable<GroupDto> GetAllWithMembers()
{
var result = _userManager.GetDepartments().Select(r => r);
if (!string.IsNullOrEmpty(_apiContext.FilterValue))
@ -75,7 +75,10 @@ public class GroupController : ControllerBase
result = result.Where(r => r.Name.Contains(_apiContext.FilterValue, StringComparison.InvariantCultureIgnoreCase));
}
return result.Select(r => _groupFullDtoHelper.Get(r, true));
foreach (var item in result)
{
yield return await _groupFullDtoHelper.Get(item, true);
}
}
[HttpGet("search")]
@ -94,9 +97,9 @@ public class GroupController : ControllerBase
}
[HttpGet("{groupid}")]
public GroupDto GetById(Guid groupid)
public async Task<GroupDto> GetById(Guid groupid)
{
return _groupFullDtoHelper.Get(GetGroupInfo(groupid), true);
return await _groupFullDtoHelper.Get(GetGroupInfo(groupid), true);
}
[HttpGet("user/{userid}")]
@ -106,7 +109,7 @@ public class GroupController : ControllerBase
}
[HttpPost]
public GroupDto AddGroup(GroupRequestDto inDto)
public async Task<GroupDto> AddGroup(GroupRequestDto inDto)
{
_permissionContext.DemandPermissions(Constants.Action_EditGroups, Constants.Action_AddRemoveUser);
@ -124,11 +127,11 @@ public class GroupController : ControllerBase
_messageService.Send(MessageAction.GroupCreated, _messageTarget.Create(group.ID), group.Name);
return _groupFullDtoHelper.Get(group, true);
return await _groupFullDtoHelper.Get(group, true);
}
[HttpPut("{groupid}")]
public GroupDto UpdateGroup(Guid groupid, GroupRequestDto inDto)
public async Task<GroupDto> UpdateGroup(Guid groupid, GroupRequestDto inDto)
{
_permissionContext.DemandPermissions(Constants.Action_EditGroups, Constants.Action_AddRemoveUser);
var group = _userManager.GetGroups().SingleOrDefault(x => x.ID == groupid).NotFoundIfNull("group not found");
@ -140,7 +143,7 @@ public class GroupController : ControllerBase
group.Name = inDto.GroupName ?? group.Name;
_userManager.SaveGroupInfo(group);
RemoveMembersFrom(groupid, new GroupRequestDto { Members = _userManager.GetUsersByGroup(groupid, EmployeeStatus.All).Select(u => u.Id).Where(id => !inDto.Members.Contains(id)) });
await RemoveMembersFrom(groupid, new GroupRequestDto { Members = _userManager.GetUsersByGroup(groupid, EmployeeStatus.All).Select(u => u.Id).Where(id => !inDto.Members.Contains(id)) });
TransferUserToDepartment(inDto.GroupManager, @group, true);
@ -154,26 +157,25 @@ public class GroupController : ControllerBase
_messageService.Send(MessageAction.GroupUpdated, _messageTarget.Create(groupid), group.Name);
return GetById(groupid);
return await GetById(groupid);
}
[HttpDelete("{groupid}")]
public GroupDto DeleteGroup(Guid groupid)
public async Task<GroupDto> DeleteGroup(Guid groupid)
{
_permissionContext.DemandPermissions(Constants.Action_EditGroups, Constants.Action_AddRemoveUser);
var @group = GetGroupInfo(groupid);
var groupWrapperFull = _groupFullDtoHelper.Get(group, false);
_userManager.DeleteGroup(groupid);
_messageService.Send(MessageAction.GroupDeleted, _messageTarget.Create(group.ID), group.Name);
return groupWrapperFull;
return await _groupFullDtoHelper.Get(group, false);
}
[HttpPut("{groupid}/members/{newgroupid}")]
public GroupDto TransferMembersTo(Guid groupid, Guid newgroupid)
public async Task<GroupDto> TransferMembersTo(Guid groupid, Guid newgroupid)
{
_permissionContext.DemandPermissions(Constants.Action_EditGroups, Constants.Action_AddRemoveUser);
@ -187,20 +189,20 @@ public class GroupController : ControllerBase
TransferUserToDepartment(userInfo.Id, newgroup, false);
}
return GetById(newgroupid);
return await GetById(newgroupid);
}
[HttpPost("{groupid}/members")]
public GroupDto SetMembersTo(Guid groupid, GroupRequestDto inDto)
public async Task<GroupDto> SetMembersTo(Guid groupid, GroupRequestDto inDto)
{
RemoveMembersFrom(groupid, new GroupRequestDto { Members = _userManager.GetUsersByGroup(groupid).Select(x => x.Id) });
AddMembersTo(groupid, inDto);
await RemoveMembersFrom(groupid, new GroupRequestDto { Members = _userManager.GetUsersByGroup(groupid).Select(x => x.Id) });
await AddMembersTo(groupid, inDto);
return GetById(groupid);
return await GetById(groupid);
}
[HttpPut("{groupid}/members")]
public GroupDto AddMembersTo(Guid groupid, GroupRequestDto inDto)
public async Task<GroupDto> AddMembersTo(Guid groupid, GroupRequestDto inDto)
{
_permissionContext.DemandPermissions(Constants.Action_EditGroups, Constants.Action_AddRemoveUser);
@ -211,11 +213,11 @@ public class GroupController : ControllerBase
TransferUserToDepartment(userId, group, false);
}
return GetById(group.ID);
return await GetById(group.ID);
}
[HttpPut("{groupid}/manager")]
public GroupDto SetManager(Guid groupid, SetManagerRequestDto inDto)
public async Task<GroupDto> SetManager(Guid groupid, SetManagerRequestDto inDto)
{
var group = GetGroupInfo(groupid);
if (_userManager.UserExists(inDto.UserId))
@ -227,11 +229,11 @@ public class GroupController : ControllerBase
throw new ItemNotFoundException("user not found");
}
return GetById(groupid);
return await GetById(groupid);
}
[HttpDelete("{groupid}/members")]
public GroupDto RemoveMembersFrom(Guid groupid, GroupRequestDto inDto)
public async Task<GroupDto> RemoveMembersFrom(Guid groupid, GroupRequestDto inDto)
{
_permissionContext.DemandPermissions(Constants.Action_EditGroups, Constants.Action_AddRemoveUser);
@ -242,7 +244,7 @@ public class GroupController : ControllerBase
RemoveUserFromDepartment(userId, group);
}
return GetById(group.ID);
return await GetById(group.ID);
}
private GroupInfo GetGroupInfo(Guid groupid)

View File

@ -64,7 +64,7 @@ public class PhotoController : PeopleControllerBase
}
[HttpPost("{userid}/photo/thumbnails")]
public ThumbnailsDataDto CreateMemberPhotoThumbnails(string userid, ThumbnailsRequestDto inDto)
public async Task<ThumbnailsDataDto> CreateMemberPhotoThumbnails(string userid, ThumbnailsRequestDto inDto)
{
var user = GetUserInfo(userid);
@ -84,22 +84,21 @@ public class PhotoController : PeopleControllerBase
_settingsManager.SaveForUser(settings, user.Id);
_userPhotoManager.RemovePhoto(user.Id);
_userPhotoManager.SaveOrUpdatePhoto(user.Id, data);
await _userPhotoManager.SaveOrUpdatePhoto(user.Id, data);
_userPhotoManager.RemoveTempPhoto(fileName);
}
else
{
UserPhotoThumbnailManager.SaveThumbnails(_userPhotoManager, _settingsManager, inDto.X, inDto.Y, inDto.Width, inDto.Height, user.Id);
await UserPhotoThumbnailManager.SaveThumbnails(_userPhotoManager, _settingsManager, inDto.X, inDto.Y, inDto.Width, inDto.Height, user.Id);
}
_userManager.SaveUserInfo(user, syncCardDav: true);
_messageService.Send(MessageAction.UserUpdatedAvatarThumbnails, _messageTarget.Create(user.Id), user.DisplayUserName(false, _displayUserSettingsHelper));
return new ThumbnailsDataDto(user.Id, _userPhotoManager);
return await ThumbnailsDataDto.Create(user.Id, _userPhotoManager);
}
[HttpDelete("{userid}/photo")]
public ThumbnailsDataDto DeleteMemberPhoto(string userid)
public async Task<ThumbnailsDataDto> DeleteMemberPhoto(string userid)
{
var user = GetUserInfo(userid);
@ -114,11 +113,11 @@ public class PhotoController : PeopleControllerBase
_userManager.SaveUserInfo(user, syncCardDav: true);
_messageService.Send(MessageAction.UserDeletedAvatar, _messageTarget.Create(user.Id), user.DisplayUserName(false, _displayUserSettingsHelper));
return new ThumbnailsDataDto(user.Id, _userPhotoManager);
return await ThumbnailsDataDto.Create(user.Id, _userPhotoManager);
}
[HttpGet("{userid}/photo")]
public ThumbnailsDataDto GetMemberPhoto(string userid)
public async Task<ThumbnailsDataDto> GetMemberPhoto(string userid)
{
var user = GetUserInfo(userid);
@ -127,11 +126,11 @@ public class PhotoController : PeopleControllerBase
throw new SecurityException();
}
return new ThumbnailsDataDto(user.Id, _userPhotoManager);
return await ThumbnailsDataDto.Create(user.Id, _userPhotoManager);
}
[HttpPut("{userid}/photo")]
public ThumbnailsDataDto UpdateMemberPhoto(string userid, UpdateMemberRequestDto inDto)
public async Task<ThumbnailsDataDto> UpdateMemberPhoto(string userid, UpdateMemberRequestDto inDto)
{
var user = GetUserInfo(userid);
@ -140,7 +139,7 @@ public class PhotoController : PeopleControllerBase
throw new SecurityException();
}
if (inDto.Files != _userPhotoManager.GetPhotoAbsoluteWebPath(user.Id))
if (inDto.Files != await _userPhotoManager.GetPhotoAbsoluteWebPath(user.Id))
{
UpdatePhotoUrl(inDto.Files, user);
}
@ -148,7 +147,7 @@ public class PhotoController : PeopleControllerBase
_userManager.SaveUserInfo(user, syncCardDav: true);
_messageService.Send(MessageAction.UserAddedAvatar, _messageTarget.Create(user.Id), user.DisplayUserName(false, _displayUserSettingsHelper));
return new ThumbnailsDataDto(user.Id, _userPhotoManager);
return await ThumbnailsDataDto.Create(user.Id, _userPhotoManager);
}
[HttpPost("{userid}/photo")]

View File

@ -144,7 +144,7 @@ public class UserController : PeopleControllerBase
}
[HttpPost("active")]
public EmployeeDto AddMemberAsActivated(MemberRequestDto inDto)
public async Task<EmployeeDto> AddMemberAsActivated(MemberRequestDto inDto)
{
_permissionContext.DemandPermissions(Constants.Action_AddRemoveUser);
@ -197,7 +197,7 @@ public class UserController : PeopleControllerBase
UpdatePhotoUrl(inDto.Files, user);
}
return _employeeFullDtoHelper.GetFull(user);
return await _employeeFullDtoHelper.GetFull(user);
}
[HttpPost]
@ -313,7 +313,7 @@ public class UserController : PeopleControllerBase
_messageService.Send(messageAction, _messageTarget.Create(user.Id), user.DisplayUserName(false, _displayUserSettingsHelper));
}
return _employeeFullDtoHelper.GetFull(user);
return await _employeeFullDtoHelper.GetFull(user);
}
[HttpPut("{userid}/password")]
@ -367,11 +367,11 @@ public class UserController : PeopleControllerBase
_messageService.Send(MessageAction.CookieSettingsUpdated);
}
return _employeeFullDtoHelper.GetFull(GetUserInfo(userid.ToString()));
return await _employeeFullDtoHelper.GetFull(GetUserInfo(userid.ToString()));
}
[HttpDelete("{userid}")]
public EmployeeDto DeleteMember(string userid)
public async Task<EmployeeDto> DeleteMember(string userid)
{
_permissionContext.DemandPermissions(Constants.Action_AddRemoveUser);
@ -396,7 +396,7 @@ public class UserController : PeopleControllerBase
_messageService.Send(MessageAction.UserDeleted, _messageTarget.Create(user.Id), userName);
return _employeeFullDtoHelper.GetFull(user);
return await _employeeFullDtoHelper.GetFull(user);
}
[HttpDelete("@self")]
@ -444,49 +444,44 @@ public class UserController : PeopleControllerBase
//StudioNotifyService.SendMsgProfileDeletion(Tenant.TenantId, user);
}
return _employeeFullDtoHelper.GetFull(user);
return await _employeeFullDtoHelper.GetFull(user);
}
[HttpGet("status/{status}/search")]
public IEnumerable<EmployeeDto> GetAdvanced(EmployeeStatus status, [FromQuery] string query)
public async IAsyncEnumerable<EmployeeDto> GetAdvanced(EmployeeStatus status, [FromQuery] string query)
{
if (_coreBaseSettings.Personal)
{
throw new MethodAccessException("Method not available");
}
try
var list = _userManager.GetUsers(status).AsEnumerable();
if ("group".Equals(_apiContext.FilterBy, StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(_apiContext.FilterValue))
{
var list = _userManager.GetUsers(status).AsEnumerable();
if ("group".Equals(_apiContext.FilterBy, StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(_apiContext.FilterValue))
{
var groupId = new Guid(_apiContext.FilterValue);
//Filter by group
list = list.Where(x => _userManager.IsUserInGroup(x.Id, groupId));
_apiContext.SetDataFiltered();
}
list = list.Where(x => x.FirstName != null && x.FirstName.IndexOf(query, StringComparison.OrdinalIgnoreCase) > -1 || (x.LastName != null && x.LastName.IndexOf(query, StringComparison.OrdinalIgnoreCase) != -1) ||
(x.UserName != null && x.UserName.IndexOf(query, StringComparison.OrdinalIgnoreCase) != -1) || (x.Email != null && x.Email.IndexOf(query, StringComparison.OrdinalIgnoreCase) != -1) || (x.ContactsList != null && x.ContactsList.Any(y => y.IndexOf(query, StringComparison.OrdinalIgnoreCase) != -1)));
return list.Select(u => _employeeFullDtoHelper.GetFull(u));
}
catch (Exception error)
{
_logger.ErrorGetAdvanced(error);
var groupId = new Guid(_apiContext.FilterValue);
//Filter by group
list = list.Where(x => _userManager.IsUserInGroup(x.Id, groupId));
_apiContext.SetDataFiltered();
}
return null;
list = list.Where(x => x.FirstName != null && x.FirstName.IndexOf(query, StringComparison.OrdinalIgnoreCase) > -1 || (x.LastName != null && x.LastName.IndexOf(query, StringComparison.OrdinalIgnoreCase) != -1) ||
(x.UserName != null && x.UserName.IndexOf(query, StringComparison.OrdinalIgnoreCase) != -1) || (x.Email != null && x.Email.IndexOf(query, StringComparison.OrdinalIgnoreCase) != -1) || (x.ContactsList != null && x.ContactsList.Any(y => y.IndexOf(query, StringComparison.OrdinalIgnoreCase) != -1)));
foreach (var item in list)
{
yield return await _employeeFullDtoHelper.GetFull(item);
}
}
[HttpGet]
public IEnumerable<EmployeeDto> GetAll()
public IAsyncEnumerable<EmployeeDto> GetAll()
{
return GetByStatus(EmployeeStatus.Active);
}
[HttpGet("email")]
public EmployeeDto GetByEmail([FromQuery] string email)
public async Task<EmployeeDto> GetByEmail([FromQuery] string email)
{
if (_coreBaseSettings.Personal && !_userManager.GetUsers(_securityContext.CurrentAccount.ID).IsOwner(Tenant))
{
@ -499,12 +494,12 @@ public class UserController : PeopleControllerBase
throw new ItemNotFoundException("User not found");
}
return _employeeFullDtoHelper.GetFull(user);
return await _employeeFullDtoHelper.GetFull(user);
}
[Authorize(AuthenticationSchemes = "confirm", Roles = "LinkInvite,Everyone")]
[HttpGet("{username}", Order = 1)]
public EmployeeDto GetById(string username)
public async Task<EmployeeDto> GetById(string username)
{
if (_coreBaseSettings.Personal)
{
@ -539,11 +534,11 @@ public class UserController : PeopleControllerBase
return _employeeFullDtoHelper.GetSimple(user);
}
return _employeeFullDtoHelper.GetFull(user);
return await _employeeFullDtoHelper.GetFull(user);
}
[HttpGet("status/{status}")]
public IEnumerable<EmployeeDto> GetByStatus(EmployeeStatus status)
public IAsyncEnumerable<EmployeeDto> GetByStatus(EmployeeStatus status)
{
if (_coreBaseSettings.Personal)
{
@ -561,11 +556,14 @@ public class UserController : PeopleControllerBase
}
[HttpGet("filter")]
public IEnumerable<EmployeeDto> GetFullByFilter(EmployeeStatus? employeeStatus, Guid? groupId, EmployeeActivationStatus? activationStatus, EmployeeType? employeeType, bool? isAdministrator)
public async IAsyncEnumerable<EmployeeDto> GetFullByFilter(EmployeeStatus? employeeStatus, Guid? groupId, EmployeeActivationStatus? activationStatus, EmployeeType? employeeType, bool? isAdministrator)
{
var users = GetByFilter(employeeStatus, groupId, activationStatus, employeeType, isAdministrator);
return users.Select(r => _employeeFullDtoHelper.GetFull(r));
var users = GetByFilter(employeeStatus, groupId, activationStatus, employeeType, isAdministrator);
foreach (var user in users)
{
yield return await _employeeFullDtoHelper.GetFull(user);
}
}
[HttpGet("info")]
@ -578,45 +576,42 @@ public class UserController : PeopleControllerBase
}
[HttpGet("search")]
public IEnumerable<EmployeeDto> GetPeopleSearch([FromQuery] string query)
public IAsyncEnumerable<EmployeeDto> GetPeopleSearch([FromQuery] string query)
{
return GetSearch(query);
}
[HttpGet("@search/{query}")]
public IEnumerable<EmployeeDto> GetSearch(string query)
public async IAsyncEnumerable<EmployeeDto> GetSearch(string query)
{
if (_coreBaseSettings.Personal)
{
throw new MethodAccessException("Method not available");
}
var groupId = Guid.Empty;
if ("group".Equals(_apiContext.FilterBy, StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(_apiContext.FilterValue))
{
groupId = new Guid(_apiContext.FilterValue);
}
var users = _userManager.Search(query, EmployeeStatus.Active, groupId);
foreach (var user in users)
{
yield return await _employeeFullDtoHelper.GetFull(user);
}
try
{
var groupId = Guid.Empty;
if ("group".Equals(_apiContext.FilterBy, StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(_apiContext.FilterValue))
{
groupId = new Guid(_apiContext.FilterValue);
}
var users = _userManager.Search(query, EmployeeStatus.Active, groupId);
return users.Select(u => _employeeFullDtoHelper.GetFull(u));
}
catch (Exception error)
{
_logger.ErrorGetSearch(error);
}
return null;
}
[HttpGet("simple/filter")]
public IEnumerable<EmployeeDto> GetSimpleByFilter(EmployeeStatus? employeeStatus, Guid? groupId, EmployeeActivationStatus? activationStatus, EmployeeType? employeeType, bool? isAdministrator)
public async IAsyncEnumerable<EmployeeDto> GetSimpleByFilter(EmployeeStatus? employeeStatus, Guid? groupId, EmployeeActivationStatus? activationStatus, EmployeeType? employeeType, bool? isAdministrator)
{
var users = GetByFilter(employeeStatus, groupId, activationStatus, employeeType, isAdministrator);
return users.Select(_employeeDtoHelper.Get);
foreach (var user in users)
{
yield return await _employeeDtoHelper.Get(user);
}
}
[AllowAnonymous]
@ -632,7 +627,7 @@ public class UserController : PeopleControllerBase
}
[HttpPut("delete", Order = -1)]
public IEnumerable<EmployeeDto> RemoveUsers(UpdateMembersRequestDto inDto)
public async IAsyncEnumerable<EmployeeDto> RemoveUsers(UpdateMembersRequestDto inDto)
{
_permissionContext.DemandPermissions(Constants.Action_AddRemoveUser);
@ -656,13 +651,16 @@ public class UserController : PeopleControllerBase
_queueWorkerRemove.Start(Tenant.Id, user, _securityContext.CurrentAccount.ID, false);
}
_messageService.Send(MessageAction.UsersDeleted, _messageTarget.Create(users.Select(x => x.Id)), userNames);
return users.Select(u => _employeeFullDtoHelper.GetFull(u));
_messageService.Send(MessageAction.UsersDeleted, _messageTarget.Create(users.Select(x => x.Id)), userNames);
foreach (var user in users)
{
yield return await _employeeFullDtoHelper.GetFull(user);
}
}
[HttpPut("invite")]
public IEnumerable<EmployeeDto> ResendUserInvites(UpdateMembersRequestDto inDto)
public async IAsyncEnumerable<EmployeeDto> ResendUserInvites(UpdateMembersRequestDto inDto)
{
var users = inDto.UserIds
.Where(userId => !_userManager.IsSystemUser(userId))
@ -714,9 +712,12 @@ public class UserController : PeopleControllerBase
}
}
_messageService.Send(MessageAction.UsersSentActivationInstructions, _messageTarget.Create(users.Select(x => x.Id)), users.Select(x => x.DisplayUserName(false, _displayUserSettingsHelper)));
return users.Select(u => _employeeFullDtoHelper.GetFull(u));
_messageService.Send(MessageAction.UsersSentActivationInstructions, _messageTarget.Create(users.Select(x => x.Id)), users.Select(x => x.DisplayUserName(false, _displayUserSettingsHelper)));
foreach (var user in users)
{
yield return await _employeeFullDtoHelper.GetFull(user);
}
}
[HttpGet("theme")]
@ -739,11 +740,11 @@ public class UserController : PeopleControllerBase
}
[HttpGet("@self")]
public EmployeeDto Self()
public async Task<EmployeeDto> Self()
{
var user = _userManager.GetUser(_securityContext.CurrentAccount.ID, EmployeeFullDtoHelper.GetExpression(_apiContext));
var result = _employeeFullDtoHelper.GetFull(user);
var result = await _employeeFullDtoHelper.GetFull(user);
result.Theme = _settingsManager.LoadForCurrentUser<DarkThemeSettings>().Theme;
@ -831,11 +832,10 @@ public class UserController : PeopleControllerBase
[HttpPut("activationstatus/{activationstatus}")]
[Authorize(AuthenticationSchemes = "confirm", Roles = "Activation,Everyone")]
public IEnumerable<EmployeeDto> UpdateEmployeeActivationStatus(EmployeeActivationStatus activationstatus, UpdateMembersRequestDto inDto)
public async IAsyncEnumerable<EmployeeDto> UpdateEmployeeActivationStatus(EmployeeActivationStatus activationstatus, UpdateMembersRequestDto inDto)
{
_apiContext.AuthByClaim();
var retuls = new List<EmployeeDto>();
foreach (var id in inDto.UserIds.Where(userId => !_userManager.IsSystemUser(userId)))
{
_permissionContext.DemandPermissions(new UserSecurityProvider(id), Constants.Action_EditUser);
@ -846,15 +846,13 @@ public class UserController : PeopleControllerBase
}
u.ActivationStatus = activationstatus;
_userManager.SaveUserInfo(u);
retuls.Add(_employeeFullDtoHelper.GetFull(u));
_userManager.SaveUserInfo(u);
yield return await _employeeFullDtoHelper.GetFull(u);
}
return retuls;
}
[HttpPut("{userid}/culture")]
public EmployeeDto UpdateMemberCulture(string userid, UpdateMemberRequestDto inDto)
public async Task<EmployeeDto> UpdateMemberCulture(string userid, UpdateMemberRequestDto inDto)
{
var user = GetUserInfo(userid);
@ -888,7 +886,7 @@ public class UserController : PeopleControllerBase
}
}
return _employeeFullDtoHelper.GetFull(user);
return await _employeeFullDtoHelper.GetFull(user);
}
[HttpPut("{userid}", Order = 1)]
@ -953,7 +951,7 @@ public class UserController : PeopleControllerBase
UpdateContacts(inDto.Contacts, user);
UpdateDepartments(inDto.Department, user);
if (inDto.Files != _userPhotoManager.GetPhotoAbsoluteWebPath(user.Id))
if (inDto.Files != await _userPhotoManager.GetPhotoAbsoluteWebPath(user.Id))
{
UpdatePhotoUrl(inDto.Files, user);
}
@ -999,11 +997,11 @@ public class UserController : PeopleControllerBase
_messageService.Send(MessageAction.CookieSettingsUpdated);
}
return _employeeFullDtoHelper.GetFull(user);
return await _employeeFullDtoHelper.GetFull(user);
}
[HttpPut("status/{status}")]
public async Task<IEnumerable<EmployeeDto>> UpdateUserStatus(EmployeeStatus status, UpdateMembersRequestDto inDto)
public async IAsyncEnumerable<EmployeeDto> UpdateUserStatus(EmployeeStatus status, UpdateMembersRequestDto inDto)
{
_permissionContext.DemandPermissions(Constants.Action_EditUser);
@ -1040,13 +1038,16 @@ public class UserController : PeopleControllerBase
}
}
_messageService.Send(MessageAction.UsersUpdatedStatus, _messageTarget.Create(users.Select(x => x.Id)), users.Select(x => x.DisplayUserName(false, _displayUserSettingsHelper)));
return users.Select(u => _employeeFullDtoHelper.GetFull(u));
_messageService.Send(MessageAction.UsersUpdatedStatus, _messageTarget.Create(users.Select(x => x.Id)), users.Select(x => x.DisplayUserName(false, _displayUserSettingsHelper)));
foreach (var user in users)
{
yield return await _employeeFullDtoHelper.GetFull(user);
}
}
[HttpPut("type/{type}")]
public IEnumerable<EmployeeDto> UpdateUserType(EmployeeType type, UpdateMembersRequestDto inDto)
public async IAsyncEnumerable<EmployeeDto> UpdateUserType(EmployeeType type, UpdateMembersRequestDto inDto)
{
var users = inDto.UserIds
.Where(userId => !_userManager.IsSystemUser(userId))
@ -1083,9 +1084,12 @@ public class UserController : PeopleControllerBase
}
}
_messageService.Send(MessageAction.UsersUpdatedType, _messageTarget.Create(users.Select(x => x.Id)), users.Select(x => x.DisplayUserName(false, _displayUserSettingsHelper)));
return users.Select(u => _employeeFullDtoHelper.GetFull(u));
_messageService.Send(MessageAction.UsersUpdatedType, _messageTarget.Create(users.Select(x => x.Id)), users.Select(x => x.DisplayUserName(false, _displayUserSettingsHelper)));
foreach (var user in users)
{
yield return await _employeeFullDtoHelper.GetFull(user);
}
}
private void UpdateDepartments(IEnumerable<Guid> department, UserInfo user)

View File

@ -62,7 +62,7 @@ public class GroupFullDtoHelper
_employeeWraperHelper = employeeWraperHelper;
}
public GroupDto Get(GroupInfo group, bool includeMembers)
public async Task<GroupDto> Get(GroupInfo group, bool includeMembers)
{
var result = new GroupDto
{
@ -70,12 +70,17 @@ public class GroupFullDtoHelper
Category = group.CategoryID,
Parent = group.Parent != null ? group.Parent.ID : Guid.Empty,
Name = group.Name,
Manager = _employeeWraperHelper.Get(_userManager.GetUsers(_userManager.GetDepartmentManager(group.ID)))
Manager = await _employeeWraperHelper.Get(_userManager.GetUsers(_userManager.GetDepartmentManager(group.ID)))
};
if (includeMembers)
{
result.Members = new List<EmployeeDto>(_userManager.GetUsersByGroup(group.ID).Select(_employeeWraperHelper.Get));
result.Members = new List<EmployeeDto>();
foreach (var m in _userManager.GetUsersByGroup(group.ID))
{
result.Members.Add(await _employeeWraperHelper.Get(m));
}
}
return result;

View File

@ -28,18 +28,21 @@ namespace ASC.People.ApiModels.ResponseDto;
public class ThumbnailsDataDto
{
public ThumbnailsDataDto(Guid userId, UserPhotoManager userPhotoManager)
{
Original = userPhotoManager.GetPhotoAbsoluteWebPath(userId);
Retina = userPhotoManager.GetRetinaPhotoURL(userId);
Max = userPhotoManager.GetMaxPhotoURL(userId);
Big = userPhotoManager.GetBigPhotoURL(userId);
Medium = userPhotoManager.GetMediumPhotoURL(userId);
Small = userPhotoManager.GetSmallPhotoURL(userId);
}
private ThumbnailsDataDto() { }
public static async Task<ThumbnailsDataDto> Create(Guid userId, UserPhotoManager userPhotoManager)
{
return new ThumbnailsDataDto
{
Original = await userPhotoManager.GetPhotoAbsoluteWebPath(userId),
Retina = await userPhotoManager.GetRetinaPhotoURL(userId),
Max = await userPhotoManager.GetMaxPhotoURL(userId),
Big = await userPhotoManager.GetBigPhotoURL(userId),
Medium = await userPhotoManager.GetMediumPhotoURL(userId),
Small = await userPhotoManager.GetSmallPhotoURL(userId)
};
}
public string Original { get; set; }
public string Retina { get; set; }
public string Max { get; set; }

View File

@ -74,46 +74,59 @@ public class SecurityController : BaseSettingsController
}
[HttpGet("security")]
public IEnumerable<SecurityDto> GetWebItemSecurityInfo([FromQuery] IEnumerable<string> ids)
public async IAsyncEnumerable<SecurityDto> GetWebItemSecurityInfo([FromQuery] IEnumerable<string> ids)
{
if (ids == null || !ids.Any())
{
ids = WebItemManager.GetItemsAll().Select(i => i.ID.ToString());
}
var subItemList = WebItemManager.GetItemsAll().Where(item => item.IsSubItem()).Select(i => i.ID.ToString());
return ids.Select(r => _webItemSecurity.GetSecurityInfo(r))
.Select(i => new SecurityDto
{
WebItemId = i.WebItemId,
Enabled = i.Enabled,
Users = i.Users.Select(_employeeHelperDto.Get),
Groups = i.Groups.Select(g => new GroupSummaryDto(g, _userManager)),
IsSubItem = subItemList.Contains(i.WebItemId),
}).ToList();
}
[HttpGet("security/{id}")]
public bool GetWebItemSecurityInfo(Guid id)
{
var module = WebItemManager[id];
return module != null && !module.IsDisabled(_webItemSecurity, _authContext);
}
[HttpGet("security/modules")]
public object GetEnabledModules()
{
var EnabledModules = _webItemManagerSecurity.GetItems(WebZoneType.All, ItemAvailableState.Normal)
.Where(item => !item.IsSubItem() && item.Visible)
.Select(item => new
{
id = item.ProductClassName.HtmlEncode(),
title = item.Name.HtmlEncode()
});
return EnabledModules;
var subItemList = WebItemManager.GetItemsAll().Where(item => item.IsSubItem()).Select(i => i.ID.ToString());
foreach (var r in ids)
{
var i = _webItemSecurity.GetSecurityInfo(r);
var s = new SecurityDto
{
WebItemId = i.WebItemId,
Enabled = i.Enabled,
Groups = i.Groups.Select(g => new GroupSummaryDto(g, _userManager)),
IsSubItem = subItemList.Contains(i.WebItemId),
};
s.Users = new List<EmployeeDto>();
foreach (var e in i.Users)
{
s.Users.Add(await _employeeHelperDto.Get(e));
}
yield return s;
}
}
[HttpGet("security/{id}")]
public bool GetWebItemSecurityInfo(Guid id)
{
var module = WebItemManager[id];
return module != null && !module.IsDisabled(_webItemSecurity, _authContext);
}
[HttpGet("security/modules")]
public object GetEnabledModules()
{
var EnabledModules = _webItemManagerSecurity.GetItems(WebZoneType.All, ItemAvailableState.Normal)
.Where(item => !item.IsSubItem() && item.Visible)
.Select(item => new
{
id = item.ProductClassName.HtmlEncode(),
title = item.Name.HtmlEncode()
});
return EnabledModules;
}
[HttpGet("security/password")]
@ -142,112 +155,115 @@ public class SecurityController : BaseSettingsController
return userPasswordSettings;
}
[HttpPut("security")]
public IEnumerable<SecurityDto> SetWebItemSecurity(WebItemSecurityRequestsDto inDto)
{
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
_webItemSecurity.SetSecurity(inDto.Id, inDto.Enabled, inDto.Subjects?.ToArray());
var securityInfo = GetWebItemSecurityInfo(new List<string> { inDto.Id });
}
[HttpPut("security")]
public async Task<IEnumerable<SecurityDto>> SetWebItemSecurity(WebItemSecurityRequestsDto inDto)
{
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
_webItemSecurity.SetSecurity(inDto.Id, inDto.Enabled, inDto.Subjects?.ToArray());
var securityInfo = await GetWebItemSecurityInfo(new List<string> { inDto.Id }).ToListAsync();
if (inDto.Subjects == null)
{
return securityInfo;
}
var productName = GetProductName(new Guid(inDto.Id));
if (!inDto.Subjects.Any())
{
_messageService.Send(MessageAction.ProductAccessOpened, productName);
}
else
{
foreach (var info in securityInfo)
{
if (info.Groups.Any())
{
_messageService.Send(MessageAction.GroupsOpenedProductAccess, productName, info.Groups.Select(x => x.Name));
}
if (info.Users.Any())
{
_messageService.Send(MessageAction.UsersOpenedProductAccess, productName, info.Users.Select(x => HttpUtility.HtmlDecode(x.DisplayName)));
}
}
}
return securityInfo;
}
[HttpPut("security/access")]
public IEnumerable<SecurityDto> SetAccessToWebItems(WebItemSecurityRequestsDto inDto)
var productName = GetProductName(new Guid(inDto.Id));
if (!inDto.Subjects.Any())
{
_messageService.Send(MessageAction.ProductAccessOpened, productName);
}
else
{
foreach (var info in securityInfo)
{
if (info.Groups.Any())
{
_messageService.Send(MessageAction.GroupsOpenedProductAccess, productName, info.Groups.Select(x => x.Name));
}
if (info.Users.Any())
{
_messageService.Send(MessageAction.UsersOpenedProductAccess, productName, info.Users.Select(x => HttpUtility.HtmlDecode(x.DisplayName)));
}
}
}
return securityInfo;
}
[HttpPut("security/access")]
public async Task<IEnumerable<SecurityDto>> SetAccessToWebItems(WebItemSecurityRequestsDto inDto)
{
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
var itemList = new ItemDictionary<string, bool>();
foreach (var item in inDto.Items)
{
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
var itemList = new ItemDictionary<string, bool>();
foreach (var item in inDto.Items)
{
if (!itemList.ContainsKey(item.Key))
{
itemList.Add(item.Key, item.Value);
}
}
var defaultPageSettings = _settingsManager.Load<StudioDefaultPageSettings>();
foreach (var item in itemList)
{
Guid[] subjects = null;
var productId = new Guid(item.Key);
if (item.Value)
{
if (WebItemManager[productId] is IProduct webItem || productId == WebItemManager.MailProductID)
{
var productInfo = _webItemSecurity.GetSecurityInfo(item.Key);
var selectedGroups = productInfo.Groups.Select(group => group.ID).ToList();
var selectedUsers = productInfo.Users.Select(user => user.Id).ToList();
selectedUsers.AddRange(selectedGroups);
if (selectedUsers.Count > 0)
{
subjects = selectedUsers.ToArray();
}
}
}
else if (productId == defaultPageSettings.DefaultProductID)
{
_settingsManager.Save(_settingsManager.GetDefault<StudioDefaultPageSettings>());
}
_webItemSecurity.SetSecurity(item.Key, item.Value, subjects);
}
_messageService.Send(MessageAction.ProductsListUpdated);
return GetWebItemSecurityInfo(itemList.Keys.ToList());
}
[HttpGet("security/administrator/{productid}")]
public IEnumerable<EmployeeDto> GetProductAdministrators(Guid productid)
{
return _webItemSecurity.GetProductAdministrators(productid)
.Select(_employeeHelperDto.Get)
.ToList();
}
[HttpGet("security/administrator")]
public object IsProductAdministrator(Guid productid, Guid userid)
{
var result = _webItemSecurity.IsProductAdministrator(productid, userid);
return new { ProductId = productid, UserId = userid, Administrator = result };
}
[HttpPut("security/administrator")]
public object SetProductAdministrator(SecurityRequestsDto inDto)
{
}
var defaultPageSettings = _settingsManager.Load<StudioDefaultPageSettings>();
foreach (var item in itemList)
{
Guid[] subjects = null;
var productId = new Guid(item.Key);
if (item.Value)
{
if (WebItemManager[productId] is IProduct webItem || productId == WebItemManager.MailProductID)
{
var productInfo = _webItemSecurity.GetSecurityInfo(item.Key);
var selectedGroups = productInfo.Groups.Select(group => group.ID).ToList();
var selectedUsers = productInfo.Users.Select(user => user.Id).ToList();
selectedUsers.AddRange(selectedGroups);
if (selectedUsers.Count > 0)
{
subjects = selectedUsers.ToArray();
}
}
}
else if (productId == defaultPageSettings.DefaultProductID)
{
_settingsManager.Save(_settingsManager.GetDefault<StudioDefaultPageSettings>());
}
_webItemSecurity.SetSecurity(item.Key, item.Value, subjects);
}
_messageService.Send(MessageAction.ProductsListUpdated);
return await GetWebItemSecurityInfo(itemList.Keys.ToList()).ToListAsync();
}
[HttpGet("security/administrator/{productid}")]
public async IAsyncEnumerable<EmployeeDto> GetProductAdministrators(Guid productid)
{
var admins = _webItemSecurity.GetProductAdministrators(productid);
foreach (var a in admins)
{
yield return await _employeeHelperDto.Get(a);
}
}
[HttpGet("security/administrator")]
public object IsProductAdministrator(Guid productid, Guid userid)
{
var result = _webItemSecurity.IsProductAdministrator(productid, userid);
return new { ProductId = productid, UserId = userid, Administrator = result };
}
[HttpPut("security/administrator")]
public object SetProductAdministrator(SecurityRequestsDto inDto)
{
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
var isStartup = !_coreBaseSettings.CustomMode && _tenantExtra.Saas && _tenantExtra.GetTenantQuota().Free;
@ -255,22 +271,22 @@ public class SecurityController : BaseSettingsController
{
throw new BillingException(Resource.ErrorNotAllowedOption, "Administrator");
}
_webItemSecurity.SetProductAdministrator(inDto.ProductId, inDto.UserId, inDto.Administrator);
var admin = _userManager.GetUsers(inDto.UserId);
if (inDto.ProductId == Guid.Empty)
{
var messageAction = inDto.Administrator ? MessageAction.AdministratorOpenedFullAccess : MessageAction.AdministratorDeleted;
_messageService.Send(messageAction, _messageTarget.Create(admin.Id), admin.DisplayUserName(false, _displayUserSettingsHelper));
}
else
{
var messageAction = inDto.Administrator ? MessageAction.ProductAddedAdministrator : MessageAction.ProductDeletedAdministrator;
_messageService.Send(messageAction, _messageTarget.Create(admin.Id), GetProductName(inDto.ProductId), admin.DisplayUserName(false, _displayUserSettingsHelper));
}
return new { inDto.ProductId, inDto.UserId, inDto.Administrator };
}
_webItemSecurity.SetProductAdministrator(inDto.ProductId, inDto.UserId, inDto.Administrator);
var admin = _userManager.GetUsers(inDto.UserId);
if (inDto.ProductId == Guid.Empty)
{
var messageAction = inDto.Administrator ? MessageAction.AdministratorOpenedFullAccess : MessageAction.AdministratorDeleted;
_messageService.Send(messageAction, _messageTarget.Create(admin.Id), admin.DisplayUserName(false, _displayUserSettingsHelper));
}
else
{
var messageAction = inDto.Administrator ? MessageAction.ProductAddedAdministrator : MessageAction.ProductDeletedAdministrator;
_messageService.Send(messageAction, _messageTarget.Create(admin.Id), GetProductName(inDto.ProductId), admin.DisplayUserName(false, _displayUserSettingsHelper));
}
return new { inDto.ProductId, inDto.UserId, inDto.Administrator };
}
}

View File

@ -29,7 +29,7 @@ namespace ASC.Web.Api.ApiModel.ResponseDto;
public class SecurityDto
{
public string WebItemId { get; set; }
public IEnumerable<EmployeeDto> Users { get; set; }
public List<EmployeeDto> Users { get; set; }
public IEnumerable<GroupSummaryDto> Groups { get; set; }
public bool Enabled { get; set; }
public bool IsSubItem { get; set; }

View File

@ -38,86 +38,8 @@ public static class UserInfoExtension
return displayUserSettingsHelper.GetFullUserName(userInfo, withHtmlEncode);
}
public static List<UserInfo> SortByUserName(this IEnumerable<UserInfo> userInfoCollection)
public static async Task<string> GetSmallPhotoURL(this UserInfo userInfo, UserPhotoManager UserPhotoManager)
{
if (userInfoCollection == null)
{
return new List<UserInfo>();
}
var users = new List<UserInfo>(userInfoCollection);
users.Sort(UserInfoComparer.Default);
return users;
}
public static bool HasAvatar(this UserInfo userInfo, UserPhotoManager UserPhotoManager)
{
return UserPhotoManager.UserHasAvatar(userInfo.Id);
}
public static Size GetPhotoSize(this UserInfo userInfo, UserPhotoManager UserPhotoManager)
{
return UserPhotoManager.GetPhotoSize(userInfo.Id);
}
public static string GetPhotoURL(this UserInfo userInfo, UserPhotoManager UserPhotoManager)
{
return UserPhotoManager.GetPhotoAbsoluteWebPath(userInfo.Id);
}
public static string GetRetinaPhotoURL(this UserInfo userInfo, UserPhotoManager UserPhotoManager)
{
return UserPhotoManager.GetRetinaPhotoURL(userInfo.Id);
}
public static string GetMaxPhotoURL(this UserInfo userInfo, UserPhotoManager UserPhotoManager)
{
return UserPhotoManager.GetMaxPhotoURL(userInfo.Id);
}
public static string GetBigPhotoURL(this UserInfo userInfo, UserPhotoManager UserPhotoManager)
{
return UserPhotoManager.GetBigPhotoURL(userInfo.Id);
}
public static string GetMediumPhotoURL(this UserInfo userInfo, UserPhotoManager UserPhotoManager)
{
return UserPhotoManager.GetMediumPhotoURL(userInfo.Id);
}
public static string GetSmallPhotoURL(this UserInfo userInfo, UserPhotoManager UserPhotoManager)
{
return UserPhotoManager.GetSmallPhotoURL(userInfo.Id);
}
public static string RenderProfileLinkBase(this UserInfo userInfo, CommonLinkUtility commonLinkUtility, DisplayUserSettingsHelper displayUserSettingsHelper)
{
var sb = new StringBuilder();
//check for removed users
if (userInfo.Id == Constants.LostUser.Id)
{
sb.Append($"<span class='userLink text-medium-describe' style='white-space:nowrap;'>{userInfo.DisplayUserName(displayUserSettingsHelper)}</span>");
}
else
{
var popupID = Guid.NewGuid();
sb.Append($"<span class=\"userLink\" style='white-space:nowrap;' id='{popupID}' data-uid='{userInfo.Id}'>");
sb.Append($"<a class='linkDescribe' href=\"{userInfo.GetUserProfilePageURLGeneral(commonLinkUtility)}\">{userInfo.DisplayUserName(displayUserSettingsHelper)}</a>");
sb.Append("</span>");
sb.AppendFormat("<script language='javascript'> StudioUserProfileInfo.RegistryElement('{0}','\"{1}\"); </script>", popupID, userInfo.Id);
}
return sb.ToString();
}
/// <summary>
/// return absolute profile link
/// </summary>
/// <param name="userInfo"></param>
/// <returns></returns>
private static string GetUserProfilePageURLGeneral(this UserInfo userInfo, CommonLinkUtility commonLinkUtility)
{
return commonLinkUtility.GetUserProfile(userInfo);
return await UserPhotoManager.GetSmallPhotoURL(userInfo.Id);
}
}

View File

@ -252,60 +252,35 @@ public class UserPhotoManager
return _defaultAbsoluteWebPath ??= _webImageSupplier.GetAbsoluteWebPath(_defaultAvatar);
}
public string GetRetinaPhotoURL(Guid userID)
public async Task<string> GetRetinaPhotoURL(Guid userID)
{
return GetRetinaPhotoURL(userID, out _);
return await GetSizedPhotoAbsoluteWebPath(userID, RetinaFotoSize);
}
public string GetRetinaPhotoURL(Guid userID, out bool isdef)
public async Task<string> GetMaxPhotoURL(Guid userID)
{
return GetSizedPhotoAbsoluteWebPath(userID, RetinaFotoSize, out isdef);
return await GetSizedPhotoAbsoluteWebPath(userID, MaxFotoSize);
}
public string GetMaxPhotoURL(Guid userID)
public async Task<string> GetBigPhotoURL(Guid userID)
{
return GetMaxPhotoURL(userID, out _);
return await GetSizedPhotoAbsoluteWebPath(userID, BigFotoSize);
}
public string GetMaxPhotoURL(Guid userID, out bool isdef)
public async Task<string> GetMediumPhotoURL(Guid userID)
{
return GetSizedPhotoAbsoluteWebPath(userID, MaxFotoSize, out isdef);
return await GetSizedPhotoAbsoluteWebPath(userID, MediumFotoSize);
}
public string GetBigPhotoURL(Guid userID)
public async Task<string> GetSmallPhotoURL(Guid userID)
{
return GetBigPhotoURL(userID, out _);
}
public string GetBigPhotoURL(Guid userID, out bool isdef)
{
return GetSizedPhotoAbsoluteWebPath(userID, BigFotoSize, out isdef);
}
public string GetMediumPhotoURL(Guid userID)
{
return GetMediumPhotoURL(userID, out _);
}
public string GetMediumPhotoURL(Guid userID, out bool isdef)
{
return GetSizedPhotoAbsoluteWebPath(userID, MediumFotoSize, out isdef);
}
public string GetSmallPhotoURL(Guid userID)
{
return GetSmallPhotoURL(userID, out _);
}
public string GetSmallPhotoURL(Guid userID, out bool isdef)
{
return GetSizedPhotoAbsoluteWebPath(userID, SmallFotoSize, out isdef);
return await GetSizedPhotoAbsoluteWebPath(userID, SmallFotoSize);
}
public string GetSizedPhotoUrl(Guid userId, int width, int height)
public async Task<string> GetSizedPhotoUrl(Guid userId, int width, int height)
{
return GetSizedPhotoAbsoluteWebPath(userId, new Size(width, height));
return await GetSizedPhotoAbsoluteWebPath(userId, new Size(width, height));
}
@ -359,16 +334,16 @@ public class UserPhotoManager
private static readonly string _tempDomainName = "temp";
public bool UserHasAvatar(Guid userID)
public async Task<bool> UserHasAvatar(Guid userID)
{
var path = GetPhotoAbsoluteWebPath(userID);
var path = await GetPhotoAbsoluteWebPath(userID);
var fileName = Path.GetFileName(path);
return fileName != _defaultAvatar;
}
public string GetPhotoAbsoluteWebPath(Guid userID)
public async Task<string> GetPhotoAbsoluteWebPath(Guid userID)
{
var path = SearchInCache(userID, Size.Empty, out _);
var path = SearchInCache(userID, Size.Empty);
if (!string.IsNullOrEmpty(path))
{
return path;
@ -386,7 +361,7 @@ public class UserPhotoManager
}
else
{
photoUrl = SaveOrUpdatePhoto(userID, data, -1, new Size(-1, -1), false, out fileName);
(photoUrl, fileName) = await SaveOrUpdatePhoto(userID, data, -1, new Size(-1, -1), false);
}
_userPhotoManagerCache.AddToCache(userID, Size.Empty, fileName, _tenant.Id);
@ -399,9 +374,9 @@ public class UserPhotoManager
return GetDefaultPhotoAbsoluteWebPath();
}
internal Size GetPhotoSize(Guid userID)
internal async Task<Size> GetPhotoSize(Guid userID)
{
var virtualPath = GetPhotoAbsoluteWebPath(userID);
var virtualPath = await GetPhotoAbsoluteWebPath(userID);
if (virtualPath == null)
{
return Size.Empty;
@ -420,14 +395,9 @@ public class UserPhotoManager
}
}
private string GetSizedPhotoAbsoluteWebPath(Guid userID, Size size)
private async Task<string> GetSizedPhotoAbsoluteWebPath(Guid userID, Size size)
{
return GetSizedPhotoAbsoluteWebPath(userID, size, out _);
}
private string GetSizedPhotoAbsoluteWebPath(Guid userID, Size size, out bool isdef)
{
var res = SearchInCache(userID, size, out isdef);
var res = SearchInCache(userID, size);
if (!string.IsNullOrEmpty(res))
{
return res;
@ -443,16 +413,14 @@ public class UserPhotoManager
var photoUrl = GetDefaultPhotoAbsoluteWebPath(size);
_userPhotoManagerCache.AddToCache(userID, size, "default", _tenant.Id);
isdef = true;
return photoUrl;
}
//Enqueue for sizing
SizePhoto(userID, data, -1, size);
await SizePhoto(userID, data, -1, size);
}
catch { }
isdef = false;
return GetDefaultPhotoAbsoluteWebPath(size);
}
@ -473,20 +441,17 @@ public class UserPhotoManager
private static readonly object _diskCacheLoaderLock = new object();
private string SearchInCache(Guid userId, Size size, out bool isDef)
private string SearchInCache(Guid userId, Size size)
{
if (!_userPhotoManagerCache.IsCacheLoadedForTenant(Tenant.Id))
{
LoadDiskCache();
}
isDef = false;
var fileName = _userPhotoManagerCache.SearchInCache(userId, size);
if (fileName != null && fileName.StartsWith("default"))
{
isDef = true;
return GetDefaultPhotoAbsoluteWebPath(size);
}
@ -542,9 +507,9 @@ public class UserPhotoManager
_settingsManager.SaveForUser(thumbSettings, userId);
}
public string SaveOrUpdatePhoto(Guid userID, byte[] data)
public async Task<(string, string)> SaveOrUpdatePhoto(Guid userID, byte[] data)
{
return SaveOrUpdatePhoto(userID, data, -1, OriginalFotoSize, true, out _);
return await SaveOrUpdatePhoto(userID, data, -1, OriginalFotoSize, true);
}
public void RemovePhoto(Guid idUser)
@ -573,12 +538,12 @@ public class UserPhotoManager
}
private string SaveOrUpdatePhoto(Guid userID, byte[] data, long maxFileSize, Size size, bool saveInCoreContext, out string fileName)
private async Task<(string, string)> SaveOrUpdatePhoto(Guid userID, byte[] data, long maxFileSize, Size size, bool saveInCoreContext)
{
data = TryParseImage(data, maxFileSize, size, out var imgFormat, out var width, out var height);
var widening = CommonPhotoManager.GetImgFormatName(imgFormat);
fileName = string.Format("{0}_orig_{1}-{2}.{3}", userID, width, height, widening);
var fileName = string.Format("{0}_orig_{1}-{2}.{3}", userID, width, height, widening);
if (saveInCoreContext)
{
@ -598,13 +563,15 @@ public class UserPhotoManager
photoUrl = store.SaveAsync(fileName, stream).Result.ToString();
}
//Queue resizing
SizePhoto(userID, data, -1, SmallFotoSize, true);
SizePhoto(userID, data, -1, MediumFotoSize, true);
SizePhoto(userID, data, -1, BigFotoSize, true);
SizePhoto(userID, data, -1, MaxFotoSize, true);
SizePhoto(userID, data, -1, RetinaFotoSize, true);
var t1 = SizePhoto(userID, data, -1, SmallFotoSize, true);
var t2 = SizePhoto(userID, data, -1, MediumFotoSize, true);
var t3 = SizePhoto(userID, data, -1, BigFotoSize, true);
var t4 = SizePhoto(userID, data, -1, MaxFotoSize, true);
var t5 = SizePhoto(userID, data, -1, RetinaFotoSize, true);
await Task.WhenAll(t1, t2, t3, t4, t5);
}
return photoUrl;
return (photoUrl, fileName);
}
private void SetUserPhotoThumbnailSettings(Guid userId, int width, int height)
@ -705,12 +672,12 @@ public class UserPhotoManager
}
}
private string SizePhoto(Guid userID, byte[] data, long maxFileSize, Size size)
private async Task<string> SizePhoto(Guid userID, byte[] data, long maxFileSize, Size size)
{
return SizePhoto(userID, data, maxFileSize, size, false);
return await SizePhoto(userID, data, maxFileSize, size, false);
}
private string SizePhoto(Guid userID, byte[] data, long maxFileSize, Size size, bool now)
private async Task<string> SizePhoto(Guid userID, byte[] data, long maxFileSize, Size size, bool now)
{
if (data == null || data.Length <= 0)
{
@ -729,22 +696,22 @@ public class UserPhotoManager
if (now)
{
//Resize synchronously
ResizeImage(resizeTask);
return GetSizedPhotoAbsoluteWebPath(userID, size);
await ResizeImage(resizeTask);
return await GetSizedPhotoAbsoluteWebPath(userID, size);
}
else
{
if (!_resizeQueue.GetAllTasks<ResizeWorkerItem>().Any(r => r["key"] == key))
{
//Add
_resizeQueue.EnqueueTask((a, b) => ResizeImage(resizeTask), resizeTask);
_resizeQueue.EnqueueTask(async (a, b) => await ResizeImage(resizeTask), resizeTask);
}
return GetDefaultPhotoAbsoluteWebPath(size);
//NOTE: return default photo here. Since task will update cache
}
}
private void ResizeImage(ResizeWorkerItem item)
private async Task ResizeImage(ResizeWorkerItem item)
{
try
{
@ -770,7 +737,7 @@ public class UserPhotoManager
var fileName = string.Format("{0}_size_{1}-{2}.{3}", item.UserId, item.Size.Width, item.Size.Height, widening);
using var stream2 = new MemoryStream(data);
item.DataStore.SaveAsync(fileName, stream2).Result.ToString();
await item.DataStore.SaveAsync(fileName, stream2);
_userPhotoManagerCache.AddToCache(item.UserId, item.Size, fileName, _tenant.Id);
}

View File

@ -28,17 +28,17 @@ namespace ASC.Web.Core.Users;
public static class UserPhotoThumbnailManager
{
public static List<ThumbnailItem> SaveThumbnails(UserPhotoManager userPhotoManager, SettingsManager settingsManager, int x, int y, int width, int height, Guid userId)
public static async Task<List<ThumbnailItem>> SaveThumbnails(UserPhotoManager userPhotoManager, SettingsManager settingsManager, int x, int y, int width, int height, Guid userId)
{
return SaveThumbnails(userPhotoManager, settingsManager, new UserPhotoThumbnailSettings(x, y, width, height), userId);
return await SaveThumbnails(userPhotoManager, settingsManager, new UserPhotoThumbnailSettings(x, y, width, height), userId);
}
public static List<ThumbnailItem> SaveThumbnails(UserPhotoManager userPhotoManager, SettingsManager settingsManager, Point point, Size size, Guid userId)
public static async Task<List<ThumbnailItem>> SaveThumbnails(UserPhotoManager userPhotoManager, SettingsManager settingsManager, Point point, Size size, Guid userId)
{
return SaveThumbnails(userPhotoManager, settingsManager, new UserPhotoThumbnailSettings(point, size), userId);
return await SaveThumbnails(userPhotoManager, settingsManager, new UserPhotoThumbnailSettings(point, size), userId);
}
public static List<ThumbnailItem> SaveThumbnails(UserPhotoManager userPhotoManager, SettingsManager settingsManager, UserPhotoThumbnailSettings thumbnailSettings, Guid userId)
public static async Task<List<ThumbnailItem>> SaveThumbnails(UserPhotoManager userPhotoManager, SettingsManager settingsManager, UserPhotoThumbnailSettings thumbnailSettings, Guid userId)
{
if (thumbnailSettings.Size.IsEmpty)
{
@ -56,7 +56,7 @@ public static class UserPhotoThumbnailManager
return null;
}
foreach (var thumbnail in thumbnailsData.ThumbnailList())
foreach (var thumbnail in await thumbnailsData.ThumbnailList())
{
thumbnail.Image = GetImage(img, thumbnail.Size, thumbnailSettings);
@ -67,7 +67,7 @@ public static class UserPhotoThumbnailManager
settingsManager.SaveForUser(thumbnailSettings, userId);
return thumbnailsData.ThumbnailList();
return await thumbnailsData.ThumbnailList();
}
public static Image GetImage(Image mainImg, Size size, UserPhotoThumbnailSettings thumbnailSettings)
@ -82,12 +82,12 @@ public static class UserPhotoThumbnailManager
width,
height);
var result = mainImg.Clone(x => x.BackgroundColor(Color.White).Crop(rect).Resize(new ResizeOptions
var result = mainImg.Clone(x => x.BackgroundColor(Color.White).Crop(rect).Resize(new ResizeOptions
{
Size = size
}));
return result;
return result;
}
public static void CheckImgFormat(byte[] data)
@ -216,39 +216,34 @@ public class ThumbnailsData
return img;
}
public string MainImgUrl()
{
return _userPhotoManager.GetPhotoAbsoluteWebPath(_userId);
}
public List<ThumbnailItem> ThumbnailList()
public async Task<List<ThumbnailItem>> ThumbnailList()
{
return new List<ThumbnailItem>
{
new ThumbnailItem
{
Size = UserPhotoManager.RetinaFotoSize,
ImgUrl = _userPhotoManager.GetRetinaPhotoURL(_userId)
ImgUrl = await _userPhotoManager.GetRetinaPhotoURL(_userId)
},
new ThumbnailItem
{
Size = UserPhotoManager.MaxFotoSize,
ImgUrl = _userPhotoManager.GetMaxPhotoURL(_userId)
ImgUrl = await _userPhotoManager.GetMaxPhotoURL(_userId)
},
new ThumbnailItem
{
Size = UserPhotoManager.BigFotoSize,
ImgUrl = _userPhotoManager.GetBigPhotoURL(_userId)
ImgUrl = await _userPhotoManager.GetBigPhotoURL(_userId)
},
new ThumbnailItem
{
Size = UserPhotoManager.MediumFotoSize,
ImgUrl = _userPhotoManager.GetMediumPhotoURL(_userId)
ImgUrl = await _userPhotoManager.GetMediumPhotoURL(_userId)
},
new ThumbnailItem
{
Size = UserPhotoManager.SmallFotoSize,
ImgUrl = _userPhotoManager.GetSmallPhotoURL(_userId)
ImgUrl = await _userPhotoManager.GetSmallPhotoURL(_userId)
}
};
}