in server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCIqAdminHandler.java [138:193]
protected List<Stanza> handleSet(IQStanza stanza, ServerRuntimeContext serverRuntimeContext,
SessionContext sessionContext, StanzaBroker stanzaBroker) {
logger.debug("Received MUC admin stanza");
Room room = conference.findRoom(stanza.getTo());
Occupant moderator = room.findOccupantByJID(stanza.getFrom());
// check if moderator
if (moderator == null || moderator.getRole() != Role.Moderator) {
// only moderators are allowed to continue
logger.debug("Only moderators are allowed to issue admin stanzas");
return Collections.singletonList(
MUCHandlerHelper.createErrorReply(stanza, StanzaErrorType.AUTH, StanzaErrorCondition.FORBIDDEN));
}
try {
XMLElement query = stanza.getSingleInnerElementsNamed("query", NamespaceURIs.XEP0045_MUC_ADMIN);
List<XMLElement> itemElements = query.getInnerElementsNamed("item", NamespaceURIs.XEP0045_MUC_ADMIN);
Stanza result = StanzaBuilder.createDirectReply(stanza, false, IQStanzaType.RESULT).build();
for (XMLElement itemElement : itemElements) {
IqAdminItem item;
try {
item = IqAdminItem.getWrapper(itemElement);
} catch (EntityFormatException e) {
return Collections.singletonList(
createBadRequestError(stanza, serverRuntimeContext, sessionContext, "Invalid JID"));
}
if (item.getRole() != null) {
logger.debug("Changing role");
result = changeRole(stanza, serverRuntimeContext, sessionContext, item, room, moderator,
stanzaBroker);
} else if (item.getAffiliation() != null) {
logger.debug("Changing affiliation");
result = changeAffiliation(stanza, serverRuntimeContext, sessionContext, item, room, moderator,
stanzaBroker);
} else {
logger.debug("Invalid MUC admin stanza");
return Collections.singletonList(
createBadRequestError(stanza, serverRuntimeContext, sessionContext, "Unknown IQ stanza"));
}
// give up on error
if ("error".equals(result.getAttributeValue("type"))) {
return Collections.singletonList(result);
}
}
return Collections.singletonList(result);
} catch (XMLSemanticError e) {
logger.debug("Invalid MUC admin stanza", e);
return Collections.singletonList(
createBadRequestError(stanza, serverRuntimeContext, sessionContext, "Invalid IQ stanza"));
}
}