public async Task <ActionResult <User> > 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.SendOrganizationAddedAsync(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.SendOrganizationInviteAsync(CurrentUser, organization, invite);
            }

            return(Ok(new User {
                EmailAddress = email
            }));
        }
Esempio n. 2
0
        public async Task SendOrganizationInviteAsync() {
            var user = UserData.GenerateSampleUser();
            var organization = OrganizationData.GenerateSampleOrganization(_billingManager, _plans);

            await _mailer.SendOrganizationInviteAsync(user, organization, new Invite {
                DateAdded = SystemClock.UtcNow,
                EmailAddress = _options.EmailOptions.TestEmailAddress,
                Token = "1"
            });

            await RunMailJobAsync();

            if (GetService<IMailSender>() is InMemoryMailSender sender)
                Assert.Contains("Join Organization", sender.LastMessage.Body);
        }
Esempio n. 3
0
    public async Task SendOrganizationInviteAsync()
    {
        var user         = UserData.GenerateSampleUser();
        var organization = OrganizationData.GenerateSampleOrganization(_billingManager, _plans);

        await _mailer.SendOrganizationInviteAsync(user, organization, new Invite {
            DateAdded    = SystemClock.UtcNow,
            EmailAddress = "*****@*****.**",
            Token        = "1"
        });

        await RunMailJobAsync();

        var sender = GetService <IMailSender>() as InMemoryMailSender;

        Assert.NotNull(sender);

        Assert.Contains("Join Organization", sender.LastMessage.Body);
    }