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; }
private void setPermission(SegmentHandle handle, Permission permission) { AccessControlList acl = client.getObjectAcl(config.getBucket(), config.getRoot() + handle.getSegmentName()); acl.getGrants().clear(); acl.addGrants(new Grant(new CanonicalUser(config.getAccessKey(), config.getAccessKey()), permission)); client.setObjectAcl( new SetObjectAclRequest(config.getBucket(), config.getRoot() + handle.getSegmentName()).withAcl(acl)); }
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; }