bug6059: fixed passing on Subject/credentials to IgtimiWindTracker thread

This commit is contained in:
Axel Uhl committed 2025-01-08 17:20:34 +01:00
1 parent af6925f5ab
commit 11af72020b
4 files changed
+28 -9

No files matched your search

@@ -273,7 +273,7 @@ public class RiotServerImpl extends AbstractReplicableWithObjectInputStream<Repl
createDevice(deviceSerialNumber);
} else {
final byte[] messageAsBytes = message.toByteArray();
final SecurityService securityService = Activator.getInstance().getSecurityService();
final SecurityService securityService = getSecurityService();
final TimeRange messageDataTimeRange = getTimeRange(message);
final Iterable<DataAccessWindow> daws = getDataAccessWindows(Collections.singleton(deviceSerialNumber), messageDataTimeRange);
for (final RiotWebsocketHandler webSocketClient : liveWebSocketConnections) {
@@ -300,6 +300,10 @@ public class RiotServerImpl extends AbstractReplicableWithObjectInputStream<Repl
}
}
private SecurityService getSecurityService() {
return Activator.getInstance().getSecurityService();
}
/**
* Returns a time range spanning the time point of the first and the last of the {@link DataPoint}s inside
*
@@ -507,7 +511,7 @@ public class RiotServerImpl extends AbstractReplicableWithObjectInputStream<Repl
private <T> T getFromPrimary(String deviceSerialNumber, Type[] types, MessageLoader<T> resultProvider) throws ParseException, IOException {
final int masterPort = getMasterDescriptor().getServletPort();
final String masterHostname = getMasterDescriptor().getHostname();
final SecurityService securityService = Activator.getInstance().getSecurityService();
final SecurityService securityService = getSecurityService();
final String currentUserBearerToken = securityService == null ? null : securityService.getAccessToken(securityService.getCurrentUser().getName());
try {
final URL baseUrl = new URL(masterPort==443?"https":"http", masterHostname, masterPort, "/");
@@ -10,6 +10,7 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import com.sap.sailing.declination.DeclinationService;
import com.sap.sailing.domain.igtimiadapter.IgtimiConnection;
@@ -39,8 +40,9 @@ public class IgtimiWindTracker extends AbstractWindTracker implements WindTracke
super(trackedRace);
this.windTrackerFactory = windTrackerFactory;
liveConnectionsAndDeviceSerialNumber = new HashMap<>();
new Thread("IgtimiWindTracker start-up thread for race " + trackedRace.getRace().getName()) {
public void run() {
final Subject currentSubject = SecurityUtils.getSubject();
new Thread(
currentSubject.associateWith(()->{
logger.info("Starting up Igtimi wind tracker for race "+trackedRace.getRace().getName());
// create the connection, preferring default credentials specified at bundle start-up over those we may
// extract here from the logged-on user or the tracked race's owner
@@ -63,8 +65,8 @@ public class IgtimiWindTracker extends AbstractWindTracker implements WindTracke
+ getTrackedRace().getRace().getName(), e);
}
}
}
}.start();
}), "IgtimiWindTracker start-up thread for race " + trackedRace.getRace().getName())
.start();
}
/**
@@ -84,7 +86,7 @@ public class IgtimiWindTracker extends AbstractWindTracker implements WindTracke
} else {
user = optionalSecurityService.getCurrentUser();
}
return optionalSecurityService.getAccessToken(user.getName());
return optionalSecurityService.getOrCreateAccessToken(user.getName());
}
public static TimePoint getReceivingEndTime(DynamicTrackedRace trackedRace) {
@@ -51,6 +51,19 @@ public class WindPanelPO extends PageArea {
}
public void importWindFromRouteconverter(String filename, int timeoutInSeconds) throws InterruptedException {
importWindFromRouteconverterFileUpload.sendKeys(filename);
importWindFromRouteconverterSubmitButton.click();
FluentWait<String> wait = createFluentWait("The following number of fixes were imported for the listed races:", timeoutInSeconds, DEFAULT_POLLING_INTERVAL);
wait.until(new Function<String, Object>() {
@Override
public Object apply(String message) {
try {
String statusText = importWindFromRouteconverterResultPanel.getText();
return statusText.contains(message);
} catch (TimeoutException exception) {
return Boolean.FALSE;
}
}
});
}
}
@@ -24,7 +24,7 @@
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console 12001 -clean"/>
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Dfile.encoding=cp1252 -Dexpedition.udp.port=5010 -Xmx6000m -XX:ThreadPriorityPolicy=2 -XX:+UseG1GC -Djetty.home=${project_loc:com.sap.sailing.server}/../target/configuration/jetty -Djava.util.logging.config.file=${project_loc:com.sap.sailing.server}/../target/configuration/logging_debug.properties -Dkiwo.results=${project_loc:com.sap.sailing.kiworesultimport.test}/resources -Dpersistentcompetitors.clear=false -Dpolardata.source.url=https://www.sapsailing.com -Dwindestimation.source.url=https://www.sapsailing.com -Drestore.tracked.races=true -Dorg.eclipse.jetty.server.Request.maxFormContentSize=50000000 -DAnniversaryRaceDeterminator.enabled=true -Djava.naming.factory.url.pkgs=org.eclipse.jetty.jndi -Djava.naming.factory.initial=org.eclipse.jetty.jndi.InitialContextFactory -Dorg.eclipse.jetty.annotations.maxWait=120 -Dchargebee.site=sailytics-test -Dmanage2sail.accesstoken=${MANAGE2SAIL_ACCESS_TOKEN} -Dchargebee.apikey=test_G8QP4NUM1f4MCeZeni1VFC04cdIGZSNyp -Dsubscriptions.disableMailVerificationRequirement=true -Dgoogle.maps.authenticationparams=${GOOGLE_MAPS_AUTHENTICATION_PARAMS} -Dgwt.rpc.version=9 -Dwindestimation.source.bearertoken=${WIND_ESTIMATION_MODEL_BEARER_TOKEN} -Dpolardata.source.bearertoken=${POLAR_DATA_BEARER_TOKEN} -Dcom.sap.sse.debranding=false -Digtimi.riot.port=6000"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Dfile.encoding=cp1252 -Dexpedition.udp.port=5010 -Xmx6000m -XX:ThreadPriorityPolicy=2 -XX:+UseG1GC -Djetty.home=${project_loc:com.sap.sailing.server}/../target/configuration/jetty -Djava.util.logging.config.file=${project_loc:com.sap.sailing.server}/../target/configuration/logging_debug.properties -Dkiwo.results=${project_loc:com.sap.sailing.kiworesultimport.test}/resources -Dpersistentcompetitors.clear=false -Dpolardata.source.url=https://www.sapsailing.com -Dwindestimation.source.url=https://www.sapsailing.com -Drestore.tracked.races=true -Dorg.eclipse.jetty.server.Request.maxFormContentSize=50000000 -DAnniversaryRaceDeterminator.enabled=true -Djava.naming.factory.url.pkgs=org.eclipse.jetty.jndi -Djava.naming.factory.initial=org.eclipse.jetty.jndi.InitialContextFactory -Dorg.eclipse.jetty.annotations.maxWait=120 -Dchargebee.site=sailytics-test -Dmanage2sail.accesstoken=${MANAGE2SAIL_ACCESS_TOKEN} -Dchargebee.apikey=test_G8QP4NUM1f4MCeZeni1VFC04cdIGZSNyp -Dsubscriptions.disableMailVerificationRequirement=true -Dgoogle.maps.authenticationparams=${GOOGLE_MAPS_AUTHENTICATION_PARAMS} -Dgwt.rpc.version=9 -Dwindestimation.source.bearertoken=${WIND_ESTIMATION_MODEL_BEARER_TOKEN} -Dpolardata.source.bearertoken=${POLAR_DATA_BEARER_TOKEN} -Dcom.sap.sse.debranding=false -Digtimi.riot.port=6000 -Digtimi.base.url=http://localhost:8888"/>
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc}"/>
<stringAttribute key="pde.version" value="3.3"/>
<stringAttribute key="profilingTraceType-ALLOCATION_TRACE" value="KEY_APPLICATION_FILTER%CTX_KEY%*%CTX_ENTRY%INCREASE_COUNT%CTX_KEY%8192%CTX_ENTRY%KEY_MIN_SIZE%CTX_KEY%32%CTX_ENTRY%KEY_MAX_SIZE%CTX_KEY%65536%CTX_ENTRY%KEY_INC_LINE_NRS%CTX_KEY%true%CTX_ENTRY%KEY_SESSION_FILTER%CTX_KEY%*%CTX_ENTRY%KEY_ENABLEMENT%CTX_KEY%false%CTX_ENTRY%CLASS_FILTER%CTX_KEY%*%CTX_ENTRY%KEY_USER_FILTER%CTX_KEY%*%CTX_ENTRY%KEY_REQUEST_FILTER%CTX_KEY%*%CTX_ENTRY%KEY_TENANT_FILTER%CTX_KEY%*%CTX_ENTRY%KEY_ADAPTIVE%CTX_KEY%false%CTX_ENTRY%"/>