Axivion: Update Dashboard API (DTOs)

Change-Id: Ice8d1746cddad1cb6f0c9a7ab2778b8d9dc26ca9
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Andreas Loth
2023-09-20 12:50:45 +02:00
parent a219db1c91
commit 5b7d671375
4 changed files with 115 additions and 29 deletions

View File

@@ -16,6 +16,9 @@
#include <utility>
namespace Axivion::Internal::Dto
{
template<typename Input, typename Output>
static Output concat(const std::initializer_list<const Input> &args)
{
@@ -43,3 +46,5 @@ QByteArray concat_bytes(const std::initializer_list<const QByteArrayView> &args)
{
return concat<QByteArrayView, QByteArray>(args);
}
} // namespace Axivion::Internal::Dto

View File

@@ -22,9 +22,12 @@
#include <string>
#include <string_view>
namespace Axivion::Internal::Dto
{
std::string concat(const std::initializer_list<const std::string_view> &args);
QString concat(const std::initializer_list<const QStringView> &args);
QByteArray concat_bytes(const std::initializer_list<const QByteArrayView> &args);
} // namespace Axivion::Internal::Dto

View File

@@ -749,10 +749,10 @@ namespace Axivion::Internal::Dto {
// version
constexpr std::array<qint32, 4> ApiVersion::number{7,6,2,12725};
const QLatin1String ApiVersion::string{"7.6.2.12725"};
const QLatin1String ApiVersion::name{"7.6.2"};
const QLatin1String ApiVersion::timestamp{"2023-08-07 14:38:01 +00:00"};
constexpr std::array<qint32, 4> ApiVersion::number{7,6,3,12797};
const QLatin1String ApiVersion::string{"7.6.3.12797"};
const QLatin1String ApiVersion::name{"7.6.3"};
const QLatin1String ApiVersion::timestamp{"2023-08-30 15:49:00 +00:00"};
// AnalyzedFileDto
@@ -1011,6 +1011,50 @@ namespace Axivion::Internal::Dto {
return serialize_bytes(*this);
}
// CsrfTokenDto
static const QLatin1String csrfTokenKeyCsrfToken{"csrfToken"};
template<>
class de_serializer<CsrfTokenDto> final
{
public:
// throws Axivion::Internal::Dto::invalid_dto_exception
static CsrfTokenDto deserialize(const QJsonValue &json) {
const QJsonObject jo = toJsonObject<CsrfTokenDto>(json);
return {
deserialize_field<QString>(jo, csrfTokenKeyCsrfToken)
};
}
static QJsonValue serialize(const CsrfTokenDto &value) {
QJsonObject jo;
serialize_field(jo, csrfTokenKeyCsrfToken, value.csrfToken);
return { jo };
}
de_serializer() = delete;
~de_serializer() = delete;
};
// throws Axivion::Internal::Dto::invalid_dto_exception
CsrfTokenDto CsrfTokenDto::deserialize(const QByteArray &json)
{
return deserialize_bytes<CsrfTokenDto>(json);
}
CsrfTokenDto::CsrfTokenDto(
QString csrfToken
) :
csrfToken(std::move(csrfToken))
{ }
// throws Axivion::Internal::Dto::invalid_dto_exception
QByteArray CsrfTokenDto::serialize() const
{
return serialize_bytes(*this);
}
// EntityDto
static const QLatin1String entityKeyId{"id"};
@@ -2186,7 +2230,7 @@ namespace Axivion::Internal::Dto {
deserialize_field<QString>(jo, analysisVersionKeyDate),
deserialize_field<std::optional<QString>>(jo, analysisVersionKeyLabel),
deserialize_field<qint32>(jo, analysisVersionKeyIndex),
deserialize_field<std::optional<QString>>(jo, analysisVersionKeyName),
deserialize_field<QString>(jo, analysisVersionKeyName),
deserialize_field<qint64>(jo, analysisVersionKeyMillis),
deserialize_field<Any>(jo, analysisVersionKeyIssueCounts),
deserialize_field<std::optional<ToolsVersionDto>>(jo, analysisVersionKeyToolsVersion),
@@ -2223,7 +2267,7 @@ namespace Axivion::Internal::Dto {
QString date,
std::optional<QString> label,
qint32 index,
std::optional<QString> name,
QString name,
qint64 millis,
Any issueCounts,
std::optional<ToolsVersionDto> toolsVersion,
@@ -2614,6 +2658,7 @@ namespace Axivion::Internal::Dto {
static const QLatin1String dashboardInfoKeyUserNamedFiltersUrl{"userNamedFiltersUrl"};
static const QLatin1String dashboardInfoKeySupportAddress{"supportAddress"};
static const QLatin1String dashboardInfoKeyIssueFilterHelp{"issueFilterHelp"};
static const QLatin1String dashboardInfoKeyCsrfTokenUrl{"csrfTokenUrl"};
template<>
class de_serializer<DashboardInfoDto> final
@@ -2628,7 +2673,7 @@ namespace Axivion::Internal::Dto {
deserialize_field<std::optional<QString>>(jo, dashboardInfoKeyDashboardVersionNumber),
deserialize_field<QString>(jo, dashboardInfoKeyDashboardBuildDate),
deserialize_field<std::optional<QString>>(jo, dashboardInfoKeyUsername),
deserialize_field<QString>(jo, dashboardInfoKeyCsrfTokenHeader),
deserialize_field<std::optional<QString>>(jo, dashboardInfoKeyCsrfTokenHeader),
deserialize_field<QString>(jo, dashboardInfoKeyCsrfToken),
deserialize_field<std::optional<QString>>(jo, dashboardInfoKeyCheckCredentialsUrl),
deserialize_field<std::optional<QString>>(jo, dashboardInfoKeyNamedFiltersUrl),
@@ -2636,7 +2681,8 @@ namespace Axivion::Internal::Dto {
deserialize_field<std::optional<QString>>(jo, dashboardInfoKeyUserApiTokenUrl),
deserialize_field<std::optional<QString>>(jo, dashboardInfoKeyUserNamedFiltersUrl),
deserialize_field<std::optional<QString>>(jo, dashboardInfoKeySupportAddress),
deserialize_field<std::optional<QString>>(jo, dashboardInfoKeyIssueFilterHelp)
deserialize_field<std::optional<QString>>(jo, dashboardInfoKeyIssueFilterHelp),
deserialize_field<std::optional<QString>>(jo, dashboardInfoKeyCsrfTokenUrl)
};
}
@@ -2656,6 +2702,7 @@ namespace Axivion::Internal::Dto {
serialize_field(jo, dashboardInfoKeyUserNamedFiltersUrl, value.userNamedFiltersUrl);
serialize_field(jo, dashboardInfoKeySupportAddress, value.supportAddress);
serialize_field(jo, dashboardInfoKeyIssueFilterHelp, value.issueFilterHelp);
serialize_field(jo, dashboardInfoKeyCsrfTokenUrl, value.csrfTokenUrl);
return { jo };
}
@@ -2675,7 +2722,7 @@ namespace Axivion::Internal::Dto {
std::optional<QString> dashboardVersionNumber,
QString dashboardBuildDate,
std::optional<QString> username,
QString csrfTokenHeader,
std::optional<QString> csrfTokenHeader,
QString csrfToken,
std::optional<QString> checkCredentialsUrl,
std::optional<QString> namedFiltersUrl,
@@ -2683,7 +2730,8 @@ namespace Axivion::Internal::Dto {
std::optional<QString> userApiTokenUrl,
std::optional<QString> userNamedFiltersUrl,
std::optional<QString> supportAddress,
std::optional<QString> issueFilterHelp
std::optional<QString> issueFilterHelp,
std::optional<QString> csrfTokenUrl
) :
mainUrl(std::move(mainUrl)),
dashboardVersion(std::move(dashboardVersion)),
@@ -2698,7 +2746,8 @@ namespace Axivion::Internal::Dto {
userApiTokenUrl(std::move(userApiTokenUrl)),
userNamedFiltersUrl(std::move(userNamedFiltersUrl)),
supportAddress(std::move(supportAddress)),
issueFilterHelp(std::move(issueFilterHelp))
issueFilterHelp(std::move(issueFilterHelp)),
csrfTokenUrl(std::move(csrfTokenUrl))
{ }
// throws Axivion::Internal::Dto::invalid_dto_exception

View File

@@ -317,6 +317,34 @@ namespace Axivion::Internal::Dto
virtual QByteArray serialize() const override;
};
/**
* CSRF token
*
* @since 7.7.0
*/
class CsrfTokenDto : public Serializable
{
public:
/**
* <p>The value expected to be sent along the ``csrfTokenHeader`` for all HTTP requests that are not GET, HEAD, OPTIONS or TRACE.
*
* <p>Note, that this does not replace authentication of subsequent requests. Also the token is combined with the authentication
* data, so will not work when authenticating as another user. Its lifetime is limited, so when creating a very long-running
* application you should consider refreshing this token from time to time.
*/
QString csrfToken;
// Throws Axivion::Internal::Dto::invalid_dto_exception
static CsrfTokenDto deserialize(const QByteArray &json);
CsrfTokenDto(
QString csrfToken
);
virtual QByteArray serialize() const override;
};
/**
* A Project Entity such as a Class, a Method, a File or a Module
* or the System Entity.
@@ -1261,21 +1289,10 @@ namespace Axivion::Internal::Dto
qint32 index;
/**
* <p>The legacy display name of a version.
*
* <p>It is not recommended to use this anymore. It contains the
* date of the analysis version creation in an arbitrary time zone which is not
* indicated in the timestamp. In recent versions most probably UTC is used but
* this can change at any time - which would be regarded as a non-breaking
* change.
*
* <p>Instead, clients should craft their own display name from the other
* available properties (date, label) and maybe adjust displayed dates
* according to their system timezone.
*
* @deprecated
* <p>The display name of the analysis version consisting of the date formatted with the
* preferred time zone of the user making the request and the label in parentheses.
*/
std::optional<QString> name;
QString name;
/**
* <p>Analysis version timestamp in milliseconds
@@ -1333,7 +1350,7 @@ namespace Axivion::Internal::Dto
QString date,
std::optional<QString> label,
qint32 index,
std::optional<QString> name,
QString name,
qint64 millis,
Any issueCounts,
std::optional<ToolsVersionDto> toolsVersion,
@@ -1708,8 +1725,12 @@ namespace Axivion::Internal::Dto
/**
* <p>The HTTP-Request Header expected present for all HTTP requests that are not GET, HEAD, OPTIONS or TRACE.
*
* <p>Deprecated since 7.7.0: the header name is always ``AX-CSRF-Token``.
*
* @deprecated
*/
QString csrfTokenHeader;
std::optional<QString> csrfTokenHeader;
/**
* <p>The value expected to be sent along the ``csrfTokenHeader`` for all HTTP requests that are not GET, HEAD, OPTIONS or TRACE.
@@ -1767,6 +1788,13 @@ namespace Axivion::Internal::Dto
*/
std::optional<QString> issueFilterHelp;
/**
* <p>Endoint for creating new CSRF tokens.
*
* @since 7.7.0
*/
std::optional<QString> csrfTokenUrl;
// Throws Axivion::Internal::Dto::invalid_dto_exception
static DashboardInfoDto deserialize(const QByteArray &json);
@@ -1776,7 +1804,7 @@ namespace Axivion::Internal::Dto
std::optional<QString> dashboardVersionNumber,
QString dashboardBuildDate,
std::optional<QString> username,
QString csrfTokenHeader,
std::optional<QString> csrfTokenHeader,
QString csrfToken,
std::optional<QString> checkCredentialsUrl,
std::optional<QString> namedFiltersUrl,
@@ -1784,7 +1812,8 @@ namespace Axivion::Internal::Dto
std::optional<QString> userApiTokenUrl,
std::optional<QString> userNamedFiltersUrl,
std::optional<QString> supportAddress,
std::optional<QString> issueFilterHelp
std::optional<QString> issueFilterHelp,
std::optional<QString> csrfTokenUrl
);
virtual QByteArray serialize() const override;