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