| 357 | } |
| 358 | |
| 359 | bool DeviceFlow::refresh() { |
| 360 | qDebug() << "DeviceFlow::refresh: Token: ..." << refreshToken().right(7); |
| 361 | |
| 362 | updateActivity(Activity::Refreshing); |
| 363 | |
| 364 | if (refreshToken().isEmpty()) { |
| 365 | qWarning() << "DeviceFlow::refresh: No refresh token"; |
| 366 | onRefreshError(QNetworkReply::AuthenticationRequiredError, nullptr); |
| 367 | return false; |
| 368 | } |
| 369 | if (options_.accessTokenUrl.isEmpty()) { |
| 370 | qWarning() << "DeviceFlow::refresh: Refresh token URL not set"; |
| 371 | onRefreshError(QNetworkReply::AuthenticationRequiredError, nullptr); |
| 372 | return false; |
| 373 | } |
| 374 | |
| 375 | QNetworkRequest refreshRequest(options_.accessTokenUrl); |
| 376 | refreshRequest.setHeader(QNetworkRequest::ContentTypeHeader, MIME_TYPE_XFORM); |
| 377 | QMap<QString, QString> parameters; |
| 378 | parameters.insert(OAUTH2_CLIENT_ID, options_.clientIdentifier); |
| 379 | if ( !options_.clientSecret.isEmpty() ) { |
| 380 | parameters.insert(OAUTH2_CLIENT_SECRET, options_.clientSecret); |
| 381 | } |
| 382 | parameters.insert(OAUTH2_REFRESH_TOKEN, refreshToken()); |
| 383 | parameters.insert(OAUTH2_GRANT_TYPE, OAUTH2_REFRESH_TOKEN); |
| 384 | |
| 385 | QByteArray data = buildRequestBody(parameters); |
| 386 | QNetworkReply *refreshReply = manager_->post(refreshRequest, data); |
| 387 | timedReplies_.add(refreshReply); |
| 388 | connect(refreshReply, &QNetworkReply::finished, this, &DeviceFlow::onRefreshFinished, Qt::QueuedConnection); |
| 389 | return true; |
| 390 | } |
| 391 | |
| 392 | void DeviceFlow::onRefreshFinished() { |
| 393 | QNetworkReply *refreshReply = qobject_cast<QNetworkReply *>(sender()); |
nothing calls this directly
no test coverage detected