protected List handleSet()

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"));
        }
    }