public async Task SendEmergencyAccessRecoveryReminder(EmergencyAccess emergencyAccess, string initiatingName, string email)
        {
            var message = CreateDefaultMessage("Pending Emergency Access Request", email);

            var remainingTime = DateTime.UtcNow - emergencyAccess.RecoveryInitiatedDate.GetValueOrDefault();

            var model = new EmergencyAccessRecoveryViewModel
            {
                Name     = CoreHelpers.SanitizeForEmail(initiatingName),
                Action   = emergencyAccess.Type.ToString(),
                DaysLeft = emergencyAccess.WaitTimeDays - Convert.ToInt32((remainingTime).TotalDays),
            };

            await AddMessageContentAsync(message, "EmergencyAccessRecoveryReminder", model);

            message.Category = "EmergencyAccessRecoveryReminder";
            await _mailDeliveryService.SendEmailAsync(message);
        }
        public async Task SendEmergencyAccessInviteEmailAsync(EmergencyAccess emergencyAccess, string name, string token)
        {
            var message = CreateDefaultMessage($"Emergency Access Contact Invite", emergencyAccess.Email);
            var model   = new EmergencyAccessInvitedViewModel
            {
                Name        = CoreHelpers.SanitizeForEmail(name),
                Email       = WebUtility.UrlEncode(emergencyAccess.Email),
                Id          = emergencyAccess.Id.ToString(),
                Token       = WebUtility.UrlEncode(token),
                WebVaultUrl = _globalSettings.BaseServiceUri.VaultWithHash,
                SiteName    = _globalSettings.SiteName
            };

            await AddMessageContentAsync(message, "EmergencyAccessInvited", model);

            message.Category = "EmergencyAccessInvited";
            await _mailDeliveryService.SendEmailAsync(message);
        }
        public async Task SaveAsync(EmergencyAccess emergencyAccess, Guid savingUserId)
        {
            if (emergencyAccess.GrantorId != savingUserId)
            {
                throw new BadRequestException("Emergency Access not valid.");
            }

            if (emergencyAccess.Type == EmergencyAccessType.Takeover)
            {
                var grantor = await _userService.GetUserByIdAsync(emergencyAccess.GrantorId);

                if (grantor.UsesKeyConnector)
                {
                    throw new BadRequestException("You cannot use Emergency Access Takeover because you are using Key Connector.");
                }
            }

            await _emergencyAccessRepository.ReplaceAsync(emergencyAccess);
        }
Пример #4
0
        public async Task <EmergencyAccess> InviteAsync(User invitingUser, string email, EmergencyAccessType type, int waitTime)
        {
            if (!await _userService.CanAccessPremium(invitingUser))
            {
                throw new BadRequestException("Not a premium user.");
            }

            var emergencyAccess = new EmergencyAccess
            {
                GrantorId    = invitingUser.Id,
                Email        = email.ToLowerInvariant(),
                Status       = EmergencyAccessStatusType.Invited,
                Type         = type,
                WaitTimeDays = waitTime,
                CreationDate = DateTime.UtcNow,
                RevisionDate = DateTime.UtcNow,
            };

            await _emergencyAccessRepository.CreateAsync(emergencyAccess);

            await SendInviteAsync(emergencyAccess, NameOrEmail(invitingUser));

            return(emergencyAccess);
        }
Пример #5
0
 private async Task SendInviteAsync(EmergencyAccess emergencyAccess, string invitingUsersName)
 {
     var nowMillis = CoreHelpers.ToEpocMilliseconds(DateTime.UtcNow);
     var token     = _dataProtector.Protect($"EmergencyAccessInvite {emergencyAccess.Id} {emergencyAccess.Email} {nowMillis}");
     await _mailService.SendEmergencyAccessInviteEmailAsync(emergencyAccess, invitingUsersName, token);
 }
Пример #6
0
 private async Task SendInviteAsync(EmergencyAccess emergencyAccess, string invitingUsersName)
 {
     var token = _dataProtectorTokenizer.Protect(new EmergencyAccessInviteTokenable(emergencyAccess, _globalSettings.OrganizationInviteExpirationHours));
     await _mailService.SendEmergencyAccessInviteEmailAsync(emergencyAccess, invitingUsersName, token);
 }
Пример #7
0
 public Task SendEmergencyAccessRecoveryTimedOut(EmergencyAccess ea, string initiatingName, string email)
 {
     return(Task.FromResult(0));
 }
Пример #8
0
 public Task SendEmergencyAccessRecoveryReminder(EmergencyAccess emergencyAccess, string initiatingName, string email)
 {
     return(Task.FromResult(0));
 }
Пример #9
0
 public Task SendEmergencyAccessRecoveryRejected(EmergencyAccess emergencyAccess, string rejectingName, string email)
 {
     return(Task.FromResult(0));
 }
Пример #10
0
 public Task SendEmergencyAccessRecoveryApproved(EmergencyAccess emergencyAccess, string approvingName, string email)
 {
     return(Task.FromResult(0));
 }
Пример #11
0
 public Task SendEmergencyAccessInviteEmailAsync(EmergencyAccess emergencyAccess, string name, string token)
 {
     return(Task.FromResult(0));
 }
Пример #12
0
 public EmergencyAccessInviteTokenable(EmergencyAccess user, int hoursTillExpiration)
 {
     Id             = user.Id;
     Email          = user.Email;
     ExpirationDate = DateTime.UtcNow.AddHours(hoursTillExpiration);
 }