Skip to content

Commit

Permalink
update LoginPresenter to often go to the One Sage root page to handle…
Browse files Browse the repository at this point in the history
… login instead of showing it here
  • Loading branch information
jay-hodgson committed Oct 2, 2024
1 parent 0c3479f commit 32f4930
Show file tree
Hide file tree
Showing 8 changed files with 29 additions and 159 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,5 @@ public interface GWTWrapper {
boolean isValidJSONArray(String json);

JSONValue parseJSONStrict(String json);
String getOneSageURL();
}
10 changes: 10 additions & 0 deletions src/main/java/org/sagebionetworks/web/client/GWTWrapperImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,16 @@ public String getFriendlySize(double size, boolean abbreviatedUnits) {
return DisplayUtils.getFriendlySize(size, abbreviatedUnits);
}

@Override
public String getOneSageURL() {
boolean isStaging = Window.Location
.getHostName()
.equalsIgnoreCase("staging.synapse.org");
return isStaging
? "https://staging.accounts.synapse.org/?appId=staging.synapse.org"
: "https://accounts.synapse.org/?appId=synapse.org";
}

@Override
public DateTimeFormat getFormat(String formatPattern) {
return DateTimeFormat.getFormat(formatPattern);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,4 +132,5 @@ public void setAppPlaceHistoryMapper(
boolean isShowingVersionAlert();

boolean handleRelativePathClick(String href);
void gotoLoginPage();
}
Original file line number Diff line number Diff line change
Expand Up @@ -583,7 +583,7 @@ public void onPreviewNativeEvent(NativePreviewEvent event) {
}
try {
if (isSRCSignInClass) {
getPlaceChanger().goTo(new LoginPlace(LoginPlace.LOGIN_TOKEN));
gotoLoginPage();
} else {
if (targetElement.hasAttribute("href")) {
String href = targetElement.getAttribute("href");
Expand Down Expand Up @@ -612,6 +612,11 @@ public void onPreviewNativeEvent(NativePreviewEvent event) {
}
}

@Override
public void gotoLoginPage() {
gwt.assignThisWindowWith(gwt.getOneSageURL());
}

@Override
public boolean handleRelativePathClick(String href) {
String placeToken = StringUtils.getGWTPlaceTokenFromURL(href);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.sagebionetworks.web.client.jsinterop;

import com.google.gwt.user.client.Window;
import jsinterop.annotations.JsNullable;
import jsinterop.annotations.JsOverlay;
import jsinterop.annotations.JsPackage;
Expand All @@ -24,11 +25,15 @@ public static SynapseContextJsObject create(
boolean utcTime
) {
SynapseContextJsObject context = new SynapseContextJsObject();
// SWC-6533: Sending all to One Sage for login, and we do not want to stack hop for Prod and Staging
boolean isStaging = Window.Location
.getHostName()
.equalsIgnoreCase("staging.synapse.org");
context.accessToken = accessToken;
context.isInExperimentalMode = isInExperimentalMode;
context.utcTime = utcTime;
context.downloadCartPageUrl = "/DownloadCart:0";
context.appId = "synapse.org";
context.appId = isStaging ? "staging.synapse.org" : "synapse.org";
context.withErrorBoundary = true;
return context;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,79 +46,22 @@ public class LoginPresenter
private AuthenticationController authenticationController;
private GlobalApplicationState globalApplicationState;
private SynapseAlert synAlert;
private PopupUtilsView popupUtils;

@Inject
public LoginPresenter(
LoginView view,
AuthenticationController authenticationController,
GlobalApplicationState globalApplicationState,
SynapseAlert synAlert,
PopupUtilsView popupUtils
SynapseAlert synAlert
) {
this.view = view;
this.authenticationController = authenticationController;
this.globalApplicationState = globalApplicationState;
this.synAlert = synAlert;
this.popupUtils = popupUtils;
view.setSynAlert(synAlert);
view.setPresenter(this);
}

@Override
public void onAcceptTermsOfUse() {
synAlert.clear();
view.showLoggingInLoader();
authenticationController.signTermsOfUse(
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
synAlert.handleException(caught);
view.showLogin();
}

@Override
public void onSuccess(Void result) {
// Have to get the UserSessionData again,
// since it won't contain the UserProfile if the terms haven't been signed
// We also need to force-reset the QueryClient so the React components know to refetch
boolean forceResetQueryClient = true;
synAlert.clear();
authenticationController.initializeFromExistingAccessTokenCookie(
new AsyncCallback<UserProfile>() {
@Override
public void onFailure(Throwable caught) {
synAlert.handleException(caught);
view.showLogin();
}

@Override
public void onSuccess(UserProfile result) {
// Signed ToU. Check for temp username, passing record, and then forward
userAuthenticated();
}
},
forceResetQueryClient
);
}
}
);
}

@Override
public void onCancelAcceptTermsOfUse() {
// confirm
popupUtils.showConfirmDialog(
ARE_YOU_SURE_YOU_WANT_TO_CANCEL,
CANCEL_TERMS_OF_USE_CONFIRM_MESSAGE,
() -> {
globalApplicationState
.getPlaceChanger()
.goTo(new LoginPlace(LoginPlace.LOGOUT_TOKEN));
}
);
}

@Override
public void start(AcceptsOneWidget panel, EventBus eventBus) {
panel.setWidget(this.view.asWidget());
Expand Down Expand Up @@ -154,24 +97,14 @@ public void showView(final LoginPlace place) {
.getPlaceChanger()
.goTo(new LoginPlace(DEFAULT_PLACE_TOKEN));
view.showErrorMessage(SSO_ERROR_UNKNOWN);
view.showLogin();
globalApplicationState.gotoLoginPage();
} else if (
CHANGE_USERNAME.equals(token) && authenticationController.isLoggedIn()
) {
// go to the change username page
gotoChangeUsernamePlace();
} else if (
SHOW_TOU.equals(token) &&
authenticationController.getCurrentUserAccessToken() != null
) {
showTermsOfUse(false);
} else if (
SHOW_SIGNED_TOU.equals(token) &&
authenticationController.getCurrentUserAccessToken() != null
) {
showTermsOfUse(true);
} else if (ORCID_NOT_LINKED.equals(token)) {
view.showLogin();
globalApplicationState.gotoLoginPage();
synAlert.showError(
"The ORCiD you entered isn't linked to a Synapse account: To sign in with ORCiD, first log in with a valid Synapse account, then link it to your ORCiD account on your Account Settings Page. If you don't have a Synapse account, it is fast, free, and easy register today."
);
Expand All @@ -183,8 +116,7 @@ public void showView(final LoginPlace place) {
);
globalApplicationState.gotoLastPlace(defaultPlace);
} else {
// standard view
view.showLogin();
globalApplicationState.gotoLoginPage();
}
}
}
Expand Down Expand Up @@ -232,20 +164,14 @@ public void goToLastPlace() {
globalApplicationState.gotoLastPlace(defaultPlace);
}

public void showTermsOfUse(boolean isSigned) {
synAlert.clear();
view.hideLoggingInLoader();
view.showTermsOfUse(isSigned);
}

public void userAuthenticated() {
view.hideLoggingInLoader();
// the user should be logged in now.
if (authenticationController.getCurrentUserAccessToken() == null) {
view.showErrorMessage(
"An error occurred during login. Please try logging in again."
);
view.showLogin();
globalApplicationState.gotoLoginPage();
} else {
checkForTempUsername();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,17 @@
import com.google.gwt.place.shared.Place;
import com.google.gwt.user.client.ui.IsWidget;
import org.sagebionetworks.web.client.SynapseView;
import org.sagebionetworks.web.client.utils.Callback;

public interface LoginView extends IsWidget, SynapseView {
void setPresenter(Presenter loginPresenter);

void showLoggingInLoader();

void hideLoggingInLoader();

void showLogin();

void showTermsOfUse(boolean hasAccepted);

void setSynAlert(IsWidget w);

public interface Presenter {
void goTo(Place place);

void goToLastPlace();
void onAcceptTermsOfUse();
void onCancelAcceptTermsOfUse();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,11 @@
import org.sagebionetworks.web.client.DisplayUtils;
import org.sagebionetworks.web.client.SynapseJSNIUtils;
import org.sagebionetworks.web.client.context.SynapseReactClientFullContextPropsProvider;
import org.sagebionetworks.web.client.jsinterop.React;
import org.sagebionetworks.web.client.jsinterop.ReactElement;
import org.sagebionetworks.web.client.jsinterop.SRC;
import org.sagebionetworks.web.client.jsinterop.TermsAndConditionsProps;
import org.sagebionetworks.web.client.utils.Callback;
import org.sagebionetworks.web.client.widget.FullWidthAlert;
import org.sagebionetworks.web.client.widget.LoadingSpinner;
import org.sagebionetworks.web.client.widget.ReactComponent;
import org.sagebionetworks.web.client.widget.header.Header;
import org.sagebionetworks.web.client.widget.login.LoginWidget;
import org.sagebionetworks.web.client.widget.pageprogress.PageProgressWidget;
import org.sagebionetworks.web.shared.WebConstants;

public class LoginViewImpl extends Composite implements LoginView {

Expand Down Expand Up @@ -61,8 +54,6 @@ public class LoginViewImpl extends Composite implements LoginView {
private Header headerWidget;
SynapseJSNIUtils jsniUtils;
SynapseReactClientFullContextPropsProvider propsProvider;
PageProgressWidget pageProgressWidget;
Callback backBtnCallback, forwardBtnCallback;

public interface LoginViewImplBinder
extends UiBinder<Widget, LoginViewImpl> {}
Expand All @@ -73,37 +64,14 @@ public LoginViewImpl(
Header headerWidget,
LoginWidget loginWidget,
SynapseJSNIUtils jsniUtils,
PageProgressWidget pageProgressWidget,
SynapseReactClientFullContextPropsProvider propsProvider
) {
initWidget(uiBinder.createAndBindUi(this));
this.loginWidget = loginWidget;
this.headerWidget = headerWidget;
this.pageProgressWidget = pageProgressWidget;
this.jsniUtils = jsniUtils;
this.propsProvider = propsProvider;
headerWidget.configure();
pageProgressContainer.add(pageProgressWidget);
backBtnCallback =
() -> {
presenter.onCancelAcceptTermsOfUse();
};
forwardBtnCallback =
() -> {
presenter.onAcceptTermsOfUse();
};
}

private void reconfigurePageProgress(boolean enableForward) {
pageProgressWidget.configure(
WebConstants.SYNAPSE_GREEN,
75,
"Cancel",
backBtnCallback,
"Next",
forwardBtnCallback,
enableForward
);
}

@Override
Expand All @@ -127,18 +95,6 @@ public void hideLoggingInLoader() {
loadingUiText.setVisible(false);
}

@Override
public void showLogin() {
clear();
hideViews();
loginView.setVisible(true);
headerWidget.refresh();

// Add the widget to the panel
loginWidget.asWidget().removeFromParent();
loginWidgetPanel.setWidget(loginWidget.asWidget());
}

@Override
public void showErrorMessage(String message) {
DisplayUtils.showErrorMessage(message);
Expand All @@ -158,31 +114,6 @@ public void clear() {
loginWidgetPanel.clear();
}

@Override
public void showTermsOfUse(boolean hasAccepted) {
hideViews();

if (!hasAccepted) {
termsOfUseView.setVisible(true);
reconfigurePageProgress(false);
TermsAndConditionsProps props = TermsAndConditionsProps.create(
this::onFormChange
);
ReactElement component = React.createElementWithSynapseContext(
SRC.SynapseComponents.TermsAndConditions,
props,
propsProvider.getJsInteropContextProps()
);
termsOfUseContainer.render(component);
} else {
acceptedTermsOfUseView.setVisible(true);
}
}

public void onFormChange(boolean completed) {
reconfigurePageProgress(completed);
}

private void hideViews() {
loadingUi.setVisible(false);
loadingUiText.setVisible(false);
Expand Down

0 comments on commit 32f4930

Please sign in to comment.