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()); }
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()); }
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)); }