public async Task <OrganizationUser> InviteUserAsync(Guid organizationId, Guid invitingUserId, string email, Enums.OrganizationUserType type, IEnumerable <SubvaultUser> subvaults) { if (!(await OrganizationUserHasAdminRightsAsync(organizationId, invitingUserId))) { throw new BadRequestException("Cannot invite users."); } // TODO: make sure user is not already invited // TODO: validate subvaults? var orgUser = new OrganizationUser { OrganizationId = organizationId, UserId = null, Email = email, Key = null, Type = type, Status = Enums.OrganizationUserStatusType.Invited, CreationDate = DateTime.UtcNow, RevisionDate = DateTime.UtcNow }; await _organizationUserRepository.CreateAsync(orgUser); await SaveUserSubvaultsAsync(orgUser, subvaults, true); await SendInviteAsync(organizationId, email); return(orgUser); }
public async Task <OrganizationUser> InviteUserAsync(Guid organizationId, Guid invitingUserId, string email, Enums.OrganizationUserType type, IEnumerable <SubvaultUser> subvaults) { if (!(await OrganizationUserHasAdminRightsAsync(organizationId, invitingUserId))) { throw new BadRequestException("Cannot invite users."); } // Make sure user is not already invited var existingOrgUser = await _organizationUserRepository.GetByOrganizationAsync(organizationId, email); if (existingOrgUser != null) { throw new BadRequestException("User already invited."); } var orgSubvaults = await _subvaultRepository.GetManyByOrganizationIdAsync(organizationId); var filteredSubvaults = subvaults.Where(s => orgSubvaults.Any(os => os.Id == s.SubvaultId)); var orgUser = new OrganizationUser { OrganizationId = organizationId, UserId = null, Email = email, Key = null, Type = type, Status = Enums.OrganizationUserStatusType.Invited, CreationDate = DateTime.UtcNow, RevisionDate = DateTime.UtcNow }; await _organizationUserRepository.CreateAsync(orgUser); await SaveUserSubvaultsAsync(orgUser, filteredSubvaults, true); await SendInviteAsync(orgUser); return(orgUser); }