Add custom QZ Tray fork with pairing key authentication
- Custom fork of QZ Tray 2.2.x with certificate validation bypassed - Implemented pairing key (HMAC) authentication as replacement - Modified files: PrintSocketClient.java (certificate check disabled) - New files: PairingAuth.java, PairingConfigDialog.java - Excluded build artifacts (out/, lib/javafx*) from repository - Library JARs included for dependency management
This commit is contained in:
130
tray/src/qz/communication/DeviceOptions.java
Normal file
130
tray/src/qz/communication/DeviceOptions.java
Normal file
@@ -0,0 +1,130 @@
|
||||
package qz.communication;
|
||||
|
||||
import org.apache.commons.lang3.builder.HashCodeBuilder;
|
||||
import org.codehaus.jettison.json.JSONObject;
|
||||
import qz.utils.UsbUtilities;
|
||||
|
||||
public class DeviceOptions {
|
||||
|
||||
public enum DeviceMode {
|
||||
HID,
|
||||
USB,
|
||||
UNKNOWN;
|
||||
public static DeviceMode parse(String callName) {
|
||||
if (callName != null) {
|
||||
if (callName.startsWith("usb")) {
|
||||
return USB;
|
||||
} else if (callName.startsWith("hid")) {
|
||||
return HID;
|
||||
}
|
||||
}
|
||||
return UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
private DeviceMode deviceMode;
|
||||
|
||||
private Integer vendorId;
|
||||
private Integer productId;
|
||||
|
||||
//usb specific
|
||||
private Byte interfaceId;
|
||||
private Byte endpoint;
|
||||
private int interval;
|
||||
private int responseSize;
|
||||
|
||||
//hid specific
|
||||
private Integer usagePage;
|
||||
private String serial;
|
||||
|
||||
public DeviceOptions(JSONObject parameters, DeviceMode deviceMode) {
|
||||
this.deviceMode = deviceMode;
|
||||
|
||||
vendorId = UsbUtilities.hexToInt(parameters.optString("vendorId"));
|
||||
productId = UsbUtilities.hexToInt(parameters.optString("productId"));
|
||||
|
||||
if (!parameters.isNull("interface")) {
|
||||
interfaceId = UsbUtilities.hexToByte(parameters.optString("interface"));
|
||||
}
|
||||
if (!parameters.isNull("endpoint")) {
|
||||
endpoint = UsbUtilities.hexToByte(parameters.optString("endpoint"));
|
||||
} else if (!parameters.isNull("reportId")) {
|
||||
endpoint = UsbUtilities.hexToByte(parameters.optString("reportId"));
|
||||
}
|
||||
interval = parameters.optInt("interval", 100);
|
||||
responseSize = parameters.optInt("responseSize");
|
||||
|
||||
if (!parameters.isNull("usagePage")) {
|
||||
usagePage = UsbUtilities.hexToInt(parameters.optString("usagePage"));
|
||||
}
|
||||
if (!parameters.isNull("serial")) {
|
||||
serial = parameters.optString("serial", "");
|
||||
serial = serial.isEmpty() ? null : serial;
|
||||
}
|
||||
}
|
||||
|
||||
public Integer getVendorId() {
|
||||
return vendorId;
|
||||
}
|
||||
|
||||
public Integer getProductId() {
|
||||
return productId;
|
||||
}
|
||||
|
||||
public Byte getInterfaceId() {
|
||||
return interfaceId;
|
||||
}
|
||||
|
||||
public Byte getEndpoint() {
|
||||
return endpoint;
|
||||
}
|
||||
|
||||
public int getInterval() {
|
||||
return interval;
|
||||
}
|
||||
|
||||
public int getResponseSize() {
|
||||
return responseSize;
|
||||
}
|
||||
|
||||
public Integer getUsagePage() {
|
||||
return usagePage;
|
||||
}
|
||||
|
||||
public String getSerial() {
|
||||
return serial;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj == null || !(obj instanceof DeviceOptions)) { return false; }
|
||||
|
||||
DeviceOptions that = (DeviceOptions)obj;
|
||||
|
||||
if (this.getVendorId().equals(that.getVendorId()) && this.getProductId().equals(that.getProductId())) {
|
||||
if (deviceMode == DeviceMode.USB
|
||||
&& (this.getInterfaceId() == null || that.getInterfaceId() == null || this.getInterfaceId().equals(that.getInterfaceId()))
|
||||
&& (this.getEndpoint() == null || that.getEndpoint() == null || this.getEndpoint().equals(that.getEndpoint()))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (deviceMode == DeviceMode.HID
|
||||
&& (this.getUsagePage() == null || that.getUsagePage() == null || this.getUsagePage().equals(that.getUsagePage()))
|
||||
&& (this.getSerial() == null || that.getSerial() == null || this.getSerial().equals(that.getSerial()))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return new HashCodeBuilder()
|
||||
.append(deviceMode)
|
||||
.append(vendorId)
|
||||
.append(productId)
|
||||
.toHashCode();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user