forked from mirror/nheko
Improve login flow (#35)
* Validate both inferred and explicitly entered server addresses by attempting to call the /versions endpoint * If the domain from the mxid fails validation, try prefixing it with 'matrix' * Only show server address field if address validation ultimately failsremotes/origin/HEAD
parent
03437cc693
commit
f5ba63946b
After Width: | Height: | Size: 621 B |
@ -1,61 +0,0 @@ |
||||
/*
|
||||
* nheko Copyright (C) 2017 Konstantinos Sideris <siderisk@auth.gr> |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <QLabel> |
||||
#include <QVBoxLayout> |
||||
|
||||
#include "LoginSettings.h" |
||||
|
||||
LoginSettings::LoginSettings(QWidget *parent) |
||||
: QFrame(parent) |
||||
{ |
||||
setMaximumSize(400, 400); |
||||
setStyleSheet("background-color: #f9f9f9"); |
||||
|
||||
auto layout = new QVBoxLayout(this); |
||||
layout->setSpacing(30); |
||||
layout->setContentsMargins(20, 20, 20, 10); |
||||
|
||||
input_ = new TextField(this); |
||||
input_->setTextColor("#555459"); |
||||
input_->setLabel("Homeserver's domain"); |
||||
input_->setInkColor("#333333"); |
||||
input_->setBackgroundColor("#f9f9f9"); |
||||
input_->setPlaceholderText("e.g matrix.domain.org:3434"); |
||||
|
||||
submit_button_ = new FlatButton("OK", this); |
||||
submit_button_->setBackgroundColor("black"); |
||||
submit_button_->setForegroundColor("black"); |
||||
submit_button_->setCursor(QCursor(Qt::PointingHandCursor)); |
||||
submit_button_->setFontSize(15); |
||||
submit_button_->setFixedHeight(50); |
||||
submit_button_->setCornerRadius(3); |
||||
|
||||
auto label = new QLabel("Advanced Settings", this); |
||||
label->setStyleSheet("color: #333333"); |
||||
|
||||
layout->addWidget(label); |
||||
layout->addWidget(input_); |
||||
layout->addWidget(submit_button_); |
||||
|
||||
setLayout(layout); |
||||
|
||||
connect(input_, SIGNAL(returnPressed()), submit_button_, SIGNAL(clicked())); |
||||
connect(submit_button_, &QPushButton::clicked, [=]() { |
||||
emit closing(input_->text()); |
||||
}); |
||||
} |
@ -0,0 +1,62 @@ |
||||
/*
|
||||
* nheko Copyright (C) 2017 Jan Solanti <jhs@psonet.com> |
||||
* |
||||
* This program is free software: you can redistribute it and/or modify |
||||
* it under the terms of the GNU General Public License as published by |
||||
* the Free Software Foundation, either version 3 of the License, or |
||||
* (at your option) any later version. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#include <QJsonArray> |
||||
#include <QJsonDocument> |
||||
#include <QJsonObject> |
||||
#include <QJsonValue> |
||||
#include <QRegExp> |
||||
|
||||
#include "Deserializable.h" |
||||
#include "Versions.h" |
||||
|
||||
void VersionsResponse::deserialize(const QJsonDocument &data) |
||||
{ |
||||
if (!data.isObject()) |
||||
throw DeserializationException("Versions response is not a JSON object"); |
||||
|
||||
QJsonObject object = data.object(); |
||||
|
||||
if (object.value("versions") == QJsonValue::Undefined) |
||||
throw DeserializationException("Versions: missing version list"); |
||||
|
||||
auto versions = object.value("versions").toArray(); |
||||
for (auto const &elem: versions) { |
||||
QString str = elem.toString(); |
||||
QRegExp rx("r(\\d+)\\.(\\d+)\\.(\\d+)"); |
||||
|
||||
if (rx.indexIn(str) == -1) |
||||
throw DeserializationException("Invalid version string in versions response"); |
||||
|
||||
struct Version_ v; |
||||
v.major_ = rx.cap(1).toUInt(); |
||||
v.minor_ = rx.cap(2).toUInt(); |
||||
v.patch_ = rx.cap(3).toUInt(); |
||||
|
||||
supported_versions_.push_back(v); |
||||
} |
||||
} |
||||
|
||||
bool VersionsResponse::isVersionSupported(unsigned int major, unsigned int minor, unsigned int patch) |
||||
{ |
||||
for (auto &v: supported_versions_) { |
||||
if (v.major_ == major && v.minor_ == minor && v.patch_ >= patch) |
||||
return true; |
||||
} |
||||
|
||||
return false; |
||||
} |
Loading…
Reference in new issue