use of com.epam.pipeline.entity.user.PipelineUser in project cloud-pipeline by epam.
the class NotificationManager method notifyRunStatusChanged.
@Transactional(propagation = Propagation.REQUIRED)
public void notifyRunStatusChanged(PipelineRun pipelineRun) {
NotificationSettings runStatusSettings = notificationSettingsManager.load(NotificationType.PIPELINE_RUN_STATUS);
if (runStatusSettings == null || !runStatusSettings.isEnabled()) {
LOGGER.info("No template configured for pipeline run status changes notifications or it was disabled!");
return;
}
NotificationMessage message = new NotificationMessage();
message.setTemplate(new NotificationTemplate(runStatusSettings.getTemplateId()));
message.setTemplateParameters(PipelineRunMapper.map(pipelineRun, null));
List<Long> ccUserIds = getKeepInformedUserIds(runStatusSettings);
if (runStatusSettings.isKeepInformedAdmins()) {
ExtendedRole extendedRole = roleManager.loadRoleWithUsers(DefaultRoles.ROLE_ADMIN.getId());
ccUserIds.addAll(extendedRole.getUsers().stream().map(PipelineUser::getId).collect(Collectors.toList()));
}
message.setCopyUserIds(ccUserIds);
if (runStatusSettings.isKeepInformedOwner()) {
PipelineUser pipelineOwner = userManager.loadUserByName(pipelineRun.getOwner());
message.setToUserId(pipelineOwner.getId());
}
monitoringNotificationDao.createMonitoringNotification(message);
}
use of com.epam.pipeline.entity.user.PipelineUser in project cloud-pipeline by epam.
the class NotificationManager method notifyIssueComment.
@Transactional(propagation = Propagation.REQUIRED)
public void notifyIssueComment(IssueComment comment, Issue issue, String htmlText) {
NotificationSettings newIssueCommentSettings = notificationSettingsManager.load(NotificationType.NEW_ISSUE_COMMENT);
if (newIssueCommentSettings == null || !newIssueCommentSettings.isEnabled()) {
LOGGER.info(messageHelper.getMessage(MessageConstants.INFO_NOTIFICATION_TEMPLATE_NOT_CONFIGURED, "new issue"));
return;
}
NotificationMessage message = new NotificationMessage();
message.setTemplate(new NotificationTemplate(newIssueCommentSettings.getTemplateId()));
AbstractSecuredEntity entity = entityManager.load(issue.getEntity().getEntityClass(), issue.getEntity().getEntityId());
List<PipelineUser> referencedUsers = userManager.loadUsersByNames(Arrays.asList(entity.getOwner(), issue.getAuthor()));
List<Long> ccUserIds = getMentionedUsers(comment.getText());
referencedUsers.stream().filter(u -> u.getUserName().equals(entity.getOwner())).findFirst().ifPresent(owner -> ccUserIds.add(owner.getId()));
message.setCopyUserIds(ccUserIds);
if (newIssueCommentSettings.isKeepInformedOwner()) {
PipelineUser author = referencedUsers.stream().filter(u -> u.getUserName().equals(issue.getAuthor())).findFirst().orElseThrow(() -> new IllegalArgumentException("No issue author was found"));
message.setToUserId(author.getId());
}
IssueComment copyWithHtml = comment.toBuilder().text(htmlText).build();
Map<String, Object> commentParams = jsonMapper.convertValue(copyWithHtml, new TypeReference<Map<String, Object>>() {
});
commentParams.put("issue", jsonMapper.convertValue(issue, new TypeReference<Map<String, Object>>() {
}));
message.setTemplateParameters(commentParams);
monitoringNotificationDao.createMonitoringNotification(message);
}
use of com.epam.pipeline.entity.user.PipelineUser in project cloud-pipeline by epam.
the class SAMLUserDetailsServiceImpl method loadUserBySAML.
@Override
public UserContext loadUserBySAML(SAMLCredential credential) {
String userName = credential.getNameID().getValue().toUpperCase();
List<String> groups = readAuthorities(credential);
Map<String, String> attributes = readAttributes(credential);
PipelineUser loadedUser = userManager.loadUserByName(userName);
if (loadedUser == null) {
String message = messageHelper.getMessage(MessageConstants.ERROR_USER_NAME_NOT_FOUND, userName);
if (!autoCreateUsers) {
throw new UsernameNotFoundException(message);
}
LOGGER.debug(message);
List<Long> roles = roleManager.getDefaultRolesIds();
PipelineUser createdUser = userManager.createUser(userName, roles, groups, attributes, null);
UserContext userContext = new UserContext(createdUser.getId(), userName);
userContext.setGroups(createdUser.getGroups());
LOGGER.debug("Created user {} with groups {}", userName, groups);
userContext.setRoles(createdUser.getRoles());
return userContext;
} else {
LOGGER.debug("Found user by name {}", userName);
loadedUser.setUserName(userName);
List<Long> roles = loadedUser.getRoles().stream().map(Role::getId).collect(Collectors.toList());
if (userManager.needToUpdateUser(groups, attributes, loadedUser)) {
loadedUser = userManager.updateUserSAMLInfo(loadedUser.getId(), userName, roles, groups, attributes);
LOGGER.debug("Updated user groups {} ", groups);
}
return new UserContext(loadedUser);
}
}
use of com.epam.pipeline.entity.user.PipelineUser in project cloud-pipeline by epam.
the class MonitoringNotificationDaoTest method testCreateMonitoringNotifications.
@Test
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void testCreateMonitoringNotifications() {
NotificationTemplate notificationTemplate = notificationTemplateDao.createNotificationTemplate(template);
PipelineUser pipelineUser = userDao.loadUserByName(TEST_USER1);
List<NotificationMessage> messages = IntStream.range(0, 5).mapToObj(i -> {
NotificationMessage notificationMessage = new NotificationMessage();
notificationMessage.setTemplate(notificationTemplate);
notificationMessage.setToUserId(pipelineUser.getId());
notificationMessage.setCopyUserIds(Collections.singletonList(pipelineUser.getId()));
notificationMessage.setTemplateParameters(Collections.singletonMap("test", i));
return notificationMessage;
}).collect(Collectors.toList());
monitoringNotificationDao.createMonitoringNotifications(messages);
List<NotificationMessage> loaded = monitoringNotificationDao.loadAllNotifications();
assertTrue(messages.size() <= loaded.size());
assertTrue(loaded.stream().allMatch(l -> messages.stream().anyMatch(m -> m.getTemplateParameters().equals(l.getTemplateParameters()))));
}
use of com.epam.pipeline.entity.user.PipelineUser in project cloud-pipeline by epam.
the class MonitoringNotificationDaoTest method testLoadMonitoringNotification.
@Test
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void testLoadMonitoringNotification() {
PipelineRun run1 = createTestPipelineRun();
List<PipelineRun> pipelineRuns = pipelineRunDao.loadPipelineRuns(Collections.singletonList(run1.getId()));
NotificationTemplate notificationTemplate = notificationTemplateDao.createNotificationTemplate(template);
notificationMessage = new NotificationMessage();
notificationMessage.setTemplate(notificationTemplate);
PipelineUser pipelineUser = userDao.loadUserByName(TEST_USER1);
notificationMessage.setToUserId(pipelineUser.getId());
notificationMessage.setCopyUserIds(Collections.singletonList(pipelineUser.getId()));
notificationMessage.setTemplateParameters(PipelineRunMapper.map(pipelineRuns.get(0), TEST_THRESHOLD));
monitoringNotificationDao.createMonitoringNotification(notificationMessage);
NotificationMessage actualMessage = monitoringNotificationDao.loadMonitoringNotification(notificationMessage.getId());
assertEquals(notificationMessage.getId(), actualMessage.getId());
assertEquals(notificationMessage.getTemplate().getId(), actualMessage.getTemplate().getId());
assertEquals(user.getId(), notificationMessage.getToUserId());
assertFalse(notificationMessage.getCopyUserIds().isEmpty());
notificationMessage.getTemplateParameters().values().removeIf(Objects::isNull);
notificationMessage.getTemplateParameters().forEach((k, v) -> {
assertTrue(actualMessage.getTemplateParameters().containsKey(k));
assertEquals(v.toString(), actualMessage.getTemplateParameters().get(k).toString());
});
}
Aggregations