[C++][Qt5] added Authentication Support (#8004)

* first commit of api Key feature.

* added multi key and URL query key support

* fixed error in mustache files, updated samples and tests

* added Basic Auth with Base64 encoding.

* updated Readme, added bearer token

* added check that authentication credentials are set. fixed typo in README
This commit is contained in:
basyskom-dege 2020-11-28 08:02:09 +01:00 committed by GitHub
parent 045d05fa72
commit cb1a620628
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 517 additions and 1 deletions

View File

@ -80,6 +80,7 @@ public class CppQt5ClientCodegen extends CppQt5AbstractCodegen implements Codege
supportingFiles.add(new SupportingFile("HttpFileElement.cpp.mustache", sourceFolder, PREFIX + "HttpFileElement.cpp"));
supportingFiles.add(new SupportingFile("object.mustache", sourceFolder, PREFIX + "Object.h"));
supportingFiles.add(new SupportingFile("enum.mustache", sourceFolder, PREFIX + "Enum.h"));
supportingFiles.add(new SupportingFile("README.mustache", "","README.md"));
supportingFiles.add(new SupportingFile("CMakeLists.txt.mustache", sourceFolder, "CMakeLists.txt"));
if (optionalProjectFileFlag) {
supportingFiles.add(new SupportingFile("Project.mustache", sourceFolder, "client.pri"));
@ -108,6 +109,7 @@ public class CppQt5ClientCodegen extends CppQt5AbstractCodegen implements Codege
supportingFiles.add(new SupportingFile("HttpFileElement.cpp.mustache", sourceFolder, modelNamePrefix + "HttpFileElement.cpp"));
supportingFiles.add(new SupportingFile("object.mustache", sourceFolder, modelNamePrefix + "Object.h"));
supportingFiles.add(new SupportingFile("enum.mustache", sourceFolder, modelNamePrefix + "Enum.h"));
supportingFiles.add(new SupportingFile("README.mustache", "","README.md"));
supportingFiles.add(new SupportingFile("CMakeLists.txt.mustache", sourceFolder, "CMakeLists.txt"));

View File

@ -0,0 +1,183 @@
# {{artifactId}}
{{appName}}
- API version: {{appVersion}}
{{^hideGenerationTimestamp}}
- Build date: {{generatedDate}}
{{/hideGenerationTimestamp}}
{{#appDescriptionWithNewLines}}{{{appDescriptionWithNewLines}}}{{/appDescriptionWithNewLines}}
{{#infoUrl}}
For more information, please visit [{{{infoUrl}}}]({{{infoUrl}}})
{{/infoUrl}}
*Automatically generated by the [OpenAPI Generator](https://openapi-generator.tech)*
## Licence
{{licenseInfo}}
for more information visit [{{licenseInfo}}]({{licenseUrl}})
## Requirements
Building the API client library requires:
1. Java {{#supportJava6}}1.6{{/supportJava6}}{{^supportJava6}}{{#java8}}1.8{{/java8}}{{^java8}}1.7{{/java8}}{{/supportJava6}}+
2. Maven/Gradle
## Installation
To install the API client library to your local Maven repository, simply execute:
```shell
mvn clean install
```
To deploy it to a remote Maven repository instead, configure the settings of the repository and execute:
```shell
mvn clean deploy
```
Refer to the [OSSRH Guide](http://central.sonatype.org/pages/ossrh-guide.html) for more information.
### Generate manually
At first generate the JAR by executing:
```shell
mvn clean package
```
Use the Jar file to generate the Qt5 Client:
```shell
java -jar target/openapi-generator-cli.jar generate -i <yourOpenApiFile> -g cpp-qt5-client -o <outputDir>
```
## Getting Started
Please follow the [installation](#installation) instruction and execute the following Java code:
example.h:
```c++
{{#apiInfo}}{{#apis}}{{#-first}}{{#operations}}{{#operation}}{{#-first}}
#include <iostream>
#include "../client/{{{classname}}}.h"
using namespace test_namespace;
class Example : public QObject {
Q_OBJECT
{{#allParams}}
{{{dataType}}} create();
{{/allParams}}
public slots:
void exampleFunction1();
};
{{/-first}}{{/operation}}{{/operations}}{{/-first}}{{/apis}}{{/apiInfo}}
```
example.cpp:
```c++
{{#apiInfo}}{{#apis}}{{#-first}}{{#operations}}{{#operation}}{{#-first}}
#include "../client/{{{classname}}}.h"
#include "example.h"
#include <QTimer>
#include <QEventLoop>
{{#allParams}}
{{dataType}} Example::create(){
{{{dataType}}} obj;
{{/allParams}}
return obj;
}
void Example::exampleFunction1(){
{{{classname}}} apiInstance;
{{#hasAuthMethods}}{{#authMethods}}{{#isBasic}}{{#isBasicBasic}}
// Configure HTTP basic authorization: {{{name}}}
apiInstance.setUsername("YOUR USERNAME");
apiInstance.setPassword("YOUR PASSWORD");{{/isBasicBasic}}{{#isBasicBearer}}
// Configure HTTP bearer authorization: {{{name}}}
apiInstance.setBearerToken("BEARER TOKEN");{{/isBasicBearer}}{{/isBasic}}{{#isApiKey}}
// Configure API key authorization: {{{name}}}
apiInstance.setApiKey("YOUR API KEY NAME","YOUR API KEY");{{/isApiKey}}{{#isOAuth}}
//OAuth Authentication supported right now{{/isOAuth}}{{#isHttpSignature}}
//No Http Signature Authentication supported right now{{/isHttpSignature}}
{{/authMethods}}
{{/hasAuthMethods}}
{{#allParams}}
QEventLoop loop;
connect(&apiInstance, &{{{classname}}}::{{nickname}}Signal, [&]() {
loop.quit();
});
connect(&apiInstance, &{{{classname}}}::{{nickname}}SignalE, [&](QNetworkReply::NetworkError, QString error_str) {
qDebug() << "Error happened while issuing request : " << error_str;
loop.quit();
});
{{{dataType}}} {{{paramName}}} = create(); // {{{dataType}}} | {{{description}}}
{{/allParams}}
apiInstance.{{{operationId}}}({{#allParams}}{{{paramName}}}{{#hasMore}}, {{/hasMore}}{{/allParams}});
QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec();
}
{{/-first}}{{/operation}}{{/operations}}{{/-first}}{{/apis}}{{/apiInfo}}
```
## Documentation for API Endpoints
All URIs are relative to *{{basePath}}*
Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
{{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}*{{classname}}* | [**{{operationId}}**]({{apiDocPath}}{{classname}}.md#{{operationId}}) | **{{httpMethod}}** {{commonPath}}{{path}} | {{#summary}}{{summary}}{{/summary}}
{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}}
## Documentation for Models
{{#models}}{{#model}} - [{{classname}}]({{modelDocPath}}{{classname}}.md)
{{/model}}{{/models}}
## Documentation for Authorization
{{^authMethods}}All endpoints do not require authorization.
{{/authMethods}}Authentication schemes defined for the API:
{{#authMethods}}### {{name}}
{{#isApiKey}}
- **Type**: API key
- **API key parameter name**: {{keyParamName}}
- **Location**: {{#isKeyInQuery}}URL query string{{/isKeyInQuery}}{{#isKeyInHeader}}HTTP header{{/isKeyInHeader}}
{{/isApiKey}}
{{#isBasicBasic}}
- **Type**: HTTP basic authentication
{{/isBasicBasic}}
{{#isBasicBearer}}
- **Type**: HTTP Bearer Token authentication
{{/isBasicBearer}}
{{#isOAuth}}
- **Type**: OAuth
- **Flow**: {{flow}}
- **Authorization URL**: {{authorizationUrl}}
- **Scopes**: {{^scopes}}N/A{{/scopes}}
{{#scopes}} - {{scope}}: {{description}}
{{/scopes}}
{{/isOAuth}}
{{/authMethods}}
## Author
{{#apiInfo}}{{#apis}}{{#-last}}{{infoEmail}}
{{/-last}}{{/apis}}{{/apiInfo}}

View File

@ -34,6 +34,22 @@ void {{classname}}::setPort(int port) {
_port = port;
}
void {{classname}}::setApiKey(const QString &apiKeyName, const QString &apiKey){
_apiKeys.insert(apiKeyName,apiKey);
}
void {{classname}}::setBearerToken(const QString &token){
_bearerToken = token;
}
void {{classname}}::setUsername(const QString &username) {
_username = username;
}
void {{classname}}::setPassword(const QString &password) {
_password = password;
}
void {{classname}}::setBasePath(const QString &basePath) {
_basePath = basePath;
}
@ -79,7 +95,27 @@ void {{classname}}::{{nickname}}({{#allParams}}const {{{dataType}}} &{{paramName
QString {{paramName}}PathParam("{");
{{paramName}}PathParam.append("{{baseName}}").append("}");
fullPath.replace({{paramName}}PathParam, QUrl::toPercentEncoding(::{{cppNamespace}}::toStringValue({{paramName}})));
{{/pathParams}}
{{/pathParams}}{{#authMethods}}{{#isApiKey}}{{#isKeyInHeader}}
if(_apiKeys.contains("{{name}}")){
addHeaders("{{name}}",_apiKeys.find("{{name}}").value());
}
{{/isKeyInHeader}}{{#isKeyInQuery}}
if(_apiKeys.contains("{{name}}")){
if (fullPath.indexOf("?") > 0)
fullPath.append("&");
else
fullPath.append("?");
fullPath.append("{{{name}}}=").append(_apiKeys.find("{{name}}").value());
}
{{/isKeyInQuery}}{{/isApiKey}}{{#isBasicBearer}}
if(!_bearerToken.isEmpty())
addHeaders("Authorization", "Bearer " + _bearerToken);
{{/isBasicBearer}}{{#isBasicBasic}}
if(!_username.isEmpty() && !_password.isEmpty()){
QByteArray b64;
b64.append(_username + ":" + _password);
addHeaders("Authorization","Basic " + b64.toBase64());
}{{/isBasicBasic}}{{/authMethods}}
{{#queryParams}}{{^collectionFormat}}
if (fullPath.indexOf("?") > 0)
fullPath.append("&");

View File

@ -8,6 +8,8 @@
{{/imports}}
#include <QObject>
#include <QByteArray>
#include <QStringList>
#include <QNetworkAccessManager>
{{#cppNamespaceDeclarations}}
@ -24,6 +26,10 @@ public:
void setScheme(const QString &scheme);
void setHost(const QString &host);
void setPort(int port);
void setApiKey(const QString &apiKeyName, const QString &apiKey);
void setBearerToken(const QString &token);
void setUsername(const QString &username);
void setPassword(const QString &password);
void setBasePath(const QString &basePath);
void setTimeOut(const int timeOut);
void setWorkingDirectory(const QString &path);
@ -38,6 +44,10 @@ public:
private:
QString _scheme, _host;
int _port;
QMap<QString, QString> _apiKeys;
QString _bearerToken;
QString _username;
QString _password;
QString _basePath;
int _timeOut;
QString _workingDirectory;

View File

@ -37,6 +37,7 @@ void PetApiTests::findPetsByStatusTest() {
void PetApiTests::createAndGetPetTest() {
PFXPetApi api;
api.setApiKey("api_key","special-key");
QEventLoop loop;
bool petCreated = false;

View File

@ -6,6 +6,8 @@
void StoreApiTests::placeOrderTest() {
PFXStoreApi api;
// api.setUsername("TestName");
// api.setPassword("TestPassword");
QEventLoop loop;
bool orderPlaced = false;
@ -36,6 +38,7 @@ void StoreApiTests::placeOrderTest() {
void StoreApiTests::getOrderByIdTest() {
PFXStoreApi api;
api.setApiKey("api_key_2","testKey");
QEventLoop loop;
bool orderFetched = false;
@ -59,6 +62,7 @@ void StoreApiTests::getOrderByIdTest() {
void StoreApiTests::getInventoryTest() {
PFXStoreApi api;
api.setApiKey("api_key","special-key");
QEventLoop loop;
bool inventoryFetched = false;

View File

@ -0,0 +1,174 @@
#
OpenAPI Petstore
- API version: 1.0.0
This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters.
*Automatically generated by the [OpenAPI Generator](https://openapi-generator.tech)*
## Licence
Apache-2.0
for more information visit [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html)
## Requirements
Building the API client library requires:
1. Java 1.7+
2. Maven/Gradle
## Installation
To install the API client library to your local Maven repository, simply execute:
```shell
mvn clean install
```
To deploy it to a remote Maven repository instead, configure the settings of the repository and execute:
```shell
mvn clean deploy
```
Refer to the [OSSRH Guide](http://central.sonatype.org/pages/ossrh-guide.html) for more information.
### Generate manually
At first generate the JAR by executing:
```shell
mvn clean package
```
Use the Jar file to generate the Qt5 Client:
```shell
java -jar target/openapi-generator-cli.jar generate -i <yourOpenApiFile> -g cpp-qt5-client -o <outputDir>
```
## Getting Started
Please follow the [installation](#installation) instruction and execute the following Java code:
example.h:
```c++
#include <iostream>
#include "../client/PFXPetApi.h"
using namespace test_namespace;
class Example : public QObject {
Q_OBJECT
PFXPet create();
public slots:
void exampleFunction1();
};
```
example.cpp:
```c++
#include "../client/PFXPetApi.h"
#include "example.h"
#include <QTimer>
#include <QEventLoop>
PFXPet Example::create(){
PFXPet obj;
return obj;
}
void Example::exampleFunction1(){
PFXPetApi apiInstance;
//OAuth Authentication supported right now
QEventLoop loop;
connect(&apiInstance, &PFXPetApi::addPetSignal, [&]() {
loop.quit();
});
connect(&apiInstance, &PFXPetApi::addPetSignalE, [&](QNetworkReply::NetworkError, QString error_str) {
qDebug() << "Error happened while issuing request : " << error_str;
loop.quit();
});
PFXPet body = create(); // PFXPet | Pet object that needs to be added to the store
apiInstance.addPet(body);
QTimer::singleShot(5000, &loop, &QEventLoop::quit);
loop.exec();
}
```
## Documentation for API Endpoints
All URIs are relative to *http://petstore.swagger.io/v2*
Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
*PFXPetApi* | [**addPet**](PFXPetApi.md#addPet) | **POST** /pet | Add a new pet to the store
*PFXPetApi* | [**deletePet**](PFXPetApi.md#deletePet) | **DELETE** /pet/{petId} | Deletes a pet
*PFXPetApi* | [**findPetsByStatus**](PFXPetApi.md#findPetsByStatus) | **GET** /pet/findByStatus | Finds Pets by status
*PFXPetApi* | [**findPetsByTags**](PFXPetApi.md#findPetsByTags) | **GET** /pet/findByTags | Finds Pets by tags
*PFXPetApi* | [**getPetById**](PFXPetApi.md#getPetById) | **GET** /pet/{petId} | Find pet by ID
*PFXPetApi* | [**updatePet**](PFXPetApi.md#updatePet) | **PUT** /pet | Update an existing pet
*PFXPetApi* | [**updatePetWithForm**](PFXPetApi.md#updatePetWithForm) | **POST** /pet/{petId} | Updates a pet in the store with form data
*PFXPetApi* | [**uploadFile**](PFXPetApi.md#uploadFile) | **POST** /pet/{petId}/uploadImage | uploads an image
*PFXStoreApi* | [**deleteOrder**](PFXStoreApi.md#deleteOrder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID
*PFXStoreApi* | [**getInventory**](PFXStoreApi.md#getInventory) | **GET** /store/inventory | Returns pet inventories by status
*PFXStoreApi* | [**getOrderById**](PFXStoreApi.md#getOrderById) | **GET** /store/order/{orderId} | Find purchase order by ID
*PFXStoreApi* | [**placeOrder**](PFXStoreApi.md#placeOrder) | **POST** /store/order | Place an order for a pet
*PFXUserApi* | [**createUser**](PFXUserApi.md#createUser) | **POST** /user | Create user
*PFXUserApi* | [**createUsersWithArrayInput**](PFXUserApi.md#createUsersWithArrayInput) | **POST** /user/createWithArray | Creates list of users with given input array
*PFXUserApi* | [**createUsersWithListInput**](PFXUserApi.md#createUsersWithListInput) | **POST** /user/createWithList | Creates list of users with given input array
*PFXUserApi* | [**deleteUser**](PFXUserApi.md#deleteUser) | **DELETE** /user/{username} | Delete user
*PFXUserApi* | [**getUserByName**](PFXUserApi.md#getUserByName) | **GET** /user/{username} | Get user by user name
*PFXUserApi* | [**loginUser**](PFXUserApi.md#loginUser) | **GET** /user/login | Logs user into the system
*PFXUserApi* | [**logoutUser**](PFXUserApi.md#logoutUser) | **GET** /user/logout | Logs out current logged in user session
*PFXUserApi* | [**updateUser**](PFXUserApi.md#updateUser) | **PUT** /user/{username} | Updated user
## Documentation for Models
- [PFXApiResponse](PFXApiResponse.md)
- [PFXCategory](PFXCategory.md)
- [PFXOrder](PFXOrder.md)
- [PFXPet](PFXPet.md)
- [PFXTag](PFXTag.md)
- [PFXUser](PFXUser.md)
## Documentation for Authorization
Authentication schemes defined for the API:
### api_key
- **Type**: API key
- **API key parameter name**: api_key
- **Location**: HTTP header
### petstore_auth
- **Type**: OAuth
- **Flow**: implicit
- **Authorization URL**: http://petstore.swagger.io/api/oauth/dialog
- **Scopes**:
- write:pets: modify pets in your account
- read:pets: read your pets
## Author

View File

@ -42,6 +42,22 @@ void PFXPetApi::setPort(int port) {
_port = port;
}
void PFXPetApi::setApiKey(const QString &apiKeyName, const QString &apiKey){
_apiKeys.insert(apiKeyName,apiKey);
}
void PFXPetApi::setBearerToken(const QString &token){
_bearerToken = token;
}
void PFXPetApi::setUsername(const QString &username) {
_username = username;
}
void PFXPetApi::setPassword(const QString &password) {
_password = password;
}
void PFXPetApi::setBasePath(const QString &basePath) {
_basePath = basePath;
}
@ -82,6 +98,7 @@ void PFXPetApi::addPet(const PFXPet &body) {
.arg(_basePath)
.arg("/pet");
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this, _manager);
worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory);
@ -129,6 +146,7 @@ void PFXPetApi::deletePet(const qint64 &pet_id, const QString &api_key) {
QString pet_idPathParam("{");
pet_idPathParam.append("petId").append("}");
fullPath.replace(pet_idPathParam, QUrl::toPercentEncoding(::test_namespace::toStringValue(pet_id)));
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this, _manager);
worker->setTimeOut(_timeOut);
@ -176,6 +194,7 @@ void PFXPetApi::findPetsByStatus(const QList<QString> &status) {
.arg(_basePath)
.arg("/pet/findByStatus");
if (status.size() > 0) {
if (QString("csv").indexOf("multi") == 0) {
foreach (QString t, status) {
@ -266,6 +285,7 @@ void PFXPetApi::findPetsByTags(const QList<QString> &tags) {
.arg(_basePath)
.arg("/pet/findByTags");
if (tags.size() > 0) {
if (QString("csv").indexOf("multi") == 0) {
foreach (QString t, tags) {
@ -358,6 +378,11 @@ void PFXPetApi::getPetById(const qint64 &pet_id) {
QString pet_idPathParam("{");
pet_idPathParam.append("petId").append("}");
fullPath.replace(pet_idPathParam, QUrl::toPercentEncoding(::test_namespace::toStringValue(pet_id)));
if(_apiKeys.contains("api_key")){
addHeaders("api_key",_apiKeys.find("api_key").value());
}
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this, _manager);
worker->setTimeOut(_timeOut);
@ -402,6 +427,7 @@ void PFXPetApi::updatePet(const PFXPet &body) {
.arg(_basePath)
.arg("/pet");
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this, _manager);
worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory);
@ -449,6 +475,7 @@ void PFXPetApi::updatePetWithForm(const qint64 &pet_id, const QString &name, con
QString pet_idPathParam("{");
pet_idPathParam.append("petId").append("}");
fullPath.replace(pet_idPathParam, QUrl::toPercentEncoding(::test_namespace::toStringValue(pet_id)));
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this, _manager);
worker->setTimeOut(_timeOut);
@ -496,6 +523,7 @@ void PFXPetApi::uploadFile(const qint64 &pet_id, const QString &additional_metad
QString pet_idPathParam("{");
pet_idPathParam.append("petId").append("}");
fullPath.replace(pet_idPathParam, QUrl::toPercentEncoding(::test_namespace::toStringValue(pet_id)));
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this, _manager);
worker->setTimeOut(_timeOut);

View File

@ -20,6 +20,8 @@
#include <QString>
#include <QObject>
#include <QByteArray>
#include <QStringList>
#include <QNetworkAccessManager>
namespace test_namespace {
@ -34,6 +36,10 @@ public:
void setScheme(const QString &scheme);
void setHost(const QString &host);
void setPort(int port);
void setApiKey(const QString &apiKeyName, const QString &apiKey);
void setBearerToken(const QString &token);
void setUsername(const QString &username);
void setPassword(const QString &password);
void setBasePath(const QString &basePath);
void setTimeOut(const int timeOut);
void setWorkingDirectory(const QString &path);
@ -55,6 +61,10 @@ public:
private:
QString _scheme, _host;
int _port;
QMap<QString, QString> _apiKeys;
QString _bearerToken;
QString _username;
QString _password;
QString _basePath;
int _timeOut;
QString _workingDirectory;

View File

@ -42,6 +42,22 @@ void PFXStoreApi::setPort(int port) {
_port = port;
}
void PFXStoreApi::setApiKey(const QString &apiKeyName, const QString &apiKey){
_apiKeys.insert(apiKeyName,apiKey);
}
void PFXStoreApi::setBearerToken(const QString &token){
_bearerToken = token;
}
void PFXStoreApi::setUsername(const QString &username) {
_username = username;
}
void PFXStoreApi::setPassword(const QString &password) {
_password = password;
}
void PFXStoreApi::setBasePath(const QString &basePath) {
_basePath = basePath;
}
@ -84,6 +100,7 @@ void PFXStoreApi::deleteOrder(const QString &order_id) {
QString order_idPathParam("{");
order_idPathParam.append("orderId").append("}");
fullPath.replace(order_idPathParam, QUrl::toPercentEncoding(::test_namespace::toStringValue(order_id)));
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this, _manager);
worker->setTimeOut(_timeOut);
@ -127,6 +144,11 @@ void PFXStoreApi::getInventory() {
.arg(_basePath)
.arg("/store/inventory");
if(_apiKeys.contains("api_key")){
addHeaders("api_key",_apiKeys.find("api_key").value());
}
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this, _manager);
worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory);
@ -181,6 +203,7 @@ void PFXStoreApi::getOrderById(const qint64 &order_id) {
QString order_idPathParam("{");
order_idPathParam.append("orderId").append("}");
fullPath.replace(order_idPathParam, QUrl::toPercentEncoding(::test_namespace::toStringValue(order_id)));
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this, _manager);
worker->setTimeOut(_timeOut);
@ -225,6 +248,7 @@ void PFXStoreApi::placeOrder(const PFXOrder &body) {
.arg(_basePath)
.arg("/store/order");
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this, _manager);
worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory);

View File

@ -19,6 +19,8 @@
#include <QString>
#include <QObject>
#include <QByteArray>
#include <QStringList>
#include <QNetworkAccessManager>
namespace test_namespace {
@ -33,6 +35,10 @@ public:
void setScheme(const QString &scheme);
void setHost(const QString &host);
void setPort(int port);
void setApiKey(const QString &apiKeyName, const QString &apiKey);
void setBearerToken(const QString &token);
void setUsername(const QString &username);
void setPassword(const QString &password);
void setBasePath(const QString &basePath);
void setTimeOut(const int timeOut);
void setWorkingDirectory(const QString &path);
@ -50,6 +56,10 @@ public:
private:
QString _scheme, _host;
int _port;
QMap<QString, QString> _apiKeys;
QString _bearerToken;
QString _username;
QString _password;
QString _basePath;
int _timeOut;
QString _workingDirectory;

View File

@ -42,6 +42,22 @@ void PFXUserApi::setPort(int port) {
_port = port;
}
void PFXUserApi::setApiKey(const QString &apiKeyName, const QString &apiKey){
_apiKeys.insert(apiKeyName,apiKey);
}
void PFXUserApi::setBearerToken(const QString &token){
_bearerToken = token;
}
void PFXUserApi::setUsername(const QString &username) {
_username = username;
}
void PFXUserApi::setPassword(const QString &password) {
_password = password;
}
void PFXUserApi::setBasePath(const QString &basePath) {
_basePath = basePath;
}
@ -82,6 +98,7 @@ void PFXUserApi::createUser(const PFXUser &body) {
.arg(_basePath)
.arg("/user");
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this, _manager);
worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory);
@ -127,6 +144,7 @@ void PFXUserApi::createUsersWithArrayInput(const QList<PFXUser> &body) {
.arg(_basePath)
.arg("/user/createWithArray");
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this, _manager);
worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory);
@ -173,6 +191,7 @@ void PFXUserApi::createUsersWithListInput(const QList<PFXUser> &body) {
.arg(_basePath)
.arg("/user/createWithList");
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this, _manager);
worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory);
@ -221,6 +240,7 @@ void PFXUserApi::deleteUser(const QString &username) {
QString usernamePathParam("{");
usernamePathParam.append("username").append("}");
fullPath.replace(usernamePathParam, QUrl::toPercentEncoding(::test_namespace::toStringValue(username)));
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this, _manager);
worker->setTimeOut(_timeOut);
@ -266,6 +286,7 @@ void PFXUserApi::getUserByName(const QString &username) {
QString usernamePathParam("{");
usernamePathParam.append("username").append("}");
fullPath.replace(usernamePathParam, QUrl::toPercentEncoding(::test_namespace::toStringValue(username)));
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this, _manager);
worker->setTimeOut(_timeOut);
@ -310,6 +331,7 @@ void PFXUserApi::loginUser(const QString &username, const QString &password) {
.arg(_basePath)
.arg("/user/login");
if (fullPath.indexOf("?") > 0)
fullPath.append("&");
else
@ -366,6 +388,7 @@ void PFXUserApi::logoutUser() {
.arg(_basePath)
.arg("/user/logout");
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this, _manager);
worker->setTimeOut(_timeOut);
worker->setWorkingDirectory(_workingDirectory);
@ -410,6 +433,7 @@ void PFXUserApi::updateUser(const QString &username, const PFXUser &body) {
QString usernamePathParam("{");
usernamePathParam.append("username").append("}");
fullPath.replace(usernamePathParam, QUrl::toPercentEncoding(::test_namespace::toStringValue(username)));
PFXHttpRequestWorker *worker = new PFXHttpRequestWorker(this, _manager);
worker->setTimeOut(_timeOut);

View File

@ -19,6 +19,8 @@
#include <QString>
#include <QObject>
#include <QByteArray>
#include <QStringList>
#include <QNetworkAccessManager>
namespace test_namespace {
@ -33,6 +35,10 @@ public:
void setScheme(const QString &scheme);
void setHost(const QString &host);
void setPort(int port);
void setApiKey(const QString &apiKeyName, const QString &apiKey);
void setBearerToken(const QString &token);
void setUsername(const QString &username);
void setPassword(const QString &password);
void setBasePath(const QString &basePath);
void setTimeOut(const int timeOut);
void setWorkingDirectory(const QString &path);
@ -54,6 +60,10 @@ public:
private:
QString _scheme, _host;
int _port;
QMap<QString, QString> _apiKeys;
QString _bearerToken;
QString _username;
QString _password;
QString _basePath;
int _timeOut;
QString _workingDirectory;