You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.0 KiB
64 lines
2.0 KiB
#include "selfdrive/ui/qt/widgets/ssh_keys.h"
|
|
|
|
#include "common/params.h"
|
|
#include "selfdrive/ui/qt/api.h"
|
|
#include "selfdrive/ui/qt/widgets/input.h"
|
|
|
|
SshControl::SshControl() :
|
|
ButtonControl(tr("SSH Keys"), "", tr("Warning: This grants SSH access to all public keys in your GitHub settings. Never enter a GitHub username "
|
|
"other than your own. A comma employee will NEVER ask you to add their GitHub username.")) {
|
|
|
|
QObject::connect(this, &ButtonControl::clicked, [=]() {
|
|
if (text() == tr("ADD")) {
|
|
QString username = InputDialog::getText(tr("Enter your GitHub username"), this);
|
|
if (username.length() > 0) {
|
|
setText(tr("LOADING"));
|
|
setEnabled(false);
|
|
getUserKeys(username);
|
|
}
|
|
} else {
|
|
params.remove("GithubUsername");
|
|
params.remove("GithubSshKeys");
|
|
refresh();
|
|
}
|
|
});
|
|
|
|
refresh();
|
|
}
|
|
|
|
void SshControl::refresh() {
|
|
QString param = QString::fromStdString(params.get("GithubSshKeys"));
|
|
if (param.length()) {
|
|
setValue(QString::fromStdString(params.get("GithubUsername")));
|
|
setText(tr("REMOVE"));
|
|
} else {
|
|
setValue("");
|
|
setText(tr("ADD"));
|
|
}
|
|
setEnabled(true);
|
|
}
|
|
|
|
void SshControl::getUserKeys(const QString &username) {
|
|
HttpRequest *request = new HttpRequest(this, false);
|
|
QObject::connect(request, &HttpRequest::requestDone, [=](const QString &resp, bool success) {
|
|
if (success) {
|
|
if (!resp.isEmpty()) {
|
|
params.put("GithubUsername", username.toStdString());
|
|
params.put("GithubSshKeys", resp.toStdString());
|
|
} else {
|
|
ConfirmationDialog::alert(tr("Username '%1' has no keys on GitHub").arg(username), this);
|
|
}
|
|
} else {
|
|
if (request->timeout()) {
|
|
ConfirmationDialog::alert(tr("Request timed out"), this);
|
|
} else {
|
|
ConfirmationDialog::alert(tr("Username '%1' doesn't exist on GitHub").arg(username), this);
|
|
}
|
|
}
|
|
|
|
refresh();
|
|
request->deleteLater();
|
|
});
|
|
|
|
request->sendRequest("https://github.com/" + username + ".keys");
|
|
}
|
|
|