1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import { signIn, signOut } from 'misago/reducers/auth'; // jshint ignore:line
- export class Auth {
- init(store, local, modal) {
- this._store = store;
- this._local = local;
- this._modal = modal;
- // tell other tabs what auth state is because we are most current with it
- this.syncSession();
- // listen for other tabs to tell us that state changed
- this.watchState();
- }
- syncSession() {
- const state = this._store.getState().auth;
- if (state.isAuthenticated) {
- this._local.set('auth', {
- isAuthenticated: true,
- username: state.user.username
- });
- } else {
- this._local.set('auth', {
- isAuthenticated: false
- });
- }
- }
- watchState() {
- const state = this._store.getState().auth;
- this._local.watch('auth', (newState) => {
- if (newState.isAuthenticated) {
- this._store.dispatch(signIn({
- username: newState.username
- }));
- } else if (state.isAuthenticated) {
- // check if we are authenticated in this tab
- // because some browser plugins prune local store
- // aggressively, forcing erroneous message to display here
- // tracking bug #955
- this._store.dispatch(signOut());
- }
- });
- this._modal.hide();
- }
- signIn(user) {
- this._store.dispatch(signIn(user));
- this._local.set('auth', {
- isAuthenticated: true,
- username: user.username
- });
- this._modal.hide();
- }
- signOut() {
- this._store.dispatch(signOut());
- this._local.set('auth', {
- isAuthenticated: false
- });
- this._modal.hide();
- }
- softSignOut() {
- this._store.dispatch(signOut(true));
- this._local.set('auth', {
- isAuthenticated: false
- });
- this._modal.hide();
- }
- }
- export default new Auth();
|