mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-17 11:19:15 +00:00
fixed multiple points interacting with the userstore directly, that
might cause issues with replication
This commit is contained in:
+2
-5
@@ -19,7 +19,6 @@ import com.sap.sse.gwt.dispatch.shared.exceptions.DispatchException;
|
||||
import com.sap.sse.gwt.dispatch.shared.exceptions.ServerDispatchException;
|
||||
import com.sap.sse.security.SecurityService;
|
||||
import com.sap.sse.security.User;
|
||||
import com.sap.sse.security.UserStore;
|
||||
|
||||
@GwtIncompatible
|
||||
public class SailingDispatchContextImpl implements SailingDispatchContext {
|
||||
@@ -30,20 +29,18 @@ public class SailingDispatchContextImpl implements SailingDispatchContext {
|
||||
private String clientLocaleName;
|
||||
private final HttpServletRequest request;
|
||||
private final SecurityService securityService;
|
||||
private final UserStore userStore;
|
||||
private final TrackedRaceStatisticsCache trackedRaceStatisticsCache;
|
||||
private final WindFinderTrackerFactory windFinderTrackerFactory;
|
||||
|
||||
public SailingDispatchContextImpl(Date currentClientTime, RacingEventService racingEventService,
|
||||
WindFinderTrackerFactory windFinderTrackerFactory, EventNewsService eventNewsService,
|
||||
SecurityService securityService, UserStore userStore, TrackedRaceStatisticsCache trackedRaceStatisticsCache,
|
||||
SecurityService securityService, TrackedRaceStatisticsCache trackedRaceStatisticsCache,
|
||||
String clientLocaleName, HttpServletRequest request) {
|
||||
this.currentClientTime = currentClientTime;
|
||||
this.racingEventService = racingEventService;
|
||||
this.windFinderTrackerFactory = windFinderTrackerFactory;
|
||||
this.eventNewsService = eventNewsService;
|
||||
this.securityService = securityService;
|
||||
this.userStore = userStore;
|
||||
this.trackedRaceStatisticsCache = trackedRaceStatisticsCache;
|
||||
this.clientLocaleName = clientLocaleName;
|
||||
this.request = request;
|
||||
@@ -96,7 +93,7 @@ public class SailingDispatchContextImpl implements SailingDispatchContext {
|
||||
public <T> T getPreferenceForCurrentUser(String preferenceKey) {
|
||||
User currentUser = securityService.getCurrentUser();
|
||||
if (currentUser != null) {
|
||||
return userStore.getPreferenceObject(currentUser.getName(), preferenceKey);
|
||||
return securityService.getPreferenceObject(currentUser.getName(), preferenceKey);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
+1
-4
@@ -24,7 +24,6 @@ import com.sap.sse.gwt.dispatch.servlets.AbstractDispatchServlet;
|
||||
import com.sap.sse.gwt.dispatch.shared.commands.Action;
|
||||
import com.sap.sse.gwt.dispatch.shared.commands.Result;
|
||||
import com.sap.sse.security.SecurityService;
|
||||
import com.sap.sse.security.UserStore;
|
||||
import com.sap.sse.util.ServiceTrackerFactory;
|
||||
|
||||
public class SailingDispatchServlet extends AbstractDispatchServlet<SailingDispatchContext> {
|
||||
@@ -34,7 +33,6 @@ public class SailingDispatchServlet extends AbstractDispatchServlet<SailingDispa
|
||||
private final ServiceTracker<WindFinderTrackerFactory, WindFinderTrackerFactory> windFinderTrackerFactory;
|
||||
private final ServiceTracker<EventNewsService, EventNewsService> eventNewsServiceTracker;
|
||||
private final ServiceTracker<SecurityService, SecurityService> securityServiceTracker;
|
||||
private final ServiceTracker<UserStore, UserStore> userStoreTracker;
|
||||
private final ServiceTracker<TrackedRaceStatisticsCache, TrackedRaceStatisticsCache> trackedRaceStatisticsCacheTracker;
|
||||
|
||||
public SailingDispatchServlet() {
|
||||
@@ -43,7 +41,6 @@ public class SailingDispatchServlet extends AbstractDispatchServlet<SailingDispa
|
||||
windFinderTrackerFactory = ServiceTrackerFactory.createAndOpen(context, WindFinderTrackerFactory.class);
|
||||
eventNewsServiceTracker = ServiceTrackerFactory.createAndOpen(context, EventNewsService.class);
|
||||
securityServiceTracker = ServiceTrackerFactory.createAndOpen(context, SecurityService.class);
|
||||
userStoreTracker = ServiceTrackerFactory.createAndOpen(context, UserStore.class);
|
||||
trackedRaceStatisticsCacheTracker = ServiceTrackerFactory.createAndOpen(context, TrackedRaceStatisticsCache.class);
|
||||
}
|
||||
|
||||
@@ -53,7 +50,7 @@ public class SailingDispatchServlet extends AbstractDispatchServlet<SailingDispa
|
||||
return new SailingDispatchContextImpl(request.getCurrentClientTime(), racingEventServiceTracker.getService(),
|
||||
windFinderTrackerFactory.getService(),
|
||||
eventNewsServiceTracker.getService(), securityServiceTracker.getService(),
|
||||
userStoreTracker.getService(), trackedRaceStatisticsCacheTracker.getService(),
|
||||
trackedRaceStatisticsCacheTracker.getService(),
|
||||
request.getClientLocaleName(), getThreadLocalRequest());
|
||||
}
|
||||
|
||||
|
||||
+1
-5
@@ -54,7 +54,6 @@ import com.sap.sse.datamining.shared.impl.dto.ReducedDimensionsDTO;
|
||||
import com.sap.sse.datamining.ui.client.DataMiningService;
|
||||
import com.sap.sse.i18n.ResourceBundleStringMessages;
|
||||
import com.sap.sse.security.SecurityService;
|
||||
import com.sap.sse.security.UserStore;
|
||||
import com.sap.sse.util.ServiceTrackerFactory;
|
||||
|
||||
public class DataMiningServiceImpl extends RemoteServiceServlet implements DataMiningService {
|
||||
@@ -64,7 +63,6 @@ public class DataMiningServiceImpl extends RemoteServiceServlet implements DataM
|
||||
|
||||
private final ServiceTracker<DataMiningServer, DataMiningServer> dataMiningServerTracker;
|
||||
private final ServiceTracker<SecurityService, SecurityService> securityServiceTracker;
|
||||
private final ServiceTracker<UserStore, UserStore> userStoreServiceTracker;
|
||||
|
||||
private final StoredDataMiningQueryPersister storedDataMiningQueryPersistor;
|
||||
|
||||
@@ -74,10 +72,8 @@ public class DataMiningServiceImpl extends RemoteServiceServlet implements DataM
|
||||
context = Activator.getDefault();
|
||||
dataMiningServerTracker = createAndOpenDataMiningServerTracker(context);
|
||||
securityServiceTracker = ServiceTrackerFactory.createAndOpen(context, SecurityService.class);
|
||||
userStoreServiceTracker = ServiceTrackerFactory.createAndOpen(context, UserStore.class);
|
||||
|
||||
storedDataMiningQueryPersistor = new StoredDataMiningQueryPersisterImpl(securityServiceTracker.getService(),
|
||||
userStoreServiceTracker.getService());
|
||||
storedDataMiningQueryPersistor = new StoredDataMiningQueryPersisterImpl(securityServiceTracker.getService());
|
||||
dtoFactory = new DataMiningDTOFactory();
|
||||
}
|
||||
|
||||
|
||||
+3
-8
@@ -18,18 +18,14 @@ import com.sap.sse.datamining.shared.impl.dto.StoredDataMiningQueryDTOImpl;
|
||||
import com.sap.sse.gwt.dispatch.shared.exceptions.ServerDispatchException;
|
||||
import com.sap.sse.security.SecurityService;
|
||||
import com.sap.sse.security.User;
|
||||
import com.sap.sse.security.UserStore;
|
||||
|
||||
/** Implementation of {@link StoredDataMiningQueryPersister}. */
|
||||
public class StoredDataMiningQueryPersisterImpl implements StoredDataMiningQueryPersister {
|
||||
|
||||
private final SecurityService securityService;
|
||||
private final UserStore userStore;
|
||||
|
||||
public StoredDataMiningQueryPersisterImpl(SecurityService securityService, UserStore userStore) {
|
||||
public StoredDataMiningQueryPersisterImpl(SecurityService securityService) {
|
||||
this.securityService = securityService;
|
||||
this.userStore = userStore;
|
||||
|
||||
}
|
||||
|
||||
/** @return all {@link StoredDataMiningQueryDTO}s the user has stored in his user store. */
|
||||
@@ -101,7 +97,7 @@ public class StoredDataMiningQueryPersisterImpl implements StoredDataMiningQuery
|
||||
User currentUser = securityService.getCurrentUser();
|
||||
if (currentUser != null) {
|
||||
try {
|
||||
userStore.setPreferenceObject(currentUser.getName(), preferenceKey, preference);
|
||||
securityService.setPreferenceObject(currentUser.getName(), preferenceKey, preference);
|
||||
} catch (AuthorizationException e) {
|
||||
throw new ServerDispatchException(e);
|
||||
}
|
||||
@@ -124,9 +120,8 @@ public class StoredDataMiningQueryPersisterImpl implements StoredDataMiningQuery
|
||||
private <T> T getPreferenceForCurrentUser(String preferenceKey) {
|
||||
User currentUser = securityService.getCurrentUser();
|
||||
if (currentUser != null) {
|
||||
return userStore.getPreferenceObject(currentUser.getName(), preferenceKey);
|
||||
return securityService.getPreferenceObject(currentUser.getName(), preferenceKey);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+7
-7
@@ -15,7 +15,7 @@ import org.json.simple.parser.ParseException;
|
||||
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
|
||||
import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource;
|
||||
import com.sap.sse.security.UserStore;
|
||||
import com.sap.sse.security.SecurityService;
|
||||
|
||||
@Path("/v1/preferences")
|
||||
public class PreferencesResource extends AbstractSailingServerResource {
|
||||
@@ -27,8 +27,8 @@ public class PreferencesResource extends AbstractSailingServerResource {
|
||||
Response response = null;
|
||||
if (SecurityUtils.getSubject().isAuthenticated()) {
|
||||
String username = SecurityUtils.getSubject().getPrincipal().toString();
|
||||
UserStore userStore = getService(UserStore.class);
|
||||
String settings = userStore.getPreference(username, settingsKey);
|
||||
SecurityService securityService = getService(SecurityService.class);
|
||||
String settings = securityService.getPreference(username, settingsKey);
|
||||
if (settings == null) {
|
||||
response = Response.noContent().build();
|
||||
} else {
|
||||
@@ -48,8 +48,8 @@ public class PreferencesResource extends AbstractSailingServerResource {
|
||||
Response response = null;
|
||||
if (SecurityUtils.getSubject().isAuthenticated()) {
|
||||
String username = SecurityUtils.getSubject().getPrincipal().toString();
|
||||
UserStore userStore = getService(UserStore.class);
|
||||
userStore.setPreference(username, settingsKey, json);
|
||||
SecurityService securityService = getService(SecurityService.class);
|
||||
securityService.setPreference(username, settingsKey, json);
|
||||
response = Response.ok().build();
|
||||
} else {
|
||||
response = Response.status(401).build();
|
||||
@@ -65,8 +65,8 @@ public class PreferencesResource extends AbstractSailingServerResource {
|
||||
Response response = null;
|
||||
if (SecurityUtils.getSubject().isAuthenticated()) {
|
||||
String username = SecurityUtils.getSubject().getPrincipal().toString();
|
||||
UserStore userStore = getService(UserStore.class);
|
||||
userStore.unsetPreference(username, settingsKey);
|
||||
SecurityService securityService = getService(SecurityService.class);
|
||||
securityService.unsetPreference(username, settingsKey);
|
||||
response = Response.ok().build();
|
||||
} else {
|
||||
response = Response.status(401).build();
|
||||
|
||||
@@ -158,6 +158,12 @@ public interface SecurityService extends ReplicableWithObjectInputStream<Replica
|
||||
*/
|
||||
String getPreference(String username, String key);
|
||||
|
||||
/**
|
||||
* Gets a preference object. Always returns null if there is no converter associated with the given key -> see
|
||||
* {@link #registerPreferenceConverter(String, PreferenceConverter)}.
|
||||
*/
|
||||
<T> T getPreferenceObject(String username, String key);
|
||||
|
||||
/**
|
||||
* @return all preferences of the given user
|
||||
*/
|
||||
@@ -195,5 +201,4 @@ public interface SecurityService extends ReplicableWithObjectInputStream<Replica
|
||||
void removeAccessToken(String username);
|
||||
|
||||
User loginByAccessToken(String accessToken);
|
||||
|
||||
}
|
||||
|
||||
@@ -1096,4 +1096,10 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat
|
||||
((ReplicatingCacheManager) cm).clear();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T getPreferenceObject(String username, String key) {
|
||||
ensureThatUserInQuestionIsLoggedInOrCurrentUserIsAdmin(username);
|
||||
return store.getPreferenceObject(username, key);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user