From 8ef9af119784dd8fe531f00accd284c9aadf03bd Mon Sep 17 00:00:00 2001 From: Nick Grosenbacher Date: Mon, 21 Oct 2024 15:20:41 -0400 Subject: [PATCH] SWC-7124 - Dynamically set OneSage appId SWC-7124 - fix comment placement --- .../web/client/DisplayUtils.java | 4 -- .../web/client/GWTWrapper.java | 1 - .../web/client/GWTWrapperImpl.java | 32 ---------- .../client/GlobalApplicationStateImpl.java | 4 +- .../web/client/OneSageUtils.java | 62 +++++++++++++++++++ .../jsinterop/SynapseContextJsObject.java | 9 +-- .../PersonalAccessTokensPresenter.java | 6 +- .../client/presenter/ProfilePresenter.java | 25 ++++++-- .../presenter/TwoFactorAuthPresenter.java | 4 +- .../users/PasswordResetPresenter.java | 6 +- .../users/RegisterAccountPresenter.java | 6 +- .../client/widget/QuarantinedEmailModal.java | 5 +- .../profile/UserProfileWidgetViewImpl.java | 7 ++- .../web/shared/WebConstants.java | 11 +--- .../web/unitclient/presenter/GWTStub.java | 5 -- 15 files changed, 105 insertions(+), 82 deletions(-) create mode 100644 src/main/java/org/sagebionetworks/web/client/OneSageUtils.java diff --git a/src/main/java/org/sagebionetworks/web/client/DisplayUtils.java b/src/main/java/org/sagebionetworks/web/client/DisplayUtils.java index 6ddd28cee2..e32f6bce0c 100644 --- a/src/main/java/org/sagebionetworks/web/client/DisplayUtils.java +++ b/src/main/java/org/sagebionetworks/web/client/DisplayUtils.java @@ -66,12 +66,8 @@ import org.sagebionetworks.web.client.jsinterop.ReactMouseEvent; import org.sagebionetworks.web.client.jsinterop.SRC; import org.sagebionetworks.web.client.jsinterop.ToastMessageOptions; -import org.sagebionetworks.web.client.place.PeopleSearch; -import org.sagebionetworks.web.client.place.Search; import org.sagebionetworks.web.client.place.Synapse; import org.sagebionetworks.web.client.place.Team; -import org.sagebionetworks.web.client.place.TeamSearch; -import org.sagebionetworks.web.client.place.Trash; import org.sagebionetworks.web.client.utils.Callback; import org.sagebionetworks.web.client.utils.FileHandleUtils; import org.sagebionetworks.web.client.widget.LoadingSpinner; diff --git a/src/main/java/org/sagebionetworks/web/client/GWTWrapper.java b/src/main/java/org/sagebionetworks/web/client/GWTWrapper.java index d08bcc28ca..073f067f3d 100644 --- a/src/main/java/org/sagebionetworks/web/client/GWTWrapper.java +++ b/src/main/java/org/sagebionetworks/web/client/GWTWrapper.java @@ -78,5 +78,4 @@ public interface GWTWrapper { boolean isValidJSONArray(String json); JSONValue parseJSONStrict(String json); - String getOneSageURL(); } diff --git a/src/main/java/org/sagebionetworks/web/client/GWTWrapperImpl.java b/src/main/java/org/sagebionetworks/web/client/GWTWrapperImpl.java index e05b19e540..bb392e2fbf 100644 --- a/src/main/java/org/sagebionetworks/web/client/GWTWrapperImpl.java +++ b/src/main/java/org/sagebionetworks/web/client/GWTWrapperImpl.java @@ -20,8 +20,6 @@ import com.google.gwt.user.datepicker.client.CalendarUtil; import com.google.gwt.xhr.client.XMLHttpRequest; import java.util.Date; -import java.util.HashMap; -import java.util.Map; import org.sagebionetworks.web.client.utils.Callback; public class GWTWrapperImpl implements GWTWrapper { @@ -243,36 +241,6 @@ public String getFriendlySize(double size, boolean abbreviatedUnits) { return DisplayUtils.getFriendlySize(size, abbreviatedUnits); } - private static Map hostName2OneSageSite = new HashMap<>(); - - static { - hostName2OneSageSite.put( - "staging.synapse.org", - "https://staging.accounts.synapse.org/?appId=staging.synapse.org" - ); - hostName2OneSageSite.put( - "portal-dev.dev.sagebase.org", - "https://accounts-dev.dev.sagebase.org/?appId=dev.synapse.org" - ); - hostName2OneSageSite.put( - "localhost", - "http://localhost:3000/?appId=localhost" - ); - hostName2OneSageSite.put( - "127.0.0.1", - "http://127.0.0.1:3000/?appId=localhost" - ); - } - - @Override - public String getOneSageURL() { - String hostName = Window.Location.getHostName().toLowerCase(); - return hostName2OneSageSite.getOrDefault( - hostName, - "https://accounts.synapse.org/?appId=synapse.org" - ); - } - @Override public DateTimeFormat getFormat(String formatPattern) { return DateTimeFormat.getFormat(formatPattern); diff --git a/src/main/java/org/sagebionetworks/web/client/GlobalApplicationStateImpl.java b/src/main/java/org/sagebionetworks/web/client/GlobalApplicationStateImpl.java index ca0ea09e3e..ef5b2bfc3b 100644 --- a/src/main/java/org/sagebionetworks/web/client/GlobalApplicationStateImpl.java +++ b/src/main/java/org/sagebionetworks/web/client/GlobalApplicationStateImpl.java @@ -623,8 +623,8 @@ public void gotoLoginPage() { gwt.getCurrentURL(), twoHoursFromNow ); - //go to One Sage to log in - gwt.assignThisWindowWith(gwt.getOneSageURL()); + // SWC-6533: Sending all to One Sage for login + gwt.assignThisWindowWith(OneSageUtils.getOneSageURL()); } @Override diff --git a/src/main/java/org/sagebionetworks/web/client/OneSageUtils.java b/src/main/java/org/sagebionetworks/web/client/OneSageUtils.java new file mode 100644 index 0000000000..7f1bf4d2de --- /dev/null +++ b/src/main/java/org/sagebionetworks/web/client/OneSageUtils.java @@ -0,0 +1,62 @@ +package org.sagebionetworks.web.client; + +import static org.sagebionetworks.web.shared.WebConstants.ONESAGE_ACCOUNT_SETTINGS_PATH; + +import com.google.gwt.user.client.Window; +import org.sagebionetworks.web.shared.WebConstants; + +public class OneSageUtils { + + private static String getHostForOneSage() { + // SWC-6533: We do not want to stack hop for Prod and Staging + switch (Window.Location.getHostName().toLowerCase()) { + case "staging.synapse.org": + return "https://staging.accounts.synapse.org"; + case "portal-dev.dev.sagebase.org": + return "https://accounts-dev.dev.sagebase.org"; + case "localhost": + case "127.0.0.1": + return "http://" + Window.Location.getHostName() + ":3000"; + default: + return "https://accounts.synapse.org"; + } + } + + public static String getAppIdForOneSage() { + switch (Window.Location.getHostName().toLowerCase()) { + case "staging.synapse.org": + return "staging.synapse.org"; + case "portal-dev.dev.sagebase.org": + return "dev.synapse.org"; + case "localhost": + case "127.0.0.1": + return "localhost"; + default: + return "synapse.org"; + } + } + + public static String getOneSageURL() { + return getOneSageURL("/"); + } + + /** + * Based on the current hostname, generate a URL pointing to an instance of OneSage with an appropriate appId search param. + * @param path + * @return a String representation of the OneSage URL + */ + public static String getOneSageURL(String path) { + return ( + getHostForOneSage() + + path + + "?" + + WebConstants.ONESAGE_SYNAPSE_APPID_QUERY_PARAM_KEY + + "=" + + getAppIdForOneSage() + ); + } + + public static String getAccountSettingsURL() { + return getOneSageURL(ONESAGE_ACCOUNT_SETTINGS_PATH); + } +} diff --git a/src/main/java/org/sagebionetworks/web/client/jsinterop/SynapseContextJsObject.java b/src/main/java/org/sagebionetworks/web/client/jsinterop/SynapseContextJsObject.java index 0bb2d7b1bb..2b67c253ad 100644 --- a/src/main/java/org/sagebionetworks/web/client/jsinterop/SynapseContextJsObject.java +++ b/src/main/java/org/sagebionetworks/web/client/jsinterop/SynapseContextJsObject.java @@ -1,6 +1,7 @@ package org.sagebionetworks.web.client.jsinterop; -import com.google.gwt.user.client.Window; +import static org.sagebionetworks.web.client.OneSageUtils.getAppIdForOneSage; + import jsinterop.annotations.JsNullable; import jsinterop.annotations.JsOverlay; import jsinterop.annotations.JsPackage; @@ -25,15 +26,11 @@ 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 = isStaging ? "staging.synapse.org" : "synapse.org"; + context.appId = getAppIdForOneSage(); context.withErrorBoundary = true; return context; } diff --git a/src/main/java/org/sagebionetworks/web/client/presenter/PersonalAccessTokensPresenter.java b/src/main/java/org/sagebionetworks/web/client/presenter/PersonalAccessTokensPresenter.java index c0ee14cbec..a5eef3330c 100644 --- a/src/main/java/org/sagebionetworks/web/client/presenter/PersonalAccessTokensPresenter.java +++ b/src/main/java/org/sagebionetworks/web/client/presenter/PersonalAccessTokensPresenter.java @@ -7,8 +7,8 @@ import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.google.inject.Inject; import org.sagebionetworks.web.client.GlobalApplicationState; +import org.sagebionetworks.web.client.OneSageUtils; import org.sagebionetworks.web.client.place.PersonalAccessTokenPlace; -import org.sagebionetworks.web.shared.WebConstants; public class PersonalAccessTokensPresenter extends AbstractActivity @@ -29,9 +29,7 @@ public void setPlace(PersonalAccessTokenPlace place) {} @Override public void start(AcceptsOneWidget panel, EventBus eventBus) { Window.Location.replace( - WebConstants.ONESAGE_PRODUCTION_URL + - "/authenticated/personalaccesstokens?" + - WebConstants.ONESAGE_SYNAPSE_APPID_QUERY_PARAM + OneSageUtils.getOneSageURL("/authenticated/personalaccesstokens") ); } diff --git a/src/main/java/org/sagebionetworks/web/client/presenter/ProfilePresenter.java b/src/main/java/org/sagebionetworks/web/client/presenter/ProfilePresenter.java index f5c0d46150..4c5251a1a5 100644 --- a/src/main/java/org/sagebionetworks/web/client/presenter/ProfilePresenter.java +++ b/src/main/java/org/sagebionetworks/web/client/presenter/ProfilePresenter.java @@ -1,7 +1,6 @@ package org.sagebionetworks.web.client.presenter; import static com.google.common.util.concurrent.MoreExecutors.directExecutor; -import static org.sagebionetworks.web.shared.WebConstants.ONESAGE_ACCOUNT_SETTINGS_URL; import com.google.common.util.concurrent.FutureCallback; import com.google.gwt.activity.shared.AbstractActivity; @@ -14,12 +13,28 @@ import com.google.inject.Inject; import java.util.ArrayList; import java.util.List; -import org.sagebionetworks.repo.model.*; +import org.sagebionetworks.repo.model.Challenge; +import org.sagebionetworks.repo.model.Entity; +import org.sagebionetworks.repo.model.EntityHeader; +import org.sagebionetworks.repo.model.PaginatedTeamIds; +import org.sagebionetworks.repo.model.Project; +import org.sagebionetworks.repo.model.ProjectHeader; +import org.sagebionetworks.repo.model.ProjectHeaderList; +import org.sagebionetworks.repo.model.ProjectListSortColumn; +import org.sagebionetworks.repo.model.ProjectListType; +import org.sagebionetworks.repo.model.Team; +import org.sagebionetworks.repo.model.UserBundle; import org.sagebionetworks.repo.model.entity.query.SortDirection; import org.sagebionetworks.repo.model.principal.AliasType; import org.sagebionetworks.repo.model.principal.PrincipalAliasRequest; import org.sagebionetworks.repo.model.principal.PrincipalAliasResponse; -import org.sagebionetworks.web.client.*; +import org.sagebionetworks.web.client.DisplayConstants; +import org.sagebionetworks.web.client.DisplayUtils; +import org.sagebionetworks.web.client.GWTWrapper; +import org.sagebionetworks.web.client.GlobalApplicationState; +import org.sagebionetworks.web.client.OneSageUtils; +import org.sagebionetworks.web.client.PortalGinInjector; +import org.sagebionetworks.web.client.SynapseJavascriptClient; import org.sagebionetworks.web.client.place.Profile; import org.sagebionetworks.web.client.place.Synapse; import org.sagebionetworks.web.client.place.Synapse.ProfileArea; @@ -842,7 +857,7 @@ private void showView(Profile place) { updateProfileView(place.getUserId()); } else { if (Profile.EDIT_PROFILE_TOKEN.equals(token)) { - Window.Location.replace(ONESAGE_ACCOUNT_SETTINGS_URL); + Window.Location.replace(OneSageUtils.getAccountSettingsURL()); } else { // if this is a number, then treat it as a a user id try { @@ -941,7 +956,7 @@ private void refreshData(ProfileArea tab) { refreshTeams(); break; case SETTINGS: - Window.Location.replace(ONESAGE_ACCOUNT_SETTINGS_URL); + Window.Location.replace(OneSageUtils.getAccountSettingsURL()); break; case CHALLENGES: refreshChallenges(); diff --git a/src/main/java/org/sagebionetworks/web/client/presenter/TwoFactorAuthPresenter.java b/src/main/java/org/sagebionetworks/web/client/presenter/TwoFactorAuthPresenter.java index 3d83a6d095..c6ecf0c3b5 100644 --- a/src/main/java/org/sagebionetworks/web/client/presenter/TwoFactorAuthPresenter.java +++ b/src/main/java/org/sagebionetworks/web/client/presenter/TwoFactorAuthPresenter.java @@ -5,8 +5,8 @@ import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.google.inject.Inject; +import org.sagebionetworks.web.client.OneSageUtils; import org.sagebionetworks.web.client.place.TwoFactorAuthPlace; -import org.sagebionetworks.web.shared.WebConstants; public class TwoFactorAuthPresenter extends AbstractActivity @@ -17,7 +17,7 @@ public TwoFactorAuthPresenter() {} @Override public void start(AcceptsOneWidget panel, EventBus eventBus) { - Window.Location.replace(WebConstants.ONESAGE_ACCOUNT_SETTINGS_URL); + Window.Location.replace(OneSageUtils.getAccountSettingsURL()); } @Override diff --git a/src/main/java/org/sagebionetworks/web/client/presenter/users/PasswordResetPresenter.java b/src/main/java/org/sagebionetworks/web/client/presenter/users/PasswordResetPresenter.java index 58849ed87c..2b81e42085 100644 --- a/src/main/java/org/sagebionetworks/web/client/presenter/users/PasswordResetPresenter.java +++ b/src/main/java/org/sagebionetworks/web/client/presenter/users/PasswordResetPresenter.java @@ -5,18 +5,16 @@ import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.google.inject.Inject; +import org.sagebionetworks.web.client.OneSageUtils; import org.sagebionetworks.web.client.place.users.PasswordReset; import org.sagebionetworks.web.client.presenter.Presenter; -import org.sagebionetworks.web.shared.WebConstants; public class PasswordResetPresenter extends AbstractActivity implements Presenter { private static final String ONE_SAGE_RESET_PASSWORD_URL = - WebConstants.ONESAGE_PRODUCTION_URL + - "/resetPassword?" + - WebConstants.ONESAGE_SYNAPSE_APPID_QUERY_PARAM; + OneSageUtils.getOneSageURL("/resetPassword"); @Inject public PasswordResetPresenter() {} diff --git a/src/main/java/org/sagebionetworks/web/client/presenter/users/RegisterAccountPresenter.java b/src/main/java/org/sagebionetworks/web/client/presenter/users/RegisterAccountPresenter.java index 67ed9259b2..fc3edd14d0 100644 --- a/src/main/java/org/sagebionetworks/web/client/presenter/users/RegisterAccountPresenter.java +++ b/src/main/java/org/sagebionetworks/web/client/presenter/users/RegisterAccountPresenter.java @@ -5,9 +5,9 @@ import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.google.inject.Inject; +import org.sagebionetworks.web.client.OneSageUtils; import org.sagebionetworks.web.client.place.users.RegisterAccount; import org.sagebionetworks.web.client.presenter.Presenter; -import org.sagebionetworks.web.shared.WebConstants; public class RegisterAccountPresenter extends AbstractActivity @@ -26,9 +26,7 @@ public void setPlace(RegisterAccount place) { ); String email = place.getParam(RegisterAccount.EMAIL_QUERY_PARAM); StringBuilder targetUrl = new StringBuilder(); - targetUrl.append(WebConstants.ONESAGE_PRODUCTION_URL); - targetUrl.append("/register1?"); - targetUrl.append(WebConstants.ONESAGE_SYNAPSE_APPID_QUERY_PARAM); + targetUrl.append(OneSageUtils.getOneSageURL("/register1")); if (emailInvitationToken != null) { targetUrl.append("&signedToken=" + emailInvitationToken); diff --git a/src/main/java/org/sagebionetworks/web/client/widget/QuarantinedEmailModal.java b/src/main/java/org/sagebionetworks/web/client/widget/QuarantinedEmailModal.java index 0788e4eb5f..a7a4609f9b 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/QuarantinedEmailModal.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/QuarantinedEmailModal.java @@ -1,7 +1,5 @@ package org.sagebionetworks.web.client.widget; -import static org.sagebionetworks.web.shared.WebConstants.ONESAGE_ACCOUNT_SETTINGS_URL; - import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Window; @@ -11,6 +9,7 @@ import org.gwtbootstrap3.client.ui.Button; import org.gwtbootstrap3.client.ui.Modal; import org.sagebionetworks.web.client.GlobalApplicationState; +import org.sagebionetworks.web.client.OneSageUtils; import org.sagebionetworks.web.client.security.AuthenticationController; public class QuarantinedEmailModal implements IsWidget { @@ -30,7 +29,7 @@ public QuarantinedEmailModal( ) { widget = (Modal) binder.createAndBindUi(this); accountSettingsLink.addClickHandler(event -> { - Window.open(ONESAGE_ACCOUNT_SETTINGS_URL, "_blank", ""); + Window.open(OneSageUtils.getAccountSettingsURL(), "_blank", ""); widget.hide(); }); } diff --git a/src/main/java/org/sagebionetworks/web/client/widget/profile/UserProfileWidgetViewImpl.java b/src/main/java/org/sagebionetworks/web/client/widget/profile/UserProfileWidgetViewImpl.java index a6916b5039..54bc20d169 100755 --- a/src/main/java/org/sagebionetworks/web/client/widget/profile/UserProfileWidgetViewImpl.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/profile/UserProfileWidgetViewImpl.java @@ -21,6 +21,7 @@ import org.gwtbootstrap3.client.ui.html.Paragraph; import org.sagebionetworks.repo.model.UserBundle; import org.sagebionetworks.web.client.DisplayUtils; +import org.sagebionetworks.web.client.OneSageUtils; import org.sagebionetworks.web.client.SynapseJSNIUtils; import org.sagebionetworks.web.client.SynapseJavascriptClient; import org.sagebionetworks.web.client.context.SynapseReactClientFullContextPropsProvider; @@ -32,7 +33,6 @@ import org.sagebionetworks.web.client.jsinterop.UserProfileLinksProps; import org.sagebionetworks.web.client.jsinterop.mui.Grid; import org.sagebionetworks.web.client.widget.ReactComponent; -import org.sagebionetworks.web.shared.WebConstants; public class UserProfileWidgetViewImpl implements UserProfileWidgetView { @@ -140,9 +140,12 @@ public UserProfileWidgetViewImpl( this.jsClient = jsClient; widget = binder.createAndBindUi(this); editProfileButton.addClickHandler(event -> { - Window.open(WebConstants.ONESAGE_ACCOUNT_SETTINGS_URL, "_blank", ""); + Window.open(OneSageUtils.getAccountSettingsURL(), "_blank", ""); }); linkRenderer.getElement().setAttribute("rel", "noreferrer noopener"); + changePasswordLink.setHref( + OneSageUtils.getAccountSettingsURL() + "#ChangePassword" + ); } @Override diff --git a/src/main/java/org/sagebionetworks/web/shared/WebConstants.java b/src/main/java/org/sagebionetworks/web/shared/WebConstants.java index 50316cdb6c..babab624de 100644 --- a/src/main/java/org/sagebionetworks/web/shared/WebConstants.java +++ b/src/main/java/org/sagebionetworks/web/shared/WebConstants.java @@ -25,14 +25,9 @@ public class WebConstants { public static final String INVALID_EMAIL_MESSAGE = "Invalid email address"; - public static final String ONESAGE_PRODUCTION_URL = - "https://accounts.synapse.org"; - public static final String ONESAGE_SYNAPSE_APPID_QUERY_PARAM = - "appId=synapse.org"; - public static final String ONESAGE_ACCOUNT_SETTINGS_URL = - ONESAGE_PRODUCTION_URL + - "/authenticated/myaccount?" + - ONESAGE_SYNAPSE_APPID_QUERY_PARAM; + public static final String ONESAGE_SYNAPSE_APPID_QUERY_PARAM_KEY = "appId"; + public static final String ONESAGE_ACCOUNT_SETTINGS_PATH = + "/authenticated/myaccount"; public static final String DOCS_BASE_URL = "https://help.synapse.org/"; public static final String DOCS_URL = DOCS_BASE_URL + "docs/"; diff --git a/src/test/java/org/sagebionetworks/web/unitclient/presenter/GWTStub.java b/src/test/java/org/sagebionetworks/web/unitclient/presenter/GWTStub.java index 11b2a9b0c6..ccd3d71e9a 100644 --- a/src/test/java/org/sagebionetworks/web/unitclient/presenter/GWTStub.java +++ b/src/test/java/org/sagebionetworks/web/unitclient/presenter/GWTStub.java @@ -171,9 +171,4 @@ public boolean isValidJSONArray(String json) { public JSONValue parseJSONStrict(String json) { return null; } - - @Override - public String getOneSageURL() { - return null; - } }