@Override public int hashCode() { int result = grantee != null ? grantee.hashCode() : 0; result = 31 * result + (permission != null ? permission.hashCode() : 0); return result; } }
private Permission getS3Permission(String permission, boolean ignoreInvalid) { Permission s3Perm = null; try { s3Perm = Permission.valueOf(permission); } catch (IllegalArgumentException e) { if (ignoreInvalid) log.warn("{} is not a valid S3 permission", permission); else throw new RuntimeException(permission + " is not a valid S3 permission"); } return s3Perm; }
@Override public int compareTo(Grant o) { int result = grantee.compareTo(o.getGrantee()); if (result == 0) result = permission.compareTo(o.getPermission()); return result; }
public Map<String, List<Object>> toHeaders() { Map<String, List<Object>> headers = new HashMap<String, List<Object>>(); for (Grant grant : grants) { RestUtil.add(headers, grant.getPermission().getHeaderName(), grant.getGrantee().getHeaderValue()); } return headers; } }
private ObjectAcl syncAclFromS3Acl(AccessControlList s3Acl) { ObjectAcl syncAcl = new ObjectAcl(); syncAcl.setOwner(s3Acl.getOwner().getId()); for (Grant grant : s3Acl.getGrants()) { AbstractGrantee grantee = grant.getGrantee(); if (grantee instanceof Group) syncAcl.addGroupGrant(((Group) grantee).getUri(), grant.getPermission().toString()); else if (grantee instanceof CanonicalUser) syncAcl.addUserGrant(((CanonicalUser) grantee).getId(), grant.getPermission().toString()); } return syncAcl; }
private StreamSegmentInformation doGetStreamSegmentInfo(String streamSegmentName) { long traceId = LoggerHelpers.traceEnter(log, "getStreamSegmentInfo", streamSegmentName); S3ObjectMetadata result = client.getObjectMetadata(config.getBucket(), config.getRoot() + streamSegmentName); AccessControlList acls = client.getObjectAcl(config.getBucket(), config.getRoot() + streamSegmentName); boolean canWrite = acls.getGrants().stream().anyMatch(grant -> grant.getPermission().compareTo(Permission.WRITE) >= 0); StreamSegmentInformation information = StreamSegmentInformation.builder() .name(streamSegmentName) .length(result.getContentLength()) .sealed(!canWrite) .lastModified(new ImmutableDate(result.getLastModified().toInstant().toEpochMilli())) .build(); LoggerHelpers.traceLeave(log, "getStreamSegmentInfo", traceId, streamSegmentName); return information; }