From 00aa20f55a6df3dbda339cc107efcd23f0c2dc5a Mon Sep 17 00:00:00 2001 From: Dean Lee Date: Wed, 5 May 2021 13:28:41 +0800 Subject: [PATCH] SshControl: use HttpRequest to get ssh keys (#20784) * use HttpRequest * remove eventloop * rebase master Co-authored-by: Adeeb Shihadeh --- selfdrive/ui/qt/widgets/ssh_keys.cc | 66 ++++++++++------------------- selfdrive/ui/qt/widgets/ssh_keys.h | 17 +------- 2 files changed, 23 insertions(+), 60 deletions(-) diff --git a/selfdrive/ui/qt/widgets/ssh_keys.cc b/selfdrive/ui/qt/widgets/ssh_keys.cc index f118fafd88..9c6ec5f3d5 100644 --- a/selfdrive/ui/qt/widgets/ssh_keys.cc +++ b/selfdrive/ui/qt/widgets/ssh_keys.cc @@ -1,7 +1,7 @@ -#include #include #include "widgets/input.h" #include "widgets/ssh_keys.h" +#include "api.h" #include "common/params.h" @@ -27,7 +27,7 @@ SshControl::SshControl() : AbstractControl("SSH Keys", "Warning: This grants SSH QObject::connect(&btn, &QPushButton::released, [=]() { if (btn.text() == "ADD") { - username = InputDialog::getText("Enter your GitHub username"); + QString username = InputDialog::getText("Enter your GitHub username"); if (username.length() > 0) { btn.setText("LOADING"); btn.setEnabled(false); @@ -40,13 +40,6 @@ SshControl::SshControl() : AbstractControl("SSH Keys", "Warning: This grants SSH } }); - // setup networking - manager = new QNetworkAccessManager(this); - networkTimer = new QTimer(this); - networkTimer->setSingleShot(true); - networkTimer->setInterval(5000); - connect(networkTimer, &QTimer::timeout, this, &SshControl::timeout); - refresh(); } @@ -62,42 +55,27 @@ void SshControl::refresh() { btn.setEnabled(true); } -void SshControl::getUserKeys(QString username){ - QString url = "https://github.com/" + username + ".keys"; - - QNetworkRequest request; - request.setUrl(QUrl(url)); - reply = manager->get(request); - connect(reply, &QNetworkReply::finished, this, &SshControl::parseResponse); - networkTimer->start(); -} - -void SshControl::timeout(){ - reply->abort(); -} - -void SshControl::parseResponse(){ - QString err = ""; - if (reply->error() != QNetworkReply::OperationCanceledError) { - networkTimer->stop(); - QString response = reply->readAll(); - if (reply->error() == QNetworkReply::NoError && response.length()) { +void SshControl::getUserKeys(const QString &username) { + HttpRequest *request = new HttpRequest(this, "https://github.com/" + username + ".keys", "", false); + QObject::connect(request, &HttpRequest::receivedResponse, [=](const QString &resp) { + if (!resp.isEmpty()) { + Params params; params.put("GithubUsername", username.toStdString()); - params.put("GithubSshKeys", response.toStdString()); - } else if(reply->error() == QNetworkReply::NoError){ - err = "Username '" + username + "' has no keys on GitHub"; + params.put("GithubSshKeys", resp.toStdString()); } else { - err = "Username '" + username + "' doesn't exist on GitHub"; + ConfirmationDialog::alert("Username '" + username + "' has no keys on GitHub"); } - } else { - err = "Request timed out"; - } - - if (err.length()) { - ConfirmationDialog::alert(err); - } - - refresh(); - reply->deleteLater(); - reply = nullptr; + refresh(); + request->deleteLater(); + }); + QObject::connect(request, &HttpRequest::failedResponse, [=] { + ConfirmationDialog::alert("Username '" + username + "' doesn't exist on GitHub"); + refresh(); + request->deleteLater(); + }); + QObject::connect(request, &HttpRequest::timeoutResponse, [=] { + ConfirmationDialog::alert("Request timed out"); + refresh(); + request->deleteLater(); + }); } diff --git a/selfdrive/ui/qt/widgets/ssh_keys.h b/selfdrive/ui/qt/widgets/ssh_keys.h index bae98af18d..6ea56e7d0c 100644 --- a/selfdrive/ui/qt/widgets/ssh_keys.h +++ b/selfdrive/ui/qt/widgets/ssh_keys.h @@ -1,8 +1,6 @@ #pragma once -#include #include -#include #include "widgets/controls.h" #include "selfdrive/hardware/hw.h" @@ -30,21 +28,8 @@ private: Params params; QPushButton btn; - QString username; QLabel username_label; - // networking - QTimer* networkTimer; - QNetworkReply* reply; - QNetworkAccessManager* manager; - void refresh(); - void getUserKeys(QString username); - -signals: - void failedResponse(QString errorString); - -private slots: - void timeout(); - void parseResponse(); + void getUserKeys(const QString &username); };