diff --git a/src/plugins/axivion/axivionplugin.cpp b/src/plugins/axivion/axivionplugin.cpp index 9891bdc3c65..32b356847a8 100644 --- a/src/plugins/axivion/axivionplugin.cpp +++ b/src/plugins/axivion/axivionplugin.cpp @@ -541,13 +541,11 @@ static Group postDtoRecipe(const Storage> &dtoStorage) return recipe; }; -template -static Group fetchDataRecipe(const QUrl &url, const std::function &handler) +static Group authorizationRecipe() { const Storage passwordStorage; const Storage> dashboardStorage; const Storage> apiTokenStorage; - const Storage> dtoStorage; const auto onGetCredentialSetup = [](CredentialQuery &credential) { credential.setOperation(CredentialOperation::Get); @@ -610,20 +608,8 @@ static Group fetchDataRecipe(const QUrl &url, const std::functionm_apiToken) - return SetupResult::StopWithError; - - dtoStorage->credential = "AxToken " + *dd->m_apiToken; - dtoStorage->url = url; - return SetupResult::Continue; - }; - const auto onDtoDone = [dtoStorage, handler] { - if (dtoStorage->dtoData) - handler(*dtoStorage->dtoData); - }; - - const Group recipe { + return { + // TODO: Try unauthorized access first Group { LoopUntil([](int) { return !dd->m_apiToken; }), CredentialQueryTask(onGetCredentialSetup, onGetCredentialDone), @@ -642,7 +628,30 @@ static Group fetchDataRecipe(const QUrl &url, const std::function +static Group fetchDataRecipe(const QUrl &url, const std::function &handler) +{ + const Storage> dtoStorage; + + const auto onDtoSetup = [dtoStorage, url] { + if (!dd->m_apiToken) + return SetupResult::StopWithError; + + dtoStorage->credential = "AxToken " + *dd->m_apiToken; + dtoStorage->url = url; + return SetupResult::Continue; + }; + const auto onDtoDone = [dtoStorage, handler] { + if (dtoStorage->dtoData) + handler(*dtoStorage->dtoData); + }; + + const Group recipe { + authorizationRecipe(), Group { dtoStorage, onGroupSetup(onDtoSetup),