120 Commits

Author SHA1 Message Date
Ghostkeeper
e60e44b919
Interpret timeouts as general connection errors
It's a similar problem for us.
We should really have used the HttpRequestManager for these things.

Fixes Sentry issue CURA-295.
2021-06-07 15:03:46 +02:00
fieldOfView
be06108f36 Fix an crash when starting Cura without a network connection 2021-05-24 18:43:05 +02:00
Kostas Karmas
07594f17a7 Fix setting empty auth tokens in the keyring on startup
When Cura is starting up, it reads the authentication data from the preferences (cura.cfg). If
the auth tokens have previously been stored in the keyring, it means that their values will be null
in the cura.cfg file. Therefore, on startup, Cura reads the tokens as none from the preferences and
then sets the empty values in the keyring as tokens. This leads to the user being signed off every
time Cura restarts on Mac.

On Windows, the access token was still stored in the preferences, so on startup it was safe. The
refresh token, on the other hand, had the same issue as on Mac, which means that on startup it was
read as None from the cura.cfg and was stored in the keyring as an empty string. This meant that,
even though on startup (on windows) the user was kept signed in, the next time Cura was attempting
to refresh the access token (after 7-8 minutes), it wouldn't be able, since its refresh token was
read as "" from the keyring. Also, if the user would close Cura and reopen it after 10 minutes
(so after the access token had expired) then they would be signed off on windows too.

This commit fixes that by making sure that if the given value of the refresh and access tokens are
empty, then they will not be stored in the keyring.

CURA-8178
2021-04-16 17:05:08 +02:00
Konstantinos Karmas
fe2d554ec0
Change the OS_X keyring backend module to macOS
Since the OS_X has been deprecated since keyring v22.0.0 and has been replaced by the macOS.

CURA-7180
2021-04-09 17:14:32 +02:00
Remco Burema
1c806199a4
Explicitly give keyring backend on Mac too.
CURA-7180
2021-04-08 14:08:35 +02:00
jelle Spijker
4b1087a138
Put BaseModel in quotes
Contributes to CURA-7180
2021-04-07 11:25:39 +02:00
jelle Spijker
33a812d696
Added typing fof KeyringAttributes
This should hopefully shut mypy up.

Contributes to CURA-7180
2021-04-07 11:06:06 +02:00
jelle Spijker
23ba1745a4
Handle storing None values in keyring
Write an empty string as value to the keyring if None is parsed and
return a None value if an empty string was parsed from the keyring.

