|  |  |  | #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");
 | 
					
						
							|  |  |  | }
 |