/* ============================================================================ * PROTECTED Methods */ void THGoogleDetectLanguage::parseResponse (const QByteArray& data) { THJsonStreamReader::TokenType tokenType; THJsonStreamReader jsonReader(data); while (!jsonReader.atEnd()) { tokenType = jsonReader.readNext(); if (!jsonReader.isProperty()) continue; QStringRef propertyName = jsonReader.name(); if (propertyName == "language") { d->language = jsonReader.value().toString(); } else if (propertyName == "isReliable") { d->isReliable = jsonReader.value().toBool(); } else if (propertyName == "confidence") { d->confidence = jsonReader.value().toDouble(); } else if (propertyName == "responseStatus") { setResponseStatus(jsonReader.value().toInt()); } else if (propertyName == "responseDetails" && tokenType != THJsonStreamReader::PropertyNull) { setErrorString(jsonReader.value().toString()); } } emit finished(responseStatus() != 200); }
/* ============================================================================ * PROTECTED Methods */ void THGoogleTranslator::parseResponse (const QByteArray& data) { THJsonStreamReader::TokenType tokenType; THJsonStreamReader jsonReader(data); while (!jsonReader.atEnd()) { tokenType = jsonReader.readNext(); if (!jsonReader.isProperty()) continue; QStringRef propertyName = jsonReader.name(); if (propertyName == "translatedText") { d->translatedText = jsonReader.value().toString(); } else if (propertyName == "detectedSourceLanguage") { d->detectedSourceLanguage = jsonReader.value().toString(); } else if (propertyName == "responseStatus") { setResponseStatus(jsonReader.value().toInt()); } else if (propertyName == "responseDetails" && tokenType != THJsonStreamReader::PropertyNull) { setErrorString(jsonReader.value().toString()); } } emit finished(responseStatus() != 200); }
void Controller::render() { if ( _view.isNull() ) return; // No view set, don't do anything _view->initializeResponse(*_response); std::stringstream ss; bool rendered = _view->render(_data, ss); if ( rendered ) { Poco::StreamCopier::copyStream(ss, _response->send()); } else { //TODO: redirect to an error page? setResponseStatus(Poco::Net::HTTPResponse::HTTP_INTERNAL_SERVER_ERROR); } }
void WebController::message() { std::vector<std::string> parameters = getParameters(); if ( parameters.size() < 2 ) { setResponseStatus(Poco::Net::HTTPResponse::HTTP_BAD_REQUEST, "Missing URI parameters"); return; } mqwebData().set("queue", parameters[1]); std::string messageId; if ( parameters.size() > 2 ) { messageId = parameters[2]; mqwebData().set("messageId", messageId); } Poco::SharedPtr<MultiView> multiView = new MultiView("base.tpl"); multiView->add("head", new TemplateView("message/head.tpl")); multiView->add("main", new TemplateView("message/index.tpl")); setView(multiView); }
void AuthorityRecordController::inquire() { if ( qmgr()->zos() ) { // Authority records are not supported on z/OS setResponseStatus(Poco::Net::HTTPResponse::HTTP_NOT_IMPLEMENTED, "/authrec/inquire not implemented for z/OS"); return; } Poco::JSON::Object::Ptr pcfParameters; if ( data().has("input") && data().isObject("input") ) { pcfParameters = data().getObject("input"); } else { pcfParameters = new Poco::JSON::Object(); setData("input", pcfParameters); std::vector<std::string> parameters = getParameters(); // First parameter is queuemanager // Second parameter can be a authentication information name and will result in inquiring // only that queue and ignores all query parameters. if ( parameters.size() > 1 ) { pcfParameters->set("ProfileName", parameters[1]); } else { // Handle query parameters if ( form().has("ProfileName") ) { pcfParameters->set("ProfileName", form().get("ProfileName")); } } Poco::JSON::Array::Ptr attrs = new Poco::JSON::Array(); formElementToJSONArray("ProfileAttrs", attrs); if ( attrs->size() == 0 ) // Nothing found for ProfileAttrs, try Attrs { formElementToJSONArray("Attrs", attrs); } if ( attrs->size() > 0 ) { pcfParameters->set("ProfileAttrs", attrs); } Poco::JSON::Array::Ptr jsonOptions = new Poco::JSON::Array(); pcfParameters->set("Options", jsonOptions); for(Poco::Net::NameValueCollection::ConstIterator itOptions = form().find("Options"); itOptions != form().end() && Poco::icompare(itOptions->first, "Options") == 0; ++itOptions) { jsonOptions->add(itOptions->second); } if ( form().has("ObjectType") ) pcfParameters->set("ObjectType", form().get("ObjectType")); if ( form().has("EntityName") ) pcfParameters->set("EntityName", form().get("EntityName")); if ( form().has("EntityType") ) pcfParameters->set("EntityType", form().get("EntityType")); if ( form().has("ServiceComponent") ) pcfParameters->set("ServiceComponent", form().get("ServiceComponent")); } AuthorityRecordInquire command(*commandServer(), pcfParameters); setData("data", command.execute()); }
void Controller::handle(const std::vector<std::string>& parameters, Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response) { _parameters = parameters; _request = &request; _response = &response; if ( _parameters.size() > 0 ) { _action = _parameters.front(); _parameters.erase(_parameters.begin()); } else { setResponseStatus(Poco::Net::HTTPResponse::HTTP_BAD_REQUEST, "Invalid URI parameters"); return; } for(std::vector<std::string>::iterator it = _parameters.begin(); it != _parameters.end(); ++it) { int pos = it->find_first_of(':'); if ( pos != std::string::npos ) { std::string name = it->substr(0, pos); std::string value = it->substr(pos+1); _namedParameters[name] = value; } } std::string contentType = request.getContentType(); if ( contentType == "application/json" ) { Poco::JSON::Parser parser; try { Poco::Dynamic::Var json = parser.parse(request.stream()); if ( ! json.isEmpty() && json.type() == typeid(Poco::JSON::Object::Ptr) ) { _data->set("filter", json.extract<Poco::JSON::Object::Ptr>()); } } catch(Poco::JSON::JSONException& jsone) { // Make sure everything is read, otherwise this can result // in Bad Request error in the next call. Poco::NullOutputStream nos; Poco::StreamCopier::copyStream(request.stream(), nos); setResponseStatus(Poco::Net::HTTPResponse::HTTP_BAD_REQUEST, "JSON error occurred: " + jsone.displayText()); return; } } else { _form.load(request, request.stream(), *this); } // Make sure everything is read, otherwise this can result // in Bad Request error in the next call. Poco::NullOutputStream nos; Poco::StreamCopier::copyStream(request.stream(), nos); beforeAction(); if ( response.getStatus() != Poco::Net::HTTPResponse::HTTP_OK || _data->has("error") ) { //TODO: return error template file or json error } const ActionMap& actions = getActions(); ActionMap::const_iterator it = actions.find(_action); if ( it == actions.end() ) { setResponseStatus(Poco::Net::HTTPResponse::HTTP_NOT_FOUND, "Invalid action '" + _action + "' specified."); return; } ActionFn action = it->second; (this->*action)(); afterAction(); }