use of io.pravega.common.auth.AuthenticationException in project pravega by pravega.
the class PravegaAuthManager method authenticate.
/**
* API to authenticate and authroize access to a given resource.
* @param resource The resource identifier for which the access needs to be controlled.
* @param paramMap Custom headers used for authentication.
* @param level Expected level of access.
* @return Returns true if the entity represented by the custom auth headers had given level of access to the resource.
* @throws AuthenticationException Exception faced during authentication/authorization.
*/
public boolean authenticate(String resource, Map<String, String> paramMap, AuthHandler.Permissions level) throws AuthenticationException {
boolean retVal = false;
try {
String method = paramMap.get("method");
AuthHandler handler = getHandler(method);
retVal = handler.authenticate(paramMap) && handler.authorize(resource, paramMap).ordinal() >= level.ordinal();
} catch (RuntimeException e) {
throw new AuthenticationException(e);
}
return retVal;
}
use of io.pravega.common.auth.AuthenticationException in project pravega by pravega.
the class SegmentHelper method sealSegment.
/**
* This method sends segment sealed message for the specified segment.
* It owns up the responsibility of retrying the operation on failures until success.
*
* @param scope stream scope
* @param stream stream name
* @param segmentNumber number of segment to be sealed
* @param hostControllerStore host controller store
* @param clientCF connection factory
* @param delegationToken the token to be presented to segmentstore.
* @return void
*/
public CompletableFuture<Boolean> sealSegment(final String scope, final String stream, final int segmentNumber, final HostControllerStore hostControllerStore, final ConnectionFactory clientCF, String delegationToken) {
final Controller.NodeUri uri = getSegmentUri(scope, stream, segmentNumber, hostControllerStore);
final CompletableFuture<Boolean> result = new CompletableFuture<>();
final WireCommandType type = WireCommandType.SEAL_SEGMENT;
final FailingReplyProcessor replyProcessor = new FailingReplyProcessor() {
@Override
public void connectionDropped() {
log.warn("sealSegment {}/{}/{} connectionDropped", scope, stream, segmentNumber);
result.completeExceptionally(new WireCommandFailedException(type, WireCommandFailedException.Reason.ConnectionDropped));
}
@Override
public void wrongHost(WireCommands.WrongHost wrongHost) {
log.warn("sealSegment {}/{}/{} wrongHost", scope, stream, segmentNumber);
result.completeExceptionally(new WireCommandFailedException(type, WireCommandFailedException.Reason.UnknownHost));
}
@Override
public void segmentSealed(WireCommands.SegmentSealed segmentSealed) {
log.info("sealSegment {}/{}/{} segmentSealed", scope, stream, segmentNumber);
result.complete(true);
}
@Override
public void segmentIsSealed(WireCommands.SegmentIsSealed segmentIsSealed) {
log.info("sealSegment {}/{}/{} SegmentIsSealed", scope, stream, segmentNumber);
result.complete(true);
}
@Override
public void processingFailure(Exception error) {
log.error("sealSegment {}/{}/{} failed", scope, stream, segmentNumber, error);
result.completeExceptionally(error);
}
@Override
public void authTokenCheckFailed(WireCommands.AuthTokenCheckFailed authTokenCheckFailed) {
result.completeExceptionally(new WireCommandFailedException(new AuthenticationException(authTokenCheckFailed.toString()), type, WireCommandFailedException.Reason.AuthFailed));
}
};
WireCommands.SealSegment request = new WireCommands.SealSegment(idGenerator.get(), Segment.getScopedName(scope, stream, segmentNumber), delegationToken);
sendRequestAsync(request, replyProcessor, result, clientCF, ModelHelper.encode(uri));
return result;
}
use of io.pravega.common.auth.AuthenticationException in project pravega by pravega.
the class SegmentHelper method deleteSegment.
public CompletableFuture<Boolean> deleteSegment(final String scope, final String stream, final int segmentNumber, final HostControllerStore hostControllerStore, final ConnectionFactory clientCF, String delegationToken) {
final CompletableFuture<Boolean> result = new CompletableFuture<>();
final Controller.NodeUri uri = getSegmentUri(scope, stream, segmentNumber, hostControllerStore);
final WireCommandType type = WireCommandType.DELETE_SEGMENT;
final FailingReplyProcessor replyProcessor = new FailingReplyProcessor() {
@Override
public void connectionDropped() {
log.warn("deleteSegment {}/{}/{} Connection dropped", scope, stream, segmentNumber);
result.completeExceptionally(new WireCommandFailedException(type, WireCommandFailedException.Reason.ConnectionDropped));
}
@Override
public void wrongHost(WireCommands.WrongHost wrongHost) {
log.warn("deleteSegment {}/{}/{} wrong host", scope, stream, segmentNumber);
result.completeExceptionally(new WireCommandFailedException(type, WireCommandFailedException.Reason.UnknownHost));
}
@Override
public void noSuchSegment(WireCommands.NoSuchSegment noSuchSegment) {
log.info("deleteSegment {}/{}/{} NoSuchSegment", scope, stream, segmentNumber);
result.complete(true);
}
@Override
public void segmentDeleted(WireCommands.SegmentDeleted segmentDeleted) {
log.info("deleteSegment {}/{}/{} SegmentDeleted", scope, stream, segmentNumber);
result.complete(true);
}
@Override
public void processingFailure(Exception error) {
log.error("deleteSegment {}/{}/{} failed", scope, stream, segmentNumber, error);
result.completeExceptionally(error);
}
@Override
public void authTokenCheckFailed(WireCommands.AuthTokenCheckFailed authTokenCheckFailed) {
result.completeExceptionally(new WireCommandFailedException(new AuthenticationException(authTokenCheckFailed.toString()), type, WireCommandFailedException.Reason.AuthFailed));
}
};
WireCommands.DeleteSegment request = new WireCommands.DeleteSegment(idGenerator.get(), Segment.getScopedName(scope, stream, segmentNumber), delegationToken);
sendRequestAsync(request, replyProcessor, result, clientCF, ModelHelper.encode(uri));
return result;
}
use of io.pravega.common.auth.AuthenticationException in project pravega by pravega.
the class SegmentHelper method getSegmentInfo.
public CompletableFuture<WireCommands.StreamSegmentInfo> getSegmentInfo(String scope, String stream, int segmentNumber, HostControllerStore hostControllerStore, ConnectionFactory clientCF, String delegationToken) {
final CompletableFuture<WireCommands.StreamSegmentInfo> result = new CompletableFuture<>();
final Controller.NodeUri uri = getSegmentUri(scope, stream, segmentNumber, hostControllerStore);
final WireCommandType type = WireCommandType.GET_STREAM_SEGMENT_INFO;
final FailingReplyProcessor replyProcessor = new FailingReplyProcessor() {
@Override
public void connectionDropped() {
log.warn("getSegmentInfo {}/{}/{} connectionDropped", scope, stream, segmentNumber);
result.completeExceptionally(new WireCommandFailedException(type, WireCommandFailedException.Reason.ConnectionDropped));
}
@Override
public void wrongHost(WireCommands.WrongHost wrongHost) {
log.warn("getSegmentInfo {}/{}/{} WrongHost", scope, stream, segmentNumber);
result.completeExceptionally(new WireCommandFailedException(type, WireCommandFailedException.Reason.UnknownHost));
}
@Override
public void streamSegmentInfo(WireCommands.StreamSegmentInfo streamInfo) {
log.info("getSegmentInfo {}/{}/{} got response", scope, stream, segmentNumber);
result.complete(streamInfo);
}
@Override
public void processingFailure(Exception error) {
log.error("getSegmentInfo {}/{}/{} failed", scope, stream, segmentNumber, error);
result.completeExceptionally(error);
}
@Override
public void authTokenCheckFailed(WireCommands.AuthTokenCheckFailed authTokenCheckFailed) {
result.completeExceptionally(new WireCommandFailedException(new AuthenticationException(authTokenCheckFailed.toString()), type, WireCommandFailedException.Reason.AuthFailed));
}
};
WireCommands.GetStreamSegmentInfo request = new WireCommands.GetStreamSegmentInfo(idGenerator.get(), Segment.getScopedName(scope, stream, segmentNumber), delegationToken);
sendRequestAsync(request, replyProcessor, result, clientCF, ModelHelper.encode(uri));
return result;
}
use of io.pravega.common.auth.AuthenticationException in project pravega by pravega.
the class SegmentHelper method truncateSegment.
public CompletableFuture<Boolean> truncateSegment(final String scope, final String stream, final int segmentNumber, final long offset, final HostControllerStore hostControllerStore, final ConnectionFactory clientCF, String delegationToken) {
final CompletableFuture<Boolean> result = new CompletableFuture<>();
final Controller.NodeUri uri = getSegmentUri(scope, stream, segmentNumber, hostControllerStore);
final WireCommandType type = WireCommandType.TRUNCATE_SEGMENT;
final FailingReplyProcessor replyProcessor = new FailingReplyProcessor() {
@Override
public void connectionDropped() {
log.warn("truncateSegment {}/{}/{} Connection dropped", scope, stream, segmentNumber);
result.completeExceptionally(new WireCommandFailedException(type, WireCommandFailedException.Reason.ConnectionDropped));
}
@Override
public void wrongHost(WireCommands.WrongHost wrongHost) {
log.warn("truncateSegment {}/{}/{} Wrong host", scope, stream, segmentNumber);
result.completeExceptionally(new WireCommandFailedException(type, WireCommandFailedException.Reason.UnknownHost));
}
@Override
public void segmentTruncated(WireCommands.SegmentTruncated segmentTruncated) {
log.info("truncateSegment {}/{}/{} SegmentTruncated", scope, stream, segmentNumber);
result.complete(true);
}
@Override
public void segmentIsTruncated(WireCommands.SegmentIsTruncated segmentIsTruncated) {
log.info("truncateSegment {}/{}/{} SegmentIsTruncated", scope, stream, segmentNumber);
result.complete(true);
}
@Override
public void processingFailure(Exception error) {
log.error("truncateSegment {}/{}/{} error", scope, stream, segmentNumber, error);
result.completeExceptionally(error);
}
@Override
public void authTokenCheckFailed(WireCommands.AuthTokenCheckFailed authTokenCheckFailed) {
result.completeExceptionally(new WireCommandFailedException(new AuthenticationException(authTokenCheckFailed.toString()), type, WireCommandFailedException.Reason.AuthFailed));
}
};
WireCommands.TruncateSegment request = new WireCommands.TruncateSegment(idGenerator.get(), Segment.getScopedName(scope, stream, segmentNumber), offset, delegationToken);
sendRequestAsync(request, replyProcessor, result, clientCF, ModelHelper.encode(uri));
return result;
}
Aggregations