Skip to content

Commit

Permalink
Merge pull request #5557 from nickgros/SWC-7125
Browse files Browse the repository at this point in the history
  • Loading branch information
nickgros authored Oct 22, 2024
2 parents add6b6c + 324f845 commit da9a152
Show file tree
Hide file tree
Showing 20 changed files with 219 additions and 87 deletions.
2 changes: 2 additions & 0 deletions src/main/java/org/sagebionetworks/web/client/GWTWrapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ public interface GWTWrapper {

String getHostPrefix();

String getHostName();

String getCurrentURL();

DateTimeFormat getDateTimeFormat(PredefinedFormat format);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,11 @@ public String getCurrentURL() {
return Window.Location.getHref();
}

@Override
public String getHostName() {
return Window.Location.getHostName();
}

@Override
public DateTimeFormat getDateTimeFormat(PredefinedFormat format) {
return DateTimeFormat.getFormat(format);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import org.sagebionetworks.web.client.jsinterop.SRC;
import org.sagebionetworks.web.client.mvp.AppActivityMapper;
import org.sagebionetworks.web.client.mvp.AppPlaceHistoryMapper;
import org.sagebionetworks.web.client.place.LoginPlace;
import org.sagebionetworks.web.client.utils.Callback;
import org.sagebionetworks.web.client.utils.CallbackP;
import org.sagebionetworks.web.client.widget.footer.VersionState;
Expand Down Expand Up @@ -62,6 +63,7 @@ public class GlobalApplicationStateImpl implements GlobalApplicationState {
private CallbackP<JavaScriptObject> fileListCallback;
private SynapseProperties synapseProperties;
private PortalGinInjector ginInjector;
private final OneSageUtils oneSageUtils;

boolean isDragDropInitialized = false;
boolean isToastContainerInitialized = false;
Expand Down Expand Up @@ -106,7 +108,8 @@ public GlobalApplicationStateImpl(
SynapseJavascriptClient jsClient,
SynapseProperties synapseProperties,
SessionStorage sessionStorage,
PortalGinInjector ginInjector
PortalGinInjector ginInjector,
OneSageUtils oneSageUtils
) {
this.cookieProvider = cookieProvider;
this.eventBus = eventBus;
Expand All @@ -123,6 +126,7 @@ public GlobalApplicationStateImpl(
this.synapseProperties = synapseProperties;
this.sessionStorage = sessionStorage;
this.ginInjector = ginInjector;
this.oneSageUtils = oneSageUtils;
initUncaughtExceptionHandler();
}

Expand Down Expand Up @@ -618,13 +622,21 @@ public void gotoLoginPage() {
Date twoHoursFromNow = new Date();
twoHoursFromNow.setTime(twoHoursFromNow.getTime() + (2 * 60 * 60 * 1000));

String returnUrl = gwt.getCurrentURL();
String lastPlacePath = sessionStorage.getItem(
GlobalApplicationStateImpl.LAST_PLACE
);
if (getCurrentPlace() instanceof LoginPlace && lastPlacePath != null) {
// if at the LoginPlace, redirect to the current last place after login
returnUrl = gwt.getHostPageBaseURL() + lastPlacePath;
}
cookieProvider.setCookie(
ONESAGE_REDIRECT_COOKIE_KEY,
gwt.getCurrentURL(),
returnUrl,
twoHoursFromNow
);
// SWC-6533: Sending all to One Sage for login
gwt.assignThisWindowWith(OneSageUtils.getOneSageURL());
gwt.assignThisWindowWith(oneSageUtils.getOneSageURL());
}

@Override
Expand Down
56 changes: 5 additions & 51 deletions src/main/java/org/sagebionetworks/web/client/OneSageUtils.java
Original file line number Diff line number Diff line change
@@ -1,62 +1,16 @@
package org.sagebionetworks.web.client;

import static org.sagebionetworks.web.shared.WebConstants.ONESAGE_ACCOUNT_SETTINGS_PATH;
public interface OneSageUtils {
String getAppIdForOneSage();

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("/");
}
String 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()
);
}
String getOneSageURL(String path);

public static String getAccountSettingsURL() {
return getOneSageURL(ONESAGE_ACCOUNT_SETTINGS_PATH);
}
String getAccountSettingsURL();
}
70 changes: 70 additions & 0 deletions src/main/java/org/sagebionetworks/web/client/OneSageUtilsImpl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package org.sagebionetworks.web.client;

import static org.sagebionetworks.web.shared.WebConstants.ONESAGE_ACCOUNT_SETTINGS_PATH;

import com.google.gwt.user.client.Window;
import com.google.inject.Inject;
import org.sagebionetworks.web.shared.WebConstants;

public class OneSageUtilsImpl implements OneSageUtils {

private final GWTWrapper gwtWrapper;

@Inject
public OneSageUtilsImpl(GWTWrapper gwtWrapper) {
this.gwtWrapper = gwtWrapper;
}

private String getHostForOneSage() {
// SWC-6533: We do not want to stack hop for Prod and Staging
switch (gwtWrapper.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 String getAppIdForOneSage() {
switch (gwtWrapper.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 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 String getOneSageURL(String path) {
return (
getHostForOneSage() +
path +
"?" +
WebConstants.ONESAGE_SYNAPSE_APPID_QUERY_PARAM_KEY +
"=" +
getAppIdForOneSage()
);
}

public String getAccountSettingsURL() {
return getOneSageURL(ONESAGE_ACCOUNT_SETTINGS_PATH);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -983,5 +983,6 @@ protected void configure() {

bind(FeatureFlagConfig.class).in(Singleton.class);
bind(EntityTypeIcon.class).to(EntityTypeIconImpl.class);
bind(OneSageUtils.class).to(OneSageUtilsImpl.class);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import javax.inject.Inject;
import org.sagebionetworks.web.client.DisplayUtils;
import org.sagebionetworks.web.client.GlobalApplicationState;
import org.sagebionetworks.web.client.OneSageUtils;
import org.sagebionetworks.web.client.cookie.CookieProvider;
import org.sagebionetworks.web.client.jsinterop.SynapseContextJsObject;
import org.sagebionetworks.web.client.jsinterop.SynapseReactClientFullContextProviderProps;
Expand All @@ -14,22 +15,25 @@
public class SynapseReactClientFullContextPropsProviderImpl
implements SynapseReactClientFullContextPropsProvider {

private AuthenticationController authController;
private GlobalApplicationState globalApplicationState;
private CookieProvider cookies;
private QueryClientProvider queryClientProvider;
private final AuthenticationController authController;
private final GlobalApplicationState globalApplicationState;
private final CookieProvider cookies;
private final QueryClientProvider queryClientProvider;
private final OneSageUtils oneSageUtils;

@Inject
SynapseReactClientFullContextPropsProviderImpl(
final AuthenticationController authController,
final GlobalApplicationState globalApplicationState,
final CookieProvider cookies,
final QueryClientProvider queryClientProvider
final QueryClientProvider queryClientProvider,
final OneSageUtils oneSageUtils
) {
this.authController = authController;
this.globalApplicationState = globalApplicationState;
this.cookies = cookies;
this.queryClientProvider = queryClientProvider;
this.oneSageUtils = oneSageUtils;
}

@Override
Expand All @@ -38,7 +42,8 @@ public SynapseReactClientFullContextProviderProps getJsInteropContextProps() {
SynapseContextJsObject.create(
authController.getCurrentUserAccessToken(),
DisplayUtils.isInTestWebsite(cookies),
globalApplicationState.isShowingUTCTime()
globalApplicationState.isShowingUTCTime(),
oneSageUtils.getAppIdForOneSage()
),
queryClientProvider.getQueryClient()
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ > ReactElement<T, P> createElement(
) {
SynapseReactClientFullContextProviderProps emptyContext =
SynapseReactClientFullContextProviderProps.create(
SynapseContextJsObject.create(null, false, false),
SynapseContextJsObject.create(null, false, false, "synapse.org"),
null
);
return createElementWithSynapseContext(componentType, props, emptyContext);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.sagebionetworks.web.client.jsinterop;

import static org.sagebionetworks.web.client.OneSageUtils.getAppIdForOneSage;

import jsinterop.annotations.JsNullable;
import jsinterop.annotations.JsOverlay;
import jsinterop.annotations.JsPackage;
Expand All @@ -23,14 +21,15 @@ public class SynapseContextJsObject {
public static SynapseContextJsObject create(
String accessToken,
boolean isInExperimentalMode,
boolean utcTime
boolean utcTime,
String appId
) {
SynapseContextJsObject context = new SynapseContextJsObject();
context.accessToken = accessToken;
context.isInExperimentalMode = isInExperimentalMode;
context.utcTime = utcTime;
context.downloadCartPageUrl = "/DownloadCart:0";
context.appId = getAppIdForOneSage();
context.appId = appId;
context.withErrorBoundary = true;
return context;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,16 @@ public class PersonalAccessTokensPresenter
extends AbstractActivity
implements Presenter<PersonalAccessTokenPlace> {

private GlobalApplicationState globalApplicationState;
private final GlobalApplicationState globalApplicationState;
private final OneSageUtils oneSageUtils;

@Inject
public PersonalAccessTokensPresenter(
GlobalApplicationState globalApplicationState
GlobalApplicationState globalApplicationState,
OneSageUtils oneSageUtils
) {
this.globalApplicationState = globalApplicationState;
this.oneSageUtils = oneSageUtils;
}

@Override
Expand All @@ -29,7 +32,7 @@ public void setPlace(PersonalAccessTokenPlace place) {}
@Override
public void start(AcceptsOneWidget panel, EventBus eventBus) {
Window.Location.replace(
OneSageUtils.getOneSageURL("/authenticated/personalaccesstokens")
oneSageUtils.getOneSageURL("/authenticated/personalaccesstokens")
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ public class ProfilePresenter

public PromptForValuesModalView promptDialog;
public SynapseJavascriptClient jsClient;
private final OneSageUtils oneSageUtils;

@Inject
public ProfilePresenter(
Expand All @@ -111,7 +112,8 @@ public ProfilePresenter(
TeamListWidget myTeamsWidget,
OpenTeamInvitationsWidget openInvitesWidget,
PortalGinInjector ginInjector,
SynapseJavascriptClient jsClient
SynapseJavascriptClient jsClient,
OneSageUtils oneSageUtils
) {
this.view = view;
this.authenticationController = authenticationController;
Expand All @@ -121,6 +123,7 @@ public ProfilePresenter(
this.myTeamsWidget = myTeamsWidget;
this.openInvitesWidget = openInvitesWidget;
this.jsClient = jsClient;
this.oneSageUtils = oneSageUtils;
profileSynAlert = ginInjector.getSynapseAlertWidget();
projectSynAlert = ginInjector.getSynapseAlertWidget();
teamSynAlert = ginInjector.getSynapseAlertWidget();
Expand Down Expand Up @@ -857,7 +860,7 @@ private void showView(Profile place) {
updateProfileView(place.getUserId());
} else {
if (Profile.EDIT_PROFILE_TOKEN.equals(token)) {
Window.Location.replace(OneSageUtils.getAccountSettingsURL());
Window.Location.replace(oneSageUtils.getAccountSettingsURL());
} else {
// if this is a number, then treat it as a a user id
try {
Expand Down Expand Up @@ -956,7 +959,7 @@ private void refreshData(ProfileArea tab) {
refreshTeams();
break;
case SETTINGS:
Window.Location.replace(OneSageUtils.getAccountSettingsURL());
Window.Location.replace(oneSageUtils.getAccountSettingsURL());
break;
case CHALLENGES:
refreshChallenges();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,16 @@ public class TwoFactorAuthPresenter
extends AbstractActivity
implements Presenter<TwoFactorAuthPlace> {

private final OneSageUtils oneSageUtils;

@Inject
public TwoFactorAuthPresenter() {}
public TwoFactorAuthPresenter(OneSageUtils oneSageUtils) {
this.oneSageUtils = oneSageUtils;
}

@Override
public void start(AcceptsOneWidget panel, EventBus eventBus) {
Window.Location.replace(OneSageUtils.getAccountSettingsURL());
Window.Location.replace(oneSageUtils.getAccountSettingsURL());
}

@Override
Expand Down
Loading

0 comments on commit da9a152

Please sign in to comment.