public async Task <IHttpActionResult> AddUserAsync(string id, string email) { if (String.IsNullOrEmpty(id) || !CanAccessOrganization(id) || String.IsNullOrEmpty(email)) { return(NotFound()); } var organization = await GetModelAsync(id); if (organization == null) { return(NotFound()); } if (!await _billingManager.CanAddUserAsync(organization)) { return(PlanLimitReached("Please upgrade your plan to add an additional user.")); } var user = await _userRepository.GetByEmailAddressAsync(email); if (user != null) { if (!user.OrganizationIds.Contains(organization.Id)) { user.OrganizationIds.Add(organization.Id); await _userRepository.SaveAsync(user, o => o.Cache()); await _messagePublisher.PublishAsync(new UserMembershipChanged { ChangeType = ChangeType.Added, UserId = user.Id, OrganizationId = organization.Id }); } await _mailer.SendAddedToOrganizationAsync(CurrentUser, organization, user); } else { var invite = organization.Invites.FirstOrDefault(i => String.Equals(i.EmailAddress, email, StringComparison.OrdinalIgnoreCase)); if (invite == null) { invite = new Invite { Token = StringExtensions.GetNewToken(), EmailAddress = email.ToLowerInvariant(), DateAdded = SystemClock.UtcNow }; organization.Invites.Add(invite); await _repository.SaveAsync(organization, o => o.Cache()); } await _mailer.SendInviteAsync(CurrentUser, organization, invite); } return(Ok(new User { EmailAddress = email })); }
public async Task <IHttpActionResult> AddUser(string id, string email) { if (String.IsNullOrEmpty(id) || !CanAccessOrganization(id) || String.IsNullOrEmpty(email)) { return(BadRequest()); } Organization organization = _repository.GetById(id); if (organization == null) { return(BadRequest()); } if (!_billingManager.CanAddUser(organization)) { return(PlanLimitReached("Please upgrade your plan to add an additional user.")); } var currentUser = ExceptionlessUser; User user = _userRepository.GetByEmailAddress(email); if (user != null) { if (!user.OrganizationIds.Contains(organization.Id)) { user.OrganizationIds.Add(organization.Id); _userRepository.Save(user); } await _mailer.SendAddedToOrganizationAsync(currentUser, organization, user); } else { Invite invite = organization.Invites.FirstOrDefault(i => String.Equals(i.EmailAddress, email, StringComparison.OrdinalIgnoreCase)); if (invite == null) { invite = new Invite { Token = Guid.NewGuid().ToString("N").ToLower(), EmailAddress = email, DateAdded = DateTime.UtcNow }; organization.Invites.Add(invite); _repository.Save(organization); } await _mailer.SendInviteAsync(currentUser, organization, invite); } if (user != null) { return(Ok(new User { EmailAddress = user.EmailAddress })); } return(Ok()); }
public async Task SendAddedToOrganizationAsync() { User user = UserData.GenerateSampleUser(); Organization organization = OrganizationData.GenerateSampleOrganization(); await _mailer.SendAddedToOrganizationAsync(user, organization, user); await RunMailJobAsync(); }
public User Invite(string id, string emailAddress) { if (String.IsNullOrEmpty(id) || String.IsNullOrEmpty(emailAddress)) { throw new HttpResponseException(BadRequestErrorResponseMessage()); } Organization organization = GetEntity(id); if (organization == null) { throw new HttpResponseException(BadRequestErrorResponseMessage()); } if (!_billingManager.CanAddUser(organization)) { throw new HttpResponseException(PlanLimitReached("Please upgrade your plan to add an additional user.")); } User user = _userRepository.GetByEmailAddress(emailAddress); if (user != null) { if (!user.OrganizationIds.Contains(organization.Id)) { user.OrganizationIds.Add(organization.Id); _userRepository.Update(user); } _mailer.SendAddedToOrganizationAsync(User.UserEntity, organization, user); } else { Invite invite = organization.Invites.FirstOrDefault(i => String.Equals(i.EmailAddress, emailAddress, StringComparison.OrdinalIgnoreCase)); if (invite == null) { invite = new Invite { Token = Guid.NewGuid().ToString("N").ToLower(), EmailAddress = emailAddress, DateAdded = DateTime.UtcNow }; organization.Invites.Add(invite); _repository.Update(organization); } _mailer.SendInviteAsync(User.UserEntity, organization, invite); } _notificationSender.OrganizationUpdated(organization.Id); return(user != null ? new User { EmailAddress = user.EmailAddress } : null); }