Esempio n. 1
0
        private async Task SendRecipientLinkEmail(UserLinkModel userLinkModel, IPrincipal principal, string recipient, CancellationToken cancellationToken)
        {
            // lookup user
            var recipientUser = await _userManager.FindByEmailAsync(recipient);

            if (recipientUser == null)
            {
                Logger.LogError("Recipient '{recipient}' not found, can't send email", recipient);
                return;
            }

            // create user link
            var createModel = new LinkTokenCreateModel
            {
                Expires  = DateTimeOffset.UtcNow.AddMonths(1),
                Url      = userLinkModel.LinkUrl,
                UserName = recipientUser.UserName,
                TenantId = _userClaimManager.GetTenantId(principal)
            };

            // create user token
            var token         = _userManager.GenerateNewAuthenticatorKey();
            var createCommand = new LinkTokenCreateCommand(principal, createModel, token);
            var linkToken     = await Mediator.Send(createCommand, cancellationToken).ConfigureAwait(false);

            var scheme = _urlHelper.ActionContext?.HttpContext?.Request?.Scheme ?? "http";

            // create link to send in email
            var emailLink = _urlHelper.Page(
                "/Account/Link",
                pageHandler: null,
                values: new { token },
                protocol: scheme);

            // create email model
            var email = new UserLinkEmail
            {
                RecipientName    = recipientUser.DisplayName,
                RecipientAddress = recipientUser.Email,
                ReplyToName      = userLinkModel.ReplyToName,
                ReplyToAddress   = userLinkModel.ReplyToAddress,
                Subject          = userLinkModel.Subject,
                TextBody         = userLinkModel.TextBody,
                HtmlBody         = userLinkModel.HtmlBody,
                LinkUrl          = emailLink,
                LinkText         = userLinkModel.LinkText
            };

            Logger.LogInformation("Sending user link email to '{recipient}'", recipient);

            await EmailTemplate.SendUserLinkEmail(email).ConfigureAwait(false);
        }
Esempio n. 2
0
        public override async Task <IActionResult> OnGetAsync()
        {
            var loadTask     = base.OnGetAsync();
            var loadMembers  = LoadMembers();
            var loadSessions = LoadSessions();

            // load all in parallel
            await Task.WhenAll(
                loadTask,
                loadMembers,
                loadSessions
                );

            var recipients = GetInstructorEmails();

            Message            = new UserLinkModel();
            Message.Recipients = recipients;

            return(Page());
        }