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

249 lines
7.6 KiB
Java

/*
* Decompiled with CFR 0.152.
*
* Could not load the following classes:
* javax.baja.xml.XContent
* javax.baja.xml.XElem
* javax.baja.xml.XParser
* javax.baja.xml.XWriter
*/
package com.tridium.sys.license;
import com.tridium.sys.Nre;
import com.tridium.sys.license.FlrException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;
import java.util.StringTokenizer;
import javax.baja.data.BIDataValue;
import javax.baja.sys.BFacets;
import javax.baja.sys.BRelTime;
import javax.baja.sys.Clock;
import javax.baja.util.Lexicon;
import javax.baja.util.Version;
import javax.baja.xml.XContent;
import javax.baja.xml.XElem;
import javax.baja.xml.XParser;
import javax.baja.xml.XWriter;
public class XFlrMsg {
private static final Lexicon lex = Lexicon.make("baja");
private String type;
private XChallenge challenge;
private XElem payload;
private BFacets metadata;
public static XFlrMsg make(InputStream inputStream) throws Exception {
return new XFlrMsg(XParser.make((InputStream)inputStream).parse());
}
public static XFlrMsg error(Exception exception) {
XFlrMsg xFlrMsg = new XFlrMsg("error");
XElem xElem = new XElem("error").addContent((XContent)new XElem("exception").addText(exception == null ? "?" : exception.toString()));
if (exception != null && exception.getCause() != null) {
xElem.addContent((XContent)new XElem("cause").addText(exception.getCause().toString()));
}
xFlrMsg.setPayload(xElem);
return xFlrMsg;
}
public String getType() {
return this.type;
}
public void setType(String string) {
this.type = string;
}
public XChallenge getChallenge() {
return this.challenge;
}
public void setChallenge(XChallenge xChallenge) {
this.challenge = xChallenge;
}
public BFacets getMetadata() {
return this.metadata;
}
public XFlrMsg setMetadata(String string, BIDataValue bIDataValue) {
this.metadata = BFacets.make(this.metadata, BFacets.make(string, bIDataValue));
return this;
}
public XElem getPayload() {
return this.payload;
}
public void setPayload(XElem xElem) {
this.payload = xElem;
}
public void throwIfError() throws FlrException {
XElem xElem = this.getPayload();
if (xElem == null) {
throw new FlrException("Null payload.");
}
if (!xElem.name().equals("error")) {
return;
}
StringBuffer stringBuffer = new StringBuffer().append(xElem.elem("exception").text());
XElem xElem2 = xElem.elem("cause");
if (xElem2 != null) {
stringBuffer.append(" -- ").append(xElem2.text());
}
throw new FlrException(stringBuffer.toString());
}
public boolean isError() {
XElem xElem = this.getPayload();
boolean bl = false;
if (xElem == null || xElem.name().equals("error")) {
bl = true;
}
return bl;
}
public void write(OutputStream outputStream) throws IOException {
this.write(outputStream, false);
}
public void write(OutputStream outputStream, boolean bl) throws IOException {
XWriter xWriter = new XWriter(outputStream);
this.asXML().write(xWriter);
outputStream.flush();
if (bl) {
xWriter.close();
}
}
public XElem asXML() {
String string = "";
try {
string = this.metadata.encodeToString();
}
catch (Exception exception) {}
return new XElem("msg").addAttr("type", this.type).addAttr("metadata", string).addContent((XContent)this.challenge.asXML()).addContent((XContent)new XElem("payload").addContent((XContent)this.payload.copy()));
}
public void dump() {
this.asXML().dump();
}
public XFlrMsg(String string) {
this.type = string;
this.challenge = new XChallenge();
this.payload = new XElem("empty");
}
public XFlrMsg(XElem xElem) {
this.type = xElem.get("type", "");
this.challenge = new XChallenge(xElem.elem("challenge"));
this.metadata = BFacets.DEFAULT;
try {
this.metadata = BFacets.make(xElem.get("metadata"));
}
catch (Exception exception) {}
this.payload = xElem.elem("payload").elem(0);
}
public static final class XChallenge {
private Version version;
private String hostid;
private long timestamp;
private String nonce;
private String cksum;
public final String getHostid() {
return this.hostid;
}
public final long getTimestamp() {
return this.timestamp;
}
public final String getCksum() {
return this.cksum;
}
public final void setCksum(String string) {
this.cksum = string;
}
public final Version getVersion() {
return this.version;
}
public final void setVersion(Version version) {
this.version = version;
}
public final int[] parseNonce() {
try {
StringTokenizer stringTokenizer = new StringTokenizer(this.nonce, ":");
int[] nArray = new int[stringTokenizer.countTokens()];
int n = 0;
while (n < nArray.length) {
nArray[n] = Integer.parseInt(stringTokenizer.nextToken());
++n;
}
return nArray;
}
catch (Exception exception) {
return new int[]{1, 2, 3, 4, 5};
}
}
public final XElem asXML() {
return new XElem("challenge").addAttr("version", this.version.toString()).addAttr("hostid", this.hostid).addAttr("timestamp", Long.toString(this.timestamp)).addAttr("nonce", this.nonce).addAttr("cksum", this.cksum);
}
public final void throwIfTooOld(BRelTime bRelTime) throws FlrException {
long l = Clock.millis();
long l2 = bRelTime.getMillis();
if (this.getTimestamp() < l - l2 || this.getTimestamp() > l + l2) {
throw new FlrException(lex.getText("flm.msg.errGracePeriod"));
}
}
public XChallenge() {
this.version = Version.ZERO;
this.hostid = Nre.getHostId();
this.timestamp = Clock.millis();
Random random = new Random();
int n = random.nextInt(20) + 5;
StringBuffer stringBuffer = new StringBuffer();
int n2 = 0;
while (n2 < n) {
if (n2 > 0) {
stringBuffer.append(":");
}
stringBuffer.append(random.nextInt());
++n2;
}
this.nonce = stringBuffer.toString();
try {
MessageDigest messageDigest = MessageDigest.getInstance("md5");
this.cksum = new BigInteger(messageDigest.digest(this.nonce.getBytes())).toString(16);
}
catch (NoSuchAlgorithmException noSuchAlgorithmException) {
this.cksum = "F00BA5";
}
}
XChallenge(XElem xElem) {
this.version = new Version(xElem.get("version", Version.ZERO.toString()));
this.hostid = xElem.get("hostid", "");
this.timestamp = xElem.getl("timestamp", 0L);
this.nonce = xElem.get("nonce", "1:2:3:4:5");
this.cksum = xElem.get("cksum");
}
}
}