CURA-7180_keyring_none_value
2021-04-04 12:27:43 +02:00
Remco Burema
e1490a68df
Also need to import this.
CURA-7180
2021-03-30 21:46:19 +02:00
Remco Burema
72248d47e1
Windows workaround for keyring issue.
So there is an issue with keyring w.r.t. frozen installs (maybe also local). If you have pywin32 installed, it works fine locally. Take a note here, that a variant of this package, pywin32-ctypes, a rudimentary version of that package that works wholly within python, is already installed as its a dependency for keyring on windows. Due to an unknown reason, when running it fails to detect this, so some workaround is needed, _or_ the 'normal' pywin32 package should be installed. However, problems occurred when attempts where made to install pywin32 via cx_freeze. Then the actual workaround was encountered (https://github.com/jaraco/keyring/issues/468), which _should_ hopefully let use use the keyring on windows without needing the 'full' version of pywin32.

CURA-7180
2021-03-30 20:40:33 +02:00
Remco Burema
bde88d7875
Don't store cerain keys ever.
CURA-7180
2021-03-30 17:24:25 +02:00
Kostas Karmas
fb5d59db32 Fix comment
The Windows Credential Manager actually fails if the password is more than 1024 bits long.

CURA-7180
2021-03-29 17:03:09 +02:00
Kostas Karmas
dbb15b7c71 Account for exception occured when storing long tokens on Windows
The Windows Credential Manager allows for up to 256bits passwords. If a password longer than that
is attempted to be written, it will throw a BaseException.

CURA-7180
2021-03-29 16:33:59 +02:00
Jelle Spijker
387fc36dc6
Small aesthetic code changes
CURA-7180 keyring storage
2021-03-17 09:30:31 +01:00
Jelle Spijker
c462b62edc
Handle raised error when there is no keyring backend present
CURA-7180 keyring storage
2021-03-17 09:22:24 +01:00
Jelle Spijker
b6b9dd1864
Fixed wrong typing
CURA-7180 keyring storage
2021-03-17 07:34:28 +01:00
Jelle Spijker
f51c466155
Use a descriptor to optionally store to Keyring
CURA-7180 keyring storage
2021-03-17 06:16:01 +01:00
Jelle Spijker
d06a25595a
Use a descriptor to optionally store to Keyring
CURA-7180 keyring storage
2021-03-16 19:28:56 +01:00
Jelle Spijker
6372fbed54
Added copyright notice
CURA-7180 keyring storage
2021-03-16 11:57:58 +01:00
Jelle Spijker
96e39810f2
Sync after log in works again
Needed to restore the access token after the
auth data was written to the preference file.

CURA-7180 keyring storage
2021-03-15 14:35:00 +01:00
Jelle Spijker
fcf698f00b
Added documentation and refactored
CURA-7180 keyring storage
2021-03-15 14:16:27 +01:00
Jelle Spijker
2796b9bef3
Store new keys to preference
CURA-7180 keyring storage
2021-03-15 13:06:42 +01:00
Jelle Spijker
b604bbd255
Store secrets as securely as possible
Use the keyring if allowed, available, otherwise use preference

CURA-7180 keyring storage
2021-03-15 11:48:42 +01:00
Jelle Spijker
47df060bee
Added fundaments of SecretStorage vault
This class will handle the storing and processing
of secrets. Such as tokens. It will try to use the system
keyring by default. Falling back to less secure methods,
if the user doesn't allow access to the keyring or if
the back-end is unsupported.

CURA-7180 keyring storage
2021-03-11 14:21:51 +01:00
Jelle Spijker
720b356221
Merge remote-tracking branch 'origin/master' into CURA-7180_keyring_storage 2021-03-08 15:23:46 +01:00
Jaime van Kessel
f85cad37cf
Expand the logging for the auth data a bit more
We're getting some reports that people are suddenly logged out. The working
theory is that they are mixing staging & production builds. This logging
should tell us enough to find out if that is the case!
2021-01-28 10:31:47 +01:00
Ghostkeeper
4380cdbd86
Don't crash on malformed JSON structures
JSON dictionaries need to have a certain structure such as strings as keys. If that's not correct it gives a TypeError. Don't crash on those; give a similar error message as when the values in the JSON are invalid.
2021-01-19 16:31:31 +01:00
Ghostkeeper
640e038ce7
Catch OSError when authorizing connection
Fixes Sentry issue CURA-1GW.
2021-01-19 11:05:55 +01:00
Remco Burema
a25a51eddb
Windows workaround for OAuth data removal from config.
Windows won't allow long keys in the backend the keyring python package uses as a backend. This means the access_token part can't be stored in the obvious way. Timeboxed some attempts at working around this limitation, but couldn't make it work within the time set. As this is mostly an extra precaustion protecting users that share config folders around against themselves (in other words, if this goes wrong it's not unreasonable to blame the user) it's not top critical, and the important part of that (the refresh_token) can proceed, giving any potential attacker only a 10 minute window from the moment any user shares their %appdata%/cura files (again, this is not how we intent for users to behave, but they can and will do it this way).

CURA-7180
2020-12-24 14:39:22 +01:00
Jaime van Kessel
bff3ba577b
Store auth & refresh key in keyring instead of in preferences
People tend to share configuration folders, which just isn't secure.

CURA-7180
2020-12-21 14:02:45 +01:00
Kostas Karmas
881e4406a4 Ensure the organization_id is None 2020-11-04 09:21:28 +01:00
Kostas Karmas
1521430d42 Include all subscription information in the slice data
CURA-7717
2020-10-14 11:43:22 +02:00
Kostas Karmas
ceda3e70bd Include organization id and type of enterprise plan in slice data
CURA-7717
2020-10-13 16:30:29 +02:00
Kostas Karmas
6d7d7bdb95 Fix local authorization server crashing
The thread handling the web_server was crashing. This in turn ended in
the web_server not being able to start again, thus being impossible to
login again if you logged out.
2020-06-11 15:27:29 +02:00
Nino van Hooff
f66e723866 Fix Authorization server not properly stopping after flow completes.
CURA-7490
2020-06-09 15:12:26 +02:00
Kostas Karmas
ea6a73e76d Fix mypy complains 2020-06-05 13:18:48 +02:00
Kostas Karmas
22b9bb77ef Fix reporting the [WinError 10038] exception traceback on sign-in
Surround the serve_forever function of the web server with a try-catch
on Windows, in order to avoid printing the entire (useless) traceback.
Now a warning message is be displayed in the log instead.

