bug 4813: building the identifier for permissions checks is now be done

by supporting a TypeRelativeObjectIdentifer object that has to be built
by domain objects
This commit is contained in:
Thomas Wiese
2018-12-17 15:49:44 +01:00
parent 73193acb02
commit a387055f95
96 changed files with 1105 additions and 855 deletions
@@ -6,8 +6,7 @@ Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: SAP
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Export-Package: com.sap.sailing.expeditionconnector,
com.sap.sailing.expeditionconnector.impl;x-friends:="com.sap.sailing.server.test,com.sap.sailing.expeditionconnector.persistence",
com.sap.sailing.expeditionconnector.security
com.sap.sailing.expeditionconnector.impl;x-friends:="com.sap.sailing.server.test,com.sap.sailing.expeditionconnector.persistence"
Require-Bundle: com.sap.sailing.domain,
com.sap.sailing.declination,
com.sap.sailing.udpconnector,
@@ -14,6 +14,7 @@ import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;
import org.osgi.util.tracker.ServiceTracker;
import com.sap.sailing.domain.common.security.SecuredDomainType;
import com.sap.sailing.domain.racelogtracking.DeviceIdentifierStringSerializationHandler;
import com.sap.sailing.domain.tracking.WindTrackerFactory;
import com.sap.sailing.expeditionconnector.ExpeditionDeviceConfiguration;
@@ -24,11 +25,11 @@ import com.sap.sailing.expeditionconnector.persistence.ExpeditionGpsDeviceIdenti
import com.sap.sailing.expeditionconnector.persistence.ExpeditionGpsDeviceIdentifierJsonHandler;
import com.sap.sailing.expeditionconnector.persistence.MongoObjectFactory;
import com.sap.sailing.expeditionconnector.persistence.PersistenceFactory;
import com.sap.sailing.expeditionconnector.security.ExpeditionSecuredDomainTypes;
import com.sap.sailing.server.gateway.serialization.racelog.tracking.DeviceIdentifierJsonHandler;
import com.sap.sse.common.TypeBasedServiceFinder;
import com.sap.sse.security.SecurityService;
import com.sap.sse.security.shared.QualifiedObjectIdentifier;
import com.sap.sse.security.shared.impl.WildcardPermissionEncoder;
import com.sap.sse.util.ServiceTrackerFactory;
import com.sap.sse.util.impl.ThreadFactoryWithPriority;
@@ -93,14 +94,15 @@ public class Activator implements BundleActivator {
.createAndOpen(context, SecurityService.class);
try {
final SecurityService securityService = securityServiceServiceTracker.waitForService(0);
final WildcardPermissionEncoder permissionEncoder = new WildcardPermissionEncoder();
for (ExpeditionDeviceConfiguration deviceConfiguration : expeditionTrackerFactory
.getDeviceConfigurations()) {
QualifiedObjectIdentifier identifier = ExpeditionSecuredDomainTypes.EXPEDITION_DEVICE_CONFIGURATION
.getQualifiedObjectIdentifier(deviceConfiguration);
securityService.migrateOwnership(identifier, identifier.getTypeRelativeObjectIdentifier());
QualifiedObjectIdentifier identifier = deviceConfiguration.getIdentifier();
securityService.migrateOwnership(identifier, permissionEncoder.decodePermissionPart(
deviceConfiguration.getTypeRelativeObjectIdentifier().toString()));
}
securityService
.assumeOwnershipMigrated(ExpeditionSecuredDomainTypes.EXPEDITION_DEVICE_CONFIGURATION.getName());
.assumeOwnershipMigrated(SecuredDomainType.EXPEDITION_DEVICE_CONFIGURATION.getName());
} catch (Exception e) {
logger.log(Level.SEVERE, "Exception trying to migrate IgtimiAccounts implementation", e);
}
@@ -1,51 +0,0 @@
package com.sap.sailing.expeditionconnector.security;
import com.sap.sailing.domain.common.security.SecuredDomainType;
import com.sap.sailing.expeditionconnector.ExpeditionDeviceConfiguration;
import com.sap.sse.ServerInfo;
import com.sap.sse.security.shared.HasPermissions;
import com.sap.sse.security.shared.IdentifierStrategy;
import com.sap.sse.security.shared.impl.WildcardPermissionEncoder;
public class ExpeditionSecuredDomainTypes extends SecuredDomainType {
private static final long serialVersionUID = 8407831418440433245L;
public ExpeditionSecuredDomainTypes(String logicalTypeName, IdentifierStrategy identiferStrategy,
Action... availableActions) {
super(logicalTypeName, identiferStrategy, availableActions);
}
public ExpeditionSecuredDomainTypes(String logicalTypeName, IdentifierStrategy identiferStrategy) {
super(logicalTypeName, identiferStrategy);
}
/**
* Describes access permissions to {@code ExpeditionDeviceConfiguration} objects. Type-relative object identifier is
* the WildcardPermissionEncoder.encode(getServerInfo().getServerName(), deviceConfiguration.getName());
*/
public static final HasPermissions EXPEDITION_DEVICE_CONFIGURATION = new SecuredDomainType(
"EXPEDITION_DEVICE_CONFIGURATION", SwissTimingsIdentifierStrategy.EXPEDITION_DEVICE_CONFIGURATION);
private interface SwissTimingsIdentifierStrategy {
static IdentifierStrategy EXPEDITION_DEVICE_CONFIGURATION = new IdentifierStrategy() {
@Override
public String getIdentifierAsString(Object... object) {
assert object.length == 1;
ExpeditionDeviceConfiguration expeditionDeviceConfiguration = (ExpeditionDeviceConfiguration) object[0];
return WildcardPermissionEncoder.encode(ServerInfo.getName(), expeditionDeviceConfiguration.getName());
}
@Override
public String convertNewIdentifer(Object... object) {
// TODO: check again, what type can be used, for now assuming String for the
// expeditionDeviceConfiguration.getName()
assert object.length == 1;
String identifier = (String) object[0];
return WildcardPermissionEncoder.encode(ServerInfo.getName(), identifier);
}
};
}
}