Skip to content

Commit

Permalink
Merge pull request #135 from Netflix/ishandshake-exceptions
Browse files Browse the repository at this point in the history
Catch MslException from MessageInputStream.isHandshake()
  • Loading branch information
wmiaw authored Sep 22, 2016
2 parents 278deb7 + 3eef822 commit eda907f
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 7 deletions.
22 changes: 22 additions & 0 deletions core/src/main/java/com/netflix/msl/msg/MslControl.java
Original file line number Diff line number Diff line change
Expand Up @@ -2256,6 +2256,28 @@ public MessageInputStream call() throws MslException, MslErrorResponseException,
try {
if (!request.isHandshake())
return request;
} catch (final MslException e) {
// If we were cancelled then return null.
if (cancelled(e)) return null;

// Try to send an error response.
try {
final MasterToken masterToken = e.getMasterToken();
final EntityAuthenticationData entityAuthData = e.getEntityAuthenticationData();
final String recipient = (masterToken != null) ? masterToken.getIdentity() : ((entityAuthData != null) ? entityAuthData.getIdentity() : null);
final MslError error = e.getError();
final String userMessage = messageRegistry.getUserMessage(error, null);
final ErrorHeader errorHeader = MessageBuilder.createErrorResponse(ctx, recipient, e.getMessageId(), error, userMessage);
if (debugCtx != null) debugCtx.sentHeader(errorHeader);
final MessageOutputStream response = streamFactory.createOutputStream(ctx, out, MslConstants.DEFAULT_CHARSET, errorHeader);
response.close();
} catch (final Throwable rt) {
// If we were cancelled then return null.
if (cancelled(rt)) return null;

throw new MslErrorResponseException("Error peeking into the message payloads.", rt, e);
}
throw e;
} catch (final Throwable t) {
// If we were cancelled then return null.
if (cancelled(t)) return null;
Expand Down
24 changes: 18 additions & 6 deletions core/src/main/javascript/msg/MslControl.js
Original file line number Diff line number Diff line change
Expand Up @@ -2918,12 +2918,24 @@ var MslControl$MslChannel;
// If we were cancelled then return null.
if (cancelled(e)) return null;

// We couldn't read, but maybe we can write an error response.
var recipient = request.getIdentity();
var requestMessageId = requestHeader.messageId;
var mslError = MslError.INTERNAL_EXCEPTION;
var toThrow = new MslInternalException("Error peeking into the message payloads.");
sendError(this, this._ctrl, this._ctx, this._msgCtx.getDebugContext(), recipient, requestMessageId, mslError, null, this._output, this._timeout, {
// Try to send an error response.
var recipient, requestMessageId, mslError, userMessage, toThrow;
if (e instanceof MslException) {
var masterToken = e.masterToken;
var entityAuthData = e.entityAuthenticationData;
recipient = (masterToken) ? masterToken.identity : ((entityAuthData) ? entityAuthData.getIdentity() : null);
requestMessageId = e.messageId;
mslError = e.error;
userMessage = this._ctrl.messageRegistry.getUserMessage(mslError, null);
toThrow = e;
} else {
recipient = request.getIdentity();
requestMessageId = requestHeader.messageId;
mslError = MslError.INTERNAL_EXCEPTION;
userMessage = null;
toThrow = new MslInternalException("Error peeking into the message payloads.", e);
}
sendError(this, this._ctrl, this._ctx, this._msgCtx.getDebugContext(), recipient, requestMessageId, mslError, userMessage, this._output, this._timeout, {
result: function(success) { callback.error(toThrow); },
timeout: function() { callback.timeout(); },
error: function(re) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
<script type="text/javascript" src="../../../../../../core/src/main/javascript/crypto/WebCryptoAdapter.js"></script>
<script type="text/javascript" src="../../../../../../core/src/main/javascript/crypto/WebCryptoAlgorithm.js"></script>
<script type="text/javascript" src="../../../../../../core/src/main/javascript/crypto/WebCryptoUsage.js"></script>
<script type="text/javascript" src="../../../../../../core/src/main/javascript/crypto/KeyFormat.js"></script>
<script type="text/javascript" src="../../../../../../core/src/main/javascript/crypto/CipherKey.js"></script>
<script type="text/javascript" src="../../../../../../core/src/main/javascript/crypto/PublicKey.js"></script>
<script type="text/javascript" src="../../../../../../core/src/main/javascript/crypto/PrivateKey.js"></script>
Expand Down
2 changes: 1 addition & 1 deletion examples/simple/src/main/javascript/client/SimpleClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ var SimpleClient$create;
var self = this;

// Import the server RSA public key.
PublicKey$import(SimpleConstants.RSA_PUBKEY_B64, WebCryptoAlgorithm.RSASSA_SHA256, WebCryptoUsage.VERIFY, {
PublicKey$import(SimpleConstants.RSA_PUBKEY_B64, WebCryptoAlgorithm.RSASSA_SHA256, WebCryptoUsage.VERIFY, KeyFormat.SPKI, {
result: function(publicKey) {
AsyncExecutor(callback, function() {
// Create the key manager.
Expand Down

0 comments on commit eda907f

Please sign in to comment.