diff options
author | Christian Stenger <christian.stenger@qt.io> | 2025-09-11 12:36:34 +0200 |
---|---|---|
committer | Christian Stenger <christian.stenger@qt.io> | 2025-09-12 10:45:32 +0000 |
commit | cc5c1ce1da08d7c99809f6578548a5e94565ac01 (patch) | |
tree | 5aa221f3cead224741d64ffedd619b7dbdc4c888 | |
parent | b2a235491d0788ac074d33cb33d50e9c13750308 (diff) |
Axivion: Fix authorization issue17.0
If special case is detected, create fake Dto::ApiTokenInfoDto
with corrected apiToken.
Change-Id: Ibead06a56d5880bb56be04204f4bfc1b72a8b5ca
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
-rw-r--r-- | src/plugins/axivion/axivionplugin.cpp | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/src/plugins/axivion/axivionplugin.cpp b/src/plugins/axivion/axivionplugin.cpp index 74e1e6624ae..162de558ad0 100644 --- a/src/plugins/axivion/axivionplugin.cpp +++ b/src/plugins/axivion/axivionplugin.cpp @@ -178,6 +178,7 @@ struct PostDtoStorage { QUrl url; std::optional<QByteArray> credential; + QString password; QByteArray csrfToken; QByteArray writeData; std::optional<DtoType> dtoData; @@ -653,6 +654,35 @@ static Group dtoRecipe(const Storage<DtoStorageType<DtoType>> &dtoStorage) showFilterException(error->message); return DoneResult::Error; } + + if constexpr (std::is_same_v<DtoStorageType<DtoType>, PostDtoStorage<DtoType>> + && std::is_same_v<DtoType, Dto::ApiTokenInfoDto>) { + if (statusCode == 400 && error->type == "PasswordVerificationException" && error->data) { + const auto it = error->data->find("passwordMayBeUsedAsApiToken"); + if (it != error->data->end()) { + const Dto::Any data = it->second; + if (data.isBool() && data.getBool()) { + Dto::ApiTokenInfoDto fakeDto{ + QString(), + QString(), + true, + QString(), + QString(), + dtoStorage->password, + QString(), + QString(), + QString(), + QString(), + std::optional<QString>(), + QString(), + false + }; + dtoStorage->dtoData = fakeDto; + return DoneResult::Success; + } + } + } + } errorString = Error(DashboardError(reply->url(), statusCode, reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(), *error)).message(); @@ -851,6 +881,7 @@ static Group authorizationRecipe(DashboardMode dashboardMode) const Dto::ApiTokenCreationRequestDto requestDto{*passwordStorage, "IdePlugin", apiTokenDescription(), 0}; apiTokenStorage->writeData = requestDto.serialize(); + apiTokenStorage->password = *passwordStorage; return SetupResult::Continue; }; @@ -915,10 +946,7 @@ static Group authorizationRecipe(DashboardMode dashboardMode) passwordStorage, dashboardStorage, onGroupSetup(onPasswordGroupSetup), - Group { // GET DashboardInfoDto - finishAllAndSuccess, - dtoRecipe(dashboardStorage) - }, + dtoRecipe(dashboardStorage) || successItem, // GET DashboardInfoDto Group { // POST ApiTokenCreationRequestDto, GET ApiTokenInfoDto. apiTokenStorage, onGroupSetup(onApiTokenGroupSetup), |