From 5237b460f1a19c9258afe4997d254ae373874175 Mon Sep 17 00:00:00 2001 From: Alejandro Martinez Date: Wed, 2 Feb 2022 16:19:22 -0300 Subject: [PATCH] Withings - Use new OAuth2 API to get access and refresh tokens Fixes #4152 --- src/Cloud/OAuthDialog.cpp | 7 ++++++- src/Cloud/WithingsDownload.cpp | 9 +++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Cloud/OAuthDialog.cpp b/src/Cloud/OAuthDialog.cpp index 49afa6c0d5..bf1ba12cca 100644 --- a/src/Cloud/OAuthDialog.cpp +++ b/src/Cloud/OAuthDialog.cpp @@ -328,10 +328,11 @@ OAuthDialog::urlChanged(const QUrl &url) } else if (site == WITHINGS) { - urlstr = QString("https://account.withings.com/oauth2/token?"); + urlstr = QString("https://wbsapi.withings.net/v2/oauth2"); params.addQueryItem("client_id", GC_NOKIA_CLIENT_ID); params.addQueryItem("client_secret", GC_NOKIA_CLIENT_SECRET); params.addQueryItem("redirect_uri","https://www.goldencheetah.org"); + params.addQueryItem("action", "requesttoken"); params.addQueryItem("grant_type", "authorization_code"); } @@ -453,6 +454,10 @@ OAuthDialog::networkRequestFinished(QNetworkReply *reply) access_token = document.object()["access_token"].toString(); if (site == POLAR) polar_userid = document.object()["x_user_id"].toDouble(); if (site == RIDEWITHGPS) access_token = document.object()["user"].toObject()["auth_token"].toString(); + if (site == WITHINGS) { + refresh_token = document.object()["body"].toObject()["refresh_token"].toString(); + access_token = document.object()["body"].toObject()["access_token"].toString(); + } } // if we failed to extract then we have a big problem diff --git a/src/Cloud/WithingsDownload.cpp b/src/Cloud/WithingsDownload.cpp index 9403ba9fde..024046afcc 100644 --- a/src/Cloud/WithingsDownload.cpp +++ b/src/Cloud/WithingsDownload.cpp @@ -85,12 +85,13 @@ WithingsDownload::getBodyMeasures(QString &error, QDateTime from, QDateTime to, QString refresh_token = appsettings->cvalue(context->athlete->cyclist, GC_NOKIA_REFRESH_TOKEN).toString(); + postData.addQueryItem("action", "requesttoken"); postData.addQueryItem("grant_type", "refresh_token"); postData.addQueryItem("client_id", GC_NOKIA_CLIENT_ID ); postData.addQueryItem("client_secret", GC_NOKIA_CLIENT_SECRET ); postData.addQueryItem("refresh_token", refresh_token ); - QUrl url = QUrl( "https://account.withings.com/oauth2/token" ); + QUrl url = QUrl( "https://wbsapi.withings.net/v2/oauth2" ); emit downloadStarted(100); @@ -110,9 +111,9 @@ WithingsDownload::getBodyMeasures(QString &error, QDateTime from, QDateTime to, QJsonParseError parseResult; QJsonDocument migrateJson = QJsonDocument::fromJson(response.toUtf8(), &parseResult); - access_token = migrateJson.object()["access_token"].toString(); - QString refresh_token = migrateJson.object()["refresh_token"].toString(); - QString userid = QString("%1").arg(migrateJson.object()["userid"].toInt()); + access_token = migrateJson.object()["body"].toObject()["access_token"].toString(); + QString refresh_token = migrateJson.object()["body"].toObject()["refresh_token"].toString(); + QString userid = QString("%1").arg(migrateJson.object()["body"].toObject()["userid"].toInt()); if (access_token != "") appsettings->setCValue(context->athlete->cyclist, GC_NOKIA_TOKEN, access_token);