use of org.apache.geode.cache.operations.PutOperationContext in project geode by apache.
the class FilterPreAuthorization method authorizeOperation.
public boolean authorizeOperation(String regionName, OperationContext context) {
assert !context.isPostOperation();
OperationCode opCode = context.getOperationCode();
if (opCode.isPut()) {
PutOperationContext createContext = (PutOperationContext) context;
// byte[] serializedValue = createContext.getSerializedValue();
byte[] serializedValue = null;
Object value = createContext.getValue();
int valLength;
byte lastByte;
if (value == null) {
// This means serializedValue too is null.
valLength = 0;
lastByte = 0;
} else {
if (value instanceof byte[]) {
serializedValue = (byte[]) value;
valLength = serializedValue.length;
lastByte = serializedValue[valLength - 1];
} else {
ObjectWithAuthz authzObj = new ObjectWithAuthz(value, Integer.valueOf(value.hashCode()));
createContext.setValue(authzObj, true);
return true;
}
}
HeapDataOutputStream hos = new HeapDataOutputStream(valLength + 32, Version.CURRENT);
try {
InternalDataSerializer.writeUserDataSerializableHeader(ObjectWithAuthz.CLASSID, hos);
if (serializedValue != null) {
hos.write(serializedValue);
}
// Some value that determines the Principals that can get this object.
Integer allowedIndex = Integer.valueOf(lastByte);
DataSerializer.writeObject(allowedIndex, hos);
} catch (Exception ex) {
return false;
}
createContext.setSerializedValue(hos.toByteArray(), true);
if (this.logger.fineEnabled())
this.logger.fine("FilterPreAuthorization: added authorization " + "info for key: " + createContext.getKey());
} else if (opCode.isPutAll()) {
PutAllOperationContext createContext = (PutAllOperationContext) context;
Map map = createContext.getMap();
Collection entries = map.entrySet();
Iterator iterator = entries.iterator();
Map.Entry mapEntry = null;
while (iterator.hasNext()) {
mapEntry = (Map.Entry) iterator.next();
String currkey = (String) mapEntry.getKey();
Object value = mapEntry.getValue();
Integer authCode;
if (value != null) {
String valStr = value.toString();
authCode = (int) valStr.charAt(valStr.length() - 1);
} else {
authCode = 0;
}
ObjectWithAuthz authzObj = new ObjectWithAuthz(value, authCode);
mapEntry.setValue(authzObj);
if (this.logger.fineEnabled())
this.logger.fine("FilterPreAuthorization: putAll: added authorization " + "info for key: " + currkey);
}
// Now each of the map's values have become ObjectWithAuthz
}
return true;
}
Aggregations