use of com.redhat.cloud.notifications.recipients.User in project notifications-backend by RedHatInsights.
the class EmailAggregator method getAggregated.
public Map<User, Map<String, Object>> getAggregated(EmailAggregationKey aggregationKey, EmailSubscriptionType emailSubscriptionType, LocalDateTime start, LocalDateTime end) {
Map<User, AbstractEmailPayloadAggregator> aggregated = new HashMap<>();
Set<String> subscribers = getEmailSubscribers(aggregationKey, emailSubscriptionType);
// First, we retrieve all aggregations that match the given key.
List<EmailAggregation> aggregations = emailAggregationRepository.getEmailAggregation(aggregationKey, start, end);
// For each aggregation...
for (EmailAggregation aggregation : aggregations) {
// We need its event type to determine the target endpoints.
String eventType = getEventType(aggregation);
// Let's retrieve these targets.
Set<Endpoint> endpoints = Set.copyOf(endpointRepository.getTargetEmailSubscriptionEndpoints(aggregationKey.getAccountId(), aggregationKey.getBundle(), aggregationKey.getApplication(), eventType));
// Now we want to determine who will actually receive the aggregation email.
// All users who subscribed to the current application and subscription type combination are recipients candidates.
/*
* The actual recipients list may differ from the candidates depending on the endpoint properties and the action settings.
* The target endpoints properties will determine whether or not each candidate will actually receive an email.
*/
Set<User> users = recipientResolver.recipientUsers(aggregationKey.getAccountId(), aggregationKey.getOrgId(), Stream.concat(endpoints.stream().map(EndpointRecipientSettings::new), getActionRecipient(aggregation).stream()).collect(Collectors.toSet()), subscribers);
/*
* We now have the final recipients list.
* Let's populate the Map that will be returned by the method.
*/
users.forEach(user -> {
// It's aggregation time!
fillUsers(aggregationKey, user, aggregated, aggregation);
});
}
return aggregated.entrySet().stream().peek(entry -> {
// TODO These fields could be passed to EmailPayloadAggregatorFactory.by since we know them from the beginning.
entry.getValue().setStartTime(start);
entry.getValue().setEndTimeKey(end);
}).collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().getContext()));
}
use of com.redhat.cloud.notifications.recipients.User in project notifications-backend by RedHatInsights.
the class EmailSubscriptionTypeProcessor method sendEmail.
private List<NotificationHistory> sendEmail(Event event, Set<Endpoint> endpoints, EmailTemplate emailTemplate) {
EmailSubscriptionType emailSubscriptionType = EmailSubscriptionType.INSTANT;
processedEmailCount.increment();
Action action = event.getAction();
TemplateInstance subject;
TemplateInstance body;
if (useTemplatesFromDb) {
Optional<InstantEmailTemplate> instantEmailTemplate = templateRepository.findInstantEmailTemplate(event.getEventType().getId());
if (instantEmailTemplate.isEmpty()) {
return Collections.emptyList();
} else {
String subjectData = instantEmailTemplate.get().getSubjectTemplate().getData();
subject = templateService.compileTemplate(subjectData, "subject");
String bodyData = instantEmailTemplate.get().getBodyTemplate().getData();
body = templateService.compileTemplate(bodyData, "body");
}
} else {
if (!emailTemplate.isSupported(action.getEventType(), emailSubscriptionType)) {
return Collections.emptyList();
}
subject = emailTemplate.getTitle(action.getEventType(), emailSubscriptionType);
body = emailTemplate.getBody(action.getEventType(), emailSubscriptionType);
}
if (subject == null || body == null) {
return Collections.emptyList();
}
Set<RecipientSettings> requests = Stream.concat(endpoints.stream().map(EndpointRecipientSettings::new), ActionRecipientSettings.fromAction(action).stream()).collect(Collectors.toSet());
Set<String> subscribers = Set.copyOf(emailSubscriptionRepository.getEmailSubscribersUserId(action.getAccountId(), action.getBundle(), action.getApplication(), emailSubscriptionType));
LOG.info("sending email for event: " + event);
return recipientResolver.recipientUsers(action.getAccountId(), action.getOrgId(), requests, subscribers).stream().map(user -> emailSender.sendEmail(user, event, subject, body)).filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList());
}
use of com.redhat.cloud.notifications.recipients.User in project notifications-backend by RedHatInsights.
the class ITUserServiceTest method shouldPickPrimaryEMailAsUsersEmail.
@Test
void shouldPickPrimaryEMailAsUsersEmail() {
ITUserResponse itUserResponse = new ITUserResponse();
final PersonalInformation personalInformation = new PersonalInformation();
personalInformation.firstName = "myFirstname";
personalInformation.lastNames = "myLastname";
itUserResponse.personalInformation = personalInformation;
Authentication authentication = new Authentication();
authentication.principal = "myPrincipal";
authentication.providerName = "myProviderName";
itUserResponse.authentications = new ArrayList<>();
itUserResponse.authentications.add(authentication);
final AccountRelationship accountRelationship = new AccountRelationship();
Email primaryEmail = new Email();
primaryEmail.isPrimary = true;
primaryEmail.address = "first_adress@trashmail.org";
Email nonPrimaryEmail = new Email();
nonPrimaryEmail.isPrimary = false;
nonPrimaryEmail.address = "second_adress@trashmail.org";
accountRelationship.emails = new ArrayList<>();
accountRelationship.emails.add(nonPrimaryEmail);
accountRelationship.emails.add(primaryEmail);
itUserResponse.accountRelationships = new ArrayList<>();
itUserResponse.accountRelationships.add(accountRelationship);
itUserResponse.accountRelationships.get(0).permissions = List.of();
List<ITUserResponse> itUserResponses = List.of(itUserResponse);
when(itUserService.getUsers(any(ITUserRequest.class))).thenReturn(itUserResponses);
final List<User> someAccountId = rbacRecipientUsersProvider.getUsers("someAccountId", "someOrgId", true);
assertTrue(someAccountId.get(0).isActive());
assertEquals(someAccountId.get(0).getEmail(), "first_adress@trashmail.org");
}
use of com.redhat.cloud.notifications.recipients.User in project notifications-backend by RedHatInsights.
the class ITUserServiceTest method shouldMapUsersCorrectly.
@Test
void shouldMapUsersCorrectly() {
final RbacRecipientUsersProvider mock = Mockito.mock(RbacRecipientUsersProvider.class);
User mockedUser = createNonAdminMockedUser();
List<User> mockedUsers = List.of(mockedUser);
when(mock.getUsers(anyString(), anyString(), anyBoolean())).thenReturn(mockedUsers);
final List<User> users = mock.getUsers("someAccountId", "someOrgId", false);
final User user = users.get(0);
assertEquals("firstName", user.getFirstName());
assertEquals("lastName", user.getLastName());
assertEquals("userName", user.getUsername());
assertEquals("email@trashmail.xyz", user.getEmail());
assertTrue(user.isActive());
assertFalse(user.isAdmin());
}
use of com.redhat.cloud.notifications.recipients.User in project notifications-backend by RedHatInsights.
the class ITUserServiceTest method createNonAdminMockedUser.
private User createNonAdminMockedUser() {
User mockedUser = new User();
mockedUser.setActive(true);
mockedUser.setLastName("lastName");
mockedUser.setFirstName("firstName");
mockedUser.setUsername("userName");
mockedUser.setEmail("email@trashmail.xyz");
mockedUser.setAdmin(false);
mockedUser.setActive(true);
return mockedUser;
}
Aggregations