Commit graph

135 commits

Author SHA1 Message Date
Michael Telatynski
821ad5703f LifeCycle onLoggedOut unmount before stopping client
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2019-10-25 16:37:57 +01:00
J. Ryan Stinnett
2880ade45c Unmount React components before stopping the client
This fixes an entire class of React soft crashes that can happen when you:

1. Log out, causing the client peg to become `null`
2. Some async process (event handler, timeout, request, etc.) tries to use the
   client in a component before it unmounts, triggering a soft crash
3. Several moments later, the app actually unmounts

With this change, we change the app's view and unmount components first and then
after that we stop the client.

Fixes https://github.com/vector-im/riot-web/issues/11078
2019-10-08 17:10:19 +01:00
Travis Ralston
d97ff8a692 Add debugging for soft logout too 2019-10-02 09:45:53 -06:00
Travis Ralston
74ce5c3541 Read integration managers from account data
For https://github.com/vector-im/riot-web/issues/4913 / https://github.com/vector-im/riot-web/issues/10161

Relies on the structure defined by [MSC1957](https://github.com/matrix-org/matrix-doc/pull/1957)

This is just the bit of code to parse the user's widgets (while watching for changes) and allow for it to be the default manager.
2019-08-09 17:35:59 -06:00
David Baker
bcf53c6e33 Make invite work without an IS
Also fix it so you can't try to invite a room ID to a room
2019-08-07 11:41:00 +01:00
David Baker
9ef24352d0 Use options object 2019-08-02 16:44:49 +01:00
David Baker
1c156f0a5a Don't load guest sessions on post-registration login link
If guest access was enabled, clicking the login link on the 'registration
completed' page would just load the guest account you had before registering.

Fixes https://github.com/vector-im/riot-web/issues/10482
2019-08-02 11:22:42 +01:00
David Baker
b1cc089062 Silence unnecessary warning
Don't complain that we can't enable guest login if nobody asked us to
2019-08-02 11:08:37 +01:00
Travis Ralston
8ebc03706a Also clear data when the deviceId doesn't match
When the HS implementation doesn't respect the device_id parameter erroneously
2019-07-08 15:35:34 -06:00
Travis Ralston
fca4ebcd72 Overwrite the old session if the new creds are for a different user
Fixes https://github.com/vector-im/riot-web/issues/10272
2019-07-05 14:45:34 -06:00
Travis Ralston
93872e6fa5 Ask for the user's password to rehydrate their soft logged out session
Fixes https://github.com/vector-im/riot-web/issues/10236

The changes to the MatrixClientPeg (assign/start) are to permit the SoftLogout page to access the MatrixClientPeg reliably. This is why assign() is called by Lifecycle as an alternative to start().

Minimal design work has been done here. The majority is deferred to https://github.com/vector-im/riot-web/issues/10262
2019-07-04 16:51:16 -06:00
Travis Ralston
42e6287bdb Implement basic soft logout handling
Fixes https://github.com/vector-im/riot-web/issues/10235

CSS and copy are left as an exercise for a later iteration.

Login page handling is left for https://github.com/vector-im/riot-web/issues/10236

This implementation reuses as much of the Lifecycle flow as it can without causing problems. Most importantly, it requires https://github.com/matrix-org/matrix-js-sdk/pull/975 to be able to detect a soft logout and react to it. When it comes time to starting/stopping the Lifecycle, additional parameters are provided so that the auxiliary services can (re)start themselves without the client starting to sync.
2019-07-03 16:46:37 -06:00
Travis Ralston
cd089a3f95 Track the user's own typing state external to the composer
Fixes https://github.com/vector-im/riot-web/issues/9986

There's a few reasons for pushing this out to its own place:
* In future, we might want to move WhoIsTyping here.
* We have multiple composers now, and although they don't send typing notifications, they could (see https://github.com/vector-im/riot-web/issues/10188)
* In future we may have status for where/what the user is typing (https://github.com/matrix-org/matrix-doc/issues/437)
* The composer is complicated enough - it doesn't need to dedupe typing states too.

Note: This makes use of the principles introduced in https://github.com/vector-im/riot-web/issues/8923 and https://github.com/vector-im/riot-web/issues/9090
2019-06-26 22:36:55 -06:00
David Baker
5e775e24fb Console log more helpfully
Appending objects to strings isn't really useful
2019-06-12 14:04:08 +01:00
Travis Ralston
1c41629376
Merge pull request #3043 from matrix-org/travis/check-login-for-config
Accept JSX into the GenericErrorPage and expose local session vars
2019-05-31 11:03:41 -06:00
Travis Ralston
d81804e0fe Merge branch 'develop' into matthew/low_bandwidth 2019-05-30 19:42:09 -06:00
Travis Ralston
5c85f4609e Accept JSX into the GenericErrorPage and expose local session vars 2019-05-29 12:09:04 -06:00
David Baker
da1bff1c5d Fix Single Sign-on
https://github.com/matrix-org/matrix-react-sdk/pull/2826 checked
that we had data in the crypto store if the had credentials in
localStorage. However, SSO stores creds in localStorage and then
redirects the browser to remove the loginToken parameter from the
URL without starting crypto, so after the redirect, we see creds
in localStorage but no crypto data, and error.

Fix by marking when we've successfully initialised crypto and only
erroring if that flag is set.

Fixes https://github.com/vector-im/riot-web/issues/9695
2019-05-15 13:47:48 +01:00
David Baker
7ac82a23ab Yes yes, eslint 2019-05-14 12:11:07 +01:00
David Baker
c11d26d809 Fix email registration, pt. 2
Regressed in https://github.com/matrix-org/matrix-react-sdk/pull/2768
where we check for an existing stored account first and restore that
instead if it exist, telling the user. We usually make a guest account
when the user first hits the page though, so this just restored this
guest account.

Don't restore the account if it's just a guest account (which, as per
comment, is not perfect, but is definitely better than the current
behaviour).

Fixes https://github.com/vector-im/riot-web/issues/9581
2019-05-14 11:59:38 +01:00
Travis Ralston
0e7688da98 Remove dead Login.loginAsGuest() 2019-04-05 11:00:25 -06:00
J. Ryan Stinnett
328f0cd6bf Notify user when crypto data is missing
If we have account data in local storage but nothing in the crypto store, it
generally means the browser has evicted IndexedDB out from under us. This adds a
modal to explain the situation and offer to completely clear storage to get
things back to normal.

Fixes https://github.com/vector-im/riot-web/issues/9109
2019-03-29 16:06:08 +00:00
J. Ryan Stinnett
4c0f459995 Add basic storage consistency check
This adds a storage consistency check just before creating a client on login.
Each data store we use is checked for data and any problems are logged to the
console.

Fixes https://github.com/vector-im/riot-web/issues/9271
2019-03-26 16:34:13 +00:00
David Baker
b39a7e01d3
Merge pull request #2770 from matrix-org/dbkr/fix_instant_rrs_pt2
Fix instantly sending RRs
2019-03-12 10:59:26 +00:00
Travis Ralston
1d71c05201 Localstorage -> LocalStorage 2019-03-08 09:55:50 -07:00
David Baker
7e424ce95b Fix call to stop() 2019-03-08 15:09:44 +00:00
David Baker
ce1623691e Fix instantly sending RRs
Splits UserActivity into a tristate of 'active' (last < 1s), 'passive' (lasts a
couple of mins) and neither. Read receipts are sent when 'active', read markers
are sent while 'passive'.

Also fixed a document / window mix-up on the 'blur' handler.

Also adds a unit test for UserActivity because it's quite complex now
(and changes UserActivity to make it testable by accessing the singleton
via sharedInstance() rather than exporting it directly).

Fixes https://github.com/vector-im/riot-web/issues/9023
2019-03-08 12:46:38 +00:00
Travis Ralston
0e16f3a0cc Don't trample over existing sessions when verifying email addresses
Fixes https://github.com/vector-im/riot-web/issues/6875

Instead of overwriting what we have, we'll load the session we have and try to warn the user that they have verified an address for someone else.
2019-03-07 17:09:47 -07:00
Matthew Hodgson
ce24165e19 port over low_bandwidth mode to develop 2019-02-08 16:44:03 +00:00
J. Ryan Stinnett
20b7debcaf Remove support for team servers 2019-01-25 16:13:30 -06:00
Richard van der Hoff
36dd43f734 Avoid preserving HS url at logout
When I was talking to Matthew about this the other day, we couldn't think of a
good reason why we should preserve the HS URL at logout. It introduces the
problem that, if a client is redirected after login as per MSC1730, and then
you log out, you'll then get a login screen for the wrong server.

So basically there's no reason to have an mx_hs_url/mx_is_url without an access
token, and we can remove the stuff which preserves it, and the stuff that
attempts to restore it.
2018-12-10 14:44:12 +00:00
Richard van der Hoff
c553323d5a
Factor out common login code (#2307)
Removes the duplication between the various points where we send off a login
request and parse the response.
2018-12-05 17:39:38 +01:00
David Baker
0abcb5c78d Handle InvalidStoreError from js-sdk
js-sdk now emits sync state ERROR with an InvalidStoreError if the
store needs to be cleared before it can be used.

Requires https://github.com/matrix-org/matrix-js-sdk/pull/759
2018-10-10 17:07:17 +01:00
Bruno Windels
48299bb154 show warning when LL is disabled but was enabled before 2018-10-08 15:28:00 +02:00
Bruno Windels
130f3cc2ff only get component when needed 2018-09-26 16:30:35 +01:00
Bruno Windels
824ad5e318 delete sync data when LL is toggled, show message when enabling 2018-09-26 16:25:21 +01:00
Bruno Windels
07083e61b7
Merge pull request #2058 from matrix-org/t3chguy/hide_logout_warning_whilst_logging_out
while logging out ignore `Session.logged_out` as it is intentional
2018-08-07 10:31:29 +02:00
David Baker
acc767a479 s/start/stop/ 2018-07-24 16:39:30 +01:00
David Baker
ec4c7ffb71 Make ActiveWidgetStore clear persistent widgets
ActiveWidgetStore is now reponsible for removing the current
persistent widget from the store if it's been removed from whatever
room it was in. As per comment, this leaves us with the store updating
itself in this case but in all other cases, views call setters on the
store to update its state. We should make it so the store keeps itself
up to date and views aren't responsible for keeping the store up to date.

The store now emits events so it can notify PersistentApp when it changes.

Fixes https://github.com/vector-im/riot-web/issues/7076
2018-07-24 16:21:43 +01:00
Michael Telatynski
ffe0b35504
while logging out ignore Session.logged_out as it is intentional
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2018-07-15 22:33:00 +01:00
David Baker
fed74646b0 Rewrite to use async / await 2018-04-27 17:49:53 +01:00
David Baker
2cc50d35c6 Lint 2018-04-27 15:06:36 +01:00
David Baker
75ab618c05 Fix variable scopes 2018-04-27 14:20:09 +01:00
David Baker
0323f8ed0c Wrap exception handling around all of loadSession
The user might (probably does) have a session even if we haven't actually tried
to load it yet, so wrap the whole loadSession code in the error handler we were
using for restoring sessions so we gracefully handle exceptions that happen
before trying to restore sessions too.

Remove the catch in MatrixChat that sent you to the login screen.  This is
never the right way to handle an error condition: we should only display the
login screen if we successfully determined that the user has no session, or
they explicitly chose to blow their sessions away.
2018-04-27 11:25:13 +01:00
David Baker
f70096b8fa Fix error handling on session restore
Fix a number of failures that meant the excellent error handling
we had for failing to restore a session didn't work.

1. .catch on the promise rather than try/catch: it's async
2. Explicit cancel method in SessionRestoreErrorDialog that invokes
   onFinished with `false` because even with the catch fixed, this
   was getting the event as its first arg which is truthy, so
   clicking cancel still deleted your data.
3. DialogButtons: Don't pass onCancel straight into the button event
   handler as this leaks the MouseEvent through as an argument.
   Nothing is using it and it exacerbates failures like this
   because there are surprise arguments.

Fixes https://github.com/vector-im/riot-web/issues/6616
2018-04-26 17:07:58 +01:00
Luke Barnard
5d6a447620 Fix bug where global "Never send to unverified..." is ignored 2018-02-22 18:47:27 +00:00
David Baker
87c808a088 semicolon 2017-12-05 11:53:49 +00:00
David Baker
fec2e31b41 oops, actual null check 2017-12-05 11:38:25 +00:00
David Baker
c23a3fd7fe Add some null checks 2017-12-05 11:14:55 +00:00
Travis Ralston
3958e32672 Ensure blacklistUnverifiedDevices persists reloads
Signed-off-by: Travis Ralston <travpc@gmail.com>
2017-11-04 20:13:23 -07:00