use of fi.otavanopisto.muikku.schooldata.entity.User in project muikku by otavanopisto.
the class CommunicatorMessageSentNotifier method onCommunicatorMessageSent.
@Asynchronous
@AccessTimeout(value = 30, unit = TimeUnit.MINUTES)
@Transactional(value = TxType.REQUIRES_NEW)
public void onCommunicatorMessageSent(@Observes(during = TransactionPhase.AFTER_COMPLETION) CommunicatorMessageSent event) {
CommunicatorMessage communicatorMessage = communicatorController.findCommunicatorMessageById(event.getCommunicatorMessageId());
UserEntity sender = userEntityController.findUserEntityById(communicatorMessage.getSender());
UserEntity recipient = userEntityController.findUserEntityById(event.getRecipientUserEntityId());
if ((communicatorMessage != null) && (sender != null) && (recipient != null)) {
if (!Objects.equals(sender.getId(), recipient.getId())) {
Map<String, Object> params = new HashMap<String, Object>();
User senderUser = userController.findUserByUserEntityDefaults(sender);
params.put("sender", String.format("%s %s", senderUser.getFirstName(), senderUser.getLastName()));
params.put("subject", communicatorMessage.getCaption());
params.put("content", communicatorMessage.getContent());
params.put("url", String.format("%s/communicator", event.getBaseUrl()));
// TODO Hash paramters cannot be utilized in redirect URLs
// params.put("url", String.format("%s/communicator#inbox/%d", baseUrl, message.getCommunicatorMessageId().getId()));
notifierController.sendNotification(communicatorNewInboxMessageNotification, sender, recipient, params);
}
} else {
logger.log(Level.SEVERE, String.format("Communicator couldn't send notifications as some entity was not found"));
}
}
use of fi.otavanopisto.muikku.schooldata.entity.User in project muikku by otavanopisto.
the class ChatRESTService method chatStatus.
@GET
@Path("/status")
@RESTPermit(handling = Handling.INLINE)
public Response chatStatus() {
if (!sessionController.isLoggedIn()) {
return Response.status(Status.FORBIDDEN).entity("Must be logged in").build();
}
String enabledUsersCsv = pluginSettingsController.getPluginSetting("chat", "enabledUsers");
if (enabledUsersCsv == null) {
enabledUsersCsv = "";
}
List<String> enabledUsers = Arrays.asList(enabledUsersCsv.split(","));
SchoolDataIdentifier identifier = sessionController.getLoggedUser();
if (identifier == null) {
return Response.status(Status.INTERNAL_SERVER_ERROR).entity("Couldn't find logged user").build();
}
User user = userController.findUserByIdentifier(identifier);
if (user == null) {
return Response.status(Status.INTERNAL_SERVER_ERROR).entity("Logged user doesn't exist").build();
}
if (enabledUsers.contains(identifier.toId())) {
return Response.ok(new StatusRESTModel(true, user.getDisplayName())).build();
} else {
return Response.ok(new StatusRESTModel(false, null)).build();
}
}
use of fi.otavanopisto.muikku.schooldata.entity.User in project muikku by otavanopisto.
the class ChatUserSyncScheduler method updateChatUsers.
@Schedule(second = "0", minute = "*/15", hour = "*", persistent = false)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void updateChatUsers() {
String enabledUsersCsv = pluginSettingsController.getPluginSetting("chat", "enabledUsers");
if (enabledUsersCsv == null) {
return;
}
List<String> enabledUsers = Arrays.asList(enabledUsersCsv.split(","));
String openfireToken = pluginSettingsController.getPluginSetting("chat", "openfireToken");
if (openfireToken == null) {
logger.log(Level.INFO, "No openfire token set, skipping user sync");
return;
}
String openfireUrl = pluginSettingsController.getPluginSetting("chat", "openfireUrl");
if (openfireUrl == null) {
logger.log(Level.INFO, "No openfire url set, skipping user sync");
return;
}
String openfirePort = pluginSettingsController.getPluginSetting("chat", "openfirePort");
if (openfirePort == null) {
logger.log(Level.INFO, "No openfire port set, skipping user sync");
return;
}
if (!StringUtils.isNumeric(openfirePort)) {
logger.log(Level.WARNING, "Invalid openfire port, skipping user sync");
return;
}
AuthenticationToken token = new AuthenticationToken(openfireToken);
RestApiClient client = new RestApiClient(openfireUrl, Integer.parseInt(openfirePort, 10), token);
SecureRandom random = new SecureRandom();
for (String enabledUser : enabledUsers) {
try {
// Checking before creating is subject to a race condition, but in the worst case
// the creation just fails, resulting in a log entry
UserEntity userEntity = client.getUser(enabledUser);
if (userEntity == null) {
logger.log(Level.INFO, "Syncing chat user " + enabledUser);
SchoolDataIdentifier identifier = SchoolDataIdentifier.fromId(enabledUser);
if (identifier == null) {
logger.log(Level.WARNING, "Invalid user identifier " + enabledUser + ", skipping...");
continue;
}
User user = userController.findUserByIdentifier(identifier);
if (user == null) {
logger.log(Level.WARNING, "No user found for identifier " + enabledUser + ", skipping...");
continue;
}
// Can't leave the password empty, so next best thing is random passwords
// The passwords are not actually used
byte[] passwordBytes = new byte[20];
random.nextBytes(passwordBytes);
String password = Base64.encodeBase64String(passwordBytes);
userEntity = new UserEntity(enabledUser, user.getDisplayName(), "", password);
client.createUser(userEntity);
}
} catch (Exception e) {
logger.log(Level.INFO, "Exception when syncing user " + enabledUser, e);
}
}
}
use of fi.otavanopisto.muikku.schooldata.entity.User in project muikku by otavanopisto.
the class CommunicatorAssessmentRequestController method sendAssessmentRequestMessage.
public CommunicatorMessage sendAssessmentRequestMessage(WorkspaceAssessmentRequest assessmentRequest) {
SchoolDataIdentifier workspaceUserIdentifier = new SchoolDataIdentifier(assessmentRequest.getWorkspaceUserIdentifier(), assessmentRequest.getWorkspaceUserSchoolDataSource());
WorkspaceUserEntity workspaceUserEntity = workspaceUserEntityController.findWorkspaceUserEntityByWorkspaceUserIdentifier(workspaceUserIdentifier);
if (workspaceUserEntity == null) {
logger.severe(String.format("Could not find workspace user entity for identifier", workspaceUserIdentifier));
return null;
}
UserSchoolDataIdentifier userSchoolDataIdentifier = workspaceUserEntity.getUserSchoolDataIdentifier();
if (userSchoolDataIdentifier == null) {
logger.severe(String.format("Could not find userSchoolDataIdentifier for workspace user entity %d", workspaceUserEntity.getId()));
return null;
}
WorkspaceEntity workspaceEntity = workspaceUserEntity.getWorkspaceEntity();
if (workspaceEntity == null) {
logger.severe(String.format("Could not find workspaceEntity for workspace user entity %d", workspaceUserEntity.getId()));
return null;
}
UserEntity studentEntity = userSchoolDataIdentifier.getUserEntity();
if (studentEntity == null) {
logger.severe(String.format("Could not find studentEntity for workspace user entity %d", workspaceUserEntity.getId()));
return null;
}
CommunicatorMessageId communicatorMessageId = assessmentRequestController.findCommunicatorMessageId(workspaceUserEntity);
schoolDataBridgeSessionController.startSystemSession();
try {
SchoolDataIdentifier studentIdentifier = new SchoolDataIdentifier(userSchoolDataIdentifier.getIdentifier(), userSchoolDataIdentifier.getDataSource().getIdentifier());
List<UserEntity> teachers = new ArrayList<UserEntity>();
List<WorkspaceUserEntity> workspaceTeachers = workspaceUserEntityController.listActiveWorkspaceStaffMembers(workspaceEntity);
for (WorkspaceUserEntity workspaceTeacher : workspaceTeachers) {
teachers.add(workspaceTeacher.getUserSchoolDataIdentifier().getUserEntity());
}
User student = userController.findUserByIdentifier(studentIdentifier);
if (student == null) {
logger.severe(String.format("Could not find student %s", studentIdentifier));
return null;
}
Workspace workspace = workspaceController.findWorkspace(workspaceEntity);
if (workspace == null) {
logger.severe(String.format("Could not find workspace for workspace entity %d", workspaceEntity.getId()));
return null;
}
String messageCategory = getText("plugin.communicator.assessmentrequest.category");
String messageTitle = assessmentRequestTitle(workspace, student);
String messageBody = assessmentRequestBody(workspace, student, assessmentRequest.getRequestText());
List<String> teacherEmails = new ArrayList<>(teachers.size());
for (UserEntity teacher : teachers) {
String teacherEmail = userEmailEntityController.getUserDefaultEmailAddress(teacher, false);
if (StringUtils.isNotBlank(teacherEmail)) {
teacherEmails.add(teacherEmail);
}
}
if (!teacherEmails.isEmpty()) {
mailer.sendMail(MailType.HTML, teacherEmails, messageTitle, messageBody);
}
if (communicatorMessageId != null) {
return communicatorController.replyToMessage(studentEntity, messageCategory, messageTitle, messageBody, teachers, communicatorMessageId);
} else {
CommunicatorMessage postMessage = communicatorController.postMessage(studentEntity, messageCategory, messageTitle, messageBody, teachers);
assessmentRequestController.setCommunicatorMessageId(assessmentRequest, postMessage.getCommunicatorMessageId());
return postMessage;
}
} finally {
schoolDataBridgeSessionController.endSystemSession();
}
}
use of fi.otavanopisto.muikku.schooldata.entity.User in project muikku by otavanopisto.
the class UserSchoolDataController method listUsersByEntity.
public List<User> listUsersByEntity(UserEntity userEntity) {
List<User> result = new ArrayList<>();
List<UserSchoolDataIdentifier> identifiers = userSchoolDataIdentifierDAO.listByUserEntityAndArchived(userEntity, Boolean.FALSE);
for (UserSchoolDataIdentifier identifier : identifiers) {
UserSchoolDataBridge userBridge = getUserBridge(identifier.getDataSource());
User user = findUserByIdentifier(userBridge, identifier.getIdentifier());
if (user != null) {
result.add(user);
}
}
return result;
}
Aggregations