bug6275:tocken intr

This commit is contained in:
Masha Kashirina
2026-07-31 03:07:50 +02:00
parent 45360f4426
commit 286d4d1a95
9 changed files with 45 additions and 11 deletions
@@ -254,6 +254,7 @@ public abstract class EventDialog extends DataEntryDialogWithDateTimeBox<EventDT
leaderboardGroupTab.ensureDebugId("LeaderboardGroupsTab");
tabPanel.add(leaderboardGroupTab, stringMessages.leaderboardGroups());
final VerticalPanel courseAreasPanel = new VerticalPanel();
courseAreasPanel.setSpacing(5);
final ListBox copyFromEventDropDown = createListBox(false);
copyFromEventDropDown.addItem(stringMessages.pleaseSelect());
final List<EventDTO> sortedExistingEvents = new ArrayList<>(existingEvents);
@@ -285,6 +286,8 @@ public abstract class EventDialog extends DataEntryDialogWithDateTimeBox<EventDT
final TextBox remoteBaseUrlBox = new TextBox();
remoteBaseUrlBox.setValue(SharedLandscapeConstants.DEFAULT_SAILING_SERVER_URL);
remoteBaseUrlBox.setVisibleLength(40);
final TextBox bearerTokenOrNullBox = new TextBox();
bearerTokenOrNullBox.setVisibleLength(30);
final ListBox remoteEventDropDown = createListBox(false);
remoteEventDropDown.setEnabled(false);
final BusyIndicator remoteLoadBusyIndicator = new SimpleBusyIndicator();
@@ -298,7 +301,8 @@ public abstract class EventDialog extends DataEntryDialogWithDateTimeBox<EventDT
remoteEventDropDown.setEnabled(false);
remoteEventsCache[0] = null;
remoteLoadBusyIndicator.setBusy(true);
sailingServiceWrite.getRemoteEvents(remoteBaseUrlBox.getValue(),
final String bearerTokenOrNull = bearerTokenOrNullBox.getValue().trim().isEmpty() ? null : bearerTokenOrNullBox.getValue().trim();
sailingServiceWrite.getRemoteEvents(remoteBaseUrlBox.getValue(), bearerTokenOrNull,
new AsyncCallback<List<EventDTO>>() {
@Override
public void onSuccess(final List<EventDTO> result) {
@@ -335,12 +339,22 @@ public abstract class EventDialog extends DataEntryDialogWithDateTimeBox<EventDT
}
}
});
final HorizontalPanel remotePanel = new HorizontalPanel();
final VerticalPanel remotePanel = new VerticalPanel();
remotePanel.setWidth("100%");
remotePanel.setSpacing(3);
remotePanel.add(new Label(stringMessages.copyCourseAreasFromRemoteServer()));
remotePanel.add(remoteBaseUrlBox);
remotePanel.add(loadRemoteEventsButton);
remotePanel.add(remoteLoadBusyIndicator);
final HorizontalPanel remoteUrlRow = new HorizontalPanel();
remoteUrlRow.setSpacing(3);
remoteUrlRow.add(new Label(stringMessages.copyCourseAreasFromRemoteServer()));
remoteUrlRow.add(remoteBaseUrlBox);
remoteUrlRow.add(loadRemoteEventsButton);
remoteUrlRow.add(remoteLoadBusyIndicator);
final HorizontalPanel remoteBearerRow = new HorizontalPanel();
remoteBearerRow.setSpacing(3);
remoteBearerRow.add(new Label(stringMessages.bearerTokenOrNullForRemoteEvents()));
remoteBearerRow.add(bearerTokenOrNullBox);
remoteEventDropDown.setWidth("100%");
remotePanel.add(remoteUrlRow);
remotePanel.add(remoteBearerRow);
remotePanel.add(remoteEventDropDown);
courseAreasPanel.add(localPanel);
courseAreasPanel.add(remotePanel);
@@ -254,7 +254,7 @@ public interface SailingService extends RemoteService, RemoteReplicationService
List<RemoteSailingServerReferenceDTO> getRemoteSailingServerReferences() throws UnauthorizedException;
List<EventDTO> getRemoteEvents(String baseUrl) throws Exception;
List<EventDTO> getRemoteEvents(String baseUrl, String bearerTokenOrNull) throws Exception;
List<UrlDTO> getResultImportUrls(String resultProviderName) throws UnauthorizedException;
@@ -284,7 +284,7 @@ public interface SailingServiceAsync extends RemoteReplicationServiceAsync {
void getRemoteSailingServerReferences(AsyncCallback<List<RemoteSailingServerReferenceDTO>> callback);
void getRemoteEvents(String baseUrl, AsyncCallback<List<EventDTO>> callback);
void getRemoteEvents(String baseUrl, String bearerTokenOrNull, AsyncCallback<List<EventDTO>> callback);
void getResultImportUrls(String resultProviderName, AsyncCallback<List<UrlDTO>> callback);
@@ -1460,6 +1460,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String copyCourseAreasFromEvent();
String copyCourseAreasFromRemoteServer();
String loadRemoteEvents();
String bearerTokenOrNullForRemoteEvents();
String copyCompetitors();
String smartphoneTracking();
String titelOfChooseNameDialog();
@@ -1487,6 +1487,7 @@ copyCourse=Copy Course
copyCourseAreasFromEvent=Copy course areas from event
copyCourseAreasFromRemoteServer=Copy course areas from remote server
loadRemoteEvents=Load
bearerTokenOrNullForRemoteEvents=Bearer token for remote server (leave empty for current user)
copyCompetitors=Copy Competitors
smartphoneTracking=Smartphone Tracking
titelOfChooseNameDialog=Choose a name
@@ -1457,6 +1457,7 @@ copyCourse=Kurs kopieren
copyCourseAreasFromEvent=Regattabahnen von Veranstaltung kopieren
copyCourseAreasFromRemoteServer=Regattabahnen von externem Server kopieren
loadRemoteEvents=Laden
bearerTokenOrNullForRemoteEvents=Bearer-Token für externen Server (leer lassen für aktuellen Benutzer)
copyCompetitors=Teilnehmer kopieren
smartphoneTracking=Smartphone Tracking
titelOfChooseNameDialog= Wählen sie einen Namen
@@ -3570,9 +3570,9 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
}
@Override
public List<EventDTO> getRemoteEvents(final String baseUrl) throws Exception {
public List<EventDTO> getRemoteEvents(final String baseUrl, final String bearerTokenOrNull) throws Exception {
final List<EventDTO> result = new ArrayList<>();
for (final EventBase event : getService().getRemoteEvents(baseUrl)) {
for (final EventBase event : getService().getRemoteEvents(baseUrl, bearerTokenOrNull)) {
final EventDTO eventDTO = new EventDTO(event.getName());
copyEventBaseFieldsToDTO(event, eventDTO);
result.add(eventDTO);
@@ -774,6 +774,13 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
*/
Iterable<EventBase> getRemoteEvents(String baseUrl) throws Exception;
/**
* Like {@link #getRemoteEvents(String)}, but uses the provided {@code bearerTokenOrNull} instead of the current
* user's bearer token if non-null. Useful for cross-security-realm access, e.g. fetching events from a production
* server while running locally.
*/
Iterable<EventBase> getRemoteEvents(String baseUrl, String bearerTokenOrNull) throws Exception;
/**
* Searches the content of this server, not that of any remote servers referenced by any {@link RemoteSailingServerReference}s.
*/
@@ -1851,7 +1851,17 @@ Replicator {
if (factory == null) {
throw new IllegalStateException("SailingServerFactory not available");
}
final SailingServer sailingServer = factory.getSailingServer(new java.net.URL(baseUrl));
final SailingServer sailingServer = factory.getSailingServer(new URL(baseUrl));
return sailingServer.getEvents();
}
@Override
public Iterable<EventBase> getRemoteEvents(final String baseUrl, final String bearerTokenOrNull) throws Exception {
final SailingServerFactory factory = sailingServerFactoryTracker == null ? null : sailingServerFactoryTracker.getService();
if (factory == null) {
throw new IllegalStateException("SailingServerFactory not available");
}
final SailingServer sailingServer = factory.getSailingServer(new URL(baseUrl), bearerTokenOrNull);
return sailingServer.getEvents();
}