SshControl: use HttpRequest to get ssh keys (#20784)

* use HttpRequest

* remove eventloop

* rebase master

Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
old-commit-hash: 00aa20f55a
commatwo_master
Dean Lee 4 years ago committed by GitHub
parent 55a9ec8a93
commit 03f823a3fc
  1. 66
      selfdrive/ui/qt/widgets/ssh_keys.cc
  2. 17
      selfdrive/ui/qt/widgets/ssh_keys.h

@ -1,7 +1,7 @@
#include <QNetworkReply>
#include <QHBoxLayout> #include <QHBoxLayout>
#include "widgets/input.h" #include "widgets/input.h"
#include "widgets/ssh_keys.h" #include "widgets/ssh_keys.h"
#include "api.h"
#include "common/params.h" #include "common/params.h"
@ -27,7 +27,7 @@ SshControl::SshControl() : AbstractControl("SSH Keys", "Warning: This grants SSH
QObject::connect(&btn, &QPushButton::released, [=]() { QObject::connect(&btn, &QPushButton::released, [=]() {
if (btn.text() == "ADD") { if (btn.text() == "ADD") {
username = InputDialog::getText("Enter your GitHub username"); QString username = InputDialog::getText("Enter your GitHub username");
if (username.length() > 0) { if (username.length() > 0) {
btn.setText("LOADING"); btn.setText("LOADING");
btn.setEnabled(false); 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(); refresh();
} }
@ -62,42 +55,27 @@ void SshControl::refresh() {
btn.setEnabled(true); btn.setEnabled(true);
} }
void SshControl::getUserKeys(QString username){ void SshControl::getUserKeys(const QString &username) {
QString url = "https://github.com/" + username + ".keys"; HttpRequest *request = new HttpRequest(this, "https://github.com/" + username + ".keys", "", false);
QObject::connect(request, &HttpRequest::receivedResponse, [=](const QString &resp) {
QNetworkRequest request; if (!resp.isEmpty()) {
request.setUrl(QUrl(url)); Params params;
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()) {
params.put("GithubUsername", username.toStdString()); params.put("GithubUsername", username.toStdString());
params.put("GithubSshKeys", response.toStdString()); params.put("GithubSshKeys", resp.toStdString());
} else if(reply->error() == QNetworkReply::NoError){
err = "Username '" + username + "' has no keys on GitHub";
} else { } else {
err = "Username '" + username + "' doesn't exist on GitHub"; ConfirmationDialog::alert("Username '" + username + "' has no keys on GitHub");
} }
} else { refresh();
err = "Request timed out"; request->deleteLater();
} });
QObject::connect(request, &HttpRequest::failedResponse, [=] {
if (err.length()) { ConfirmationDialog::alert("Username '" + username + "' doesn't exist on GitHub");
ConfirmationDialog::alert(err); refresh();
} request->deleteLater();
});
refresh(); QObject::connect(request, &HttpRequest::timeoutResponse, [=] {
reply->deleteLater(); ConfirmationDialog::alert("Request timed out");
reply = nullptr; refresh();
request->deleteLater();
});
} }

@ -1,8 +1,6 @@
#pragma once #pragma once
#include <QTimer>
#include <QPushButton> #include <QPushButton>
#include <QNetworkAccessManager>
#include "widgets/controls.h" #include "widgets/controls.h"
#include "selfdrive/hardware/hw.h" #include "selfdrive/hardware/hw.h"
@ -30,21 +28,8 @@ private:
Params params; Params params;
QPushButton btn; QPushButton btn;
QString username;
QLabel username_label; QLabel username_label;
// networking
QTimer* networkTimer;
QNetworkReply* reply;
QNetworkAccessManager* manager;
void refresh(); void refresh();
void getUserKeys(QString username); void getUserKeys(const QString &username);
signals:
void failedResponse(QString errorString);
private slots:
void timeout();
void parseResponse();
}; };

Loading…
Cancel
Save