std::string StreamInitiationSerializer::serializePayload(boost::shared_ptr<StreamInitiation> streamInitiation) const { assert(streamInitiation->getIsFileTransfer()); XMLElement siElement("si", "http://jabber.org/protocol/si"); if (!streamInitiation->getID().empty()) { siElement.setAttribute("id", streamInitiation->getID()); } siElement.setAttribute("profile", FILE_TRANSFER_NS); if (streamInitiation->getFileInfo()) { StreamInitiationFileInfo file = *streamInitiation->getFileInfo(); boost::shared_ptr<XMLElement> fileElement(new XMLElement("file", "http://jabber.org/protocol/si/profile/file-transfer")); fileElement->setAttribute("name", file.getName()); if (file.getSize() != 0) { fileElement->setAttribute("size", boost::lexical_cast<std::string>(file.getSize())); } if (!file.getDescription().empty()) { boost::shared_ptr<XMLElement> descElement(new XMLElement("desc")); descElement->addNode(boost::make_shared<XMLTextNode>(file.getDescription())); fileElement->addNode(descElement); } siElement.addNode(fileElement); } boost::shared_ptr<XMLElement> featureElement(new XMLElement("feature", FEATURE_NEG_NS)); if (streamInitiation->getProvidedMethods().size() > 0) { Form::ref form(new Form(Form::FormType)); ListSingleFormField::ref field = ListSingleFormField::create(); field->setName("stream-method"); foreach(const std::string& method, streamInitiation->getProvidedMethods()) { field->addOption(FormField::Option("", method)); } form->addField(field); featureElement->addNode(boost::make_shared<XMLRawTextNode>(FormSerializer().serialize(form))); }
bool UserRegistration::handleGetRequest(const Swift::JID& from, const Swift::JID& to, const std::string& id, boost::shared_ptr<Swift::InBandRegistrationPayload> payload) { if (CONFIG_STRING(m_config, "service.protocol") == "irc") { Swift::GetResponder<Swift::InBandRegistrationPayload>::sendError(from, id, ErrorPayload::BadRequest, ErrorPayload::Modify); return true; } std::string barejid = from.toBare().toString(); // User *user = m_userManager->getUserByJID(barejid); if (!CONFIG_BOOL(m_config,"registration.enable_public_registration")) { std::list<std::string> const &x = CONFIG_LIST(m_config,"service.allowed_servers"); if (std::find(x.begin(), x.end(), from.getDomain()) == x.end()) { // Log("UserRegistration", "This user has no permissions to register an account"); Swift::GetResponder<Swift::InBandRegistrationPayload>::sendError(from, id, ErrorPayload::BadRequest, ErrorPayload::Modify); return true; } } // const char *_language = user ? user->getLang() : CONFIG_STRING(m_config, "registration.language").c_str(); boost::shared_ptr<InBandRegistrationPayload> reg(new InBandRegistrationPayload()); UserInfo res; bool registered = m_storageBackend->getUser(barejid, res); std::string instructions = CONFIG_STRING(m_config, "registration.instructions"); reg->setInstructions(instructions); reg->setRegistered(registered); reg->setUsername(res.uin); if (CONFIG_STRING(m_config, "service.protocol") != "twitter" && CONFIG_STRING(m_config, "service.protocol") != "bonjour") reg->setPassword(res.password); std::string usernameField = CONFIG_STRING(m_config, "registration.username_field"); Form::ref form(new Form(Form::FormType)); form->setTitle(tr(_language, _("Registration"))); form->setInstructions(tr(_language, instructions)); HiddenFormField::ref type = HiddenFormField::create(); type->setName("FORM_TYPE"); type->setValue("jabber:iq:register"); form->addField(type); TextSingleFormField::ref username = TextSingleFormField::create(); username->setName("username"); username->setLabel(tr(_language, usernameField)); username->setValue(res.uin); username->setRequired(true); form->addField(username); if (CONFIG_STRING(m_config, "service.protocol") != "twitter" && CONFIG_STRING(m_config, "service.protocol") != "bonjour") { TextPrivateFormField::ref password = TextPrivateFormField::create(); password->setName("password"); password->setLabel(tr(_language, _("Password"))); password->setRequired(true); form->addField(password); } ListSingleFormField::ref language = ListSingleFormField::create(); language->setName("language"); language->setLabel(tr(_language, _("Language"))); if (registered) language->setValue(res.language); else language->setValue(CONFIG_STRING(m_config, "registration.language")); // std::map <std::string, std::string> languages = localization.getLanguages(); // for (std::map <std::string, std::string>::iterator it = languages.begin(); it != languages.end(); it++) { // language->addOption(FormField::Option((*it).second, (*it).first)); // } form->addField(language); TextSingleFormField::ref encoding = TextSingleFormField::create(); encoding->setName("encoding"); encoding->setLabel(tr(_language, _("Encoding"))); if (registered) encoding->setValue(res.encoding); else encoding->setValue(CONFIG_STRING(m_config, "registration.encoding")); form->addField(encoding); if (registered) { BooleanFormField::ref boolean = BooleanFormField::create(); boolean->setName("unregister"); boolean->setLabel(tr(_language, _("Remove your registration"))); boolean->setValue(0); form->addField(boolean); } reg->setForm(form); Swift::GetResponder<Swift::InBandRegistrationPayload>::sendResponse(from, id, reg); return true; }