Api.Core: added employee type

This commit is contained in:
Maksim Chegulov 2022-10-26 17:38:47 +03:00
parent a7f75bcffe
commit eb485d035a
6 changed files with 50 additions and 31 deletions

View File

@ -62,9 +62,9 @@ public class DocSpaceLinkHelper
return _signature.Create(linkId);
}
public string MakeKey(string email)
public string MakeKey(string email, EmployeeType employeeType)
{
return email + ConfirmType.LinkInvite.ToStringFast() + EmployeeType.User.ToStringFast();
return email + ConfirmType.LinkInvite.ToStringFast() + employeeType.ToStringFast();
}
public Guid Parse(string key)
@ -72,14 +72,14 @@ public class DocSpaceLinkHelper
return _signature.Read<Guid>(key);
}
public ValidationResult Validate(string key, string email)
public ValidationResult Validate(string key, string email, EmployeeType employeeType)
{
return string.IsNullOrEmpty(email) ? ValidateExternalLink(key) : ValidateEmailLink(email, key);
return string.IsNullOrEmpty(email) ? ValidateRoomExternalLink(key) : ValidateEmailLink(email, key, employeeType);
}
private ValidationResult ValidateEmailLink(string email, string key)
public ValidationResult ValidateEmailLink(string email, string key, EmployeeType employeeType)
{
var result = _emailValidationKeyProvider.ValidateEmailKey(MakeKey(email), key, ExpirationInterval);
var result = _emailValidationKeyProvider.ValidateEmailKey(MakeKey(email, employeeType), key, ExpirationInterval);
if (result == ValidationResult.Ok)
{
@ -94,16 +94,16 @@ public class DocSpaceLinkHelper
return result;
}
private ValidationResult ValidateExternalLink(string key)
public ValidationResult ValidateRoomExternalLink(string key)
{
var payload = Parse(key);
if (payload == default)
{
return ValidationResult.Invalid;
}
return payload == default ? ValidationResult.Invalid : ValidationResult.Ok;
}
return ValidationResult.Ok;
public ValidationResult ValidateExtarnalLink(string key, EmployeeType employeeType)
{
return _emailValidationKeyProvider.ValidateEmailKey(ConfirmType.LinkInvite.ToStringFast() + (int)employeeType, key);
}
private bool CanUsed(string email, string key, TimeSpan interval)

View File

@ -110,11 +110,12 @@ public class EmailValidationKeyModelHelper
break;
case ConfirmType.LinkInvite:
checkKeyResult = _docSpaceLinkHelper.Validate(key, email);
checkKeyResult = string.IsNullOrEmpty(email) ? _docSpaceLinkHelper.ValidateRoomExternalLink(key)
: _docSpaceLinkHelper.ValidateEmailLink(email, key, emplType ?? default);
if (checkKeyResult == ValidationResult.Invalid)
{
checkKeyResult = _provider.ValidateEmailKey(type.ToString() + (int)emplType, key, _provider.ValidEmailKeyInterval);
checkKeyResult = _provider.ValidateEmailKey(type.ToString() + (int)(emplType ?? default), key, _provider.ValidEmailKeyInterval);
}
break;

View File

@ -3139,7 +3139,7 @@ public class FileStorageService<T> //: IFileStorageService
continue;
}
var link = _roomLinkService.GetInvitationLink(user.Email, _authContext.CurrentAccount.ID);
var link = _roomLinkService.GetInvitationLink(user.Email, share.Access, _authContext.CurrentAccount.ID);
_studioNotifyService.SendEmailRoomInvite(user.Email, link);
}
}

View File

