Search in sources :

Example 36 with User

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"));
    }
}
Also used : CommunicatorMessage(fi.otavanopisto.muikku.plugins.communicator.model.CommunicatorMessage) User(fi.otavanopisto.muikku.schooldata.entity.User) HashMap(java.util.HashMap) UserEntity(fi.otavanopisto.muikku.model.users.UserEntity) Asynchronous(javax.ejb.Asynchronous) AccessTimeout(javax.ejb.AccessTimeout) Transactional(javax.transaction.Transactional)

Example 37 with User

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();
    }
}
Also used : SchoolDataIdentifier(fi.otavanopisto.muikku.schooldata.SchoolDataIdentifier) User(fi.otavanopisto.muikku.schooldata.entity.User) Path(javax.ws.rs.Path) RESTPermit(fi.otavanopisto.security.rest.RESTPermit) GET(javax.ws.rs.GET)

Example 38 with User

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);
        }
    }
}
Also used : SchoolDataIdentifier(fi.otavanopisto.muikku.schooldata.SchoolDataIdentifier) AuthenticationToken(fi.otavanopisto.muikku.openfire.rest.client.entity.AuthenticationToken) User(fi.otavanopisto.muikku.schooldata.entity.User) SecureRandom(java.security.SecureRandom) RestApiClient(fi.otavanopisto.muikku.openfire.rest.client.RestApiClient) UserEntity(fi.otavanopisto.muikku.openfire.rest.client.entity.UserEntity) TransactionAttribute(javax.ejb.TransactionAttribute) Schedule(javax.ejb.Schedule)

Example 39 with User

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();
    }
}
Also used : SchoolDataIdentifier(fi.otavanopisto.muikku.schooldata.SchoolDataIdentifier) UserSchoolDataIdentifier(fi.otavanopisto.muikku.model.users.UserSchoolDataIdentifier) UserSchoolDataIdentifier(fi.otavanopisto.muikku.model.users.UserSchoolDataIdentifier) CommunicatorMessageId(fi.otavanopisto.muikku.plugins.communicator.model.CommunicatorMessageId) User(fi.otavanopisto.muikku.schooldata.entity.User) CommunicatorMessage(fi.otavanopisto.muikku.plugins.communicator.model.CommunicatorMessage) ArrayList(java.util.ArrayList) WorkspaceUserEntity(fi.otavanopisto.muikku.model.workspace.WorkspaceUserEntity) UserEntity(fi.otavanopisto.muikku.model.users.UserEntity) WorkspaceUserEntity(fi.otavanopisto.muikku.model.workspace.WorkspaceUserEntity) WorkspaceEntity(fi.otavanopisto.muikku.model.workspace.WorkspaceEntity) Workspace(fi.otavanopisto.muikku.schooldata.entity.Workspace)

Example 40 with User

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;
}
Also used : UserSchoolDataIdentifier(fi.otavanopisto.muikku.model.users.UserSchoolDataIdentifier) User(fi.otavanopisto.muikku.schooldata.entity.User) GroupUser(fi.otavanopisto.muikku.schooldata.entity.GroupUser) ArrayList(java.util.ArrayList)

Aggregations

User (fi.otavanopisto.muikku.schooldata.entity.User)48 UserEntity (fi.otavanopisto.muikku.model.users.UserEntity)35 SchoolDataIdentifier (fi.otavanopisto.muikku.schooldata.SchoolDataIdentifier)30 Path (javax.ws.rs.Path)21 WorkspaceUserEntity (fi.otavanopisto.muikku.model.workspace.WorkspaceUserEntity)18 RESTPermit (fi.otavanopisto.security.rest.RESTPermit)17 ArrayList (java.util.ArrayList)16 UserSchoolDataIdentifier (fi.otavanopisto.muikku.model.users.UserSchoolDataIdentifier)14 WorkspaceEntity (fi.otavanopisto.muikku.model.workspace.WorkspaceEntity)14 EnvironmentUser (fi.otavanopisto.muikku.model.users.EnvironmentUser)12 GET (javax.ws.rs.GET)12 HashMap (java.util.HashMap)11 WorkspaceUser (fi.otavanopisto.muikku.schooldata.entity.WorkspaceUser)10 Workspace (fi.otavanopisto.muikku.schooldata.entity.Workspace)9 Date (java.util.Date)8 GradingScale (fi.otavanopisto.muikku.schooldata.entity.GradingScale)7 GradingScaleItem (fi.otavanopisto.muikku.schooldata.entity.GradingScaleItem)7 WorkspaceGradingScale (fi.otavanopisto.muikku.plugins.evaluation.rest.model.WorkspaceGradingScale)6 PUT (javax.ws.rs.PUT)5 RestAssessment (fi.otavanopisto.muikku.plugins.evaluation.rest.model.RestAssessment)4