/*
* Copyright 2017 Red Hat, Inc.
*
* 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.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.wildfly.iiop.openjdk.csiv2;
import org.jboss.iiop.csiv2.SASCurrent;
import org.omg.CORBA.LocalObject;
import org.omg.IOP.Codec;
import org.omg.IOP.ENCODING_CDR_ENCAPS;
import org.omg.IOP.Encoding;
import org.omg.PortableInterceptor.ORBInitInfo;
import org.omg.PortableInterceptor.ORBInitInfoPackage.InvalidName;
import org.omg.PortableInterceptor.ORBInitializer;
import org.wildfly.iiop.openjdk.logging.IIOPLogger;
/**
* This is an {@link ORBInitializer} that initializes the Security Attibute Service (SAS) by installing an Elytron-based
* client side interceptor and a SAS target interceptor that is used to populate the {@link SASCurrent} object.
*
* @author <a href="mailto:sguilhen@redhat.com">Stefan Guilhen</a>
*/
@SuppressWarnings("unused")
public class ElytronSASInitializer extends LocalObject implements ORBInitializer {
@Override
public void pre_init(ORBInitInfo info) {
try {
// create and register the SASCurrent.
SASCurrent sasCurrent = new SASCurrentImpl();
info.register_initial_reference("SASCurrent", sasCurrent);
// the SASCurrent still needs to be initialized. Its initialization is deferred to post_init, as it needs
// to call resolve_initial_references.
} catch (InvalidName e) {
throw IIOPLogger.ROOT_LOGGER.errorRegisteringSASCurrentInitRef(e);
}
}
@Override
public void post_init(ORBInitInfo info) {
try {
org.omg.CORBA.Object obj;
// Use CDR encapsulations with GIOP 1.0 encoding.
Encoding encoding = new Encoding(ENCODING_CDR_ENCAPS.value,
(byte) 1, /* GIOP version */
(byte) 0 /* GIOP revision*/);
Codec codec = info.codec_factory().create_codec(encoding);
// Create and register client interceptor.
obj = info.resolve_initial_references("SASCurrent");
SASCurrentImpl sasCurrentImpl = (SASCurrentImpl) obj;
ElytronSASClientInterceptor clientInterceptor = new ElytronSASClientInterceptor(codec);
info.add_client_request_interceptor(clientInterceptor);
// Create and register server interceptor.
SASTargetInterceptor serverInterceptor = new SASTargetInterceptor(codec);
info.add_server_request_interceptor(serverInterceptor);
// Initialize the SASCurrent implementation.
sasCurrentImpl.init(serverInterceptor);
} catch (Exception e) {
throw IIOPLogger.ROOT_LOGGER.unexpectedException(e);
}
}
}