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

313 lines
14 KiB
Java

/*
* Decompiled with CFR 0.152.
*
* Could not load the following classes:
* com.tridium.user.BUserPasswordConfiguration
* com.tridium.user.BUserServicePasswordConfiguration
* com.tridium.util.ValueByteBuffer
* javax.baja.registry.TypeInfo
* javax.baja.security.BICredentials
* javax.baja.sys.BAbsTime
* javax.baja.sys.BBoolean
* javax.baja.sys.BComplex
* javax.baja.sys.BFacets
* javax.baja.sys.BInteger
* javax.baja.sys.BObject
* javax.baja.sys.BRelTime
* javax.baja.sys.BString
* javax.baja.sys.BasicContext
* javax.baja.sys.Clock
* javax.baja.sys.Context
* javax.baja.sys.Flags
* javax.baja.sys.Localizable
* javax.baja.sys.LocalizableRuntimeException
* javax.baja.sys.Property
* javax.baja.sys.Slot
* javax.baja.sys.Sys
* javax.baja.sys.Type
* javax.baja.user.BAuthAgent
* javax.baja.user.BUser
* javax.baja.user.BUserService
* javax.baja.util.BTypeSpec
*/
package com.tridium.fox.sys;
import com.tridium.fox.message.FoxMessage;
import com.tridium.fox.session.FoxAuthenticationException;
import com.tridium.fox.session.FoxServer;
import com.tridium.fox.session.FoxSession;
import com.tridium.fox.sys.BFoxServerConnection;
import com.tridium.fox.sys.BIFoxAuthAgent;
import com.tridium.user.BUserPasswordConfiguration;
import com.tridium.user.BUserServicePasswordConfiguration;
import com.tridium.util.ValueByteBuffer;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.util.HashMap;
import java.util.Random;
import javax.baja.registry.TypeInfo;
import javax.baja.security.BICredentials;
import javax.baja.sys.BAbsTime;
import javax.baja.sys.BBoolean;
import javax.baja.sys.BComplex;
import javax.baja.sys.BFacets;
import javax.baja.sys.BInteger;
import javax.baja.sys.BObject;
import javax.baja.sys.BRelTime;
import javax.baja.sys.BString;
import javax.baja.sys.BasicContext;
import javax.baja.sys.Clock;
import javax.baja.sys.Context;
import javax.baja.sys.Flags;
import javax.baja.sys.Localizable;
import javax.baja.sys.LocalizableRuntimeException;
import javax.baja.sys.Property;
import javax.baja.sys.Slot;
import javax.baja.sys.Sys;
import javax.baja.sys.Type;
import javax.baja.user.BAuthAgent;
import javax.baja.user.BUser;
import javax.baja.user.BUserService;
import javax.baja.util.BTypeSpec;
/*
* Illegal identifiers - consider using --renameillegalidents true
*/
public abstract class BFoxAuthAgent
extends BAuthAgent
implements BIFoxAuthAgent {
public static final Type TYPE;
private static TypeInfo USER_SYNC_EXT_TYPE;
private static int nonceCount;
private static Random nonceRandom;
static /* synthetic */ Class class$com$tridium$fox$sys$BFoxAuthAgent;
static /* synthetic */ Class class$com$tridium$user$BUserServicePasswordConfiguration;
static /* synthetic */ Class class$com$tridium$user$BUserPasswordConfiguration;
public Type getType() {
return TYPE;
}
public boolean authenticate(FoxSession foxSession, FoxServer foxServer) throws Exception {
boolean bl = false;
boolean bl2 = false;
Throwable throwable = null;
Throwable throwable2 = null;
try {
switch (foxServer.getAuthenticationPolicy()) {
case 0: {
bl = this.authenticateBasic(foxSession);
break;
}
case 1: {
bl = this.authenticateDigest(foxSession);
break;
}
default: {
throw new IllegalStateException("Unknown authentication policy");
}
}
}
catch (Throwable throwable3) {
bl = false;
if (!bl2) {
throwable = throwable3;
}
throwable2 = throwable3;
}
if (bl) {
this.acceptAuthentication(foxSession);
} else {
this.rejectAuthentication(foxSession, throwable, throwable2);
}
return bl;
}
protected boolean authenticateBasic(FoxSession foxSession) throws Exception {
throw new FoxAuthenticationException("unimplemented method authenticateBasic", foxSession);
}
protected boolean authenticateDigest(FoxSession foxSession) throws Exception {
throw new FoxAuthenticationException("unimplemented method authenticateDigest", foxSession);
}
protected boolean authenticateTransactional(FoxSession foxSession) throws Exception {
throw new FoxAuthenticationException("unimplemented method authenticateSpecialized", foxSession);
}
public byte[] generateNonce(FoxSession foxSession) throws Exception {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(byteArrayOutputStream);
dataOutputStream.writeUTF("nonce");
dataOutputStream.writeInt(nonceCount++);
dataOutputStream.writeUTF(foxSession.getRemoteHost());
dataOutputStream.writeInt(foxSession.getRemotePort());
dataOutputStream.writeLong(System.currentTimeMillis());
dataOutputStream.writeInt(nonceRandom.nextInt());
return byteArrayOutputStream.toByteArray();
}
public void acceptAuthentication(FoxSession foxSession) throws Exception {
FoxMessage foxMessage = new FoxMessage();
boolean bl = false;
try {
BUserService bUserService = (BUserService)Sys.getService((Type)BUserService.TYPE);
BUser bUser = foxSession.getUser();
if (bUserService.canUsePasswordFeatures(bUser)) {
BObject[] bObjectArray;
Class clazz = class$com$tridium$user$BUserServicePasswordConfiguration;
if (clazz == null) {
clazz = class$com$tridium$user$BUserServicePasswordConfiguration = BFoxAuthAgent.class("[Lcom.tridium.user.BUserServicePasswordConfiguration;", false);
}
if ((bObjectArray = (BObject[])bUserService.getChildren(clazz)).length > 0 && bObjectArray[0].getType().getTypeSpec().equals((Object)BTypeSpec.make((String)"baja:UserServicePasswordConfiguration"))) {
BObject[] bObjectArray2;
foxMessage.add("userHandle", bUser.getHandle().toString());
Class clazz2 = class$com$tridium$user$BUserPasswordConfiguration;
if (clazz2 == null) {
clazz2 = class$com$tridium$user$BUserPasswordConfiguration = BFoxAuthAgent.class("[Lcom.tridium.user.BUserPasswordConfiguration;", false);
}
if ((bObjectArray2 = (BObject[])bUser.getChildren(clazz2)).length > 0 && bObjectArray2[0].getType().getTypeSpec().equals((Object)BTypeSpec.make((String)"baja:UserPasswordConfiguration"))) {
BBoolean bBoolean;
BAbsTime bAbsTime = (BAbsTime)((BUserPasswordConfiguration)bObjectArray2[0]).get("expiration");
BRelTime bRelTime = (BRelTime)((BUserServicePasswordConfiguration)bObjectArray[0]).get("warningPeriod");
if (!bAbsTime.isNull() && bAbsTime.subtract(bRelTime).isBefore(BAbsTime.now())) {
foxMessage.add("passwordExpires", bAbsTime.getMillis());
}
if ((bBoolean = (BBoolean)((BUserPasswordConfiguration)bObjectArray2[0]).get("forceResetAtNextLogin")).getBoolean()) {
if (USER_SYNC_EXT_TYPE == null) {
USER_SYNC_EXT_TYPE = BTypeSpec.make((String)"niagaraDriver", (String)"UserSyncExt").getTypeInfo();
}
Property property = bUser.getProperty("syncExt");
boolean bl2 = false;
if (bUser.getNetworkUser() && Flags.isReadonly((BComplex)bUser.getParent(), (Slot)bUser.getPropertyInParent()) && property != null && USER_SYNC_EXT_TYPE != null && property.getType().is(USER_SYNC_EXT_TYPE)) {
bl2 = true;
}
bl = bl2;
foxMessage.add("forceReset", true);
}
}
}
}
}
catch (Exception exception) {
exception.printStackTrace();
}
if (bl && (foxSession.getRemoteHello().getString("station.name", null) == null || !foxSession.getRemoteHello().getString("app.name", "").equals("Station"))) {
this.rejectAuthentication(foxSession, (Throwable)new LocalizableRuntimeException("fox", "fox.illegal.network.user.passwordReset"), null);
} else {
foxSession.setState("server.tune sendWelcome");
foxSession.sendTuning("welcome", foxMessage);
foxSession.setState("server.tune starting");
foxSession.start();
}
}
public void rejectAuthentication(FoxSession foxSession, Throwable throwable, Throwable throwable2) throws Exception {
FoxMessage foxMessage = this.generateRejectedMessage(throwable, throwable2, foxSession.getSessionContext());
foxSession.setState("server.tune sendRejected");
foxSession.sendTuning("rejected", foxMessage);
throw new FoxAuthenticationException("client login failed", foxSession);
}
protected FoxMessage generateRejectedMessage(Throwable throwable, Throwable throwable2, Context context) {
FoxMessage foxMessage = new FoxMessage();
if (throwable != null) {
foxMessage.add("fatal", this.toFatalMessage(throwable, context));
if (throwable instanceof FoxAuthenticationException) {
foxMessage.add("data", ((FoxAuthenticationException)throwable).data);
}
}
if (throwable2 != null) {
foxMessage.add("msg", this.toFatalMessage(throwable2, context));
if (throwable2 instanceof FoxAuthenticationException) {
foxMessage.add("data", ((FoxAuthenticationException)throwable).data);
}
}
return foxMessage;
}
public String toFatalMessage(Throwable throwable, Context context) {
String string;
if (throwable instanceof Localizable) {
return ((Localizable)throwable).toString(context);
}
String string2 = throwable.getClass().getName();
int n = string2.lastIndexOf(46);
if (n > 0) {
string2 = string2.substring(n + 1);
}
if ((string = throwable.getMessage()) != null && string.length() > 0) {
string2 = string2 + ": " + string;
}
return string2;
}
protected BICredentials extractCredentials(FoxSession foxSession, FoxMessage foxMessage) throws Exception {
byte[] byArray = foxMessage.getBlob("credentials", null);
if (byArray != null) {
foxSession.setState("server.tune receivedLogin data.len=" + byArray.length);
BICredentials bICredentials = (BICredentials)ValueByteBuffer.unmarshal((byte[])byArray);
return bICredentials;
}
return null;
}
protected BUserService authenticateAttempt(FoxSession foxSession, String string) {
BFoxServerConnection bFoxServerConnection = (BFoxServerConnection)foxSession.conn();
bFoxServerConnection.setLastLoginTime(Clock.time());
if (string != null) {
bFoxServerConnection.setLastLoginUsername(string);
}
bFoxServerConnection.setLastLoginAddress(foxSession.getRemoteHost() + ':' + foxSession.getRemotePort());
bFoxServerConnection.setLastLoginApp(foxSession.getRemoteHello().getString("app.name", "") + ' ' + foxSession.getRemoteHello().getString("app.version", ""));
return (BUserService)Sys.getService((Type)BUserService.TYPE);
}
/*
* WARNING - Removed try catching itself - possible behaviour change.
* Enabled aggressive block sorting
* Enabled unnecessary exception pruning
* Enabled aggressive exception aggregation
*/
protected void authenticateSuccess(FoxSession foxSession, BUser bUser) {
Object object = foxSession.getSessionStateLock();
synchronized (object) {
FoxMessage foxMessage = foxSession.getRemoteHello();
String string = foxMessage.getString("lang", null);
String string2 = foxMessage.getString("vmUuid", null);
HashMap<String, Object> hashMap = new HashMap<String, Object>();
hashMap.put("foxSessionId", BInteger.make((int)foxSession.getId()));
if (string2 != null) {
hashMap.put("foxRemoteVmUuid", BString.make((String)string2));
}
foxSession.setUser(bUser);
foxSession.setSessionContext((Context)new BasicContext((Context)new BasicContext(bUser, string), BFacets.make(hashMap)));
return;
}
}
static /* synthetic */ Class class(String string, boolean bl) {
try {
Class<?> clazz = Class.forName(string);
if (!bl) {
clazz = clazz.getComponentType();
}
return clazz;
}
catch (ClassNotFoundException classNotFoundException) {
throw new NoClassDefFoundError(classNotFoundException.getMessage());
}
}
static {
Class clazz = class$com$tridium$fox$sys$BFoxAuthAgent;
if (clazz == null) {
clazz = class$com$tridium$fox$sys$BFoxAuthAgent = BFoxAuthAgent.class("[Lcom.tridium.fox.sys.BFoxAuthAgent;", false);
}
TYPE = Sys.loadType((Class)clazz);
USER_SYNC_EXT_TYPE = null;
nonceRandom = new Random();
}
}