Add an (untested) connection widget for connections
This commit is contained in:
parent
8b9e31d8e4
commit
46dd3d9688
2 changed files with 192 additions and 7 deletions
|
@ -21,15 +21,185 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "danbooruconnectwidget.h"
|
#include "danbooruconnectwidget.h"
|
||||||
|
#include "libdanbooru/danbooruservice.h"
|
||||||
|
|
||||||
|
#include <QCryptographicHash>
|
||||||
|
|
||||||
|
#include <KWallet/Wallet>
|
||||||
|
|
||||||
|
|
||||||
Danbooru::DanbooruConnectWidget::DanbooruConnectWidget(QVector< KUrl > urlList, QWidget* parent): QWidget(parent)
|
using KWallet::Wallet;
|
||||||
|
|
||||||
|
namespace Danbooru {
|
||||||
|
|
||||||
|
const QMap< KUrl, QString > initBoardSalts()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
QMap< KUrl, QString > boardSalts;
|
||||||
|
|
||||||
|
boardSalts.insert(KUrl("http://konachan.com"),
|
||||||
|
QString("So-I-Heard-You-Like-Mupkids-?--%1--"));
|
||||||
|
boardSalts.insert(KUrl("http://konachan.net"),
|
||||||
|
QString("So-I-Heard-You-Like-Mupkids-?--%1--"));
|
||||||
|
boardSalts.insert(KUrl("http://yande.re"),
|
||||||
|
QString("choujin-steiner--%1--"));
|
||||||
|
boardSalts.insert(KUrl("http://danbooru.donmai.us"),
|
||||||
|
QString("choujin-steiner--%1--"));
|
||||||
|
|
||||||
|
return boardSalts;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QMap<KUrl, QString> DanbooruConnectWidget::boardSalts = initBoardSalts();
|
||||||
|
|
||||||
|
DanbooruConnectWidget::DanbooruConnectWidget(QVector< KUrl > urlList,
|
||||||
|
QWidget* parent):
|
||||||
|
QWidget(parent),
|
||||||
|
m_wallet(0)
|
||||||
|
|
||||||
|
{
|
||||||
|
setupUi(this);
|
||||||
|
|
||||||
|
danbooruUrlComboBox->setFocus();
|
||||||
|
closeButton->setIcon(KIcon(QLatin1String("dialog-close")));
|
||||||
|
closeButton->setToolTip(i18n("Close dialog and discard changes"));
|
||||||
|
userLineEdit->setClearButtonShown(true);
|
||||||
|
passwdLineEdit->setClearButtonShown(true);
|
||||||
|
|
||||||
|
if (anonCheckBox->isChecked()) {
|
||||||
|
userLineEdit->setEnabled(false);
|
||||||
|
passwdLineEdit->setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
WId winid = this->parentWidget()->winId();
|
||||||
|
|
||||||
|
danbooruUrlComboBox->clear();
|
||||||
|
|
||||||
|
for (auto item: urlList) {
|
||||||
|
danbooruUrlComboBox->insertUrl(urlList.indexOf(item), item);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_wallet = Wallet::openWallet(Wallet::NetworkWallet(), winid,
|
||||||
|
Wallet::Asynchronous
|
||||||
|
);
|
||||||
|
|
||||||
|
connect(m_wallet, SIGNAL(walletOpened(bool)), this,
|
||||||
|
SLOT(checkWallet(bool)));
|
||||||
|
|
||||||
|
connect(danbooruUrlComboBox, SIGNAL(currentIndexChanged(int)), this,
|
||||||
|
SLOT(getWalletData()));
|
||||||
|
|
||||||
|
connect(anonCheckBox, SIGNAL(stateChanged(int)), this,
|
||||||
|
SLOT(toggleLineEdits()));
|
||||||
|
|
||||||
|
connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
|
||||||
|
connect(closeButton, SIGNAL(clicked(bool)), this,
|
||||||
|
SLOT(emitRejected()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Danbooru::DanbooruConnectWidget::~DanbooruConnectWidget()
|
DanbooruConnectWidget::~DanbooruConnectWidget()
|
||||||
{
|
{
|
||||||
|
delete m_wallet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DanbooruConnectWidget::checkWallet(bool result)
|
||||||
|
{
|
||||||
|
if (!result) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!m_wallet->hasFolder(Wallet::PasswordFolder())) {
|
||||||
|
m_wallet->createFolder(Wallet::PasswordFolder());
|
||||||
|
}
|
||||||
|
|
||||||
|
getWalletData();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DanbooruConnectWidget::getWalletData()
|
||||||
|
{
|
||||||
|
if (!m_wallet) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMap<QString, QString> valueMap;
|
||||||
|
QString key = danbooruUrlComboBox->currentText();
|
||||||
|
|
||||||
|
if (m_wallet->hasEntry(key)) {
|
||||||
|
|
||||||
|
|
||||||
|
if (m_wallet->readMap(key, valueMap) != 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_username = valueMap[QLatin1String("username")];
|
||||||
|
m_password = valueMap[QLatin1String("password")];
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DanbooruConnectWidget::toggleLineEdits(int state)
|
||||||
|
{
|
||||||
|
if (state == Qt::Unchecked) {
|
||||||
|
userLineEdit->setEnabled(true);
|
||||||
|
passwdLineEdit->setEnabled(true);
|
||||||
|
} else if (state == Qt::Checked) {
|
||||||
|
userLineEdit->setEnabled(false);
|
||||||
|
passwdLineEdit->setEnabled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DanbooruConnectWidget::emitRejected()
|
||||||
|
{
|
||||||
|
Q_EMIT rejected();
|
||||||
|
}
|
||||||
|
|
||||||
|
KUrl DanbooruConnectWidget::boardUrl() const
|
||||||
|
{
|
||||||
|
return m_boardUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString DanbooruConnectWidget::username() const
|
||||||
|
{
|
||||||
|
return m_username;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString DanbooruConnectWidget::password() const
|
||||||
|
{
|
||||||
|
return m_password;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DanbooruConnectWidget::accept()
|
||||||
|
{
|
||||||
|
if (m_boardUrl.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString hashedPassword;
|
||||||
|
|
||||||
|
if (!m_username.isEmpty() && !m_password.isEmpty()) {
|
||||||
|
|
||||||
|
if (m_wallet && !m_wallet->hasEntry(m_boardUrl.url())) {
|
||||||
|
QMap<QString,QString> dataMap;
|
||||||
|
dataMap.insert(QLatin1String("username"), m_username);
|
||||||
|
dataMap.insert(QLatin1String("password"), m_password);
|
||||||
|
m_wallet->writeMap(m_boardUrl.url(), dataMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
hashedPassword = boardSalts.value(m_boardUrl).arg(m_password);
|
||||||
|
hashedPassword = QCryptographicHash::hash(hashedPassword.toUtf8(),
|
||||||
|
QCryptographicHash::Sha1
|
||||||
|
).toHex();
|
||||||
|
}
|
||||||
|
|
||||||
|
DanbooruService* service = new DanbooruService(m_boardUrl, m_username,
|
||||||
|
hashedPassword);
|
||||||
|
Q_EMIT(connectionEstablished(service));
|
||||||
|
|
||||||
|
hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}; // namespace Danbooru
|
||||||
|
|
|
@ -28,8 +28,16 @@
|
||||||
|
|
||||||
#include <KUrl>
|
#include <KUrl>
|
||||||
|
|
||||||
|
namespace KWallet {
|
||||||
|
class Wallet;
|
||||||
|
}
|
||||||
|
|
||||||
namespace Danbooru {
|
namespace Danbooru {
|
||||||
|
|
||||||
|
class DanbooruService;
|
||||||
|
|
||||||
|
const QMap< KUrl, QString > initBoardSalts();
|
||||||
|
|
||||||
class DanbooruConnectWidget: public QWidget, public Ui::DanbooruConnectWidget {
|
class DanbooruConnectWidget: public QWidget, public Ui::DanbooruConnectWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
@ -40,19 +48,26 @@ namespace Danbooru {
|
||||||
|
|
||||||
QString username() const;
|
QString username() const;
|
||||||
QString password() const;
|
QString password() const;
|
||||||
|
KUrl boardUrl() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
KUrl m_Boardurl;
|
KUrl m_boardUrl;
|
||||||
QString m_username;
|
QString m_username;
|
||||||
QString m_password;
|
QString m_password;
|
||||||
|
KWallet::Wallet* m_wallet;
|
||||||
|
static const QMap<KUrl, QString> boardSalts;
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void connectionEstablished();
|
void connectionEstablished(DanbooruService* service);
|
||||||
void rejected();
|
void rejected();
|
||||||
|
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void checkWallet(bool);
|
||||||
|
void getWalletData();
|
||||||
|
void toggleLineEdits(int state);
|
||||||
|
void emitRejected();
|
||||||
|
void accept();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
} // namespace Danbooru
|
} // namespace Danbooru
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue