for (Group group : getPublicSharedGroups()) { roster = getRoster(userToUpdate.getNode()); sendSubscribeRequest(userJID, userToUpdate, false); deleteRoster(userJID);
users.addAll(group.getAdmins()); Collection<JID> affectedUsers = getAffectedUsers(group, originalValue, group.getProperties().get("sharedRoster.groupList")); groupUserDeleted(group, affectedUsers, deletedUser); groupUserAdded(group, user); users.addAll(group.getAdmins()); Collection<JID> affectedUsers = getAffectedUsers(group, group.getProperties().get("sharedRoster.showInRoster"), originalValue); groupUserDeleted(group, affectedUsers, deletedUser); groupUserAdded(group, user); if (!isSharedGroup(group)) { return; Collection<JID> users = getAffectedUsers(group); if (server.isLocal(updatedUser)) { try { roster = getRoster(updatedUser.getNode());
@Override public void userModified(User user, Map<String,Object> params) { if ("nameModified".equals(params.get("type"))) { for (Group group : getSharedGroups(user.getUsername())) { ArrayList<JID> groupUsers = new ArrayList<>(); groupUsers.addAll(group.getAdmins()); groupUsers.addAll(group.getMembers()); for (JID groupUser : groupUsers) { rosterCache.remove(groupUser.getNode()); } } } }
/** * Notification that a Group user has been added. Update the group users' roster accordingly. * * @param group the group where the user was added. * @param addedUser the username of the user that has been added to the group. */ private void groupUserAdded(Group group, JID addedUser) { groupUserAdded(group, getAffectedUsers(group), addedUser); }
/** * Notification that a Group user has been deleted. Update the group users' roster accordingly. * * @param group the group from where the user was deleted. * @param deletedUser the username of the user that has been deleted from the group. */ private void groupUserDeleted(Group group, JID deletedUser) { groupUserDeleted(group, getAffectedUsers(group), deletedUser); }
@Override public void memberAdded(Group group, Map params) { JID addedUser = new JID((String) params.get("member")); // Do nothing if the user was an admin that became a member if (group.getAdmins().contains(addedUser)) { return; } if (!isSharedGroup(group)) { for (Group visibleGroup : getVisibleGroups(group)) { // Get the list of affected users Collection<JID> users = new HashSet<>(visibleGroup.getMembers()); users.addAll(visibleGroup.getAdmins()); groupUserAdded(visibleGroup, users, addedUser); } } else { groupUserAdded(group, addedUser); } }
@Override public void adminRemoved(Group group, Map params) { JID deletedUser = new JID((String) params.get("admin")); // Do nothing if the user is still a member if (group.getMembers().contains(deletedUser)) { return; } // Do nothing if the group is not being shown in group members' rosters if (!isSharedGroup(group)) { for (Group visibleGroup : getVisibleGroups(group)) { // Get the list of affected users Collection<JID> users = new HashSet<>(visibleGroup.getMembers()); users.addAll(visibleGroup.getAdmins()); groupUserDeleted(visibleGroup, users, deletedUser); } } else { groupUserDeleted(group, deletedUser); } }
if (!RosterManager.isRosterServiceEnabled()) { return; try { if (name != null && !"".equals(name)) { Roster roster = rosterManager.getRoster(name); roster.broadcastPresence(update);
private Roster getRoster() { try { return XMPPServer.getInstance().getRosterManager().getRoster(userJID.getNode()); } catch (UserNotFoundException e) { Log.warn("Roster not found for user: " + userJID); } return null; }
for (Group group : getPublicSharedGroups()) { roster = getRoster(userToUpdate.getNode()); sendSubscribeRequest(newUserJID, userToUpdate, true);
Collection<Group> sharedGroups = rosterManager.getSharedGroups(username); Iterator<RosterItem> items = RosterManager.getRosterItemProvider().getItems(username); while (items.hasNext()) { RosterItem item = items.next(); if (rosterManager.hasMutualVisibility(username, sharedGroups, jid, itemGroups)) { item.setSubStatus(RosterItem.SUB_BOTH); } else {
if (server.isLocal(deletedUser)) { try { deletedUserRoster = getRoster(deletedUser.getNode()); } catch (UserNotFoundException e) { Log.warn( "Unexpected exception while deleting user '{}' from group '{}'.", deletedUser, group, e ); roster = getRoster(userToUpdate.getNode()); sendSubscribeRequest(userToUpdate, deletedUser, false); sendSubscribeRequest(deletedUser, userToUpdate, false);
rosterItem = RosterManager.getRosterItemProvider().createItem(username, rosterItem);
/** * Returns all the users that are related to a shared group. This is the logic that we are * using: 1) If the group visiblity is configured as "Everybody" then all users in the system or * all logged users in the system will be returned (configurable thorugh the "filterOffline" * flag), 2) if the group visiblity is configured as "onlyGroup" then all the group users will * be included in the answer and 3) if the group visiblity is configured as "onlyGroup" and * the group allows other groups to include the group in the groups users' roster then all * the users of the allowed groups will be included in the answer. */ private Collection<JID> getAffectedUsers(Group group) { return getAffectedUsers(group, group.getProperties().get("sharedRoster.showInRoster"), group.getProperties().get("sharedRoster.groupList")); }
for (Group group : sharedGroups) { Collection<JID> users = rosterManager.getSharedUsersForRoster(group, this);
rosterManager.deleteRoster(session.getAddress());
@Override public void adminAdded(Group group, Map params) { JID addedUser = new JID((String) params.get("admin")); // Do nothing if the user was a member that became an admin if (group.getMembers().contains(addedUser)) { return; } if (!isSharedGroup(group)) { for (Group visibleGroup : getVisibleGroups(group)) { // Get the list of affected users Collection<JID> users = new HashSet<>(visibleGroup.getMembers()); users.addAll(visibleGroup.getAdmins()); groupUserAdded(visibleGroup, users, addedUser); } } else { groupUserAdded(group, addedUser); } }
@Override public void memberRemoved(Group group, Map params) { String member = (String) params.get("member"); if (member == null) { return; } JID deletedUser = new JID(member); // Do nothing if the user is still an admin if (group.getAdmins().contains(deletedUser)) { return; } if (!isSharedGroup(group)) { for (Group visibleGroup : getVisibleGroups(group)) { // Get the list of affected users Collection<JID> users = new HashSet<>(visibleGroup.getMembers()); users.addAll(visibleGroup.getAdmins()); groupUserDeleted(visibleGroup, users, deletedUser); } } else { groupUserDeleted(group, deletedUser); } }
if (name != null && !"".equals(name)) { if (!RosterManager.isRosterServiceEnabled()) { keepTrack = true; Roster roster = rosterManager.getRoster(name);
/** * Returns the user's roster. A roster is a list of users that the user wishes to know * if they are online. Rosters are similar to buddy groups in popular IM clients. * * @return the user's roster. */ public Roster getRoster() { try { return XMPPServer.getInstance().getRosterManager().getRoster(username); } catch (UserNotFoundException unfe) { Log.error(unfe.getMessage(), unfe); return null; } }