Fix session replica behaviour (merge with session)
The harder-to-refactor parts are the places where exists/username/token are called within a React component. However, `resetAndRedirect` and `store` are already called from async contexts, so adding an `await` is simple. This thus merges the logic, keeping localStorage for the components to call, but making sure reset/store behaviour works correctly for the replica.
This commit is contained in:
		
							parent
							
								
									4e44b034bd
								
							
						
					
					
						commit
						8ccfa5c3fb
					
				
					 15 changed files with 43 additions and 78 deletions
				
			
		|  | @ -164,7 +164,7 @@ const ChangePasswordDialog = (props) => { | |||
|       if (e instanceof IncorrectPasswordError) { | ||||
|         setError(t("account_basics_password_dialog_current_password_incorrect")); | ||||
|       } else if (e instanceof UnauthorizedError) { | ||||
|         session.resetAndRedirect(routes.login); | ||||
|         await session.resetAndRedirect(routes.login); | ||||
|       } else { | ||||
|         setError(e.message); | ||||
|       } | ||||
|  | @ -245,7 +245,7 @@ const AccountType = () => { | |||
|     } catch (e) { | ||||
|       console.log(`[Account] Error opening billing portal`, e); | ||||
|       if (e instanceof UnauthorizedError) { | ||||
|         session.resetAndRedirect(routes.login); | ||||
|         await session.resetAndRedirect(routes.login); | ||||
|       } else { | ||||
|         setShowPortalError(true); | ||||
|       } | ||||
|  | @ -371,7 +371,7 @@ const PhoneNumbers = () => { | |||
|     } catch (e) { | ||||
|       console.log(`[Account] Error deleting phone number`, e); | ||||
|       if (e instanceof UnauthorizedError) { | ||||
|         session.resetAndRedirect(routes.login); | ||||
|         await session.resetAndRedirect(routes.login); | ||||
|       } | ||||
|     } | ||||
|   }; | ||||
|  | @ -447,7 +447,7 @@ const AddPhoneNumberDialog = (props) => { | |||
|     } catch (e) { | ||||
|       console.log(`[Account] Error sending verification`, e); | ||||
|       if (e instanceof UnauthorizedError) { | ||||
|         session.resetAndRedirect(routes.login); | ||||
|         await session.resetAndRedirect(routes.login); | ||||
|       } else { | ||||
|         setError(e.message); | ||||
|       } | ||||
|  | @ -464,7 +464,7 @@ const AddPhoneNumberDialog = (props) => { | |||
|     } catch (e) { | ||||
|       console.log(`[Account] Error confirming verification`, e); | ||||
|       if (e instanceof UnauthorizedError) { | ||||
|         session.resetAndRedirect(routes.login); | ||||
|         await session.resetAndRedirect(routes.login); | ||||
|       } else { | ||||
|         setError(e.message); | ||||
|       } | ||||
|  | @ -946,7 +946,7 @@ const TokenDialog = (props) => { | |||
|     } catch (e) { | ||||
|       console.log(`[Account] Error creating token`, e); | ||||
|       if (e instanceof UnauthorizedError) { | ||||
|         session.resetAndRedirect(routes.login); | ||||
|         await session.resetAndRedirect(routes.login); | ||||
|       } else { | ||||
|         setError(e.message); | ||||
|       } | ||||
|  | @ -1003,7 +1003,7 @@ const TokenDeleteDialog = (props) => { | |||
|     } catch (e) { | ||||
|       console.log(`[Account] Error deleting token`, e); | ||||
|       if (e instanceof UnauthorizedError) { | ||||
|         session.resetAndRedirect(routes.login); | ||||
|         await session.resetAndRedirect(routes.login); | ||||
|       } else { | ||||
|         setError(e.message); | ||||
|       } | ||||
|  | @ -1080,13 +1080,13 @@ const DeleteAccountDialog = (props) => { | |||
|       await accountApi.delete(password); | ||||
|       await db().delete(); | ||||
|       console.debug(`[Account] Account deleted`); | ||||
|       session.resetAndRedirect(routes.app); | ||||
|       await session.resetAndRedirect(routes.app); | ||||
|     } catch (e) { | ||||
|       console.log(`[Account] Error deleting account`, e); | ||||
|       if (e instanceof IncorrectPasswordError) { | ||||
|         setError(t("account_basics_password_dialog_current_password_incorrect")); | ||||
|       } else if (e instanceof UnauthorizedError) { | ||||
|         session.resetAndRedirect(routes.login); | ||||
|         await session.resetAndRedirect(routes.login); | ||||
|       } else { | ||||
|         setError(e.message); | ||||
|       } | ||||
|  |  | |||
|  | @ -123,7 +123,7 @@ const ProfileIcon = () => { | |||
|       await accountApi.logout(); | ||||
|       await db().delete(); | ||||
|     } finally { | ||||
|       session.resetAndRedirect(routes.app); | ||||
|       await session.resetAndRedirect(routes.app); | ||||
|     } | ||||
|   }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -24,7 +24,7 @@ const Login = () => { | |||
|     try { | ||||
|       const token = await accountApi.login(user); | ||||
|       console.log(`[Login] User auth for user ${user.username} successful, token is ${token}`); | ||||
|       session.store(user.username, token); | ||||
|       await session.store(user.username, token); | ||||
|       window.location.href = routes.app; | ||||
|     } catch (e) { | ||||
|       console.log(`[Login] User auth for user ${user.username} failed`, e); | ||||
|  |  | |||
|  | @ -59,7 +59,7 @@ const maybeUpdateAccountSettings = async (payload) => { | |||
|   } catch (e) { | ||||
|     console.log(`[Preferences] Error updating account settings`, e); | ||||
|     if (e instanceof UnauthorizedError) { | ||||
|       session.resetAndRedirect(routes.login); | ||||
|       await session.resetAndRedirect(routes.login); | ||||
|     } | ||||
|   } | ||||
| }; | ||||
|  |  | |||
|  | @ -211,7 +211,7 @@ const PublishDialog = (props) => { | |||
|     } catch (e) { | ||||
|       console.log(`[PublishDialog] Retrieving attachment limits failed`, e); | ||||
|       if (e instanceof UnauthorizedError) { | ||||
|         session.resetAndRedirect(routes.login); | ||||
|         await session.resetAndRedirect(routes.login); | ||||
|       } else { | ||||
|         setAttachFileError(""); // Reset error (rely on server-side checking) | ||||
|       } | ||||
|  |  | |||
|  | @ -43,7 +43,7 @@ export const ReserveAddDialog = (props) => { | |||
|     } catch (e) { | ||||
|       console.log(`[ReserveAddDialog] Error adding topic reservation.`, e); | ||||
|       if (e instanceof UnauthorizedError) { | ||||
|         session.resetAndRedirect(routes.login); | ||||
|         await session.resetAndRedirect(routes.login); | ||||
|       } else if (e instanceof TopicReservedError) { | ||||
|         setError(t("subscribe_dialog_error_topic_already_reserved")); | ||||
|         return; | ||||
|  | @ -99,7 +99,7 @@ export const ReserveEditDialog = (props) => { | |||
|     } catch (e) { | ||||
|       console.log(`[ReserveEditDialog] Error updating topic reservation.`, e); | ||||
|       if (e instanceof UnauthorizedError) { | ||||
|         session.resetAndRedirect(routes.login); | ||||
|         await session.resetAndRedirect(routes.login); | ||||
|       } else { | ||||
|         setError(e.message); | ||||
|         return; | ||||
|  | @ -136,7 +136,7 @@ export const ReserveDeleteDialog = (props) => { | |||
|     } catch (e) { | ||||
|       console.log(`[ReserveDeleteDialog] Error deleting topic reservation.`, e); | ||||
|       if (e instanceof UnauthorizedError) { | ||||
|         session.resetAndRedirect(routes.login); | ||||
|         await session.resetAndRedirect(routes.login); | ||||
|       } else { | ||||
|         setError(e.message); | ||||
|         return; | ||||
|  |  | |||
|  | @ -27,7 +27,7 @@ const Signup = () => { | |||
|       await accountApi.create(user.username, user.password); | ||||
|       const token = await accountApi.login(user); | ||||
|       console.log(`[Signup] User signup for user ${user.username} successful, token is ${token}`); | ||||
|       session.store(user.username, token); | ||||
|       await session.store(user.username, token); | ||||
|       window.location.href = routes.app; | ||||
|     } catch (e) { | ||||
|       console.log(`[Signup] Signup for user ${user.username} failed`, e); | ||||
|  |  | |||
|  | @ -39,7 +39,7 @@ export const subscribeTopic = async (baseUrl, topic, opts) => { | |||
|     } catch (e) { | ||||
|       console.log(`[SubscribeDialog] Subscribing to topic ${topic} failed`, e); | ||||
|       if (e instanceof UnauthorizedError) { | ||||
|         session.resetAndRedirect(routes.login); | ||||
|         await session.resetAndRedirect(routes.login); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|  | @ -124,7 +124,7 @@ const SubscribePage = (props) => { | |||
|       } catch (e) { | ||||
|         console.log(`[SubscribeDialog] Error reserving topic`, e); | ||||
|         if (e instanceof UnauthorizedError) { | ||||
|           session.resetAndRedirect(routes.login); | ||||
|           await session.resetAndRedirect(routes.login); | ||||
|         } else if (e instanceof TopicReservedError) { | ||||
|           setError(t("subscribe_dialog_error_topic_already_reserved")); | ||||
|           return; | ||||
|  |  | |||
|  | @ -155,7 +155,7 @@ export const SubscriptionPopup = (props) => { | |||
|       } catch (e) { | ||||
|         console.log(`[SubscriptionPopup] Error unsubscribing`, e); | ||||
|         if (e instanceof UnauthorizedError) { | ||||
|           session.resetAndRedirect(routes.login); | ||||
|           await session.resetAndRedirect(routes.login); | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|  | @ -298,7 +298,7 @@ const DisplayNameDialog = (props) => { | |||
|       } catch (e) { | ||||
|         console.log(`[SubscriptionSettingsDialog] Error updating subscription`, e); | ||||
|         if (e instanceof UnauthorizedError) { | ||||
|           session.resetAndRedirect(routes.login); | ||||
|           await session.resetAndRedirect(routes.login); | ||||
|         } else { | ||||
|           setError(e.message); | ||||
|           return; | ||||
|  |  | |||
|  | @ -140,7 +140,7 @@ const UpgradeDialog = (props) => { | |||
|     } catch (e) { | ||||
|       console.log(`[UpgradeDialog] Error changing billing subscription`, e); | ||||
|       if (e instanceof UnauthorizedError) { | ||||
|         session.resetAndRedirect(routes.login); | ||||
|         await session.resetAndRedirect(routes.login); | ||||
|       } else { | ||||
|         setError(e.message); | ||||
|       } | ||||
|  |  | |||
|  | @ -114,7 +114,7 @@ export const useAutoSubscribe = (subscriptions, selected) => { | |||
|           } catch (e) { | ||||
|             console.log(`[Hooks] Auto-subscribing failed`, e); | ||||
|             if (e instanceof UnauthorizedError) { | ||||
|               session.resetAndRedirect(routes.login); | ||||
|               await session.resetAndRedirect(routes.login); | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue