diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5QHttpEngineServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5QHttpEngineServerCodegen.java index 37f14e75c81..7b16b3db886 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5QHttpEngineServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5QHttpEngineServerCodegen.java @@ -23,15 +23,19 @@ import io.swagger.v3.parser.util.SchemaTypeUtil; import org.apache.commons.lang3.StringUtils; import org.openapitools.codegen.CodegenConfig; import org.openapitools.codegen.CodegenType; +import org.openapitools.codegen.CodegenOperation; +import org.openapitools.codegen.CodegenParameter; import org.openapitools.codegen.SupportingFile; import org.openapitools.codegen.utils.ModelUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; @@ -55,7 +59,7 @@ public class CppQt5QHttpEngineServerCodegen extends AbstractCppCodegen implement protected Map namespaces = new HashMap(); protected Set systemIncludes = new HashSet(); protected String cppNamespace = "OpenAPI"; - + protected Set nonFrameworkPrimitives = new HashSet(); public CppQt5QHttpEngineServerCodegen() { super(); @@ -135,7 +139,17 @@ public class CppQt5QHttpEngineServerCodegen extends AbstractCppCodegen implement "float", "double") ); - + nonFrameworkPrimitives.addAll(languageSpecificPrimitives); + + foundationClasses.addAll( + Arrays.asList( + "QString", + "QDate", + "QDateTime", + "QByteArray") + ); + languageSpecificPrimitives.addAll(foundationClasses); + supportingFiles.add(new SupportingFile("helpers-header.mustache", sourceFolder + MODEL_DIR, PREFIX + "Helpers.h")); supportingFiles.add(new SupportingFile("helpers-body.mustache", sourceFolder + MODEL_DIR, PREFIX + "Helpers.cpp")); supportingFiles.add(new SupportingFile("object.mustache", sourceFolder + MODEL_DIR, PREFIX + "Object.h")); @@ -174,7 +188,7 @@ public class CppQt5QHttpEngineServerCodegen extends AbstractCppCodegen implement importMapping = new HashMap(); namespaces = new HashMap(); - foundationClasses.add("QString"); + systemIncludes.add("QString"); systemIncludes.add("QList"); @@ -434,4 +448,71 @@ public class CppQt5QHttpEngineServerCodegen extends AbstractCppCodegen implement public String getTypeDeclaration(String str) { return str; } + + @Override + protected boolean needToImport(String type) { + return StringUtils.isNotBlank(type) && !defaultIncludes.contains(type) + && !nonFrameworkPrimitives.contains(type); + } + + @Override + @SuppressWarnings("unchecked") + public Map postProcessOperations(Map objs) { + Map objectMap = (Map) objs.get("operations"); + List operations = (List) objectMap.get("operation"); + + List> imports = (List>) objs.get("imports"); + for (CodegenOperation operation : operations) { + // Check all return parameter baseType if there is a necessity to include, include it if not + // already done + if (operation.returnBaseType != null && needToImport(operation.returnBaseType)) { + if(!isIncluded(operation.returnBaseType, imports)) { + imports.add(createMapping("import", operation.returnBaseType)); + } + } + List params = new ArrayList(); + if (operation.allParams != null)params.addAll(operation.allParams); + + // Check all parameter baseType if there is a necessity to include, include it if not + // already done + for(CodegenParameter param : params) { + if(param.isPrimitiveType && needToImport(param.baseType)) { + if(!isIncluded(param.baseType, imports)) { + imports.add(createMapping("import", param.baseType)); + } + } + } + if (operation.pathParams != null) { + // We use QString to pass path params, add it to include + if(!isIncluded("QString", imports)) { + imports.add(createMapping("import", "QString")); + } + } + } + if(isIncluded("QMap", imports)) { + // Maps uses QString as key + if(!isIncluded("QString", imports)) { + imports.add(createMapping("import", "QString")); + } + } + return objs; + } + + public Map createMapping(String key, String value) { + Map customImport = new HashMap(); + customImport.put(key, toModelImport(value)); + return customImport; + } + + private boolean isIncluded(String type, List> imports) { + boolean included = false; + String inclStr = toModelImport(type); + for (Map importItem : imports) { + if(importItem.containsValue(inclStr)) { + included = true; + break; + } + } + return included; + } } diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/Dockerfile.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/Dockerfile.mustache index b3395482976..2cc6d3eba27 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/Dockerfile.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/Dockerfile.mustache @@ -1,11 +1,11 @@ FROM alpine:latest AS build -RUN apk add --update \ +RUN apk add --update \ cmake \ alpine-sdk \ - openssl \ - qt5-qtbase-dev \ - qt5-qttools-dev + openssl \ + qt5-qtbase-dev \ + qt5-qttools-dev WORKDIR /usr/server ADD ./src ./src @@ -13,10 +13,10 @@ ADD ./CMakeLists.txt ./ RUN mkdir -p ./build WORKDIR /usr/server/build RUN cmake -DNODEBUG:STRING="ON" .. -RUN make +RUN make FROM alpine:latest AS runtime -RUN apk add --update \ +RUN apk add --update \ libgcc \ libstdc++ \ qt5-qtbase \ diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/LICENSE.txt.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/LICENSE.txt.mustache index 04938f840c9..be59130f858 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/LICENSE.txt.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/LICENSE.txt.mustache @@ -1,4 +1,4 @@ -QHttpEngine +QHttpEngine The MIT License (MIT) diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/README.md.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/README.md.mustache index 45f2f724676..df0570717b5 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/README.md.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/README.md.mustache @@ -1,8 +1,9 @@ +# C++ Qt5 Server + ## Qt5 HTTP Server based on the Qhttpengine -This server was generated by the [openapi-generator] -(https://openapi-generator.tech) project. -By using the [OpenAPI-Spec](https://github.com/OAI/OpenAPI-Specification) from a remote server, you can easily generate a server stub. -- + +This server was generated by the [openapi-generator](https://openapi-generator.tech) project. +By using the [OpenAPI-Spec](https://github.com/OAI/OpenAPI-Specification) from a remote server, you can easily generate a server stub. To see how to make this your own, look here: @@ -25,30 +26,36 @@ Simple set of classes for developing HTTP server applications in Qt. To learn more about building and using the library, please visit this page: -https://ci.quickmediasolutions.com/job/qhttpengine-documentation/doxygen/ - +[Link](https://ci.quickmediasolutions.com/job/qhttpengine-documentation/doxygen) ### Viewing the code -You can view the code using an editor like Microsoft Visual Studio Code or you can + +You can view the code using an editor like Microsoft Visual Studio Code or you can Use QtCreator and browse for the root CMakeLists.txt and load it as a project ### Build with make + Install the tools [Linux/Debian] -``` + +```shell sudo apt install cmake build-essential libssl-dev qtbase5-dev qtbase5-dev-tools git curl ``` To build, go to the `server` folder -``` -make + +```shell +make ``` To run the server -``` + +```shell ./build/src/cpp-qt5-server & ``` + #### Invoke an API -``` + +```shell curl -X GET http://localhost:8080/v2/store/inventory curl -X POST http://localhost:8080/v2/store/order -H "Content-Type: application/json" -d "{ \"id\": 22, \"petId\": 1541, \"quantity\": 5, \"shipDate\": \"2018-06-16T18:31:43.870Z\", \"status\": \"placed\", \"complete\": \"true\" }" curl -X GET http://localhost:8080/v2/pet/findByStatus @@ -56,38 +63,50 @@ curl -X GET http://localhost:8080/v2/store/inventory ``` ### Run and build with docker + Building with docker multistage If you dont have docker install [here](https://docs.docker.com/install) Add yourself to the docker group -``` +```shell docker build --network=host -t cpp-qt5-server . ``` -Running with docker -``` -docker run --rm -it --name=server-container cpp-qt5-server + +Running with docker + +```shell +docker run --rm -it --name=server-container cpp-qt5-server ``` #### Invoking an API + Mind the IP here -``` + +```shell curl -X GET http://172.17.0.2:8080/v2/store/inventory curl -X POST http://172.17.0.2:8080/v2/store/order -H "Content-Type: application/json" -d "{ \"id\": 22, \"petId\": 1541, \"quantity\": 5, \"shipDate\": \"2018-06-16T18:31:43.870Z\", \"status\": \"placed\", \"complete\": \"true\" }" ``` use this command to get the container IP -``` + +```shell docker inspect server-container | grep "IPAddress" ``` -To exit from the command line -``` + +To exit from the command line + +```shell Ctrl + p + q ``` + To stop container -``` + +```shell docker stop ``` + or to terminate and quit -``` + +```shell Ctrl+C ``` diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirequest.cpp.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirequest.cpp.mustache index 4fa84629c38..c191fbc3b9d 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirequest.cpp.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirequest.cpp.mustache @@ -16,7 +16,7 @@ namespace {{this}} { auto headers = s->headers(); for(auto itr = headers.begin(); itr != headers.end(); itr++) { requestHeaders.insert(QString(itr.key()), QString(itr.value())); - } + } } {{classname}}Request::~{{classname}}Request(){ @@ -24,7 +24,7 @@ namespace {{this}} { qDebug() << "{{classname}}Request::~{{classname}}Request()"; } -QMap +QMap {{classname}}Request::getRequestHeaders() const { return requestHeaders; } @@ -44,9 +44,9 @@ QHttpEngine::Socket* {{classname}}Request::getRawSocket(){ void {{classname}}Request::{{nickname}}Request({{#hasPathParams}}{{#pathParams}}const QString& {{{paramName}}}str{{#hasMore}}, {{/hasMore}}{{/pathParams}}{{/hasPathParams}}){ qDebug() << "{{{basePathWithoutHost}}}{{{path}}}"; connect(this, &{{classname}}Request::{{nickname}}, handler, &{{classname}}Handler::{{nickname}}); - + {{#queryParams}}{{queryParam}} - {{{dataType}}} {{paramName}}; + {{{dataType}}} {{paramName}}; if(socket->queryString().keys().contains("{{paramName}}")){ fromStringValue(socket->queryString().value{{#isListContainer}}s{{/isListContainer}}("{{paramName}}"), {{paramName}}); } @@ -63,7 +63,7 @@ void {{classname}}Request::{{nickname}}Request({{#hasPathParams}}{{#pathParams}} {{{dataType}}} {{paramName}};{{/formParams}}{{#bodyParams}} {{#bodyParam}} {{#isListContainer}} QJsonDocument doc; - {{{dataType}}} {{paramName}}; + {{{dataType}}} {{paramName}}; if(socket->readJson(doc)){ QJsonArray jsonArray = doc.array(); foreach(QJsonValue obj, jsonArray) { @@ -84,7 +84,7 @@ void {{classname}}Request::{{nickname}}Request({{#hasPathParams}}{{#pathParams}} QJsonDocument doc; socket->readJson(doc); QJsonObject obj = doc.object(); - {{{dataType}}} {{paramName}}; + {{{dataType}}} {{paramName}}; foreach(QString key, obj.keys()) { {{baseType}} val; ::{{cppNamespace}}::fromJsonValue(val, obj[key]); @@ -100,19 +100,21 @@ void {{classname}}Request::{{nickname}}Request({{#hasPathParams}}{{#pathParams}} ::{{cppNamespace}}::fromJsonValue({{paramName}}, obj); {{/isPrimitiveType}} {{/isMapContainer}} - {{/isListContainer}} + {{/isListContainer}} {{/bodyParam}}{{/bodyParams}} - emit {{nickname}}({{#allParams}}{{#isBodyParam}}{{/isBodyParam}} {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); + emit {{nickname}}({{#allParams}}{{#isBodyParam}}{{/isBodyParam}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); } -{{/operation}}{{/operations}} +{{/operation}}{{/operations}} {{#operations}}{{#operation}}void {{classname}}Request::{{nickname}}Response({{#returnType}}const {{{returnType}}}& res{{/returnType}}){ - writeResponseHeaders();{{#returnType}}{{^isPrimitiveType}} - QJsonDocument resDoc(::{{cppNamespace}}::toJsonValue(res).to{{^isListContainer}}Object{{/isListContainer}}{{#isListContainer}}Array{{/isListContainer}}());{{/isPrimitiveType}} - socket->writeJson(resDoc);{{#isPrimitiveType}} - socket->write({{#isListContainer}}QString("["+{{/isListContainer}}::{{cppNamespace}}::toStringValue(res){{#isListContainer}}+"]"){{/isListContainer}}.toUtf8());{{/isPrimitiveType}}{{/returnType}}{{^returnType}} + writeResponseHeaders();{{#returnType}}{{#isMapContainer}} + QJsonDocument resDoc(::{{cppNamespace}}::toJsonValue(res).toObject()); + socket->writeJson(resDoc);{{/isMapContainer}}{{^isMapContainer}}{{^returnTypeIsPrimitive}} + QJsonDocument resDoc(::{{cppNamespace}}::toJsonValue(res).to{{^isListContainer}}Object{{/isListContainer}}{{#isListContainer}}Array{{/isListContainer}}()); + socket->writeJson(resDoc);{{/returnTypeIsPrimitive}}{{#returnTypeIsPrimitive}} + socket->write({{#isListContainer}}QString("["+{{/isListContainer}}::{{cppNamespace}}::toStringValue(res){{#isListContainer}}+"]"){{/isListContainer}}.toUtf8());{{/returnTypeIsPrimitive}}{{/isMapContainer}}{{/returnType}}{{^returnType}} socket->setStatusCode(QHttpEngine::Socket::OK);{{/returnType}} if(socket->isOpen()){ socket->close(); @@ -123,10 +125,12 @@ void {{classname}}Request::{{nickname}}Request({{#hasPathParams}}{{#pathParams}} {{#operations}}{{#operation}}void {{classname}}Request::{{nickname}}Error({{#returnType}}const {{{returnType}}}& res, {{/returnType}}QNetworkReply::NetworkError error_type, QString& error_str){ Q_UNUSED(error_type); // TODO: Remap error_type to QHttpEngine::Socket errors writeResponseHeaders();{{#returnType}} - Q_UNUSED(error_str); // response will be used instead of error string{{^isPrimitiveType}} - QJsonDocument resDoc(::{{cppNamespace}}::toJsonValue(res).to{{^isListContainer}}Object{{/isListContainer}}{{#isListContainer}}Array{{/isListContainer}}());{{/isPrimitiveType}} - socket->writeJson(resDoc);{{#isPrimitiveType}} - socket->write({{#isListContainer}}QString("["+{{/isListContainer}}::{{cppNamespace}}::toStringValue(res){{#isListContainer}}+"]"){{/isListContainer}}.toUtf8());{{/isPrimitiveType}}{{/returnType}}{{^returnType}} + Q_UNUSED(error_str); // response will be used instead of error string{{#isMapContainer}} + QJsonDocument resDoc(::{{cppNamespace}}::toJsonValue(res).toObject()); + socket->writeJson(resDoc);{{/isMapContainer}}{{^isMapContainer}}{{^returnTypeIsPrimitive}} + QJsonDocument resDoc(::{{cppNamespace}}::toJsonValue(res).to{{^isListContainer}}Object{{/isListContainer}}{{#isListContainer}}Array{{/isListContainer}}()); + socket->writeJson(resDoc);{{/returnTypeIsPrimitive}}{{#returnTypeIsPrimitive}} + socket->write({{#isListContainer}}QString("["+{{/isListContainer}}::{{cppNamespace}}::toStringValue(res){{#isListContainer}}+"]"){{/isListContainer}}.toUtf8());{{/returnTypeIsPrimitive}}{{/isMapContainer}}{{/returnType}}{{^returnType}} socket->setStatusCode(QHttpEngine::Socket::NotFound); socket->write(error_str.toUtf8());{{/returnType}} if(socket->isOpen()){ @@ -139,7 +143,7 @@ void {{classname}}Request::sendCustomResponse(QByteArray & res, QNetworkReply::N Q_UNUSED(res); // TODO Q_UNUSED(error_type); // TODO } - + void {{classname}}Request::sendCustomResponse(QIODevice *res, QNetworkReply::NetworkError error_type){ Q_UNUSED(res); // TODO Q_UNUSED(error_type); // TODO diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirequest.h.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirequest.h.mustache index ed7339278ad..c736195d744 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirequest.h.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirequest.h.mustache @@ -20,7 +20,7 @@ namespace {{this}} { class {{classname}}Request : public QObject { Q_OBJECT - + public: {{classname}}Request(QHttpEngine::Socket *s, {{classname}}Handler* handler); virtual ~{{classname}}Request(); @@ -60,7 +60,7 @@ private: resHeaders.insert(itr.key().toUtf8(), itr.value().toUtf8()); } socket->setHeaders(resHeaders); - socket->writeHeaders(); + socket->writeHeaders(); } }; diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirouter.cpp.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirouter.cpp.mustache index be6c0bb0724..e3ade84f9ab 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirouter.cpp.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirouter.cpp.mustache @@ -13,80 +13,73 @@ namespace {{this}} { {{/cppNamespaceDeclarations}} -inline QHttpEngine::Socket::Method toQHttpEngineMethod(QString method){ - - if( method == QString("OPTIONS")) - return QHttpEngine::Socket::Method::OPTIONS; - if( method == QString("GET")) - return QHttpEngine::Socket::Method::GET; - if( method == QString("HEAD")) - return QHttpEngine::Socket::Method::HEAD; - if( method == QString("POST")) - return QHttpEngine::Socket::Method::POST; - if( method == QString("PUT")) - return QHttpEngine::Socket::Method::PUT; - if( method == QString("DELETE")) - return QHttpEngine::Socket::Method::DELETE; - if( method == QString("TRACE")) - return QHttpEngine::Socket::Method::TRACE; - if( method == QString("CONNECT")) - return QHttpEngine::Socket::Method::CONNECT; - - return static_cast(-1); +{{prefix}}ApiRouter::{{prefix}}ApiRouter() { + createApiHandlers(); } -ApiRouter::ApiRouter() { - {{#apiInfo}}{{#apis}}{{classname}}ApiHandler = new {{classname}}Handler(); - {{/apis}}{{/apiInfo}} +{{prefix}}ApiRouter::~{{prefix}}ApiRouter(){ + qDebug() << "~ApiRouter()";{{#apiInfo}}{{#apis}} + delete {{classname}}ApiHandler;{{/apis}}{{/apiInfo}} } -ApiRouter::~ApiRouter(){ - qDebug() << "~ApiRouter()"; - {{#apiInfo}}{{#apis}}delete {{classname}}ApiHandler; - {{/apis}}{{/apiInfo}} +void {{prefix}}ApiRouter::createApiHandlers() { {{#apiInfo}}{{#apis}} + {{classname}}ApiHandler = new {{classname}}Handler();{{/apis}}{{/apiInfo}} } -void ApiRouter::setUpRoutes() { - {{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}{{^pathParams}} - Routes.insert("{{{basePathWithoutHost}}}{{{path}}}",[this](QHttpEngine::Socket *socket) { - if(toQHttpEngineMethod("{{httpMethod}}") == socket->method()){ +void {{prefix}}ApiRouter::setUpRoutes() { + {{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}{{^hasPathParams}} + Routes.insert(QString("%1 %2").arg("{{httpMethod}}").arg("{{{basePathWithoutHost}}}{{{path}}}").toLower(), [this](QHttpEngine::Socket *socket) { auto reqObj = new {{classname}}Request(socket, {{classname}}ApiHandler); reqObj->{{nickname}}Request(); - } - });{{/pathParams}}{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}} + });{{/hasPathParams}}{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}} } -void ApiRouter::processRequest(QHttpEngine::Socket *socket){ - if (Routes.contains(socket->path())) { - for(auto endpoints : Routes.values(socket->path())) { - endpoints.operator()(socket); - } - } else - { {{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}{{#pathParams}} - { - QString completePath("{{{basePathWithoutHost}}}{{{path}}}"); - QString {{paramName}}PathParam("{"); - {{paramName}}PathParam.append("{{baseName}}").append("}"); - completePath.replace("/", "\\/"); // replace '/' with '\/' for regex - completePath.replace({{paramName}}PathParam, "([^\\/]*?)"); // match anything but '/'' - completePath.append("$"); // End of string - QRegularExpression re(completePath, QRegularExpression::CaseInsensitiveOption); - QRegularExpressionMatch match = re.match(socket->path()); - if ((toQHttpEngineMethod("{{httpMethod}}") == socket->method()) && match.hasMatch() ) { - QString pathparam = match.captured(1); - auto reqObj = new {{classname}}Request(socket, {{classname}}ApiHandler); - reqObj->{{nickname}}Request({{#hasPathParams}}{{#pathParams}}pathparam{{/pathParams}}{{/hasPathParams}}); - return; - } - }{{/pathParams}}{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}} +void {{prefix}}ApiRouter::processRequest(QHttpEngine::Socket *socket){ + if( handleRequest(socket) ){ + return; + } + if( handleRequestAndExtractPathParam(socket) ){ + return; } socket->setStatusCode(QHttpEngine::Socket::NotFound); if(socket->isOpen()){ socket->writeHeaders(); socket->close(); } - return; } + +bool {{prefix}}ApiRouter::handleRequest(QHttpEngine::Socket *socket){ + auto reqPath = QString("%1 %2").arg(fromQHttpEngineMethod(socket->method())).arg(socket->path()).toLower(); + if ( Routes.contains(reqPath) ) { + Routes.value(reqPath).operator()(socket); + return true; + } + return false; +} + +bool {{prefix}}ApiRouter::handleRequestAndExtractPathParam(QHttpEngine::Socket *socket){ + auto reqPath = QString("%1 %2").arg(fromQHttpEngineMethod(socket->method())).arg(socket->path()).toLower();{{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}{{#hasPathParams}} + { + auto completePath = QString("%1 %2").arg("{{httpMethod}}").arg("{{{basePathWithoutHost}}}{{{path}}}").toLower(); + if ( reqPath.startsWith(completePath.leftRef( completePath.indexOf(QString("/{")))) ) { + QRegularExpression parExpr( R"(\{([^\/\\s]+)\})" ); + completePath.replace( parExpr, R"((?<\1>[^\/\s]+))" ); + completePath.append("[\\/]?$"); + QRegularExpression pathExpr( completePath ); + QRegularExpressionMatch match = pathExpr.match( reqPath ); + if ( match.hasMatch() ){ + {{#pathParams}} + QString {{baseName}} = match.captured(QString("{{baseName}}").toLower()); + {{/pathParams}} + auto reqObj = new {{classname}}Request(socket, {{classname}}ApiHandler); + reqObj->{{nickname}}Request({{#pathParams}}{{baseName}}{{#hasMore}}, {{/hasMore}}{{/pathParams}}); + return true; + } + } + }{{/hasPathParams}}{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}} + return false; +} + {{#cppNamespaceDeclarations}} } {{/cppNamespaceDeclarations}} diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirouter.h.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirouter.h.mustache index a55da19cc4b..5634db060b2 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirouter.h.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/apirouter.h.mustache @@ -19,7 +19,7 @@ namespace {{this}} { {{/cppNamespaceDeclarations}} -class RequestHandler : public QHttpEngine::QObjectHandler +class {{prefix}}ApiRequestHandler : public QHttpEngine::QObjectHandler { Q_OBJECT signals: @@ -32,19 +32,51 @@ protected: } }; -class ApiRouter : public QObject +class {{prefix}}ApiRouter : public QObject { Q_OBJECT public: - ApiRouter(); - virtual ~ApiRouter(); + {{prefix}}ApiRouter(); + virtual ~{{prefix}}ApiRouter(); void setUpRoutes(); void processRequest(QHttpEngine::Socket *socket); private: - QMultiMap> Routes; + QMap> Routes; + QMultiMap> RoutesWithPathParam; + + bool handleRequest(QHttpEngine::Socket *socket); + bool handleRequestAndExtractPathParam(QHttpEngine::Socket *socket); + {{#apiInfo}}{{#apis}} - {{classname}}Handler *{{classname}}ApiHandler;{{/apis}}{{/apiInfo}} + {{classname}}Handler *{{classname}}ApiHandler;{{/apis}}{{/apiInfo}} +protected: + // override this method to provide custom class derived from ApiHandler classes + virtual void createApiHandlers(); + +private : + inline QString fromQHttpEngineMethod(QHttpEngine::Socket::Method method){ + switch( method ){ + case QHttpEngine::Socket::Method::OPTIONS: + return QStringLiteral("OPTIONS"); + case QHttpEngine::Socket::Method::GET: + return QStringLiteral("GET"); + case QHttpEngine::Socket::Method::HEAD: + return QStringLiteral("HEAD"); + case QHttpEngine::Socket::Method::POST: + return QStringLiteral("POST"); + case QHttpEngine::Socket::Method::PUT: + return QStringLiteral("PUT"); + case QHttpEngine::Socket::Method::DELETE: + return QStringLiteral("DELETE"); + case QHttpEngine::Socket::Method::TRACE: + return QStringLiteral("TRACE"); + case QHttpEngine::Socket::Method::CONNECT: + return QStringLiteral("CONNECT"); + } + return QStringLiteral(""); + } + }; diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/helpers-header.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/helpers-header.mustache index 167676df65b..78a0094eb02 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/helpers-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/helpers-header.mustache @@ -125,7 +125,7 @@ namespace {{this}} { for(auto itemkey : varmap.keys() ){ T itemVal; fromJsonValue(itemVal, QJsonValue::fromVariant(varmap.value(itemkey))); - val.insert(itemkey, val); + val.insert(itemkey, itemVal); } } return; diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/main.cpp.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/main.cpp.mustache index c030bcb47f3..b4770935165 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/main.cpp.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/main.cpp.mustache @@ -8,43 +8,43 @@ #include #include #include -#ifdef __linux__ +#ifdef __linux__ #include #include -#endif +#endif #include #include "{{prefix}}ApiRouter.h" -#ifdef __linux__ +#ifdef __linux__ void catchUnixSignals(QList quitSignals) { auto handler = [](int sig) -> void { // blocking and not aysnc-signal-safe func are valid qDebug() << "\nquit the application by signal " << sig; QCoreApplication::quit(); }; - - sigset_t blocking_mask; - sigemptyset(&blocking_mask); - for (auto sig : quitSignals) - sigaddset(&blocking_mask, sig); - - struct sigaction sa; - sa.sa_handler = handler; - sa.sa_mask = blocking_mask; - sa.sa_flags = 0; - - for (auto sig : quitSignals) + + sigset_t blocking_mask; + sigemptyset(&blocking_mask); + for (auto sig : quitSignals) + sigaddset(&blocking_mask, sig); + + struct sigaction sa; + sa.sa_handler = handler; + sa.sa_mask = blocking_mask; + sa.sa_flags = 0; + + for (auto sig : quitSignals) sigaction(sig, &sa, nullptr); } -#endif +#endif int main(int argc, char * argv[]) { QCoreApplication a(argc, argv); -#ifdef __linux__ +#ifdef __linux__ QList sigs({SIGQUIT, SIGINT, SIGTERM, SIGHUP}); catchUnixSignals(sigs); -#endif +#endif // Build the command-line options QCommandLineParser parser; QCommandLineOption addressOption( @@ -69,11 +69,11 @@ int main(int argc, char * argv[]) // Obtain the values QHostAddress address = QHostAddress(parser.value(addressOption)); quint16 port = static_cast(parser.value(portOption).toInt()); - - QSharedPointer<{{cppNamespace}}::RequestHandler> handler(new {{cppNamespace}}::RequestHandler()); - {{cppNamespace}}::ApiRouter router; + + QSharedPointer<{{cppNamespace}}::{{prefix}}ApiRequestHandler> handler(new {{cppNamespace}}::{{prefix}}ApiRequestHandler()); + {{cppNamespace}}::{{prefix}}ApiRouter router; router.setUpRoutes(); - QObject::connect(handler.data(), &{{cppNamespace}}::RequestHandler::requestReceived, [&](QHttpEngine::Socket *socket) { + QObject::connect(handler.data(), &{{cppNamespace}}::{{prefix}}ApiRequestHandler::requestReceived, [&](QHttpEngine::Socket *socket) { router.processRequest(socket); }); @@ -84,6 +84,6 @@ int main(int argc, char * argv[]) qCritical("Unable to listen on the specified port."); return 1; } - + return a.exec(); } diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/model-body.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/model-body.mustache index b83b21a0127..1e298f57b07 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/model-body.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/model-body.mustache @@ -22,7 +22,7 @@ namespace {{this}} { } {{classname}}::~{{classname}}() { - + } void @@ -77,7 +77,7 @@ QJsonObject {{classname}}::asJsonObject() const { QJsonObject obj; {{#vars}} - {{^isContainer}}{{#complexType}}{{^isString}}{{^isDateTime}}{{^isByteArray}}{{^isDate}}if({{name}}.isSet()){{/isDate}}{{/isByteArray}}{{/isDateTime}}{{/isString}}{{/complexType}}{{^complexType}}if(m_{{name}}_isSet){{/complexType}}{{#isString}}if(m_{{name}}_isSet){{/isString}}{{#isDateTime}}if(m_{{name}}_isSet){{/isDateTime}}{{#isByteArray}}if(m_{{name}}_isSet){{/isByteArray}}{{#isDate}}if(m_{{name}}_isSet){{/isDate}}{ + {{^isContainer}}{{#complexType}}if({{name}}.isSet()){{/complexType}}{{^complexType}}if(m_{{name}}_isSet){{/complexType}}{ obj.insert(QString("{{baseName}}"), ::{{cppNamespace}}::toJsonValue({{name}})); }{{/isContainer}}{{#isContainer}} if({{name}}.size() > 0){ @@ -105,7 +105,7 @@ bool {{classname}}::isSet() const { bool isObjectUpdated = false; do{ {{#vars}} - {{#isContainer}}if({{name}}.size() > 0){{/isContainer}}{{^isContainer}}{{#complexType}}{{^isString}}{{^isDateTime}}{{^isByteArray}}{{^isDate}}if({{name}}.isSet()){{/isDate}}{{/isByteArray}}{{/isDateTime}}{{/isString}}{{/complexType}}{{^complexType}}if(m_{{name}}_isSet){{/complexType}}{{#isString}}if(m_{{name}}_isSet){{/isString}}{{#isDateTime}}if(m_{{name}}_isSet){{/isDateTime}}{{#isByteArray}}if(m_{{name}}_isSet){{/isByteArray}}{{#isDate}}if(m_{{name}}_isSet){{/isDate}}{{/isContainer}}{ isObjectUpdated = true; break;} + {{#isContainer}}if({{name}}.size() > 0){{/isContainer}}{{^isContainer}}{{#complexType}}if({{name}}.isSet()){{/complexType}}{{^complexType}}if(m_{{name}}_isSet){{/complexType}}{{/isContainer}}{ isObjectUpdated = true; break;} {{/vars}}}while(false); return isObjectUpdated; } diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/object.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/object.mustache index a3ed43c95fa..26621c747ed 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/object.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/object.mustache @@ -12,9 +12,9 @@ namespace {{this}} { class {{prefix}}Object { public: virtual ~{{prefix}}Object(){ - + } - + virtual QJsonObject asJsonObject() const { return jObj; } diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/src-CMakeLists.txt.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/src-CMakeLists.txt.mustache index 9faf5db60e4..0311ec2020f 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/src-CMakeLists.txt.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/src-CMakeLists.txt.mustache @@ -12,7 +12,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++14 -Wall -Wno-unused-varia if(${NODEBUG} STREQUAL "OFF") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg -g3") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg -g3") -else (${NODEBUG} STREQUAL "OFF") +else (${NODEBUG} STREQUAL "OFF") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s -O3") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s -O3") endif(${NODEBUG} STREQUAL "OFF") diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/Dockerfile b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/Dockerfile index b3395482976..2cc6d3eba27 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/Dockerfile +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/Dockerfile @@ -1,11 +1,11 @@ FROM alpine:latest AS build -RUN apk add --update \ +RUN apk add --update \ cmake \ alpine-sdk \ - openssl \ - qt5-qtbase-dev \ - qt5-qttools-dev + openssl \ + qt5-qtbase-dev \ + qt5-qttools-dev WORKDIR /usr/server ADD ./src ./src @@ -13,10 +13,10 @@ ADD ./CMakeLists.txt ./ RUN mkdir -p ./build WORKDIR /usr/server/build RUN cmake -DNODEBUG:STRING="ON" .. -RUN make +RUN make FROM alpine:latest AS runtime -RUN apk add --update \ +RUN apk add --update \ libgcc \ libstdc++ \ qt5-qtbase \ diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/LICENSE.txt b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/LICENSE.txt index 04938f840c9..be59130f858 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/LICENSE.txt +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/LICENSE.txt @@ -1,4 +1,4 @@ -QHttpEngine +QHttpEngine The MIT License (MIT) diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/README.MD b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/README.MD index d354460c635..5be785bda41 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/README.MD +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/README.MD @@ -1,8 +1,9 @@ +# C++ Qt5 Server + ## Qt5 HTTP Server based on the Qhttpengine -This server was generated by the [openapi-generator] -(https://openapi-generator.tech) project. -By using the [OpenAPI-Spec](https://github.com/OAI/OpenAPI-Specification) from a remote server, you can easily generate a server stub. -- + +This server was generated by the [openapi-generator](https://openapi-generator.tech) project. +By using the [OpenAPI-Spec](https://github.com/OAI/OpenAPI-Specification) from a remote server, you can easily generate a server stub. To see how to make this your own, look here: @@ -21,30 +22,36 @@ Simple set of classes for developing HTTP server applications in Qt. To learn more about building and using the library, please visit this page: -https://ci.quickmediasolutions.com/job/qhttpengine-documentation/doxygen/ - +[Link](https://ci.quickmediasolutions.com/job/qhttpengine-documentation/doxygen) ### Viewing the code -You can view the code using an editor like Microsoft Visual Studio Code or you can + +You can view the code using an editor like Microsoft Visual Studio Code or you can Use QtCreator and browse for the root CMakeLists.txt and load it as a project ### Build with make + Install the tools [Linux/Debian] -``` + +```shell sudo apt install cmake build-essential libssl-dev qtbase5-dev qtbase5-dev-tools git curl ``` To build, go to the `server` folder -``` -make + +```shell +make ``` To run the server -``` + +```shell ./build/src/cpp-qt5-server & ``` + #### Invoke an API -``` + +```shell curl -X GET http://localhost:8080/v2/store/inventory curl -X POST http://localhost:8080/v2/store/order -H "Content-Type: application/json" -d "{ \"id\": 22, \"petId\": 1541, \"quantity\": 5, \"shipDate\": \"2018-06-16T18:31:43.870Z\", \"status\": \"placed\", \"complete\": \"true\" }" curl -X GET http://localhost:8080/v2/pet/findByStatus @@ -52,38 +59,50 @@ curl -X GET http://localhost:8080/v2/store/inventory ``` ### Run and build with docker + Building with docker multistage If you dont have docker install [here](https://docs.docker.com/install) Add yourself to the docker group -``` +```shell docker build --network=host -t cpp-qt5-server . ``` -Running with docker -``` -docker run --rm -it --name=server-container cpp-qt5-server + +Running with docker + +```shell +docker run --rm -it --name=server-container cpp-qt5-server ``` #### Invoking an API + Mind the IP here -``` + +```shell curl -X GET http://172.17.0.2:8080/v2/store/inventory curl -X POST http://172.17.0.2:8080/v2/store/order -H "Content-Type: application/json" -d "{ \"id\": 22, \"petId\": 1541, \"quantity\": 5, \"shipDate\": \"2018-06-16T18:31:43.870Z\", \"status\": \"placed\", \"complete\": \"true\" }" ``` use this command to get the container IP -``` + +```shell docker inspect server-container | grep "IPAddress" ``` -To exit from the command line -``` + +To exit from the command line + +```shell Ctrl + p + q ``` + To stop container -``` + +```shell docker stop ``` + or to terminate and quit -``` + +```shell Ctrl+C ``` diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/CMakeLists.txt b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/CMakeLists.txt index 9faf5db60e4..0311ec2020f 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/CMakeLists.txt +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/CMakeLists.txt @@ -12,7 +12,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -std=c++14 -Wall -Wno-unused-varia if(${NODEBUG} STREQUAL "OFF") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg -g3") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg -g3") -else (${NODEBUG} STREQUAL "OFF") +else (${NODEBUG} STREQUAL "OFF") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s -O3") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s -O3") endif(${NODEBUG} STREQUAL "OFF") diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIApiRouter.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIApiRouter.cpp index e45ee728700..2f665944257 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIApiRouter.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIApiRouter.cpp @@ -24,270 +24,241 @@ namespace OpenAPI { -inline QHttpEngine::Socket::Method toQHttpEngineMethod(QString method){ - - if( method == QString("OPTIONS")) - return QHttpEngine::Socket::Method::OPTIONS; - if( method == QString("GET")) - return QHttpEngine::Socket::Method::GET; - if( method == QString("HEAD")) - return QHttpEngine::Socket::Method::HEAD; - if( method == QString("POST")) - return QHttpEngine::Socket::Method::POST; - if( method == QString("PUT")) - return QHttpEngine::Socket::Method::PUT; - if( method == QString("DELETE")) - return QHttpEngine::Socket::Method::DELETE; - if( method == QString("TRACE")) - return QHttpEngine::Socket::Method::TRACE; - if( method == QString("CONNECT")) - return QHttpEngine::Socket::Method::CONNECT; - - return static_cast(-1); +OAIApiRouter::OAIApiRouter() { + createApiHandlers(); } -ApiRouter::ApiRouter() { - OAIPetApiApiHandler = new OAIPetApiHandler(); - OAIStoreApiApiHandler = new OAIStoreApiHandler(); - OAIUserApiApiHandler = new OAIUserApiHandler(); - -} - -ApiRouter::~ApiRouter(){ - qDebug() << "~ApiRouter()"; +OAIApiRouter::~OAIApiRouter(){ + qDebug() << "~ApiRouter()"; delete OAIPetApiApiHandler; delete OAIStoreApiApiHandler; delete OAIUserApiApiHandler; - } -void ApiRouter::setUpRoutes() { +void OAIApiRouter::createApiHandlers() { + OAIPetApiApiHandler = new OAIPetApiHandler(); + OAIStoreApiApiHandler = new OAIStoreApiHandler(); + OAIUserApiApiHandler = new OAIUserApiHandler(); +} + +void OAIApiRouter::setUpRoutes() { - Routes.insert("/v2/pet",[this](QHttpEngine::Socket *socket) { - if(toQHttpEngineMethod("POST") == socket->method()){ + Routes.insert(QString("%1 %2").arg("POST").arg("/v2/pet").toLower(), [this](QHttpEngine::Socket *socket) { auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); reqObj->addPetRequest(); - } }); - Routes.insert("/v2/pet/findByStatus",[this](QHttpEngine::Socket *socket) { - if(toQHttpEngineMethod("GET") == socket->method()){ + Routes.insert(QString("%1 %2").arg("GET").arg("/v2/pet/findByStatus").toLower(), [this](QHttpEngine::Socket *socket) { auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); reqObj->findPetsByStatusRequest(); - } }); - Routes.insert("/v2/pet/findByTags",[this](QHttpEngine::Socket *socket) { - if(toQHttpEngineMethod("GET") == socket->method()){ + Routes.insert(QString("%1 %2").arg("GET").arg("/v2/pet/findByTags").toLower(), [this](QHttpEngine::Socket *socket) { auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); reqObj->findPetsByTagsRequest(); - } }); - Routes.insert("/v2/pet",[this](QHttpEngine::Socket *socket) { - if(toQHttpEngineMethod("PUT") == socket->method()){ + Routes.insert(QString("%1 %2").arg("PUT").arg("/v2/pet").toLower(), [this](QHttpEngine::Socket *socket) { auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); reqObj->updatePetRequest(); - } }); - Routes.insert("/v2/store/inventory",[this](QHttpEngine::Socket *socket) { - if(toQHttpEngineMethod("GET") == socket->method()){ + Routes.insert(QString("%1 %2").arg("GET").arg("/v2/store/inventory").toLower(), [this](QHttpEngine::Socket *socket) { auto reqObj = new OAIStoreApiRequest(socket, OAIStoreApiApiHandler); reqObj->getInventoryRequest(); - } }); - Routes.insert("/v2/store/order",[this](QHttpEngine::Socket *socket) { - if(toQHttpEngineMethod("POST") == socket->method()){ + Routes.insert(QString("%1 %2").arg("POST").arg("/v2/store/order").toLower(), [this](QHttpEngine::Socket *socket) { auto reqObj = new OAIStoreApiRequest(socket, OAIStoreApiApiHandler); reqObj->placeOrderRequest(); - } }); - Routes.insert("/v2/user",[this](QHttpEngine::Socket *socket) { - if(toQHttpEngineMethod("POST") == socket->method()){ + Routes.insert(QString("%1 %2").arg("POST").arg("/v2/user").toLower(), [this](QHttpEngine::Socket *socket) { auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); reqObj->createUserRequest(); - } }); - Routes.insert("/v2/user/createWithArray",[this](QHttpEngine::Socket *socket) { - if(toQHttpEngineMethod("POST") == socket->method()){ + Routes.insert(QString("%1 %2").arg("POST").arg("/v2/user/createWithArray").toLower(), [this](QHttpEngine::Socket *socket) { auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); reqObj->createUsersWithArrayInputRequest(); - } }); - Routes.insert("/v2/user/createWithList",[this](QHttpEngine::Socket *socket) { - if(toQHttpEngineMethod("POST") == socket->method()){ + Routes.insert(QString("%1 %2").arg("POST").arg("/v2/user/createWithList").toLower(), [this](QHttpEngine::Socket *socket) { auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); reqObj->createUsersWithListInputRequest(); - } }); - Routes.insert("/v2/user/login",[this](QHttpEngine::Socket *socket) { - if(toQHttpEngineMethod("GET") == socket->method()){ + Routes.insert(QString("%1 %2").arg("GET").arg("/v2/user/login").toLower(), [this](QHttpEngine::Socket *socket) { auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); reqObj->loginUserRequest(); - } }); - Routes.insert("/v2/user/logout",[this](QHttpEngine::Socket *socket) { - if(toQHttpEngineMethod("GET") == socket->method()){ + Routes.insert(QString("%1 %2").arg("GET").arg("/v2/user/logout").toLower(), [this](QHttpEngine::Socket *socket) { auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); reqObj->logoutUserRequest(); - } - }); + }); } -void ApiRouter::processRequest(QHttpEngine::Socket *socket){ - if (Routes.contains(socket->path())) { - for(auto endpoints : Routes.values(socket->path())) { - endpoints.operator()(socket); - } - } else - { - { - QString completePath("/v2/pet/{petId}"); - QString pet_idPathParam("{"); - pet_idPathParam.append("petId").append("}"); - completePath.replace("/", "\\/"); // replace '/' with '\/' for regex - completePath.replace(pet_idPathParam, "([^\\/]*?)"); // match anything but '/'' - completePath.append("$"); // End of string - QRegularExpression re(completePath, QRegularExpression::CaseInsensitiveOption); - QRegularExpressionMatch match = re.match(socket->path()); - if ((toQHttpEngineMethod("DELETE") == socket->method()) && match.hasMatch() ) { - QString pathparam = match.captured(1); - auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); - reqObj->deletePetRequest(pathparam);; - return; - } - } - { - QString completePath("/v2/pet/{petId}"); - QString pet_idPathParam("{"); - pet_idPathParam.append("petId").append("}"); - completePath.replace("/", "\\/"); // replace '/' with '\/' for regex - completePath.replace(pet_idPathParam, "([^\\/]*?)"); // match anything but '/'' - completePath.append("$"); // End of string - QRegularExpression re(completePath, QRegularExpression::CaseInsensitiveOption); - QRegularExpressionMatch match = re.match(socket->path()); - if ((toQHttpEngineMethod("GET") == socket->method()) && match.hasMatch() ) { - QString pathparam = match.captured(1); - auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); - reqObj->getPetByIdRequest(pathparam);; - return; - } - } - { - QString completePath("/v2/pet/{petId}"); - QString pet_idPathParam("{"); - pet_idPathParam.append("petId").append("}"); - completePath.replace("/", "\\/"); // replace '/' with '\/' for regex - completePath.replace(pet_idPathParam, "([^\\/]*?)"); // match anything but '/'' - completePath.append("$"); // End of string - QRegularExpression re(completePath, QRegularExpression::CaseInsensitiveOption); - QRegularExpressionMatch match = re.match(socket->path()); - if ((toQHttpEngineMethod("POST") == socket->method()) && match.hasMatch() ) { - QString pathparam = match.captured(1); - auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); - reqObj->updatePetWithFormRequest(pathparam);; - return; - } - } - { - QString completePath("/v2/pet/{petId}/uploadImage"); - QString pet_idPathParam("{"); - pet_idPathParam.append("petId").append("}"); - completePath.replace("/", "\\/"); // replace '/' with '\/' for regex - completePath.replace(pet_idPathParam, "([^\\/]*?)"); // match anything but '/'' - completePath.append("$"); // End of string - QRegularExpression re(completePath, QRegularExpression::CaseInsensitiveOption); - QRegularExpressionMatch match = re.match(socket->path()); - if ((toQHttpEngineMethod("POST") == socket->method()) && match.hasMatch() ) { - QString pathparam = match.captured(1); - auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); - reqObj->uploadFileRequest(pathparam);; - return; - } - } - { - QString completePath("/v2/store/order/{orderId}"); - QString order_idPathParam("{"); - order_idPathParam.append("orderId").append("}"); - completePath.replace("/", "\\/"); // replace '/' with '\/' for regex - completePath.replace(order_idPathParam, "([^\\/]*?)"); // match anything but '/'' - completePath.append("$"); // End of string - QRegularExpression re(completePath, QRegularExpression::CaseInsensitiveOption); - QRegularExpressionMatch match = re.match(socket->path()); - if ((toQHttpEngineMethod("DELETE") == socket->method()) && match.hasMatch() ) { - QString pathparam = match.captured(1); - auto reqObj = new OAIStoreApiRequest(socket, OAIStoreApiApiHandler); - reqObj->deleteOrderRequest(pathparam);; - return; - } - } - { - QString completePath("/v2/store/order/{orderId}"); - QString order_idPathParam("{"); - order_idPathParam.append("orderId").append("}"); - completePath.replace("/", "\\/"); // replace '/' with '\/' for regex - completePath.replace(order_idPathParam, "([^\\/]*?)"); // match anything but '/'' - completePath.append("$"); // End of string - QRegularExpression re(completePath, QRegularExpression::CaseInsensitiveOption); - QRegularExpressionMatch match = re.match(socket->path()); - if ((toQHttpEngineMethod("GET") == socket->method()) && match.hasMatch() ) { - QString pathparam = match.captured(1); - auto reqObj = new OAIStoreApiRequest(socket, OAIStoreApiApiHandler); - reqObj->getOrderByIdRequest(pathparam);; - return; - } - } - { - QString completePath("/v2/user/{username}"); - QString usernamePathParam("{"); - usernamePathParam.append("username").append("}"); - completePath.replace("/", "\\/"); // replace '/' with '\/' for regex - completePath.replace(usernamePathParam, "([^\\/]*?)"); // match anything but '/'' - completePath.append("$"); // End of string - QRegularExpression re(completePath, QRegularExpression::CaseInsensitiveOption); - QRegularExpressionMatch match = re.match(socket->path()); - if ((toQHttpEngineMethod("DELETE") == socket->method()) && match.hasMatch() ) { - QString pathparam = match.captured(1); - auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); - reqObj->deleteUserRequest(pathparam);; - return; - } - } - { - QString completePath("/v2/user/{username}"); - QString usernamePathParam("{"); - usernamePathParam.append("username").append("}"); - completePath.replace("/", "\\/"); // replace '/' with '\/' for regex - completePath.replace(usernamePathParam, "([^\\/]*?)"); // match anything but '/'' - completePath.append("$"); // End of string - QRegularExpression re(completePath, QRegularExpression::CaseInsensitiveOption); - QRegularExpressionMatch match = re.match(socket->path()); - if ((toQHttpEngineMethod("GET") == socket->method()) && match.hasMatch() ) { - QString pathparam = match.captured(1); - auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); - reqObj->getUserByNameRequest(pathparam);; - return; - } - } - { - QString completePath("/v2/user/{username}"); - QString usernamePathParam("{"); - usernamePathParam.append("username").append("}"); - completePath.replace("/", "\\/"); // replace '/' with '\/' for regex - completePath.replace(usernamePathParam, "([^\\/]*?)"); // match anything but '/'' - completePath.append("$"); // End of string - QRegularExpression re(completePath, QRegularExpression::CaseInsensitiveOption); - QRegularExpressionMatch match = re.match(socket->path()); - if ((toQHttpEngineMethod("PUT") == socket->method()) && match.hasMatch() ) { - QString pathparam = match.captured(1); - auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); - reqObj->updateUserRequest(pathparam);; - return; - } - } +void OAIApiRouter::processRequest(QHttpEngine::Socket *socket){ + if( handleRequest(socket) ){ + return; + } + if( handleRequestAndExtractPathParam(socket) ){ + return; } socket->setStatusCode(QHttpEngine::Socket::NotFound); if(socket->isOpen()){ socket->writeHeaders(); socket->close(); } - return; } + +bool OAIApiRouter::handleRequest(QHttpEngine::Socket *socket){ + auto reqPath = QString("%1 %2").arg(fromQHttpEngineMethod(socket->method())).arg(socket->path()).toLower(); + if ( Routes.contains(reqPath) ) { + Routes.value(reqPath).operator()(socket); + return true; + } + return false; +} + +bool OAIApiRouter::handleRequestAndExtractPathParam(QHttpEngine::Socket *socket){ + auto reqPath = QString("%1 %2").arg(fromQHttpEngineMethod(socket->method())).arg(socket->path()).toLower(); + { + auto completePath = QString("%1 %2").arg("DELETE").arg("/v2/pet/{petId}").toLower(); + if ( reqPath.startsWith(completePath.leftRef( completePath.indexOf(QString("/{")))) ) { + QRegularExpression parExpr( R"(\{([^\/\\s]+)\})" ); + completePath.replace( parExpr, R"((?<\1>[^\/\s]+))" ); + completePath.append("[\\/]?$"); + QRegularExpression pathExpr( completePath ); + QRegularExpressionMatch match = pathExpr.match( reqPath ); + if ( match.hasMatch() ){ + QString petId = match.captured(QString("petId").toLower()); + auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); + reqObj->deletePetRequest(petId); + return true; + } + } + } + { + auto completePath = QString("%1 %2").arg("GET").arg("/v2/pet/{petId}").toLower(); + if ( reqPath.startsWith(completePath.leftRef( completePath.indexOf(QString("/{")))) ) { + QRegularExpression parExpr( R"(\{([^\/\\s]+)\})" ); + completePath.replace( parExpr, R"((?<\1>[^\/\s]+))" ); + completePath.append("[\\/]?$"); + QRegularExpression pathExpr( completePath ); + QRegularExpressionMatch match = pathExpr.match( reqPath ); + if ( match.hasMatch() ){ + QString petId = match.captured(QString("petId").toLower()); + auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); + reqObj->getPetByIdRequest(petId); + return true; + } + } + } + { + auto completePath = QString("%1 %2").arg("POST").arg("/v2/pet/{petId}").toLower(); + if ( reqPath.startsWith(completePath.leftRef( completePath.indexOf(QString("/{")))) ) { + QRegularExpression parExpr( R"(\{([^\/\\s]+)\})" ); + completePath.replace( parExpr, R"((?<\1>[^\/\s]+))" ); + completePath.append("[\\/]?$"); + QRegularExpression pathExpr( completePath ); + QRegularExpressionMatch match = pathExpr.match( reqPath ); + if ( match.hasMatch() ){ + QString petId = match.captured(QString("petId").toLower()); + auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); + reqObj->updatePetWithFormRequest(petId); + return true; + } + } + } + { + auto completePath = QString("%1 %2").arg("POST").arg("/v2/pet/{petId}/uploadImage").toLower(); + if ( reqPath.startsWith(completePath.leftRef( completePath.indexOf(QString("/{")))) ) { + QRegularExpression parExpr( R"(\{([^\/\\s]+)\})" ); + completePath.replace( parExpr, R"((?<\1>[^\/\s]+))" ); + completePath.append("[\\/]?$"); + QRegularExpression pathExpr( completePath ); + QRegularExpressionMatch match = pathExpr.match( reqPath ); + if ( match.hasMatch() ){ + QString petId = match.captured(QString("petId").toLower()); + auto reqObj = new OAIPetApiRequest(socket, OAIPetApiApiHandler); + reqObj->uploadFileRequest(petId); + return true; + } + } + } + { + auto completePath = QString("%1 %2").arg("DELETE").arg("/v2/store/order/{orderId}").toLower(); + if ( reqPath.startsWith(completePath.leftRef( completePath.indexOf(QString("/{")))) ) { + QRegularExpression parExpr( R"(\{([^\/\\s]+)\})" ); + completePath.replace( parExpr, R"((?<\1>[^\/\s]+))" ); + completePath.append("[\\/]?$"); + QRegularExpression pathExpr( completePath ); + QRegularExpressionMatch match = pathExpr.match( reqPath ); + if ( match.hasMatch() ){ + QString orderId = match.captured(QString("orderId").toLower()); + auto reqObj = new OAIStoreApiRequest(socket, OAIStoreApiApiHandler); + reqObj->deleteOrderRequest(orderId); + return true; + } + } + } + { + auto completePath = QString("%1 %2").arg("GET").arg("/v2/store/order/{orderId}").toLower(); + if ( reqPath.startsWith(completePath.leftRef( completePath.indexOf(QString("/{")))) ) { + QRegularExpression parExpr( R"(\{([^\/\\s]+)\})" ); + completePath.replace( parExpr, R"((?<\1>[^\/\s]+))" ); + completePath.append("[\\/]?$"); + QRegularExpression pathExpr( completePath ); + QRegularExpressionMatch match = pathExpr.match( reqPath ); + if ( match.hasMatch() ){ + QString orderId = match.captured(QString("orderId").toLower()); + auto reqObj = new OAIStoreApiRequest(socket, OAIStoreApiApiHandler); + reqObj->getOrderByIdRequest(orderId); + return true; + } + } + } + { + auto completePath = QString("%1 %2").arg("DELETE").arg("/v2/user/{username}").toLower(); + if ( reqPath.startsWith(completePath.leftRef( completePath.indexOf(QString("/{")))) ) { + QRegularExpression parExpr( R"(\{([^\/\\s]+)\})" ); + completePath.replace( parExpr, R"((?<\1>[^\/\s]+))" ); + completePath.append("[\\/]?$"); + QRegularExpression pathExpr( completePath ); + QRegularExpressionMatch match = pathExpr.match( reqPath ); + if ( match.hasMatch() ){ + QString username = match.captured(QString("username").toLower()); + auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); + reqObj->deleteUserRequest(username); + return true; + } + } + } + { + auto completePath = QString("%1 %2").arg("GET").arg("/v2/user/{username}").toLower(); + if ( reqPath.startsWith(completePath.leftRef( completePath.indexOf(QString("/{")))) ) { + QRegularExpression parExpr( R"(\{([^\/\\s]+)\})" ); + completePath.replace( parExpr, R"((?<\1>[^\/\s]+))" ); + completePath.append("[\\/]?$"); + QRegularExpression pathExpr( completePath ); + QRegularExpressionMatch match = pathExpr.match( reqPath ); + if ( match.hasMatch() ){ + QString username = match.captured(QString("username").toLower()); + auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); + reqObj->getUserByNameRequest(username); + return true; + } + } + } + { + auto completePath = QString("%1 %2").arg("PUT").arg("/v2/user/{username}").toLower(); + if ( reqPath.startsWith(completePath.leftRef( completePath.indexOf(QString("/{")))) ) { + QRegularExpression parExpr( R"(\{([^\/\\s]+)\})" ); + completePath.replace( parExpr, R"((?<\1>[^\/\s]+))" ); + completePath.append("[\\/]?$"); + QRegularExpression pathExpr( completePath ); + QRegularExpressionMatch match = pathExpr.match( reqPath ); + if ( match.hasMatch() ){ + QString username = match.captured(QString("username").toLower()); + auto reqObj = new OAIUserApiRequest(socket, OAIUserApiApiHandler); + reqObj->updateUserRequest(username); + return true; + } + } + } + return false; +} + } diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIApiRouter.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIApiRouter.h index 5f3532b2762..35aedba6a84 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIApiRouter.h +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIApiRouter.h @@ -30,7 +30,7 @@ namespace OpenAPI { -class RequestHandler : public QHttpEngine::QObjectHandler +class OAIApiRequestHandler : public QHttpEngine::QObjectHandler { Q_OBJECT signals: @@ -43,21 +43,53 @@ protected: } }; -class ApiRouter : public QObject +class OAIApiRouter : public QObject { Q_OBJECT public: - ApiRouter(); - virtual ~ApiRouter(); + OAIApiRouter(); + virtual ~OAIApiRouter(); void setUpRoutes(); void processRequest(QHttpEngine::Socket *socket); private: - QMultiMap> Routes; + QMap> Routes; + QMultiMap> RoutesWithPathParam; + + bool handleRequest(QHttpEngine::Socket *socket); + bool handleRequestAndExtractPathParam(QHttpEngine::Socket *socket); + OAIPetApiHandler *OAIPetApiApiHandler; OAIStoreApiHandler *OAIStoreApiApiHandler; - OAIUserApiHandler *OAIUserApiApiHandler; + OAIUserApiHandler *OAIUserApiApiHandler; +protected: + // override this method to provide custom class derived from ApiHandler classes + virtual void createApiHandlers(); + +private : + inline QString fromQHttpEngineMethod(QHttpEngine::Socket::Method method){ + switch( method ){ + case QHttpEngine::Socket::Method::OPTIONS: + return QStringLiteral("OPTIONS"); + case QHttpEngine::Socket::Method::GET: + return QStringLiteral("GET"); + case QHttpEngine::Socket::Method::HEAD: + return QStringLiteral("HEAD"); + case QHttpEngine::Socket::Method::POST: + return QStringLiteral("POST"); + case QHttpEngine::Socket::Method::PUT: + return QStringLiteral("PUT"); + case QHttpEngine::Socket::Method::DELETE: + return QStringLiteral("DELETE"); + case QHttpEngine::Socket::Method::TRACE: + return QStringLiteral("TRACE"); + case QHttpEngine::Socket::Method::CONNECT: + return QStringLiteral("CONNECT"); + } + return QStringLiteral(""); + } + }; diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/main.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/main.cpp index db0590c4ed8..a2f6aea81d7 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/main.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/main.cpp @@ -19,43 +19,43 @@ #include #include #include -#ifdef __linux__ +#ifdef __linux__ #include #include -#endif +#endif #include #include "OAIApiRouter.h" -#ifdef __linux__ +#ifdef __linux__ void catchUnixSignals(QList quitSignals) { auto handler = [](int sig) -> void { // blocking and not aysnc-signal-safe func are valid qDebug() << "\nquit the application by signal " << sig; QCoreApplication::quit(); }; - - sigset_t blocking_mask; - sigemptyset(&blocking_mask); - for (auto sig : quitSignals) - sigaddset(&blocking_mask, sig); - - struct sigaction sa; - sa.sa_handler = handler; - sa.sa_mask = blocking_mask; - sa.sa_flags = 0; - - for (auto sig : quitSignals) + + sigset_t blocking_mask; + sigemptyset(&blocking_mask); + for (auto sig : quitSignals) + sigaddset(&blocking_mask, sig); + + struct sigaction sa; + sa.sa_handler = handler; + sa.sa_mask = blocking_mask; + sa.sa_flags = 0; + + for (auto sig : quitSignals) sigaction(sig, &sa, nullptr); } -#endif +#endif int main(int argc, char * argv[]) { QCoreApplication a(argc, argv); -#ifdef __linux__ +#ifdef __linux__ QList sigs({SIGQUIT, SIGINT, SIGTERM, SIGHUP}); catchUnixSignals(sigs); -#endif +#endif // Build the command-line options QCommandLineParser parser; QCommandLineOption addressOption( @@ -80,11 +80,11 @@ int main(int argc, char * argv[]) // Obtain the values QHostAddress address = QHostAddress(parser.value(addressOption)); quint16 port = static_cast(parser.value(portOption).toInt()); - - QSharedPointer handler(new OpenAPI::RequestHandler()); - OpenAPI::ApiRouter router; + + QSharedPointer handler(new OpenAPI::OAIApiRequestHandler()); + OpenAPI::OAIApiRouter router; router.setUpRoutes(); - QObject::connect(handler.data(), &OpenAPI::RequestHandler::requestReceived, [&](QHttpEngine::Socket *socket) { + QObject::connect(handler.data(), &OpenAPI::OAIApiRequestHandler::requestReceived, [&](QHttpEngine::Socket *socket) { router.processRequest(socket); }); @@ -95,6 +95,6 @@ int main(int argc, char * argv[]) qCritical("Unable to listen on the specified port."); return 1; } - + return a.exec(); } diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIApiResponse.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIApiResponse.cpp index 7bba2a9468d..0e576128205 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIApiResponse.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIApiResponse.cpp @@ -31,7 +31,7 @@ OAIApiResponse::OAIApiResponse() { } OAIApiResponse::~OAIApiResponse() { - + } void diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAICategory.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAICategory.cpp index c70d263a5a0..fb8ec997ce3 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAICategory.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAICategory.cpp @@ -31,7 +31,7 @@ OAICategory::OAICategory() { } OAICategory::~OAICategory() { - + } void diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHelpers.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHelpers.h index 0172e953778..d904bcc7920 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHelpers.h +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHelpers.h @@ -134,7 +134,7 @@ namespace OpenAPI { for(auto itemkey : varmap.keys() ){ T itemVal; fromJsonValue(itemVal, QJsonValue::fromVariant(varmap.value(itemkey))); - val.insert(itemkey, val); + val.insert(itemkey, itemVal); } } return; diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIObject.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIObject.h index 74db802a37e..fe37f898f7d 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIObject.h +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIObject.h @@ -21,9 +21,9 @@ namespace OpenAPI { class OAIObject { public: virtual ~OAIObject(){ - + } - + virtual QJsonObject asJsonObject() const { return jObj; } diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIOrder.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIOrder.cpp index 7afaa063a29..567533b830b 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIOrder.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIOrder.cpp @@ -31,7 +31,7 @@ OAIOrder::OAIOrder() { } OAIOrder::~OAIOrder() { - + } void diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIPet.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIPet.cpp index 97cb3399151..83e4b23f8e7 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIPet.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIPet.cpp @@ -31,7 +31,7 @@ OAIPet::OAIPet() { } OAIPet::~OAIPet() { - + } void diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAITag.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAITag.cpp index e8f1a69972b..d450cc833f6 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAITag.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAITag.cpp @@ -31,7 +31,7 @@ OAITag::OAITag() { } OAITag::~OAITag() { - + } void diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIUser.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIUser.cpp index 375c8b3220c..9f345cf874a 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIUser.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIUser.cpp @@ -31,7 +31,7 @@ OAIUser::OAIUser() { } OAIUser::~OAIUser() { - + } void diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.cpp index 1a5953e78b1..40ccab593c7 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.cpp @@ -25,7 +25,7 @@ OAIPetApiRequest::OAIPetApiRequest(QHttpEngine::Socket *s, OAIPetApiHandler* hdl auto headers = s->headers(); for(auto itr = headers.begin(); itr != headers.end(); itr++) { requestHeaders.insert(QString(itr.key()), QString(itr.value())); - } + } } OAIPetApiRequest::~OAIPetApiRequest(){ @@ -33,7 +33,7 @@ OAIPetApiRequest::~OAIPetApiRequest(){ qDebug() << "OAIPetApiRequest::~OAIPetApiRequest()"; } -QMap +QMap OAIPetApiRequest::getRequestHeaders() const { return requestHeaders; } @@ -53,7 +53,7 @@ QHttpEngine::Socket* OAIPetApiRequest::getRawSocket(){ void OAIPetApiRequest::addPetRequest(){ qDebug() << "/v2/pet"; connect(this, &OAIPetApiRequest::addPet, handler, &OAIPetApiHandler::addPet); - + QJsonDocument doc; @@ -63,14 +63,14 @@ void OAIPetApiRequest::addPetRequest(){ ::OpenAPI::fromJsonValue(oai_pet, obj); - emit addPet( oai_pet); + emit addPet(oai_pet); } void OAIPetApiRequest::deletePetRequest(const QString& pet_idstr){ qDebug() << "/v2/pet/{petId}"; connect(this, &OAIPetApiRequest::deletePet, handler, &OAIPetApiHandler::deletePet); - + qint64 pet_id; fromStringValue(pet_idstr, pet_id); @@ -81,59 +81,59 @@ void OAIPetApiRequest::deletePetRequest(const QString& pet_idstr){ } - emit deletePet( pet_id, api_key); + emit deletePet(pet_id, api_key); } void OAIPetApiRequest::findPetsByStatusRequest(){ qDebug() << "/v2/pet/findByStatus"; connect(this, &OAIPetApiRequest::findPetsByStatus, handler, &OAIPetApiHandler::findPetsByStatus); + - - QList status; + QList status; if(socket->queryString().keys().contains("status")){ fromStringValue(socket->queryString().values("status"), status); } - emit findPetsByStatus( status); + emit findPetsByStatus(status); } void OAIPetApiRequest::findPetsByTagsRequest(){ qDebug() << "/v2/pet/findByTags"; connect(this, &OAIPetApiRequest::findPetsByTags, handler, &OAIPetApiHandler::findPetsByTags); + - - QList tags; + QList tags; if(socket->queryString().keys().contains("tags")){ fromStringValue(socket->queryString().values("tags"), tags); } - emit findPetsByTags( tags); + emit findPetsByTags(tags); } void OAIPetApiRequest::getPetByIdRequest(const QString& pet_idstr){ qDebug() << "/v2/pet/{petId}"; connect(this, &OAIPetApiRequest::getPetById, handler, &OAIPetApiHandler::getPetById); - + qint64 pet_id; fromStringValue(pet_idstr, pet_id); - emit getPetById( pet_id); + emit getPetById(pet_id); } void OAIPetApiRequest::updatePetRequest(){ qDebug() << "/v2/pet"; connect(this, &OAIPetApiRequest::updatePet, handler, &OAIPetApiHandler::updatePet); - + QJsonDocument doc; @@ -143,14 +143,14 @@ void OAIPetApiRequest::updatePetRequest(){ ::OpenAPI::fromJsonValue(oai_pet, obj); - emit updatePet( oai_pet); + emit updatePet(oai_pet); } void OAIPetApiRequest::updatePetWithFormRequest(const QString& pet_idstr){ qDebug() << "/v2/pet/{petId}"; connect(this, &OAIPetApiRequest::updatePetWithForm, handler, &OAIPetApiHandler::updatePetWithForm); - + qint64 pet_id; fromStringValue(pet_idstr, pet_id); @@ -158,14 +158,14 @@ void OAIPetApiRequest::updatePetWithFormRequest(const QString& pet_idstr){ QString name; QString status; - emit updatePetWithForm( pet_id, name, status); + emit updatePetWithForm(pet_id, name, status); } void OAIPetApiRequest::uploadFileRequest(const QString& pet_idstr){ qDebug() << "/v2/pet/{petId}/uploadImage"; connect(this, &OAIPetApiRequest::uploadFile, handler, &OAIPetApiHandler::uploadFile); - + qint64 pet_id; fromStringValue(pet_idstr, pet_id); @@ -173,13 +173,13 @@ void OAIPetApiRequest::uploadFileRequest(const QString& pet_idstr){ QString additional_metadata; QIODevice* file; - emit uploadFile( pet_id, additional_metadata, file); + emit uploadFile(pet_id, additional_metadata, file); } - + void OAIPetApiRequest::addPetResponse(){ - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::OK); if(socket->isOpen()){ socket->close(); @@ -187,7 +187,7 @@ void OAIPetApiRequest::addPetResponse(){ } void OAIPetApiRequest::deletePetResponse(){ - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::OK); if(socket->isOpen()){ socket->close(); @@ -222,7 +222,7 @@ void OAIPetApiRequest::getPetByIdResponse(const OAIPet& res){ } void OAIPetApiRequest::updatePetResponse(){ - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::OK); if(socket->isOpen()){ socket->close(); @@ -230,7 +230,7 @@ void OAIPetApiRequest::updatePetResponse(){ } void OAIPetApiRequest::updatePetWithFormResponse(){ - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::OK); if(socket->isOpen()){ socket->close(); @@ -249,7 +249,7 @@ void OAIPetApiRequest::uploadFileResponse(const OAIApiResponse& res){ void OAIPetApiRequest::addPetError(QNetworkReply::NetworkError error_type, QString& error_str){ Q_UNUSED(error_type); // TODO: Remap error_type to QHttpEngine::Socket errors - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::NotFound); socket->write(error_str.toUtf8()); if(socket->isOpen()){ @@ -259,7 +259,7 @@ void OAIPetApiRequest::addPetError(QNetworkReply::NetworkError error_type, QStri void OAIPetApiRequest::deletePetError(QNetworkReply::NetworkError error_type, QString& error_str){ Q_UNUSED(error_type); // TODO: Remap error_type to QHttpEngine::Socket errors - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::NotFound); socket->write(error_str.toUtf8()); if(socket->isOpen()){ @@ -302,7 +302,7 @@ void OAIPetApiRequest::getPetByIdError(const OAIPet& res, QNetworkReply::Network void OAIPetApiRequest::updatePetError(QNetworkReply::NetworkError error_type, QString& error_str){ Q_UNUSED(error_type); // TODO: Remap error_type to QHttpEngine::Socket errors - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::NotFound); socket->write(error_str.toUtf8()); if(socket->isOpen()){ @@ -312,7 +312,7 @@ void OAIPetApiRequest::updatePetError(QNetworkReply::NetworkError error_type, QS void OAIPetApiRequest::updatePetWithFormError(QNetworkReply::NetworkError error_type, QString& error_str){ Q_UNUSED(error_type); // TODO: Remap error_type to QHttpEngine::Socket errors - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::NotFound); socket->write(error_str.toUtf8()); if(socket->isOpen()){ @@ -336,7 +336,7 @@ void OAIPetApiRequest::sendCustomResponse(QByteArray & res, QNetworkReply::Netwo Q_UNUSED(res); // TODO Q_UNUSED(error_type); // TODO } - + void OAIPetApiRequest::sendCustomResponse(QIODevice *res, QNetworkReply::NetworkError error_type){ Q_UNUSED(res); // TODO Q_UNUSED(error_type); // TODO diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.h index aba7871567a..da87285e0ff 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.h +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.h @@ -31,7 +31,7 @@ namespace OpenAPI { class OAIPetApiRequest : public QObject { Q_OBJECT - + public: OAIPetApiRequest(QHttpEngine::Socket *s, OAIPetApiHandler* handler); virtual ~OAIPetApiRequest(); @@ -99,7 +99,7 @@ private: resHeaders.insert(itr.key().toUtf8(), itr.value().toUtf8()); } socket->setHeaders(resHeaders); - socket->writeHeaders(); + socket->writeHeaders(); } }; diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIStoreApiRequest.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIStoreApiRequest.cpp index a383601baa3..c770ae2a09f 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIStoreApiRequest.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIStoreApiRequest.cpp @@ -25,7 +25,7 @@ OAIStoreApiRequest::OAIStoreApiRequest(QHttpEngine::Socket *s, OAIStoreApiHandle auto headers = s->headers(); for(auto itr = headers.begin(); itr != headers.end(); itr++) { requestHeaders.insert(QString(itr.key()), QString(itr.value())); - } + } } OAIStoreApiRequest::~OAIStoreApiRequest(){ @@ -33,7 +33,7 @@ OAIStoreApiRequest::~OAIStoreApiRequest(){ qDebug() << "OAIStoreApiRequest::~OAIStoreApiRequest()"; } -QMap +QMap OAIStoreApiRequest::getRequestHeaders() const { return requestHeaders; } @@ -53,20 +53,20 @@ QHttpEngine::Socket* OAIStoreApiRequest::getRawSocket(){ void OAIStoreApiRequest::deleteOrderRequest(const QString& order_idstr){ qDebug() << "/v2/store/order/{orderId}"; connect(this, &OAIStoreApiRequest::deleteOrder, handler, &OAIStoreApiHandler::deleteOrder); - + QString order_id; fromStringValue(order_idstr, order_id); - emit deleteOrder( order_id); + emit deleteOrder(order_id); } void OAIStoreApiRequest::getInventoryRequest(){ qDebug() << "/v2/store/inventory"; connect(this, &OAIStoreApiRequest::getInventory, handler, &OAIStoreApiHandler::getInventory); - + @@ -77,20 +77,20 @@ void OAIStoreApiRequest::getInventoryRequest(){ void OAIStoreApiRequest::getOrderByIdRequest(const QString& order_idstr){ qDebug() << "/v2/store/order/{orderId}"; connect(this, &OAIStoreApiRequest::getOrderById, handler, &OAIStoreApiHandler::getOrderById); - + qint64 order_id; fromStringValue(order_idstr, order_id); - emit getOrderById( order_id); + emit getOrderById(order_id); } void OAIStoreApiRequest::placeOrderRequest(){ qDebug() << "/v2/store/order"; connect(this, &OAIStoreApiRequest::placeOrder, handler, &OAIStoreApiHandler::placeOrder); - + QJsonDocument doc; @@ -100,13 +100,13 @@ void OAIStoreApiRequest::placeOrderRequest(){ ::OpenAPI::fromJsonValue(oai_order, obj); - emit placeOrder( oai_order); + emit placeOrder(oai_order); } - + void OAIStoreApiRequest::deleteOrderResponse(){ - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::OK); if(socket->isOpen()){ socket->close(); @@ -143,7 +143,7 @@ void OAIStoreApiRequest::placeOrderResponse(const OAIOrder& res){ void OAIStoreApiRequest::deleteOrderError(QNetworkReply::NetworkError error_type, QString& error_str){ Q_UNUSED(error_type); // TODO: Remap error_type to QHttpEngine::Socket errors - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::NotFound); socket->write(error_str.toUtf8()); if(socket->isOpen()){ @@ -189,7 +189,7 @@ void OAIStoreApiRequest::sendCustomResponse(QByteArray & res, QNetworkReply::Net Q_UNUSED(res); // TODO Q_UNUSED(error_type); // TODO } - + void OAIStoreApiRequest::sendCustomResponse(QIODevice *res, QNetworkReply::NetworkError error_type){ Q_UNUSED(res); // TODO Q_UNUSED(error_type); // TODO diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIStoreApiRequest.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIStoreApiRequest.h index b9c6ce1c041..491e27db1f7 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIStoreApiRequest.h +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIStoreApiRequest.h @@ -30,7 +30,7 @@ namespace OpenAPI { class OAIStoreApiRequest : public QObject { Q_OBJECT - + public: OAIStoreApiRequest(QHttpEngine::Socket *s, OAIStoreApiHandler* handler); virtual ~OAIStoreApiRequest(); @@ -82,7 +82,7 @@ private: resHeaders.insert(itr.key().toUtf8(), itr.value().toUtf8()); } socket->setHeaders(resHeaders); - socket->writeHeaders(); + socket->writeHeaders(); } }; diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIUserApiRequest.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIUserApiRequest.cpp index bdc5b0b6882..f7162aafadc 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIUserApiRequest.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIUserApiRequest.cpp @@ -25,7 +25,7 @@ OAIUserApiRequest::OAIUserApiRequest(QHttpEngine::Socket *s, OAIUserApiHandler* auto headers = s->headers(); for(auto itr = headers.begin(); itr != headers.end(); itr++) { requestHeaders.insert(QString(itr.key()), QString(itr.value())); - } + } } OAIUserApiRequest::~OAIUserApiRequest(){ @@ -33,7 +33,7 @@ OAIUserApiRequest::~OAIUserApiRequest(){ qDebug() << "OAIUserApiRequest::~OAIUserApiRequest()"; } -QMap +QMap OAIUserApiRequest::getRequestHeaders() const { return requestHeaders; } @@ -53,7 +53,7 @@ QHttpEngine::Socket* OAIUserApiRequest::getRawSocket(){ void OAIUserApiRequest::createUserRequest(){ qDebug() << "/v2/user"; connect(this, &OAIUserApiRequest::createUser, handler, &OAIUserApiHandler::createUser); - + QJsonDocument doc; @@ -63,18 +63,18 @@ void OAIUserApiRequest::createUserRequest(){ ::OpenAPI::fromJsonValue(oai_user, obj); - emit createUser( oai_user); + emit createUser(oai_user); } void OAIUserApiRequest::createUsersWithArrayInputRequest(){ qDebug() << "/v2/user/createWithArray"; connect(this, &OAIUserApiRequest::createUsersWithArrayInput, handler, &OAIUserApiHandler::createUsersWithArrayInput); - + QJsonDocument doc; - QList oai_user; + QList oai_user; if(socket->readJson(doc)){ QJsonArray jsonArray = doc.array(); foreach(QJsonValue obj, jsonArray) { @@ -85,18 +85,18 @@ void OAIUserApiRequest::createUsersWithArrayInputRequest(){ } - emit createUsersWithArrayInput( oai_user); + emit createUsersWithArrayInput(oai_user); } void OAIUserApiRequest::createUsersWithListInputRequest(){ qDebug() << "/v2/user/createWithList"; connect(this, &OAIUserApiRequest::createUsersWithListInput, handler, &OAIUserApiHandler::createUsersWithListInput); - + QJsonDocument doc; - QList oai_user; + QList oai_user; if(socket->readJson(doc)){ QJsonArray jsonArray = doc.array(); foreach(QJsonValue obj, jsonArray) { @@ -107,61 +107,61 @@ void OAIUserApiRequest::createUsersWithListInputRequest(){ } - emit createUsersWithListInput( oai_user); + emit createUsersWithListInput(oai_user); } void OAIUserApiRequest::deleteUserRequest(const QString& usernamestr){ qDebug() << "/v2/user/{username}"; connect(this, &OAIUserApiRequest::deleteUser, handler, &OAIUserApiHandler::deleteUser); - + QString username; fromStringValue(usernamestr, username); - emit deleteUser( username); + emit deleteUser(username); } void OAIUserApiRequest::getUserByNameRequest(const QString& usernamestr){ qDebug() << "/v2/user/{username}"; connect(this, &OAIUserApiRequest::getUserByName, handler, &OAIUserApiHandler::getUserByName); - + QString username; fromStringValue(usernamestr, username); - emit getUserByName( username); + emit getUserByName(username); } void OAIUserApiRequest::loginUserRequest(){ qDebug() << "/v2/user/login"; connect(this, &OAIUserApiRequest::loginUser, handler, &OAIUserApiHandler::loginUser); + - - QString username; + QString username; if(socket->queryString().keys().contains("username")){ fromStringValue(socket->queryString().value("username"), username); } - QString password; + QString password; if(socket->queryString().keys().contains("password")){ fromStringValue(socket->queryString().value("password"), password); } - emit loginUser( username, password); + emit loginUser(username, password); } void OAIUserApiRequest::logoutUserRequest(){ qDebug() << "/v2/user/logout"; connect(this, &OAIUserApiRequest::logoutUser, handler, &OAIUserApiHandler::logoutUser); - + @@ -172,7 +172,7 @@ void OAIUserApiRequest::logoutUserRequest(){ void OAIUserApiRequest::updateUserRequest(const QString& usernamestr){ qDebug() << "/v2/user/{username}"; connect(this, &OAIUserApiRequest::updateUser, handler, &OAIUserApiHandler::updateUser); - + QString username; fromStringValue(usernamestr, username); @@ -184,13 +184,13 @@ void OAIUserApiRequest::updateUserRequest(const QString& usernamestr){ ::OpenAPI::fromJsonValue(oai_user, obj); - emit updateUser( username, oai_user); + emit updateUser(username, oai_user); } - + void OAIUserApiRequest::createUserResponse(){ - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::OK); if(socket->isOpen()){ socket->close(); @@ -198,7 +198,7 @@ void OAIUserApiRequest::createUserResponse(){ } void OAIUserApiRequest::createUsersWithArrayInputResponse(){ - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::OK); if(socket->isOpen()){ socket->close(); @@ -206,7 +206,7 @@ void OAIUserApiRequest::createUsersWithArrayInputResponse(){ } void OAIUserApiRequest::createUsersWithListInputResponse(){ - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::OK); if(socket->isOpen()){ socket->close(); @@ -214,7 +214,7 @@ void OAIUserApiRequest::createUsersWithListInputResponse(){ } void OAIUserApiRequest::deleteUserResponse(){ - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::OK); if(socket->isOpen()){ socket->close(); @@ -232,15 +232,14 @@ void OAIUserApiRequest::getUserByNameResponse(const OAIUser& res){ void OAIUserApiRequest::loginUserResponse(const QString& res){ writeResponseHeaders(); - QJsonDocument resDoc(::OpenAPI::toJsonValue(res).toObject()); - socket->writeJson(resDoc); + socket->write(::OpenAPI::toStringValue(res).toUtf8()); if(socket->isOpen()){ socket->close(); } } void OAIUserApiRequest::logoutUserResponse(){ - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::OK); if(socket->isOpen()){ socket->close(); @@ -248,7 +247,7 @@ void OAIUserApiRequest::logoutUserResponse(){ } void OAIUserApiRequest::updateUserResponse(){ - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::OK); if(socket->isOpen()){ socket->close(); @@ -258,7 +257,7 @@ void OAIUserApiRequest::updateUserResponse(){ void OAIUserApiRequest::createUserError(QNetworkReply::NetworkError error_type, QString& error_str){ Q_UNUSED(error_type); // TODO: Remap error_type to QHttpEngine::Socket errors - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::NotFound); socket->write(error_str.toUtf8()); if(socket->isOpen()){ @@ -268,7 +267,7 @@ void OAIUserApiRequest::createUserError(QNetworkReply::NetworkError error_type, void OAIUserApiRequest::createUsersWithArrayInputError(QNetworkReply::NetworkError error_type, QString& error_str){ Q_UNUSED(error_type); // TODO: Remap error_type to QHttpEngine::Socket errors - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::NotFound); socket->write(error_str.toUtf8()); if(socket->isOpen()){ @@ -278,7 +277,7 @@ void OAIUserApiRequest::createUsersWithArrayInputError(QNetworkReply::NetworkErr void OAIUserApiRequest::createUsersWithListInputError(QNetworkReply::NetworkError error_type, QString& error_str){ Q_UNUSED(error_type); // TODO: Remap error_type to QHttpEngine::Socket errors - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::NotFound); socket->write(error_str.toUtf8()); if(socket->isOpen()){ @@ -288,7 +287,7 @@ void OAIUserApiRequest::createUsersWithListInputError(QNetworkReply::NetworkErro void OAIUserApiRequest::deleteUserError(QNetworkReply::NetworkError error_type, QString& error_str){ Q_UNUSED(error_type); // TODO: Remap error_type to QHttpEngine::Socket errors - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::NotFound); socket->write(error_str.toUtf8()); if(socket->isOpen()){ @@ -311,8 +310,7 @@ void OAIUserApiRequest::loginUserError(const QString& res, QNetworkReply::Networ Q_UNUSED(error_type); // TODO: Remap error_type to QHttpEngine::Socket errors writeResponseHeaders(); Q_UNUSED(error_str); // response will be used instead of error string - QJsonDocument resDoc(::OpenAPI::toJsonValue(res).toObject()); - socket->writeJson(resDoc); + socket->write(::OpenAPI::toStringValue(res).toUtf8()); if(socket->isOpen()){ socket->close(); } @@ -320,7 +318,7 @@ void OAIUserApiRequest::loginUserError(const QString& res, QNetworkReply::Networ void OAIUserApiRequest::logoutUserError(QNetworkReply::NetworkError error_type, QString& error_str){ Q_UNUSED(error_type); // TODO: Remap error_type to QHttpEngine::Socket errors - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::NotFound); socket->write(error_str.toUtf8()); if(socket->isOpen()){ @@ -330,7 +328,7 @@ void OAIUserApiRequest::logoutUserError(QNetworkReply::NetworkError error_type, void OAIUserApiRequest::updateUserError(QNetworkReply::NetworkError error_type, QString& error_str){ Q_UNUSED(error_type); // TODO: Remap error_type to QHttpEngine::Socket errors - writeResponseHeaders(); + writeResponseHeaders(); socket->setStatusCode(QHttpEngine::Socket::NotFound); socket->write(error_str.toUtf8()); if(socket->isOpen()){ @@ -343,7 +341,7 @@ void OAIUserApiRequest::sendCustomResponse(QByteArray & res, QNetworkReply::Netw Q_UNUSED(res); // TODO Q_UNUSED(error_type); // TODO } - + void OAIUserApiRequest::sendCustomResponse(QIODevice *res, QNetworkReply::NetworkError error_type){ Q_UNUSED(res); // TODO Q_UNUSED(error_type); // TODO diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIUserApiRequest.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIUserApiRequest.h index d1b30ef196d..f7733473304 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIUserApiRequest.h +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIUserApiRequest.h @@ -30,7 +30,7 @@ namespace OpenAPI { class OAIUserApiRequest : public QObject { Q_OBJECT - + public: OAIUserApiRequest(QHttpEngine::Socket *s, OAIUserApiHandler* handler); virtual ~OAIUserApiRequest(); @@ -98,7 +98,7 @@ private: resHeaders.insert(itr.key().toUtf8(), itr.value().toUtf8()); } socket->setHeaders(resHeaders); - socket->writeHeaders(); + socket->writeHeaders(); } };