Commit Graph

75 Commits

Author SHA1 Message Date
Kyle Kneitinger
84f5adb24a Remediate errors in various favicon fetch scenarios (#2779)
Fixes stuck "Download favicon" button on icon download attempts for IP
address hosts by skipping attempts to get 2nd level domain resources
(which resulted in calls to 0.0.0.<rightmost octet of original IP>).

Fixes some cases when DuckDuckGo fallback fails to find icon of >2-level
domains, by adding a request to a DDG URL based on entry's 2nd level
domain.

Repurposes EditWidgetIcons' private fetchCanceled slot (which as of #2439,
is unused by any code) into public abortRequests slot, which is
connected to the entry edit widget's accepted and rejected signals (in
other words, Ok or Cancel was pressed).
2019-03-17 18:28:55 -04:00
Jonathan White
5cf50d9fae Multiple code improvements
* Fixed unending timer in BulkFileWatcher causing high CPU usage after first save
* Fix multiple SIGNAL connections found with GammaRay
* Remove horizontal scrollbar from EditWidget due to ghosting (maybe Qt bug)
2019-02-25 18:09:54 -05:00
Gianluca Recchia
39b96c13e8
Avoid copying QSharedPointers when not needed 2019-01-30 09:50:10 -05:00
Gianluca Recchia
6df9c6f9b2
Remove unused variable 2019-01-30 09:50:10 -05:00
Jonathan White
7e1b16250c Performed project-wide code formatting
* Updated format CMake command to properly
ignore new directories and files
* Added output when command is run
* Resolves #2623
2019-01-28 22:38:59 -05:00
Kyle Kneitinger
4d4c839afa Customize buttons on MessageBox and confirm before recycling (#2376)
* Add confirmation prompt before moving groups to the recycling bin

Spawn a yes/no QMessage box when "Delete Group" is selected on a group
that is not already in the recycle bin (note: the prompt for deletion
from the recycle bin was already implemented).  This follows the same
pattern and language as entry deletion.

Fixes #2125

* Make prompts for destructive operations use action words on buttons

Replace yes/no, yes/cancel (and other such buttons on prompts that cause
data to be destroyed) use language that indicates the action that it is
going to take. This makes destructive/unsafe and/or irreversible operations
more clear to the user.

Address feedback on PR #2376

* Refactor MessageBox class to allow for custom buttons

Replaces arguments and return values of type QMessageBox::StandardButton(s)
with MessageBox::Button(s), which reimplements the entire set of
QMessageBox::StandardButton and allows for custom KeePassXC buttons,
such as "Skip". Modifies all calls to MessageBox functions to use
MessageBox::Button(s).

Addresses feedback on #2376

* Remove MessageBox::addButton in favor of map lookup

Replaced the switch statement mechanism in MessageBox::addButton with
a map lookup to address CodeFactor Complex Method issue. This has a
side-effect of a small performance/cleanliness increase, as an
extra QPushButton is no longer created/destroyed (to obtain it's label
text) everytime a MessageBox button based on QMessageBox::StandardButton
is created; now the text is obtained once, at application start up.
2018-12-19 23:14:11 -05:00
Gianluca Recchia
fc930bae69
Restore correct formatting
Many lines were not conformant with the project's formatting rules.
This patch should fix all formatting and whitespace issues in the code
base.
A clang-format directive was put around the connect() calls containing
SIGNALs and SLOTs whose signatures would be denormalized because of the
formatting rules.
2018-11-28 18:29:15 -05:00
Gianluca Recchia
a9fa8915d9
Use QVariant::toUrl() instead of QVariant::value<QUrl>() 2018-11-28 18:29:14 -05:00
Kyle Kneitinger
a90a577ee1 Add favicon fetch button next to entry's url edit textbox (#2439)
When WITH_XC_NETWORKING is defined, create a QToolButton beside the Edit Entry -> Entry -> URL, which when pressed, acts as though the Edit Entry -> Icon -> Download Favicon button is pressed.  This button is disabled (grayed-out) when the URL text is empty, and enabled when the text is present.

Fixes #936

* Add favicon download button 
* Remove the progress dialog that appears when
downloading an entry's URL's favicon since (when working correctly) it disappears before it can be read. When downloading icons from the button
located next to the URL text box, display a message panel that confirms the download was a success.

* Do not show successful icon download msg if icon alread exists
2018-11-24 17:30:55 -05:00
Janek Bevendorff
d612cad09a
Refactor Database and Database widgets (#2491)
The Database, DatabaseWidget, and DatabaseTabWidget classes share many responsibilities in inconsistent ways resulting in impenetrable and unmaintainable code and a diverse set of bugs and architecture restrictions. This patch reworks the architecture, responsibilities of, and dependencies between these classes.

The core changes are:

* Move loading and saving logic from widgets into the Database class
* Get rid of the DatabaseManagerStruct and move all the information contained in it into the Database
* Let database objects keep track of modifications and dirty/clean state instead of handing this to external widgets
* Move GUI interactions for loading and saving from the DatabaseTabWidget into the DatabaseWidget (resolves #2494 as a side-effect)
* Heavily clean up DatabaseTabWidget and degrade it to a slightly glorified QTabWidget
* Use QSharedPointers for all Database objects
* Remove the modifiedImmediate signal and replace it with a markAsModified() method
* Implement proper tabName() method instead of reading back titles from GUI widgets (resolves #1389 and its duplicates #2146 #855)
* Fix unwanted AES-KDF downgrade if database uses Argon2 and has CustomData
* Improve code

This patch is also the first major step towards solving issues #476 and #2322.
2018-11-22 11:47:31 +01:00
Gianluca Recchia
0f604aa8c7
Normalize signature of SIGNAL() and SLOT()
See https://stackoverflow.com/q/18091058/6335279
2018-10-31 15:16:04 +01:00
Gianluca Recchia
da9afd3f6f
Reduce number of unneeded copies
This patch aims at reducing the number of copies for obejcts that could
be referenced rather than copied, because they're not modified during
the computation.
2018-10-31 15:16:04 +01:00
Kyle Kneitinger
341635f6bd Replace Google with DuckDuckGo as the optional fallback favicon fetcher (#2309)
* Replace Google with DuckDuckGo for optional fallback favicon fetch URL
Modify the work initially done in #36, and most recently modified in #1786,
to use DuckDuckGo's https://icons.duckduckgo.com/ip3/www.example.com.ico
favicon endpoint.

Fixes #2258

* Close failed favicon fetch progress bars

Name the UrlFetchProgressDialog() with the corresponding URL in order to
be identified by name by its parent when the failed request is handeled
in EditWidgetIcons::fetchFinished(). fetchFinished() retrieves the
relevant UrlFetchProgressDialog() and calls close() on it.

Fixes: #2265
2018-09-20 21:52:51 -04:00
Jonathan White
ca27fb06d5
Merge branch 'master'
Conflicts:
	INSTALL.md
	release-tool
	src/browser/BrowserOptionDialog.cpp
	src/browser/BrowserService.cpp
	src/browser/BrowserService.h
	src/browser/NativeMessagingBase.h
	src/browser/NativeMessagingHost.h
	src/core/Uuid.cpp
	src/gui/DatabaseTabWidget.cpp
	src/gui/DatabaseWidget.cpp
	src/gui/EditWidget.cpp
	src/gui/MainWindow.cpp
	src/gui/MainWindow.ui
	src/proxy/NativeMessagingHost.h
	src/sshagent/ASN1Key.cpp
2018-08-24 09:42:38 -04:00
Jonathan White
8db604e787 Fix occasional divide by zero crash 2018-08-18 10:31:40 -04:00
pasdam
ad4423d226
Replaced Uuid with QUuid 2018-07-06 22:23:49 -04:00
Jonathan White
f9eef6d986
Merge pull request #2011 from keepassxreboot/fix/favicon-multiselect
Allow multiple image selections when adding favicons
2018-06-20 20:32:40 -04:00
seregaxvm
e124f17c64 Add advanced password generator features (#1841)
* Split between simple and advanced features
* Finetune password character groups
* Support for hex passwords
2018-06-10 22:37:09 -04:00
Jonathan White
76102ee9f0
Correct plurals and logic gate 2018-06-09 16:58:46 -04:00
Jonathan White
2e292699b7
Add more comprehensive messages when adding custom icons
* Error messages now display for 15 seconds and are closable
* Add button is always enabled
2018-06-09 16:58:46 -04:00
Jonathan White
b07d4efe5f
Allow multiple image selections when adding favicons 2018-06-09 16:58:41 -04:00
Jonathan White
b16447b13d
Fix occasional crash when favicon progress dialog is closed (#1980)
* Changed progress dialog to a true percentage calculation
* Removed some unnecessary code
2018-05-20 21:12:06 -04:00
Jonathan White
aae6d09fd3
Merge branch 'master' into develop
Conflicts:
	src/CMakeLists.txt
	src/autotype/xcb/AutoTypeXCB.cpp
	src/browser/BrowserAction.cpp
	src/browser/BrowserService.cpp
	src/browser/BrowserService.h
	src/browser/BrowserSettings.h
	src/browser/NativeMessagingHost.cpp
	src/browser/NativeMessagingHost.h
	src/gui/EditWidgetIcons.cpp
	src/gui/EditWidgetIcons.h
	src/gui/MainWindow.cpp
	src/proxy/NativeMessagingHost.cpp
	tests/TestOpenSSHKey.cpp
2018-05-07 23:24:30 -04:00
Steven Noonan
056bbaa921 Improve fetch favicon (#1786)
* Eliminate dependency on libcurl in favor of Qt5Network code
* Supports older Qt versions without QNetworkRequest::FollowRedirectsAttribute

* Show a progress dialog when downloading the favicon. The main utility
  of this is giving the user the option to cancel a download attempt
  (e.g. if it's taking too long). Canceling will try the next fallback URL in the list.

* Try three different ways to obtain the favicon, in this order:
  1) Direct to fully-qualified domain (e.g. https://foo.bar.example.com/favicon.ico)
  2) Direct to 2nd-level domain (e.g. https://example.com/favicon.ico)
  3) Google lookup for 2nd-level domain name (if enabled in settings)

I changed the Google lookup, because a match is more likely to be found
for the 2nd level domain than for the fully-qualified name.

Google's error behavior is strange. If it doesn't find a match, it
doesn't return an error. Instead, it returns a generic default icon,
which is not really the desired result. This also means that unless we
have some way to detect that we've received the generic icon, we can't
fall back to any alternatives.

Signed-off-by: Steven Noonan <steven@uplinklabs.net>
2018-04-04 22:18:58 -04:00
Louis-Bertrand Varin
8324d03f0a Formatting the code. 2018-03-31 16:01:30 -04:00
Daniel Wilches
78ef6f0d04 Grey out Apply button when there are no changes
Resolves #1313

What this commit does:
* Whenever the Apply button is pressed, and if the save was successful, then the Apply button is disabled.
* Each subwidget used by EditEntryWidget has now a signal called `widgetUpdated` that is emitted when the widgets' internal content changes. The EditEntryWidget subscribes to that signal to know when to enable the Apply button (by calling `entryUpdated()`).
* There are some views that are not isolated in their own widgets (`m_advancedUi`, for example) so in those cases I invoked `entryUpdated()` directly whenever I detected an update:
  * some updates occur directly in a Qt widget like when editing the text of a QLineItem, so in that case I connected the widget's signals directly to the `entryUpdated()` slot.
  * some updates occur in EditEntryWidget, so in those cases the invocation to `entryUpdated()` is made as soon as the change is detected (for example when the user has confirmed an action in a dialog).

A known problem: there are some situations when the Apply button will get enabled even if there are no changes, this is because the app changes the value of a field by itself so it's considered an update (for example, clicking on the "Reveal" button changes the text shown in a text field).
The solution to this can be a bit complicated: disabling temporarily the `entryUpdated()` whenever the app is going to do an action with such side-effects.
So I preferred to let the Apply button get enabled in those cases.
2018-03-29 18:35:08 -07:00
Edward Jones
963a7802d1 Fix pluralization of confirmation prompts 2018-03-13 20:41:16 +00:00
Janek Bevendorff
63d34ac348 Add User-Agent header and set request timeout to avoid infinite download hangs
Resolves #1573, resolves #1645
2018-03-06 16:06:44 +01:00
Janek Bevendorff
59f17ab8f3 Fix missing Qt platform styles and CA bundles in Windows release deployment 2018-02-27 21:16:59 +01:00
Jonathan White
490e92167d
Replace qhttp client with curl for favicon downloading (#1460)
Replace qhttp client with curl for favicon downloading
2018-02-07 07:10:56 -05:00
Janek Bevendorff
cfe8ca9836
Always initialize m_httpClient to nullptr to avoid accidental dereferencing, resolves #1410 2018-01-20 14:45:22 +01:00
Janek Bevendorff
f520a0f272
Deprecate KeePassHTTP and introduce WITH_XC_NETWORKING CMake option 2018-01-19 20:40:54 +01:00
Jonathan White
157f1134bf
Select custom icon radio button after successful download 2017-10-07 08:49:14 -04:00
Jonathan White
cb0b948603 Multiple fixes to custom icon downloading
* Fixes #904, icons are saved at or below 128x128
* Fixes #403, crash occurs due to dialog on non-gui thread
* Fixes #232, icon hashes calculated and compared against
2017-09-29 09:01:55 -04:00
thez3ro
8ed8e57012 use percentEncoding for url query 2017-07-18 18:40:18 +02:00
thez3ro
691e60d72b check if url is valid 2017-07-18 18:40:18 +02:00
thez3ro
a888de19cd update m_url scheme after fallback to http 2017-07-18 18:40:18 +02:00
thez3ro
9ceadac299 fix google favicon download over https 2017-07-18 18:40:18 +02:00
thez3ro
35c6df2535 resolve URL for correct favicon downloading, fixes #240 #238 2017-07-18 18:40:18 +02:00
Janek Bevendorff
e555937214
Make favicon Google fallback optional and off by default 2017-06-29 00:32:47 +02:00
thez3ro
a53b111182
Update and fix copyright headers 2017-06-14 15:54:43 +02:00
Janek Bevendorff
8d487d31a4
Replace Q_EMIT, Q_SIGNALS and Q_SLOTS macros with MOC keywords 2017-03-10 16:12:02 +01:00
Janek Bevendorff
da0afd3939
Fix compiler warnings 2017-03-10 16:11:52 +01:00
Jonathan White
e81564387c
Cleanup 2017-03-02 19:49:32 -05:00
Jonathan White
3139ae1528
WITH_XC_AUTOTYPE defaults to ON and WITH_XC_HTTP includes ALL networking 2017-03-02 18:44:01 -05:00
Jonathan White
4061fc7cf8 Delete a custom icon with multiple entries using it (#357)
* Made it possible to delete a custom icon with multiple entries using it
2017-02-28 22:45:40 -05:00
Janek Bevendorff
e0e6f2b8e9
Merge branch 'release/2.1.2' into develop 2017-02-17 04:03:12 +01:00
Janek Bevendorff
c2f3396753 Re-implement favicon fetching with QHttp, resolves #306 2017-02-16 21:25:04 -05:00
Janek Bevendorff
94f8650ca4
Rename KMessageWidget files to match our coding style 2017-02-10 02:34:16 +01:00
Pedro Alves
13c85cdfcb
Replace MessageBox with MessageWidget in remaining classes.
Chnage to one method to set MessageWidget text passing type as
parameter.
Only messages with questions requiring user input reamin using
MessageBox dialog.
Use signal/slots to set message in MessageWidget and hide message,
signal/slots only used when required.Maybe need to change all calls to
signals/slots in the future.
2017-02-10 02:26:00 +01:00