@ -47,26 +47,33 @@ public class RoomLinkService
return _commonLinkUtility.GetConfirmationUrl(key, ConfirmType.LinkInvite, createdBy);
}
public string GetInvitationLink(string email, Guid createdBy)
public string GetInvitationLink(string email, FileShare share, Guid createdBy)
{
var link = _commonLinkUtility.GetConfirmationEmailUrl(email, ConfirmType.LinkInvite, EmployeeType.User, createdBy)
+ $"&emplType={EmployeeType.User:d}";
var type = DocSpaceHelper.PaidRights.Contains(share) ? EmployeeType.User : EmployeeType.Visitor;
var link = _commonLinkUtility.GetConfirmationEmailUrl(email, ConfirmType.LinkInvite, type, createdBy)
+ $"&emplType={type:d}";
return link;
}
public string GetInvitationLink(string email, EmployeeType employeeType, Guid createdBy)
{
var link = _commonLinkUtility.GetConfirmationEmailUrl(email, ConfirmType.LinkInvite, employeeType, createdBy)
+ $"&emplType={employeeType:d}";
return link;
}
public async Task<LinkOptions> GetOptionsAsync(string key, string email)
{
return await GetOptionsAsync(key, email, EmployeeType.All);
}
public async Task<LinkOptions> GetOptionsAsync(string key, string email, EmployeeType employeeType)
{
var options = new LinkOptions();
if (string.IsNullOrEmpty(key))
{
options.Type = LinkType.DefaultInvintation;
options.IsCorrect = true;
return options;
}
var payload = _docSpaceLinksHelper.Parse(key);
if (payload != default)
@ -76,16 +83,24 @@ public class RoomLinkService
if (record != null)
{
options.IsCorrect = true;
options.Type = LinkType.InvintationToRoom;
options.LinkType = LinkType.InvintationToRoom;
options.RoomId = record.EntryId.ToString();
options.Share = record.Share;
options.Id = record.Subject;
options.EmployeeType = DocSpaceHelper.PaidRights.Contains(record.Share) ? EmployeeType.User : EmployeeType.Visitor;
}
}
else if (_docSpaceLinksHelper.Validate(key, email) == EmailValidationKeyProvider.ValidationResult.Ok)
else if (_docSpaceLinksHelper.ValidateEmailLink(email, key, employeeType) == EmailValidationKeyProvider.ValidationResult.Ok)
{
options.IsCorrect = true;
options.Type = LinkType.InvintationByEmail;
options.LinkType = LinkType.InvintationByEmail;
options.EmployeeType = employeeType;
}
else if (_docSpaceLinksHelper.ValidateExtarnalLink(key, employeeType) == EmailValidationKeyProvider.ValidationResult.Ok)
{
options.LinkType = LinkType.DefaultInvintation;
options.IsCorrect = true;
options.EmployeeType = employeeType;
}
return options;
@ -107,7 +122,8 @@ public class LinkOptions
public Guid Id { get; set; }
public string RoomId { get; set; }
public FileShare Share { get; set; }
public LinkType Type { get; set; }
public LinkType LinkType { get; set; }
public EmployeeType EmployeeType { get; set; }
public bool IsCorrect { get; set; }
}

View File

@ -28,6 +28,8 @@ namespace ASC.Files.Core.Helpers;
public static class DocSpaceHelper
{
public static HashSet<FileShare> PaidRights { get; } = new HashSet<FileShare> { FileShare.RoomManager };
private static readonly HashSet<FileShare> _fillingFormRoomConstraints
= new HashSet<FileShare> { FileShare.RoomManager, FileShare.ReadWrite, FileShare.FillForms, FileShare.Read };
private static readonly HashSet<FileShare> _editingRoomConstraints

View File

@ -157,7 +157,7 @@ public class FileSharingAceHelper<T>
if (!string.IsNullOrEmpty(w.Email))
{
var link = _roomLinkService.GetInvitationLink(w.Email, _authContext.CurrentAccount.ID);
var link = _roomLinkService.GetInvitationLink(w.Email, share, _authContext.CurrentAccount.ID);
_studioNotifyService.SendEmailRoomInvite(w.Email, link);
_logger.Debug(link);
}