Commit 7860cc16 authored by chiaming2000's avatar chiaming2000
Browse files

Java simulator:

Enforce TLS requirement for PINAuth operations.  Simulator set response
status code to INVALID_REQUEST if TLS requirement is not met (and no
service is performed).
parent 456ee14f
Loading
Loading
Loading
Loading
+0 −20
Original line number Diff line number Diff line
@@ -88,9 +88,6 @@ public class MessageHandler implements ClientMessageService, Runnable {
	
	private boolean isStatusMessageReceived = false;

	// is this a TLS transport handler
	private boolean isSecuredChannel = false;

	/**
	 * Constructor.
	 *
@@ -110,23 +107,6 @@ public class MessageHandler implements ClientMessageService, Runnable {
				.getRequestTimeoutMillis();
	}
	
	/**
	 * Set to true if this is a secured channel.
	 * 
	 * @param flag
	 */
	public void setSecuredChannel (boolean flag) {
	    this.isSecuredChannel = flag;
	}
	
	/**
	 * Get if this is a secured channel handler.
	 * 
	 * @return true if this is a secured channel handler.
	 */
	public boolean getSecuredChannel () {
	    return this.isSecuredChannel;
	}

	/**
	 * process message from IoHandler.
+21 −2
Original line number Diff line number Diff line
@@ -17,8 +17,6 @@
 */
package com.seagate.kinetic.common.lib;

import java.security.Key;

import com.seagate.kinetic.proto.Kinetic.CommandOrBuilder;
import com.seagate.kinetic.proto.Kinetic.MessageOrBuilder;

@@ -45,6 +43,9 @@ public class KineticMessage {
	// command
	private CommandOrBuilder command = null;
	
	// set to true if traveling through TLS/SSL
	private volatile boolean isSecuredChannel = false;  

	/**
	 * Set protocol buffer message.
	 *
@@ -99,4 +100,22 @@ public class KineticMessage {
	    return this.command;
	}
	
	/**
	 * set if this message travels through SSL
	 * 
	 * @param flag true if TLS, otherwise set to false
	 */
	public void setIsSecureChannel(boolean flag) {
	    this.isSecuredChannel = flag;
	}
	
	/**
	 * Get if this message travels through SSL.
	 * 
	 * @return true if this message travels through SSL.
	 */
	public boolean getIsSecureChannel() {
	    return this.isSecuredChannel;
	}

}
+22 −2
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@ import com.seagate.kinetic.proto.Kinetic.Command.Setup;
import com.seagate.kinetic.proto.Kinetic.Command.Status.StatusCode;
import com.seagate.kinetic.proto.Kinetic.Message.AuthType;
import com.seagate.kinetic.proto.Kinetic.Message;
import com.seagate.kinetic.simulator.persist.Store;

/**
 * 
@@ -65,6 +64,15 @@ public abstract class PinOperationHandler {
        commandBuilder.getHeaderBuilder()
        .setAckSequence(request.getCommand().getHeader().getSequence());
        
        // check if met TLS requirement
        if (isSecureChannel (request, commandBuilder) == false) {
            
            /**
             * TLS requirement not met, return with INVALID_REQUEST. 
             */
            return;
        }
        
        // request pin
        ByteString requestPin = request.getMessage().getPinAuth().getPin();
        
@@ -166,4 +174,16 @@ public abstract class PinOperationHandler {
        
        return hasPermission;
    }
    
    private static boolean isSecureChannel (KineticMessage request, Command.Builder respCommandBuilder) {
        
        boolean hasPermission = request.getIsSecureChannel();
        
        if (hasPermission == false) {
            respCommandBuilder.getStatusBuilder().setCode(StatusCode.INVALID_REQUEST);
            respCommandBuilder.getStatusBuilder().setStatusMessage("TLS channel is required for Pin operation");
        }
        
        return hasPermission;
    }
}
+0 −1
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ import kinetic.simulator.SimulatorConfiguration;
import com.seagate.kinetic.common.lib.KineticMessage;
import com.seagate.kinetic.simulator.internal.ConnectionInfo;
import com.seagate.kinetic.simulator.internal.SimulatorEngine;
import com.seagate.kinetic.simulator.internal.StatefulMessage;

import io.netty.channel.ChannelHandlerContext;

+5 −1
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ import java.util.logging.Logger;
import com.seagate.kinetic.common.lib.KineticMessage;
import com.seagate.kinetic.simulator.internal.ConnectionInfo;
import com.seagate.kinetic.simulator.internal.SimulatorEngine;
import com.seagate.kinetic.simulator.internal.StatefulMessage;

import com.seagate.kinetic.simulator.io.provider.nio.NioConnectionStateManager;
import com.seagate.kinetic.simulator.io.provider.nio.NioQueuedRequestProcessRunner;
import com.seagate.kinetic.simulator.io.provider.nio.RequestProcessRunner;
@@ -77,6 +77,10 @@ public class SslMessageServiceHandler extends
    protected void channelRead0(ChannelHandlerContext ctx,
            KineticMessage request) throws Exception {

	    // set secure channel flag
	    request.setIsSecureChannel(true);
	    
	    // check if client set conn id
        NioConnectionStateManager.checkIfConnectionIdSet(ctx, request);

        if (enforceOrdering) {
Loading