1
mirror of https://invent.kde.org/network/falkon.git synced 2024-12-20 10:46:35 +01:00

[autofill] Change saved password when user enters new data.

Closes #734
This commit is contained in:
nowrep 2013-01-31 23:11:57 +01:00
parent 4fc6686185
commit 0c10211cea
6 changed files with 91 additions and 15 deletions

View File

@ -191,6 +191,30 @@ void AutoFill::addEntry(const QUrl &url, const PageFormData &formData)
mApp->dbWriter()->executeQuery(query); mApp->dbWriter()->executeQuery(query);
} }
void AutoFill::updateEntry(const QUrl &url, const PageFormData &formData)
{
QSqlQuery query;
query.prepare("SELECT data FROM autofill WHERE server=?");
query.addBindValue(url.host());
query.exec();
if (!query.next()) {
return;
}
QString server = url.host();
if (server.isEmpty()) {
server = url.toString();
}
query.prepare("UPDATE autofill SET data=?, username=?, password=? WHERE server=?");
query.addBindValue(formData.postData);
query.addBindValue(formData.username);
query.addBindValue(formData.password);
query.addBindValue(server);
mApp->dbWriter()->executeQuery(query);
}
void AutoFill::completePage(WebPage* page) void AutoFill::completePage(WebPage* page)
{ {
if (!page) { if (!page) {
@ -238,23 +262,32 @@ void AutoFill::post(const QNetworkRequest &request, const QByteArray &outgoingDa
return; return;
} }
PageFormCompleter completer(webPage);
// v = request.attribute((QNetworkRequest::Attribute)(QNetworkRequest::User + 101));
// QWebPage::NavigationType type = (QWebPage::NavigationType)v.toInt();
// if (type != QWebPage::NavigationTypeFormSubmitted) {
// return;
// }
const QUrl &siteUrl = webPage->url(); const QUrl &siteUrl = webPage->url();
const PageFormData &formData = completer.extractFormData(outgoingData);
if (!isStoringEnabled(siteUrl) || isStored(siteUrl) || !formData.found) { if (!isStoringEnabled(siteUrl)) {
return; return;
} }
AutoFillNotification* aWidget = new AutoFillNotification(siteUrl, formData); PageFormCompleter completer(webPage);
const PageFormData &formData = completer.extractFormData(outgoingData);
if (!formData.found) {
return;
}
bool updateData = false;
if (isStored(siteUrl)) {
const QString &user = getUsername(siteUrl);
const QString &pass = getPassword(siteUrl);
if (user == formData.username && pass == formData.password) {
return;
}
updateData = true;
}
AutoFillNotification* aWidget = new AutoFillNotification(siteUrl, formData, updateData);
webView->addNotification(aWidget); webView->addNotification(aWidget);
} }

View File

@ -44,9 +44,12 @@ public:
QString getUsername(const QUrl &url); QString getUsername(const QUrl &url);
QString getPassword(const QUrl &url); QString getPassword(const QUrl &url);
void addEntry(const QUrl &url, const QString &name, const QString &pass); void addEntry(const QUrl &url, const QString &name, const QString &pass);
void addEntry(const QUrl &url, const PageFormData &formData); void addEntry(const QUrl &url, const PageFormData &formData);
void updateEntry(const QUrl &url, const PageFormData &formData);
void post(const QNetworkRequest &request, const QByteArray &outgoingData); void post(const QNetworkRequest &request, const QByteArray &outgoingData);
void completePage(WebPage* frame); void completePage(WebPage* frame);

View File

@ -22,9 +22,10 @@
#include "animatedwidget.h" #include "animatedwidget.h"
#include "iconprovider.h" #include "iconprovider.h"
AutoFillNotification::AutoFillNotification(const QUrl &url, const PageFormData &formData) AutoFillNotification::AutoFillNotification(const QUrl &url, const PageFormData &formData, bool updateData)
: AnimatedWidget(AnimatedWidget::Down, 300, 0) : AnimatedWidget(AnimatedWidget::Down, 300, 0)
, ui(new Ui::AutoFillWidget) , ui(new Ui::AutoFillWidget)
, m_updateData(updateData)
, m_url(url) , m_url(url)
, m_formData(formData) , m_formData(formData)
{ {
@ -43,8 +44,19 @@ AutoFillNotification::AutoFillNotification(const QUrl &url, const PageFormData &
userPart = tr("for <b>%1</b>").arg(m_formData.username); userPart = tr("for <b>%1</b>").arg(m_formData.username);
} }
ui->label->setText(tr("Do you want QupZilla to remember the password %1 %2?").arg(userPart, hostPart)); if (updateData) {
ui->label->setText(tr("Do you want QupZilla to update saved password %1?").arg(hostPart));
ui->remember->setVisible(false);
ui->never->setVisible(false);
}
else {
ui->label->setText(tr("Do you want QupZilla to remember the password %1 %2?").arg(userPart, hostPart));
ui->update->setVisible(false);
}
connect(ui->update, SIGNAL(clicked()), this, SLOT(update()));
connect(ui->remember, SIGNAL(clicked()), this, SLOT(remember())); connect(ui->remember, SIGNAL(clicked()), this, SLOT(remember()));
connect(ui->never, SIGNAL(clicked()), this, SLOT(never())); connect(ui->never, SIGNAL(clicked()), this, SLOT(never()));
connect(ui->notnow, SIGNAL(clicked()), this, SLOT(hide())); connect(ui->notnow, SIGNAL(clicked()), this, SLOT(hide()));
@ -53,6 +65,12 @@ AutoFillNotification::AutoFillNotification(const QUrl &url, const PageFormData &
startAnimation(); startAnimation();
} }
void AutoFillNotification::update()
{
mApp->autoFill()->updateEntry(m_url, m_formData);
hide();
}
void AutoFillNotification::never() void AutoFillNotification::never()
{ {
mApp->autoFill()->blockStoringfor(m_url); mApp->autoFill()->blockStoringfor(m_url);

View File

@ -36,16 +36,19 @@ class QT_QUPZILLA_EXPORT AutoFillNotification : public AnimatedWidget
Q_OBJECT Q_OBJECT
public: public:
explicit AutoFillNotification(const QUrl &url, const PageFormData &formData); explicit AutoFillNotification(const QUrl &url,
const PageFormData &formData, bool updateData);
~AutoFillNotification(); ~AutoFillNotification();
private slots: private slots:
void update();
void remember(); void remember();
void never(); void never();
private: private:
Ui::AutoFillWidget* ui; Ui::AutoFillWidget* ui;
bool m_updateData;
QUrl m_url; QUrl m_url;
PageFormData m_formData; PageFormData m_formData;
}; };

View File

@ -63,6 +63,13 @@
</item> </item>
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="update">
<property name="text">
<string>Update</string>
</property>
</widget>
</item>
<item> <item>
<widget class="QPushButton" name="remember"> <widget class="QPushButton" name="remember">
<property name="sizePolicy"> <property name="sizePolicy">

View File

@ -345,6 +345,10 @@
<source>Successfully exported</source> <source>Successfully exported</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>AutoFillNotification</name> <name>AutoFillNotification</name>
@ -360,6 +364,10 @@
<source>Do you want QupZilla to remember the password %1 %2?</source> <source>Do you want QupZilla to remember the password %1 %2?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Do you want QupZilla to update saved password %1?</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>AutoFillWidget</name> <name>AutoFillWidget</name>
@ -375,6 +383,10 @@
<source>Not Now</source> <source>Not Now</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Update</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>BookmarkIcon</name> <name>BookmarkIcon</name>