public async Task <IActionResult> PutEventPartner(EventPartner eventPartner)
        {
            // Make sure the person adding the user is either an admin or already a user for the partner
            var currentUser = await userRepository.GetUserByNameIdentifier(User.FindFirst(ClaimTypes.NameIdentifier).Value).ConfigureAwait(false);

            if (!currentUser.IsSiteAdmin)
            {
                var currentUserPartner = partnerUserRepository.GetPartnerUsers().FirstOrDefault(pu => pu.PartnerId == eventPartner.PartnerId && pu.UserId == currentUser.Id);

                if (currentUserPartner == null)
                {
                    return(Forbid());
                }
            }

            eventPartner.LastUpdatedByUserId = currentUser.Id;

            var updatedEventPartner = await eventPartnerRepository.UpdateEventPartner(eventPartner).ConfigureAwait(false);

            var user = await userRepository.GetUserByInternalId(eventPartner.CreatedByUserId).ConfigureAwait(false);

            // Notify Admins that a partner request has been responded to
            var subject     = "A partner request for an event has been responded to!";
            var message     = $"A partner request for an event has been responded to for event {eventPartner.EventId}!";
            var htmlMessage = $"A partner request for an event has been responded to for event {eventPartner.EventId}!";

            var recipients = new List <EmailAddress>
            {
                new EmailAddress {
                    Name = Constants.TrashMobEmailName, Email = Constants.TrashMobEmailAddress
                }
            };

            await emailManager.SendSystemEmail(subject, message, htmlMessage, recipients, CancellationToken.None).ConfigureAwait(false);

            var partnerMessage     = emailManager.GetEmailTemplate(NotificationTypeEnum.EventPartnerResponse.ToString());
            var partnerHtmlMessage = emailManager.GetHtmlEmailTemplate(NotificationTypeEnum.EventPartnerResponse.ToString());
            var partnerSubject     = "A TrashMob.eco Partner has responded to your request!";

            partnerMessage     = partnerMessage.Replace("{UserName}", user.UserName);
            partnerHtmlMessage = partnerHtmlMessage.Replace("{UserName}", user.UserName);

            var dashboardLink = string.Format("https://www.trashmob.eco/manageeventdashboard/{0}", eventPartner.EventId);

            partnerMessage     = partnerMessage.Replace("{PartnerResponseUrl}", dashboardLink);
            partnerHtmlMessage = partnerHtmlMessage.Replace("{PartnerResponseUrl}", dashboardLink);

            var partnerRecipients = new List <EmailAddress>
            {
                new EmailAddress {
                    Name = user.UserName, Email = user.Email
                },
            };

            await emailManager.SendSystemEmail(partnerSubject, partnerMessage, partnerHtmlMessage, partnerRecipients, CancellationToken.None).ConfigureAwait(false);

            return(Ok(updatedEventPartner));
        }
        public async Task <IActionResult> SaveContactRequest(ContactRequest contactRequest)
        {
            await contactRequestRepository.AddContactRequest(contactRequest).ConfigureAwait(false);

            var message     = emailManager.GetEmailTemplate(NotificationTypeEnum.ContactRequestReceived.ToString());
            var htmlMessage = emailManager.GetHtmlEmailTemplate(NotificationTypeEnum.ContactRequestReceived.ToString());
            var subject     = "A Contact Request has been received on TrashMob.eco!";

            message     = message.Replace("{UserName}", contactRequest.Name);
            htmlMessage = htmlMessage.Replace("{UserName}", contactRequest.Name);
            message     = message.Replace("{UserEmail}", contactRequest.Email);
            htmlMessage = htmlMessage.Replace("{UserEmail}", contactRequest.Email);
            message     = message.Replace("{Message}", contactRequest.Message);
            htmlMessage = htmlMessage.Replace("{Message}", contactRequest.Message);

            var recipients = new List <EmailAddress>
            {
                new EmailAddress {
                    Name = Constants.TrashMobEmailName, Email = Constants.TrashMobEmailAddress
                }
            };

            await emailManager.SendSystemEmail(subject, message, htmlMessage, recipients, CancellationToken.None).ConfigureAwait(false);

            return(Ok());
        }
Exemplo n.º 3
0
        public async Task <IActionResult> DeleteEvent(EventCancellationRequest eventCancellationRequest)
        {
            var mobEvent = await eventRepository.GetEvent(eventCancellationRequest.EventId).ConfigureAwait(false);

            var user = await userRepository.GetUserByInternalId(mobEvent.CreatedByUserId).ConfigureAwait(false);

            if (user == null || !ValidateUser(user.NameIdentifier))
            {
                return(Forbid());
            }

            var eventAttendees = await eventAttendeeRepository.GetEventAttendees(eventCancellationRequest.EventId).ConfigureAwait(false);

            await eventRepository.DeleteEvent(eventCancellationRequest.EventId, eventCancellationRequest.CancellationReason).ConfigureAwait(false);

            var message = emailManager.GetEmailTemplate(NotificationTypeEnum.EventCancelledNotice.ToString());

            message = message.Replace("{EventName}", mobEvent.Name);

            var localTime = await mapRepository.GetTimeForPoint(new Tuple <double, double>(mobEvent.Latitude.Value, mobEvent.Longitude.Value), mobEvent.EventDate).ConfigureAwait(false);

            DateTime localDate = (!string.IsNullOrWhiteSpace(localTime)) ? DateTime.Parse(localTime) : mobEvent.EventDate.DateTime;

            message = message.Replace("{EventDate}", localDate.ToString("MMMM dd, yyyy HH:mm tt"));
            message = message.Replace("{CancellationReason}", eventCancellationRequest.CancellationReason);

            var htmlMessage = emailManager.GetHtmlEmailTemplate(NotificationTypeEnum.EventCancelledNotice.ToString());

            htmlMessage = htmlMessage.Replace("{EventName}", mobEvent.Name);

            htmlMessage = htmlMessage.Replace("{EventDate}", localDate.ToString("MMMM dd, yyyy HH:mm tt"));
            htmlMessage = htmlMessage.Replace("{CancellationReason}", eventCancellationRequest.CancellationReason);

            var subject = "A TrashMob.eco event you were scheduled to attend has been cancelled!";

            foreach (var attendee in eventAttendees)
            {
                var userMessage     = message.Replace("{UserName}", attendee.UserName);
                var userHtmlMessage = htmlMessage.Replace("{UserName}", attendee.UserName);

                var recipients = new List <EmailAddress>
                {
                    new EmailAddress {
                        Name = attendee.UserName, Email = attendee.Email
                    },
                };

                await emailManager.SendSystemEmail(subject, userMessage, userHtmlMessage, recipients, CancellationToken.None).ConfigureAwait(false);
            }

            return(Ok(eventCancellationRequest.EventId));
        }
        public async Task <IActionResult> ApprovePartnerRequest(Guid partnerRequestId)
        {
            var user = await userRepository.GetUserByNameIdentifier(User.FindFirst(ClaimTypes.NameIdentifier).Value).ConfigureAwait(false);

            if (!user.IsSiteAdmin)
            {
                return(Forbid());
            }

            var partnerRequest = await partnerRequestRepository.GetPartnerRequest(partnerRequestId).ConfigureAwait(false);

            partnerRequest.PartnerRequestStatusId = (int)PartnerRequestStatusEnum.Approved;

            await partnerRequestRepository.UpdatePartnerRequest(partnerRequest).ConfigureAwait(false);

            await partnerManager.CreatePartner(partnerRequest).ConfigureAwait(false);

            var partnerMessage = emailManager.GetEmailTemplate(NotificationTypeEnum.PartnerRequestAccepted.ToString());

            partnerMessage = partnerMessage.Replace("{PartnerName}", partnerRequest.Name);
            var partnerHtmlMessage = emailManager.GetHtmlEmailTemplate(NotificationTypeEnum.PartnerRequestAccepted.ToString());

            partnerHtmlMessage = partnerHtmlMessage.Replace("{PartnerName}", partnerRequest.Name);
            var partnerSubject = "Your request to become a TrashMob.eco Partner has been accepted!";

            var partnerRecipients = new List <EmailAddress>
            {
                new EmailAddress {
                    Name = partnerRequest.Name, Email = partnerRequest.PrimaryEmail
                },
                new EmailAddress {
                    Name = partnerRequest.Name, Email = partnerRequest.SecondaryEmail
                },
            };

            await emailManager.SendSystemEmail(partnerSubject, partnerMessage, partnerHtmlMessage, partnerRecipients, CancellationToken.None).ConfigureAwait(false);

            return(Ok());
        }
Exemplo n.º 5
0
        public async Task <IActionResult> PostUser(User user)
        {
            User originalUser;

            if ((originalUser = await UserExists(user.NameIdentifier).ConfigureAwait(false)) != null)
            {
                if (!ValidateUser(originalUser.NameIdentifier))
                {
                    return(Forbid());
                }

                originalUser.Email = user.Email;
                originalUser.SourceSystemUserName = user.SourceSystemUserName;

                await userRepository.UpdateUser(originalUser).ConfigureAwait(false);

                var returnedUser = await userRepository.GetUserByNameIdentifier(user.NameIdentifier).ConfigureAwait(false);

                return(Ok(returnedUser));
            }

            if (string.IsNullOrEmpty(user.UserName))
            {
                // On insert we need a random user name to avoid duplicates, but we don't want to show the full email address ever, so take a subset
                // of their email and then add a random number to the end.
                Random rnd     = new();
                var    userNum = rnd.Next(1000000, 9999999).ToString();
                var    first   = user.Email.Split("@")[0];
                user.UserName = first.Substring(0, Math.Min(first.Length - 1, 8)) + userNum;
            }

            var newUser = await userRepository.AddUser(user).ConfigureAwait(false);

            // Notify Admins that a new user has joined
            var message     = $"A new user: {user.Email} has joined TrashMob.eco!";
            var htmlMessage = $"A new user: {user.Email} has joined TrashMob.eco!";
            var subject     = "New User Alert";

            var recipients = new List <EmailAddress>
            {
                new EmailAddress {
                    Name = Constants.TrashMobEmailName, Email = Constants.TrashMobEmailAddress
                }
            };

            await emailManager.SendSystemEmail(subject, message, htmlMessage, recipients, CancellationToken.None).ConfigureAwait(false);

            // Send welcome email to new User
            var welcomeMessage = emailManager.GetEmailTemplate(NotificationTypeEnum.WelcomeToTrashMob.ToString());
            var welcomeSubject = "Welcome to TrashMob.eco!";

            welcomeMessage = welcomeMessage.Replace("{UserName}", user.UserName);

            var welcomeHtmlMessage = emailManager.GetHtmlEmailTemplate(NotificationTypeEnum.WelcomeToTrashMob.ToString());

            welcomeHtmlMessage = welcomeHtmlMessage.Replace("{UserName}", user.UserName);

            var welcomeRecipients = new List <EmailAddress>
            {
                new EmailAddress {
                    Name = user.UserName, Email = user.Email
                }
            };

            await emailManager.SendSystemEmail(welcomeSubject, welcomeMessage, welcomeHtmlMessage, welcomeRecipients, CancellationToken.None).ConfigureAwait(false);

            return(CreatedAtAction(nameof(GetUserByInternalId), new { id = newUser.Id }, newUser));
        }