Skip to content

Commit

Permalink
Merge pull request #5554 from nickgros/SWC-7124
Browse files Browse the repository at this point in the history
  • Loading branch information
nickgros authored Oct 22, 2024
2 parents a1f36e7 + 8ef9af1 commit add6b6c
Show file tree
Hide file tree
Showing 17 changed files with 113 additions and 92 deletions.
2 changes: 1 addition & 1 deletion e2e/helpers/testUser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ export async function loginTestUser(
await acceptSiteCookies(page)

// Login
await page.getByRole('link', { name: 'Log in to Synapse' }).first().click()
await page.getByRole('button', { name: 'Login' }).first().click()
await page.getByRole('button', { name: 'Sign in with your email' }).click()

const usernameInput = page.getByLabel('Username or Email Address')
Expand Down
16 changes: 7 additions & 9 deletions e2e/homepage.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,25 @@ test.describe('Homepage - Unauthenticated', () => {
await page.goto('/')
await waitForInitialPageLoad(page)

await expect(page.getByRole('button', { name: 'Login' })).toHaveCount(1)
await expect(
page.getByRole('link', { name: 'Log in to Synapse' }),
).toHaveCount(1)
await expect(
page.getByRole('link', { name: 'View Your Dashboard' }),
page.getByRole('button', { name: 'View Dashboard' }),
).toHaveCount(0)
})
})

testAuth.describe('Homepage - Authenticated', () => {
testAuth(
'should show View Your Dashboard button when logged in',
'should show View Dashboard button when logged in',
async ({ userPage }) => {
await userPage.goto('/Home:x')
await waitForInitialPageLoad(userPage)

await expect(userPage.getByRole('button', { name: 'Login' })).toHaveCount(
0,
)
await expect(
userPage.getByRole('link', { name: 'Log in to Synapse' }),
).toHaveCount(0)
await expect(
userPage.getByRole('link', { name: 'View Your Dashboard' }),
userPage.getByRole('button', { name: 'View Dashboard' }),
).toHaveCount(1)
},
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,5 +78,4 @@ public interface GWTWrapper {
boolean isValidJSONArray(String json);

JSONValue parseJSONStrict(String json);
String getOneSageURL();
}
32 changes: 0 additions & 32 deletions src/main/java/org/sagebionetworks/web/client/GWTWrapperImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -243,36 +241,6 @@ public String getFriendlySize(double size, boolean abbreviatedUnits) {
return DisplayUtils.getFriendlySize(size, abbreviatedUnits);
}

private static Map<String, String> 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
62 changes: 62 additions & 0 deletions src/main/java/org/sagebionetworks/web/client/OneSageUtils.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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")
);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<PasswordReset> {

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() {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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 {
Expand All @@ -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();
});
}
Expand Down
Loading

0 comments on commit add6b6c

Please sign in to comment.