public class org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator extends java.lang.Object
{
private static final org.slf4j.Logger LOG;
private static final java.lang.String[] mechanisms;
private final org.apache.activemq.broker.BrokerService brokerService;
private final org.apache.activemq.transport.amqp.AmqpTransport transport;
private final org.apache.qpid.proton.engine.Sasl sasl;
private org.apache.activemq.security.AuthenticationBroker authenticator;
public void <init>(org.apache.activemq.transport.amqp.AmqpTransport, org.apache.qpid.proton.engine.Sasl, org.apache.activemq.broker.BrokerService)
{
org.apache.activemq.broker.BrokerService v;
org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator v;
java.lang.String[] v;
org.apache.activemq.transport.amqp.AmqpTransport v;
org.apache.qpid.proton.engine.Sasl v;
v := @this: org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator;
v := @parameter: org.apache.activemq.transport.amqp.AmqpTransport;
v := @parameter: org.apache.qpid.proton.engine.Sasl;
v := @parameter: org.apache.activemq.broker.BrokerService;
specialinvoke v.<java.lang.Object: void <init>()>();
v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.activemq.broker.BrokerService brokerService> = v;
v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.activemq.transport.amqp.AmqpTransport transport> = v;
v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.qpid.proton.engine.Sasl sasl> = v;
v = <org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: java.lang.String[] mechanisms>;
interfaceinvoke v.<org.apache.qpid.proton.engine.Sasl: void setMechanisms(java.lang.String[])>(v);
interfaceinvoke v.<org.apache.qpid.proton.engine.Sasl: void server()>();
return;
}
public boolean isDone()
{
org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator v;
org.apache.qpid.proton.engine.Sasl$SaslOutcome v, v;
org.apache.qpid.proton.engine.Sasl v;
boolean v;
v := @this: org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator;
v = v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.qpid.proton.engine.Sasl sasl>;
v = interfaceinvoke v.<org.apache.qpid.proton.engine.Sasl: org.apache.qpid.proton.engine.Sasl$SaslOutcome getOutcome()>();
v = <org.apache.qpid.proton.engine.Sasl$SaslOutcome: org.apache.qpid.proton.engine.Sasl$SaslOutcome PN_SASL_NONE>;
if v == v goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
public java.lang.String[] getSupportedMechanisms()
{
java.lang.String[] v;
org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator v;
v := @this: org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator;
v = <org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: java.lang.String[] mechanisms>;
return v;
}
public void processSaslExchange(org.apache.activemq.command.ConnectionInfo)
{
org.apache.qpid.proton.engine.Sasl$SaslOutcome v, v, v, v;
java.lang.String[] v, v;
org.apache.activemq.command.ConnectionInfo v;
int v;
java.lang.String v, v, v, v, v, v;
org.apache.activemq.transport.amqp.AmqpTransport v;
boolean v, v;
org.slf4j.Logger v, v, v, v;
org.apache.qpid.proton.engine.Sasl v, v, v, v, v, v, v;
org.apache.activemq.transport.amqp.sasl.SaslMechanism v;
org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator v;
java.security.cert.X509Certificate[] v;
v := @this: org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator;
v := @parameter: org.apache.activemq.command.ConnectionInfo;
v = v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.qpid.proton.engine.Sasl sasl>;
v = interfaceinvoke v.<org.apache.qpid.proton.engine.Sasl: java.lang.String[] getRemoteMechanisms()>();
v = lengthof v;
if v <= 0 goto label;
v = v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.qpid.proton.engine.Sasl sasl>;
v = interfaceinvoke v.<org.apache.qpid.proton.engine.Sasl: java.lang.String[] getRemoteMechanisms()>();
v = specialinvoke v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.activemq.transport.amqp.sasl.SaslMechanism getSaslMechanism(java.lang.String[])>(v);
if v == null goto label;
v = <org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.slf4j.Logger LOG>;
v = interfaceinvoke v.<org.apache.activemq.transport.amqp.sasl.SaslMechanism: java.lang.String getMechanismName()>();
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object)>("SASL [{}} Handshake started.", v);
v = v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.qpid.proton.engine.Sasl sasl>;
interfaceinvoke v.<org.apache.activemq.transport.amqp.sasl.SaslMechanism: void processSaslStep(org.apache.qpid.proton.engine.Sasl)>(v);
v = interfaceinvoke v.<org.apache.activemq.transport.amqp.sasl.SaslMechanism: boolean isFailed()>();
if v != 0 goto label;
v = interfaceinvoke v.<org.apache.activemq.transport.amqp.sasl.SaslMechanism: java.lang.String getUsername()>();
virtualinvoke v.<org.apache.activemq.command.ConnectionInfo: void setUserName(java.lang.String)>(v);
v = interfaceinvoke v.<org.apache.activemq.transport.amqp.sasl.SaslMechanism: java.lang.String getPassword()>();
virtualinvoke v.<org.apache.activemq.command.ConnectionInfo: void setPassword(java.lang.String)>(v);
v = v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.activemq.transport.amqp.AmqpTransport transport>;
v = interfaceinvoke v.<org.apache.activemq.transport.amqp.AmqpTransport: java.security.cert.X509Certificate[] getPeerCertificates()>();
v = specialinvoke v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: boolean tryAuthenticate(org.apache.activemq.command.ConnectionInfo,java.security.cert.X509Certificate[])>(v, v);
if v == 0 goto label;
v = v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.qpid.proton.engine.Sasl sasl>;
v = <org.apache.qpid.proton.engine.Sasl$SaslOutcome: org.apache.qpid.proton.engine.Sasl$SaslOutcome PN_SASL_OK>;
interfaceinvoke v.<org.apache.qpid.proton.engine.Sasl: void done(org.apache.qpid.proton.engine.Sasl$SaslOutcome)>(v);
goto label;
label:
v = v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.qpid.proton.engine.Sasl sasl>;
v = <org.apache.qpid.proton.engine.Sasl$SaslOutcome: org.apache.qpid.proton.engine.Sasl$SaslOutcome PN_SASL_AUTH>;
interfaceinvoke v.<org.apache.qpid.proton.engine.Sasl: void done(org.apache.qpid.proton.engine.Sasl$SaslOutcome)>(v);
label:
v = <org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.slf4j.Logger LOG>;
v = interfaceinvoke v.<org.apache.activemq.transport.amqp.sasl.SaslMechanism: java.lang.String getMechanismName()>();
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object)>("SASL [{}} Handshake complete.", v);
goto label;
label:
v = <org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.slf4j.Logger LOG>;
v = interfaceinvoke v.<org.apache.activemq.transport.amqp.sasl.SaslMechanism: java.lang.String getMechanismName()>();
v = interfaceinvoke v.<org.apache.activemq.transport.amqp.sasl.SaslMechanism: java.lang.String getFailureReason()>();
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String,java.lang.Object,java.lang.Object)>("SASL [{}} Handshake failed: {}", v, v);
v = v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.qpid.proton.engine.Sasl sasl>;
v = <org.apache.qpid.proton.engine.Sasl$SaslOutcome: org.apache.qpid.proton.engine.Sasl$SaslOutcome PN_SASL_AUTH>;
interfaceinvoke v.<org.apache.qpid.proton.engine.Sasl: void done(org.apache.qpid.proton.engine.Sasl$SaslOutcome)>(v);
goto label;
label:
v = <org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void info(java.lang.String)>("SASL: could not find supported mechanism");
v = v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.qpid.proton.engine.Sasl sasl>;
v = <org.apache.qpid.proton.engine.Sasl$SaslOutcome: org.apache.qpid.proton.engine.Sasl$SaslOutcome PN_SASL_PERM>;
interfaceinvoke v.<org.apache.qpid.proton.engine.Sasl: void done(org.apache.qpid.proton.engine.Sasl$SaslOutcome)>(v);
label:
return;
}
private org.apache.activemq.transport.amqp.sasl.SaslMechanism getSaslMechanism(java.lang.String[])
{
org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator v;
org.apache.activemq.transport.amqp.sasl.AnonymousMechanism v;
java.lang.String[] v;
java.lang.String v;
org.apache.activemq.transport.amqp.sasl.PlainMechanism v;
boolean v, v;
v := @this: org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator;
v := @parameter: java.lang.String[];
v = v[0];
v = virtualinvoke v.<java.lang.String: boolean equalsIgnoreCase(java.lang.String)>("PLAIN");
if v == 0 goto label;
v = new org.apache.activemq.transport.amqp.sasl.PlainMechanism;
specialinvoke v.<org.apache.activemq.transport.amqp.sasl.PlainMechanism: void <init>()>();
return v;
label:
v = virtualinvoke v.<java.lang.String: boolean equalsIgnoreCase(java.lang.String)>("ANONYMOUS");
if v == 0 goto label;
v = new org.apache.activemq.transport.amqp.sasl.AnonymousMechanism;
specialinvoke v.<org.apache.activemq.transport.amqp.sasl.AnonymousMechanism: void <init>()>();
return v;
label:
return null;
}
private boolean tryAuthenticate(org.apache.activemq.command.ConnectionInfo, java.security.cert.X509Certificate[])
{
java.lang.Throwable v;
org.apache.activemq.security.SecurityContext v;
org.apache.activemq.command.ConnectionInfo v;
org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator v;
org.apache.activemq.security.AuthenticationBroker v;
java.lang.String v, v;
java.security.cert.X509Certificate[] v;
boolean v;
v := @this: org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator;
v := @parameter: org.apache.activemq.command.ConnectionInfo;
v := @parameter: java.security.cert.X509Certificate[];
label:
v = specialinvoke v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.activemq.security.AuthenticationBroker getAuthenticator()>();
v = virtualinvoke v.<org.apache.activemq.command.ConnectionInfo: java.lang.String getUserName()>();
v = virtualinvoke v.<org.apache.activemq.command.ConnectionInfo: java.lang.String getPassword()>();
v = interfaceinvoke v.<org.apache.activemq.security.AuthenticationBroker: org.apache.activemq.security.SecurityContext authenticate(java.lang.String,java.lang.String,java.security.cert.X509Certificate[])>(v, v, v);
if v == null goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
label:
v := @caughtexception;
return 0;
catch java.lang.Throwable from label to label with label;
}
private org.apache.activemq.security.AuthenticationBroker getAuthenticator()
{
org.apache.activemq.broker.BrokerService v;
org.slf4j.Logger v;
org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator$DefaultAuthenticationBroker v;
java.lang.Exception v;
org.apache.activemq.broker.Broker v, v;
org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator v;
org.apache.activemq.security.AuthenticationBroker v, v, v;
v := @this: org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator;
v = v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.activemq.security.AuthenticationBroker authenticator>;
if v != null goto label;
label:
v = v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.activemq.broker.BrokerService brokerService>;
v = virtualinvoke v.<org.apache.activemq.broker.BrokerService: org.apache.activemq.broker.Broker getBroker()>();
v = interfaceinvoke v.<org.apache.activemq.broker.Broker: org.apache.activemq.broker.Broker getAdaptor(java.lang.Class)>(class "Lorg/apache/activemq/security/AuthenticationBroker;");
v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.activemq.security.AuthenticationBroker authenticator> = v;
label:
goto label;
label:
v := @caughtexception;
v = <org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void debug(java.lang.String)>("Failed to lookup AuthenticationBroker from Broker, will use a default Noop version.");
label:
v = v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.activemq.security.AuthenticationBroker authenticator>;
if v != null goto label;
v = new org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator$DefaultAuthenticationBroker;
specialinvoke v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator$DefaultAuthenticationBroker: void <init>(org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator)>(v);
v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.activemq.security.AuthenticationBroker authenticator> = v;
label:
v = v.<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.apache.activemq.security.AuthenticationBroker authenticator>;
return v;
catch java.lang.Exception from label to label with label;
}
static void <clinit>()
{
java.lang.String[] v;
org.slf4j.Logger v;
v = staticinvoke <org.slf4j.LoggerFactory: org.slf4j.Logger getLogger(java.lang.Class)>(class "Lorg/apache/activemq/transport/amqp/sasl/AmqpAuthenticator;");
<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: org.slf4j.Logger LOG> = v;
v = newarray (java.lang.String)[2];
v[0] = "PLAIN";
v[1] = "ANONYMOUS";
<org.apache.activemq.transport.amqp.sasl.AmqpAuthenticator: java.lang.String[] mechanisms> = v;
return;
}
}