2026-03-17 13:31:18 -07:00

272 lines
14 KiB
Java

/*
* Decompiled with CFR 0.152.
*
* Could not load the following classes:
* com.tridium.nre.auth.ScramSha256Client
* com.tridium.user.BRetrievePasswordCredential
* com.tridium.util.ValueByteBuffer
* javax.baja.log.Log
* javax.baja.security.BHttpFoxCredentials
* javax.baja.security.BICredentials
* javax.baja.security.BUsernameAndPassword
* javax.baja.sys.BObject
* javax.baja.sys.Sys
* javax.baja.sys.Type
* javax.baja.user.BUserService
*/
package com.tridium.fox.session;
import com.tridium.fox.kerberos.KerberosAuthenticator;
import com.tridium.fox.message.FoxMessage;
import com.tridium.fox.session.Fox;
import com.tridium.fox.session.FoxAuthenticationException;
import com.tridium.fox.session.FoxConnection;
import com.tridium.fox.session.FoxFrame;
import com.tridium.fox.session.FoxServer;
import com.tridium.fox.session.FoxSession;
import com.tridium.fox.session.FoxsRedirectException;
import com.tridium.fox.sys.BFoxDefaultAuthAgent;
import com.tridium.fox.sys.BFoxService;
import com.tridium.fox.sys.BIFoxAuthAgent;
import com.tridium.nre.auth.ScramSha256Client;
import com.tridium.user.BRetrievePasswordCredential;
import com.tridium.util.ValueByteBuffer;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.security.MessageDigest;
import javax.baja.log.Log;
import javax.baja.security.BHttpFoxCredentials;
import javax.baja.security.BICredentials;
import javax.baja.security.BUsernameAndPassword;
import javax.baja.sys.BObject;
import javax.baja.sys.Sys;
import javax.baja.sys.Type;
import javax.baja.user.BUserService;
public class Tuner
extends Thread {
private FoxServer server;
private FoxSession session;
private String scheme;
static FoxSession openClient(FoxConnection foxConnection, Socket socket, String string, String string2, FoxSession.IFoxSessionListener[] iFoxSessionListenerArray) throws Exception {
BUsernameAndPassword bUsernameAndPassword = new BUsernameAndPassword(string, string2);
return Tuner.openClient(foxConnection, socket, (BICredentials)bUsernameAndPassword, iFoxSessionListenerArray);
}
/*
* Enabled force condition propagation
* Lifted jumps to return sites
*/
static FoxSession openClient(FoxConnection foxConnection, Socket socket, BICredentials bICredentials, FoxSession.IFoxSessionListener[] iFoxSessionListenerArray) throws Exception {
byte[] byArray = ValueByteBuffer.marshal((BObject)((BObject)bICredentials));
FoxSession foxSession = new FoxSession(socket, foxConnection, iFoxSessionListenerArray);
foxSession.setState("client.tune open credentials.len=" + byArray.length);
Fox.register(foxSession);
try {
foxSession.setState("client.tune sendHello");
foxSession.sendHello(null);
foxSession.setState("client.tune receiveHello");
foxSession.receiveHello();
foxSession.setState("client.tune receiveChallenge");
FoxMessage foxMessage = foxSession.receiveTuning("challenge");
String string = foxMessage.getString("method");
foxSession.setState("client.tune receivedChallenge method=" + string);
if (string.equals("basic")) {
FoxMessage foxMessage2 = new FoxMessage();
if (bICredentials instanceof BUsernameAndPassword) {
BUsernameAndPassword bUsernameAndPassword = (BUsernameAndPassword)bICredentials;
foxMessage2.add("username", bUsernameAndPassword.getUsername());
foxMessage2.add("password", bUsernameAndPassword.getPassword().getValue());
} else if (bICredentials instanceof BRetrievePasswordCredential) {
BRetrievePasswordCredential bRetrievePasswordCredential = (BRetrievePasswordCredential)bICredentials;
foxMessage2.add("username", bRetrievePasswordCredential.getUsername());
foxMessage2.add("email", bRetrievePasswordCredential.getEmail());
} else {
if (!(bICredentials instanceof BHttpFoxCredentials)) throw new IllegalStateException();
BHttpFoxCredentials bHttpFoxCredentials = (BHttpFoxCredentials)bICredentials;
byte[] byArray2 = byArray;
foxMessage2.add("username", bHttpFoxCredentials.getUsername());
foxMessage2.add("credentials", byArray2);
}
foxSession.setState("client.tune sendLogin");
foxSession.sendTuning("login", foxMessage2);
Tuner.receiveWelcome(foxSession, string);
} else if (string.equals("digest-md5")) {
if (foxSession.getRemoteHello().getString("fox.version", "1.0").compareTo("1.0.1") < 0) {
FoxMessage foxMessage3 = new FoxMessage();
BUsernameAndPassword bUsernameAndPassword = (BUsernameAndPassword)bICredentials;
byte[] byArray3 = foxMessage.getBlob("nonce");
String string2 = bUsernameAndPassword.getUsername();
byte[] byArray4 = Tuner.generateDigest(string2, bUsernameAndPassword.getPassword().getValue(), byArray3);
foxMessage3.add("username", string2);
foxMessage3.add("digest", byArray4);
foxSession.setState("client.tune sendLogin");
foxSession.sendTuning("login", foxMessage3);
Tuner.receiveWelcome(foxSession, string);
}
} else if (string.equals("digest")) {
if (bICredentials instanceof BUsernameAndPassword) {
try {
FoxMessage foxMessage4 = new FoxMessage();
foxMessage4.add("authInput", "authInputScram");
BUsernameAndPassword bUsernameAndPassword = (BUsernameAndPassword)bICredentials;
ScramSha256Client scramSha256Client = new ScramSha256Client(bUsernameAndPassword.getUsername(), bUsernameAndPassword.getPassword().getValue());
foxMessage4.add("authHandshake1", scramSha256Client.createClientFirstMessage());
foxSession.setState("client.tune send scramsha1-clientFirstMessage");
foxSession.sendTuning("authMessage1", foxMessage4);
FoxMessage foxMessage5 = foxSession.receiveTuning("authMessage1");
foxMessage4 = new FoxMessage();
String string3 = foxMessage5.getString("authHandshake1");
foxMessage4.add("authHandshake2", scramSha256Client.createClientFinalMessage(string3));
foxSession.setState("client.tune send scramsha1-clientFinalMessage");
foxSession.sendTuning("authMessage2", foxMessage4);
foxMessage5 = foxSession.receiveTuning("authMessage2");
String string4 = foxMessage5.getString("authHandshake2");
foxSession.setState("client.tune process scramsha1-serverFinalMessage");
scramSha256Client.processServerFinalMessage(string4);
}
catch (Exception exception) {
throw new FoxAuthenticationException("Rejected", string, null, foxSession);
}
Tuner.receiveWelcome(foxSession, string);
} else if (bICredentials instanceof BRetrievePasswordCredential) {
FoxMessage foxMessage6 = new FoxMessage();
foxMessage6.add("authInput", "authInputRetrieve");
BRetrievePasswordCredential bRetrievePasswordCredential = (BRetrievePasswordCredential)bICredentials;
foxMessage6.add("username", bRetrievePasswordCredential.getUsername());
foxMessage6.add("email", bRetrievePasswordCredential.getEmail());
foxSession.setState("client.tune sendFirstMessage");
foxSession.sendTuning("authMessage1", foxMessage6);
Tuner.receiveWelcome(foxSession, string);
} else {
if (!(bICredentials instanceof BHttpFoxCredentials)) throw new IllegalStateException();
FoxMessage foxMessage7 = new FoxMessage();
foxMessage7.add("authInput", "authInputHttp");
BHttpFoxCredentials bHttpFoxCredentials = (BHttpFoxCredentials)bICredentials;
byte[] byArray5 = byArray;
foxMessage7.add("username", bHttpFoxCredentials.getUsername());
foxMessage7.add("credentials", byArray5);
foxSession.setState("client.tune sendFirstMessage");
foxSession.sendTuning("authMessage1", foxMessage7);
Tuner.receiveWelcome(foxSession, string);
}
} else {
if (!string.equals("kerberos")) throw new FoxAuthenticationException("Unknown challenge method ", string, foxSession);
if (System.getProperty("java.vm.name").equalsIgnoreCase("J9")) {
throw new FoxAuthenticationException("Unsupported challenge method: ", string, foxSession);
}
if (bICredentials instanceof BHttpFoxCredentials) {
FoxMessage foxMessage8 = new FoxMessage();
foxMessage8.add("authInput", "authInputHttp");
BHttpFoxCredentials bHttpFoxCredentials = (BHttpFoxCredentials)bICredentials;
byte[] byArray6 = byArray;
foxMessage8.add("username", bHttpFoxCredentials.getUsername());
foxMessage8.add("credentials", byArray6);
foxSession.setState("client.tune sendFirstMessage");
foxSession.sendTuning("authMessage1", foxMessage8);
Tuner.receiveWelcome(foxSession, string);
} else {
KerberosAuthenticator.authenticate(foxSession, foxMessage, bICredentials);
Tuner.receiveWelcome(foxSession, string);
}
}
foxSession.setState("client.tune starting");
foxSession.start();
return foxSession;
}
catch (Error error) {
foxSession.close(error);
throw error;
}
catch (Exception exception) {
foxSession.close(exception);
throw exception;
}
}
private static void receiveWelcome(FoxSession foxSession, String string) throws IOException, FoxAuthenticationException {
foxSession.setState("client.tune receiveWelcome");
FoxFrame foxFrame = foxSession.readFrame();
if (foxFrame.command != "welcome") {
foxSession.setState("client.tune receivedRejected");
String string2 = foxFrame.message.getString("fatal", null);
String string3 = foxFrame.message.getString("msg", null);
FoxAuthenticationException foxAuthenticationException = null != string3 ? new FoxAuthenticationException(string3, string, string2, foxSession) : new FoxAuthenticationException("Rejected", string, string2, foxSession);
try {
foxAuthenticationException.data = foxFrame.message.getMessage("data");
}
catch (IOException iOException) {
foxAuthenticationException.data = null;
}
throw foxAuthenticationException;
}
foxSession.remoteWelcome = foxFrame.message;
foxSession.setState("client.tune receivedWelcome");
}
static void openServer(FoxServer foxServer, Socket socket, String string) throws Exception {
FoxSession foxSession = new FoxSession(socket, foxServer.makeConnection(null, null));
int n = Math.max(1, Fox.maxServerSessions);
if (Fox.getServerSessionCount() >= n) {
Log.getLog((String)"fox").warning("past fox.maxServerSessions limit: " + n);
foxSession.sendBusy();
}
Fox.register(foxSession);
foxSession.setState("server.tune spawning");
new Tuner(foxServer, foxSession, string).start();
}
private Tuner(FoxServer foxServer, FoxSession foxSession, String string) {
super("Fox:Tuner:" + foxSession.getId());
this.server = foxServer;
this.session = foxSession;
this.scheme = string;
}
public void run() {
try {
this.session.setState("server.tune receiveHello");
if (!this.session.receiveHello()) {
this.session.start();
return;
}
this.session.setState("server.tune makeConnection");
this.session.conn = this.server.makeConnection(this.session, this.session.getRemoteHello());
BFoxService bFoxService = (BFoxService)Sys.getService((Type)BFoxService.TYPE);
if (this.scheme.equalsIgnoreCase("fox") && bFoxService.getFoxsOnly() && bFoxService.getFoxsEnabled()) {
this.session.setState("server.tune sendRedirect");
this.session.sendRedirect(bFoxService.getFoxsPort());
throw new FoxsRedirectException(bFoxService.getFoxsPort());
}
this.session.setState("server.tune sendHello");
this.session.sendHello(null);
BUserService bUserService = (BUserService)Sys.getService((Type)BUserService.TYPE);
BIFoxAuthAgent bIFoxAuthAgent = (BIFoxAuthAgent)bUserService.getAuthAgent(BIFoxAuthAgent.TYPE);
if (null != bIFoxAuthAgent) {
bIFoxAuthAgent.authenticate(this.session, this.server);
} else {
BFoxDefaultAuthAgent.INSTANCE.authenticate(this.session, this.server);
}
}
catch (Throwable throwable) {
this.session.close(throwable);
}
}
public static byte[] generateDigest(String string, String string2, byte[] byArray) throws Exception {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(byteArrayOutputStream);
dataOutputStream.writeUTF(string);
dataOutputStream.writeUTF(string2);
dataOutputStream.write(byArray);
byte[] byArray2 = byteArrayOutputStream.toByteArray();
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(byArray2);
return messageDigest.digest();
}
}