The behavior is untouched in other platforms
2020-06-05 12:59:31 +02:00
Nino van Hooff
89f0970a88 Remove trailing whitespace from Python files 2020-05-29 14:30:33 +02:00
Nino van Hooff
8e347c1034 Merge remote-tracking branch 'origin/doxygen_to_restructuredtext_comments' into doxygen_to_restructuredtext_comments
# Conflicts:
#	cura/OAuth2/AuthorizationService.py
2020-05-15 13:40:22 +02:00
Kostas Karmas
898ca852f0 Fix mypy complaint about Optional type
CURA-7427
2020-05-12 13:40:27 +02:00
Kostas Karmas
32efb8d7bb Fix description comment of _generate_auth_url()
CURA-7427
2020-05-12 13:17:18 +02:00
Kostas Karmas
d3fb002d9b Transfer the generation of the auth link into its own function
The authentication link should be prepended with a logoff link from
mycloud, if it is requested. In order to make this process testable
this commit separates the generation of the authentication link,
based on whether it requests for a browser logoff first, into its
own function.

This commit also adds tests for this function.

CURA-7427
2020-05-12 13:07:39 +02:00
Kostas Karmas
b717755f20 Add "Sign in with another account" button in AddCloudPrintersView
There are cases where Cura and the browser fall out of sync when it
comes to accounts. In such cases, you may be logged in cura with an
account that has no cloud printers and in the browser with an account
that has printers. So when you press the "Add cloud printer" button,
you are redirected to mycloud and you see cloud printers that are not
detected by Cura (because Cura is in a different acconut). In such
cases, the user can now press the "Sign in with a different account"
link in the "Waiting for cloud response" page, which will log him/her
out in Cura AND in the browser, and then reinitiate the whole
authorization flow, to make sure the accounts are in sync.

CURA-7427
2020-05-11 17:47:09 +02:00
jelle Spijker
b032101e55
Updated comments in cura/OAuth2
Used DOX_2_RST.py to convert doxygen style comments to sphinx style comments
2020-05-11 13:16:29 +02:00
Nino van Hooff
ea00ff3c47 Update wording for authorization server error message
CURA-7346
2020-04-09 16:59:43 +02:00
Jaime van Kessel
849e012756
Gracefully handle binding erorr for local OAUTH2 Server
CURA-7346
2020-04-08 13:08:12 +02:00
Ghostkeeper
e52dc56a64
Prevent crashing on PermissionError when importing http.server (#7095)
* Fix PermissionError when importing http.server

Instead of crashing, now it'll just not start the server. This means that you won't be able to receive the response from the log-in so you won't be able to log in. The browser gives an error that it can't find the page on localhost. But at least it doesn't crash.

Fixes crash CURA-3Q.

* Log an error when the HTTP server can't be started

Contributes to crash CURA-3Q.

* Indicate that types are optional

Attempt to fix the typing issue with MyPy. I can't run this locally so the CI server will have to tell me if this fixed it.

Contributes to Sentry issue CURA-3Q.
2020-02-17 17:01:11 +01:00
Jaime van Kessel
c167481e60
Add missing ignore 2020-01-31 16:24:46 +01:00
Jaime van Kessel
1269de744f
Use state in AuthorizationService
It's a paranoid safety precaution, but beter safe than sorry.
Reported by WhiteHats; F-1.1.1
2020-01-31 16:11:59 +01:00
Jaime van Kessel
ca25ec3dbc
Increase size of the verificationCode
It's mostly a theoretical problem, but 16 could theoretically be brute
forced. Bumping it up to 32 won't break anything, but it does make it
exteremely unlikely that it gets broken
2020-01-31 15:00:03 +01:00