package org.geogebra.web.web.move.ggtapi.models; import org.geogebra.common.move.ggtapi.models.AuthenticationModel; import org.geogebra.common.plugin.Event; import org.geogebra.common.plugin.EventType; import org.geogebra.web.html5.main.AppW; import com.google.gwt.storage.client.Storage; /** * @author gabor * */ public class AuthenticationModelW extends AuthenticationModel { private static final String GGB_LAST_USER = "last_user"; protected Storage storage = null; private String authToken = null; private AppW app; /** * creates a new login model for Web * * @param app * application */ public AuthenticationModelW(AppW app) { this.storage = Storage.getLocalStorageIfSupported(); this.app = app; } @Override public void storeLoginToken(String token) { if (this.app != null) { ensureInited(); this.app.dispatchEvent(new Event(EventType.LOGIN, null, token)); } this.authToken = token; if (storage == null) { return; } storage.setItem(GGB_TOKEN_KEY_NAME, token); } @Override public String getLoginToken() { if (authToken != null) { return authToken; } if (storage == null) { return null; } return storage.getItem(GGB_TOKEN_KEY_NAME); } @Override public void clearLoginToken() { app.getLoginOperation().getGeoGebraTubeAPI().logout(this.authToken); this.authToken = null; // this should log the user out of other systems too ensureInited(); this.app.dispatchEvent(new Event(EventType.LOGIN, null, "")); if (storage == null) { return; } storage.removeItem(GGB_TOKEN_KEY_NAME); storage.removeItem(GGB_LAST_USER); } private boolean inited = false; private void ensureInited() { if (inited || app.getLAF().getLoginListener() == null) { return; } inited = true; app.getGgbApi().registerClientListener("loginListener"); } @Override protected void storeLastUser(String username) { if (storage == null) { return; } storage.setItem(GGB_LAST_USER, username); } @Override public String loadLastUser() { if (storage == null) { return null; } return storage.getItem(GGB_LAST_USER); } }