@Override protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException { // get current user String user = request.getRemoteUser(); if (user == null) { response.sendError( HttpServletResponse.SC_UNAUTHORIZED, "User must be logged in to check their status"); } LOGGER.info("GET to PresenceContactsServlet (" + user + ")"); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); try { Writer writer = response.getWriter(); ExtendedJSONWriter output = new ExtendedJSONWriter(writer); // start JSON object output.object(); PresenceUtils.makePresenceJSON(output, user, presenceService, true); // add in the list of contacts info Session session = request.getResourceResolver().adaptTo(Session.class); List<String> userIds = connectionManager.getConnectedUsers(user, ConnectionState.ACCEPTED); output.key("contacts"); output.array(); for (String userId : userIds) { output.object(); // put in the basics PresenceUtils.makePresenceJSON(output, userId, presenceService, true); // add in the profile output.key("profile"); Authorizable au = PersonalUtils.getAuthorizable(session, userId); Node profileNode = (Node) session.getItem(PersonalUtils.getProfilePath(au)); ExtendedJSONWriter.writeNodeToWriter(output, profileNode); output.endObject(); } output.endArray(); // finish it output.endObject(); } catch (JSONException e) { LOGGER.error(e.getMessage(), e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); } catch (RepositoryException e) { LOGGER.error(e.getMessage(), e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); } return; }
public void process(Authorizable authorizable, Session session, Modification change) throws Exception { LOGGER.debug("Starting MessageAuthorizablePostProcessor process"); if (authorizable != null && authorizable.getID() != null && !authorizable.isGroup()) { PrincipalManager principalManager = AccessControlUtil.getPrincipalManager(session); String path = PersonalUtils.getHomeFolder(authorizable) + "/" + MessageConstants.FOLDER_MESSAGES; LOGGER.debug("Getting/creating message store node: {}", path); Node messageStore = JcrUtils.deepGetOrCreateNode(session, path); messageStore.setProperty( JcrResourceConstants.SLING_RESOURCE_TYPE_PROPERTY, MessageConstants.SAKAI_MESSAGESTORE_RT); // ACL's are managed by the Personal User Post processor. Principal anon = new Principal() { public String getName() { return UserConstants.ANON_USERID; } }; Principal everyone = principalManager.getEveryone(); // The user can do everything on this node. replaceAccessControlEntry( session, path, authorizable.getPrincipal(), new String[] {JCR_ALL}, null, null, null); // explicitly deny anon and everyone, this is private space. String[] deniedPrivs = new String[] {JCR_READ, JCR_WRITE}; replaceAccessControlEntry(session, path, anon, null, deniedPrivs, null, null); replaceAccessControlEntry(session, path, everyone, null, deniedPrivs, null, null); } }
/** * Returns the path to the activity feed for a user. * * @param user * @return */ public static String getUserFeed(Authorizable user) { return PersonalUtils.getPrivatePath(user) + "/" + ActivityConstants.ACTIVITY_FEED_NAME; }
protected String getMemberNodePath(String filePath, Authorizable authorizable) throws RepositoryException { return filePath + POOLED_CONTENT_MEMBERS_NODE + PersonalUtils.getUserHashedPath(authorizable); }