/* * Copyright 2017 LinkedIn Corp. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ package com.github.ambry.rest; import java.security.Principal; import java.security.cert.Certificate; import javax.net.ssl.SSLPeerUnverifiedException; import javax.net.ssl.SSLSession; import javax.net.ssl.SSLSessionContext; /** * A mock of {@link SSLSession} that either delegates to a passed in {@link SSLSession}, or returns the provided * objects. */ class MockSSLSession implements SSLSession { private SSLSession delegateSession; private Certificate peerCertToReturn; /** * @param delegateSession An {@link SSLSession} to delegate to in most cases. * @param peerCertToReturn If not {@code null}, return this certificate in {@link #getPeerCertificates()} instead of * delegating. */ MockSSLSession(SSLSession delegateSession, Certificate peerCertToReturn) { this.delegateSession = delegateSession; this.peerCertToReturn = peerCertToReturn; } @Override public byte[] getId() { return delegateSession.getId(); } @Override public SSLSessionContext getSessionContext() { return delegateSession.getSessionContext(); } @Override public long getCreationTime() { return delegateSession.getCreationTime(); } @Override public long getLastAccessedTime() { return delegateSession.getLastAccessedTime(); } @Override public void invalidate() { delegateSession.invalidate(); } @Override public boolean isValid() { return delegateSession.isValid(); } @Override public void putValue(String s, Object o) { delegateSession.putValue(s, o); } @Override public Object getValue(String s) { return delegateSession.getValue(s); } @Override public void removeValue(String s) { delegateSession.removeValue(s); } @Override public String[] getValueNames() { return delegateSession.getValueNames(); } @Override public Certificate[] getPeerCertificates() throws SSLPeerUnverifiedException { if (peerCertToReturn != null) { return new Certificate[]{peerCertToReturn}; } return delegateSession.getPeerCertificates(); } @Override public Certificate[] getLocalCertificates() { return delegateSession.getLocalCertificates(); } @Override public javax.security.cert.X509Certificate[] getPeerCertificateChain() throws SSLPeerUnverifiedException { return delegateSession.getPeerCertificateChain(); } @Override public Principal getPeerPrincipal() throws SSLPeerUnverifiedException { return delegateSession.getPeerPrincipal(); } @Override public Principal getLocalPrincipal() { return delegateSession.getLocalPrincipal(); } @Override public String getCipherSuite() { return delegateSession.getCipherSuite(); } @Override public String getProtocol() { return delegateSession.getProtocol(); } @Override public String getPeerHost() { return delegateSession.getPeerHost(); } @Override public int getPeerPort() { return delegateSession.getPeerPort(); } @Override public int getPacketBufferSize() { return delegateSession.getPacketBufferSize(); } @Override public int getApplicationBufferSize() { return delegateSession.getApplicationBufferSize(); } }