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:
@@ -0,0 +1,20 @@
|
||||
package qz.installer.provision;
|
||||
|
||||
import org.codehaus.jettison.json.JSONException;
|
||||
import qz.common.Constants;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
public class ProvisionerInstallerTests {
|
||||
|
||||
public static void main(String ... args) throws JSONException, IOException {
|
||||
InputStream in = ProvisionerInstallerTests.class.getResourceAsStream("resources/" + Constants.PROVISION_FILE);
|
||||
|
||||
// Parse the JSON
|
||||
ProvisionInstaller provisionInstaller = new ProvisionInstaller(ProvisionerInstallerTests.class, in);
|
||||
|
||||
// Invoke all parsed steps
|
||||
provisionInstaller.invoke();
|
||||
}
|
||||
}
|
||||
60
tray/test/qz/installer/provision/resources/cert1.crt
Normal file
60
tray/test/qz/installer/provision/resources/cert1.crt
Normal file
@@ -0,0 +1,60 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFAzCCAuugAwIBAgICEAIwDQYJKoZIhvcNAQEFBQAwgZgxCzAJBgNVBAYTAlVT
|
||||
MQswCQYDVQQIDAJOWTEbMBkGA1UECgwSUVogSW5kdXN0cmllcywgTExDMRswGQYD
|
||||
VQQLDBJRWiBJbmR1c3RyaWVzLCBMTEMxGTAXBgNVBAMMEHF6aW5kdXN0cmllcy5j
|
||||
b20xJzAlBgkqhkiG9w0BCQEWGHN1cHBvcnRAcXppbmR1c3RyaWVzLmNvbTAeFw0x
|
||||
NTAzMTkwMjM4NDVaFw0yNTAzMTkwMjM4NDVaMHMxCzAJBgNVBAYTAkFBMRMwEQYD
|
||||
VQQIDApTb21lIFN0YXRlMQ0wCwYDVQQKDAREZW1vMQ0wCwYDVQQLDAREZW1vMRIw
|
||||
EAYDVQQDDAlsb2NhbGhvc3QxHTAbBgkqhkiG9w0BCQEWDnJvb3RAbG9jYWxob3N0
|
||||
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtFzbBDRTDHHmlSVQLqjY
|
||||
aoGax7ql3XgRGdhZlNEJPZDs5482ty34J4sI2ZK2yC8YkZ/x+WCSveUgDQIVJ8oK
|
||||
D4jtAPxqHnfSr9RAbvB1GQoiYLxhfxEp/+zfB9dBKDTRZR2nJm/mMsavY2DnSzLp
|
||||
t7PJOjt3BdtISRtGMRsWmRHRfy882msBxsYug22odnT1OdaJQ54bWJT5iJnceBV2
|
||||
1oOqWSg5hU1MupZRxxHbzI61EpTLlxXJQ7YNSwwiDzjaxGrufxc4eZnzGQ1A8h1u
|
||||
jTaG84S1MWvG7BfcPLW+sya+PkrQWMOCIgXrQnAsUgqQrgxQ8Ocq3G4X9UvBy5VR
|
||||
CwIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdl
|
||||
bmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUpG420UhvfwAFMr+8vf3pJunQ
|
||||
gH4wHwYDVR0jBBgwFoAUkKZQt4TUuepf8gWEE3hF6Kl1VFwwDQYJKoZIhvcNAQEF
|
||||
BQADggIBAFXr6G1g7yYVHg6uGfh1nK2jhpKBAOA+OtZQLNHYlBgoAuRRNWdE9/v4
|
||||
J/3Jeid2DAyihm2j92qsQJXkyxBgdTLG+ncILlRElXvG7IrOh3tq/TttdzLcMjaR
|
||||
8w/AkVDLNL0z35shNXih2F9JlbNRGqbVhC7qZl+V1BITfx6mGc4ayke7C9Hm57X0
|
||||
ak/NerAC/QXNs/bF17b+zsUt2ja5NVS8dDSC4JAkM1dD64Y26leYbPybB+FgOxFu
|
||||
wou9gFxzwbdGLCGboi0lNLjEysHJBi90KjPUETbzMmoilHNJXw7egIo8yS5eq8RH
|
||||
i2lS0GsQjYFMvplNVMATDXUPm9MKpCbZ7IlJ5eekhWqvErddcHbzCuUBkDZ7wX/j
|
||||
unk/3DyXdTsSGuZk3/fLEsc4/YTujpAjVXiA1LCooQJ7SmNOpUa66TPz9O7Ufkng
|
||||
+CoTSACmnlHdP7U9WLr5TYnmL9eoHwtb0hwENe1oFC5zClJoSX/7DRexSJfB7YBf
|
||||
vn6JA2xy4C6PqximyCPisErNp85GUcZfo33Np1aywFv9H+a83rSUcV6kpE/jAZio
|
||||
5qLpgIOisArj1HTM6goDWzKhLiR/AeG3IJvgbpr9Gr7uZmfFyQzUjvkJ9cybZRd+
|
||||
G8azmpBBotmKsbtbAU/I/LVk8saeXznshOVVpDRYtVnjZeAneso7
|
||||
-----END CERTIFICATE-----
|
||||
--START INTERMEDIATE CERT--
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFEjCCA/qgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgawxCzAJBgNVBAYTAlVT
|
||||
MQswCQYDVQQIDAJOWTESMBAGA1UEBwwJQ2FuYXN0b3RhMRswGQYDVQQKDBJRWiBJ
|
||||
bmR1c3RyaWVzLCBMTEMxGzAZBgNVBAsMElFaIEluZHVzdHJpZXMsIExMQzEZMBcG
|
||||
A1UEAwwQcXppbmR1c3RyaWVzLmNvbTEnMCUGCSqGSIb3DQEJARYYc3VwcG9ydEBx
|
||||
emluZHVzdHJpZXMuY29tMB4XDTE1MDMwMjAwNTAxOFoXDTM1MDMwMjAwNTAxOFow
|
||||
gZgxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJOWTEbMBkGA1UECgwSUVogSW5kdXN0
|
||||
cmllcywgTExDMRswGQYDVQQLDBJRWiBJbmR1c3RyaWVzLCBMTEMxGTAXBgNVBAMM
|
||||
EHF6aW5kdXN0cmllcy5jb20xJzAlBgkqhkiG9w0BCQEWGHN1cHBvcnRAcXppbmR1
|
||||
c3RyaWVzLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTDgNLU
|
||||
iohl/rQoZ2bTMHVEk1mA020LYhgfWjO0+GsLlbg5SvWVFWkv4ZgffuVRXLHrwz1H
|
||||
YpMyo+Zh8ksJF9ssJWCwQGO5ciM6dmoryyB0VZHGY1blewdMuxieXP7Kr6XD3GRM
|
||||
GAhEwTxjUzI3ksuRunX4IcnRXKYkg5pjs4nLEhXtIZWDLiXPUsyUAEq1U1qdL1AH
|
||||
EtdK/L3zLATnhPB6ZiM+HzNG4aAPynSA38fpeeZ4R0tINMpFThwNgGUsxYKsP9kh
|
||||
0gxGl8YHL6ZzC7BC8FXIB/0Wteng0+XLAVto56Pyxt7BdxtNVuVNNXgkCi9tMqVX
|
||||
xOk3oIvODDt0UoQUZ/umUuoMuOLekYUpZVk4utCqXXlB4mVfS5/zWB6nVxFX8Io1
|
||||
9FOiDLTwZVtBmzmeikzb6o1QLp9F2TAvlf8+DIGDOo0DpPQUtOUyLPCh5hBaDGFE
|
||||
ZhE56qPCBiQIc4T2klWX/80C5NZnd/tJNxjyUyk7bjdDzhzT10CGRAsqxAnsjvMD
|
||||
2KcMf3oXN4PNgyfpbfq2ipxJ1u777Gpbzyf0xoKwH9FYigmqfRH2N2pEdiYawKrX
|
||||
6pyXzGM4cvQ5X1Yxf2x/+xdTLdVaLnZgwrdqwFYmDejGAldXlYDl3jbBHVM1v+uY
|
||||
5ItGTjk+3vLrxmvGy5XFVG+8fF/xaVfo5TW5AgMBAAGjUDBOMB0GA1UdDgQWBBSQ
|
||||
plC3hNS56l/yBYQTeEXoqXVUXDAfBgNVHSMEGDAWgBQDRcZNwPqOqQvagw9BpW0S
|
||||
BkOpXjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAJIO8SiNr9jpLQ
|
||||
eUsFUmbueoxyI5L+P5eV92ceVOJ2tAlBA13vzF1NWlpSlrMmQcVUE/K4D01qtr0k
|
||||
gDs6LUHvj2XXLpyEogitbBgipkQpwCTJVfC9bWYBwEotC7Y8mVjjEV7uXAT71GKT
|
||||
x8XlB9maf+BTZGgyoulA5pTYJ++7s/xX9gzSWCa+eXGcjguBtYYXaAjjAqFGRAvu
|
||||
pz1yrDWcA6H94HeErJKUXBakS0Jm/V33JDuVXY+aZ8EQi2kV82aZbNdXll/R6iGw
|
||||
2ur4rDErnHsiphBgZB71C5FD4cdfSONTsYxmPmyUb5T+KLUouxZ9B0Wh28ucc1Lp
|
||||
rbO7BnjW
|
||||
-----END CERTIFICATE-----
|
||||
158
tray/test/qz/installer/provision/resources/provision.json
Normal file
158
tray/test/qz/installer/provision/resources/provision.json
Normal file
@@ -0,0 +1,158 @@
|
||||
|
||||
[
|
||||
{
|
||||
"description": "[ERROR EXPECTED] missing 'type' and 'phase'",
|
||||
"os": "*",
|
||||
"data": "foo.bar=1"
|
||||
},
|
||||
{
|
||||
"description": "[ERROR EXPECTED] invalid 'remover' id",
|
||||
"type": "remover",
|
||||
"os": "*",
|
||||
"phase": "install",
|
||||
"data": "bbb"
|
||||
},
|
||||
{
|
||||
"description": "[ERROR EXPECTED] missing 'type'",
|
||||
"os": "*",
|
||||
"phase": "install",
|
||||
"data": "this_file_does_not_exist"
|
||||
},
|
||||
{
|
||||
"description": "[ERROR EXPECTED] 'data' file missing",
|
||||
"type": "script",
|
||||
"os": "*",
|
||||
"phase": "install",
|
||||
"data": "this_file_does_not_exist"
|
||||
},
|
||||
{
|
||||
"description": "[ERROR EXPECTED] 'arch' is invalid",
|
||||
"type": "property",
|
||||
"os": "*",
|
||||
"arch": "sparc",
|
||||
"data": "bar.foo=2"
|
||||
},
|
||||
{
|
||||
"description": "[ERROR EXPECTED] 'os' is invalid",
|
||||
"type": "property",
|
||||
"os": "quake",
|
||||
"arch": "*",
|
||||
"data": "bar.foo=2"
|
||||
},
|
||||
{
|
||||
"description": "[WINDOWS SCRIPT] powershell at 'install'",
|
||||
"type": "script",
|
||||
"os": "windows",
|
||||
"phase": "install",
|
||||
"data": "script1.ps1"
|
||||
},
|
||||
{
|
||||
"description": "[MAC SCRIPT] powershell at 'install'",
|
||||
"type": "script",
|
||||
"os": "mac",
|
||||
"phase": "install",
|
||||
"data": "script1.ps1"
|
||||
},
|
||||
{
|
||||
"description": "[LINUX SCRIPT] python at 'startup'",
|
||||
"type": "script",
|
||||
"os": "linux",
|
||||
"phase": "startup",
|
||||
"data": "script4.py"
|
||||
},
|
||||
{
|
||||
"description": "[LINUX & MAC SCRIPT] bash without extension at 'install'",
|
||||
"type": "script",
|
||||
"os": "linux|mac",
|
||||
"phase": "install",
|
||||
"data": "script2"
|
||||
},
|
||||
{
|
||||
"description": "[ALL OS SCRIPT] with '.sh' extension at 'install'",
|
||||
"type": "script",
|
||||
"os": "*",
|
||||
"phase": "install",
|
||||
"data": "script3.sh"
|
||||
},
|
||||
{
|
||||
"description": "[AARCH64 ONLY SCRIPT] with '.sh' extension at 'install'",
|
||||
"type": "script",
|
||||
"os": "*",
|
||||
"arch": "aarch64",
|
||||
"phase": "install",
|
||||
"data": "script2"
|
||||
},
|
||||
{
|
||||
"description": "[CERTIFICATE] at 'startup' (allowed.dat)",
|
||||
"type": "cert",
|
||||
"os": "*",
|
||||
"data": "cert1.crt"
|
||||
},
|
||||
{
|
||||
"description": "[PROPERTY] at wrong phase (qz-tray.properties)",
|
||||
"type": "property",
|
||||
"phase": "startup",
|
||||
"os": "*",
|
||||
"data": "foo=bar"
|
||||
},
|
||||
{
|
||||
"description": "[PROPERTY] at 'install' (qz-tray.properties)",
|
||||
"type": "property",
|
||||
"phase": "install",
|
||||
"os": "*",
|
||||
"data": "websocket.secure.ports=9191,9292,9393,9494"
|
||||
},
|
||||
{
|
||||
"description": "[PROPERTY] at 'certgen' (qz-tray.properties)",
|
||||
"type": "property",
|
||||
"phase": "install",
|
||||
"os": "*",
|
||||
"data": "websocket.insecure.ports=9192,9293,9394,9495"
|
||||
},
|
||||
{
|
||||
"description": "[PROPERTY] at 'certgen' (qz-tray.properties)",
|
||||
"type": "property",
|
||||
"os": "*",
|
||||
"data": "log.size=2097152"
|
||||
},
|
||||
{
|
||||
"description": "[PREFERENCE] at 'startup' (prefs.properties)",
|
||||
"type": "preference",
|
||||
"os": "*",
|
||||
"data": "tray.notifications=true"
|
||||
},
|
||||
{
|
||||
"description": "[REMOVER] at 'install' ('QZ Tray' rebranded 'Cherry Connect')",
|
||||
"type": "remover",
|
||||
"os": "*",
|
||||
"phase": "install",
|
||||
"data": "Cherry Connect,cc-util,cc"
|
||||
},
|
||||
{
|
||||
"description": "[REMOVER] at 'install' QZ-branded version",
|
||||
"type": "remover",
|
||||
"os": "*",
|
||||
"phase": "install",
|
||||
"data": "qz"
|
||||
},
|
||||
{
|
||||
"description": "[CA] at 'install'",
|
||||
"type": "ca",
|
||||
"os": "*",
|
||||
"data": "selfsigned1.crt"
|
||||
},
|
||||
{
|
||||
"description": "[CONF] at 'install'",
|
||||
"type": "conf",
|
||||
"os": "*",
|
||||
"data": "java.net.useSystemProxies=true",
|
||||
"path": "net.properties"
|
||||
},
|
||||
{
|
||||
"description": "[SOFTWARE] at 'install'",
|
||||
"type": "software",
|
||||
"os": "windows",
|
||||
"data": "DCDSetup1.5.0.17.exe",
|
||||
"args": "/S /v/qn"
|
||||
}
|
||||
]
|
||||
5
tray/test/qz/installer/provision/resources/script1.ps1
Normal file
5
tray/test/qz/installer/provision/resources/script1.ps1
Normal file
@@ -0,0 +1,5 @@
|
||||
$shell="PowerShell"
|
||||
$date="$(Get-Date -format "yyyy-MM-dd HH:mm:ss")"
|
||||
$script="$($myInvocation.MyCommand.Name)"
|
||||
# FIXME: ~/Desktop may try to write to /root/Desktop on Linux
|
||||
echo "$date Successful provisioning test from '$shell': $script" >> ~/Desktop/provision.log
|
||||
9
tray/test/qz/installer/provision/resources/script2
Normal file
9
tray/test/qz/installer/provision/resources/script2
Normal file
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
shell=$(ps -p $$ -oargs=|awk '{print $1}')
|
||||
date=$(date "+%F %T")
|
||||
script=$(basename "$0")
|
||||
user="$(eval echo ~$(logname))"
|
||||
|
||||
echo "$date Successful provisioning test from '$shell': $script" >> "$user/Desktop/provision.log"
|
||||
chmod 555 "$user/Desktop/provision.log"
|
||||
7
tray/test/qz/installer/provision/resources/script3.sh
Normal file
7
tray/test/qz/installer/provision/resources/script3.sh
Normal file
@@ -0,0 +1,7 @@
|
||||
shell=$(ps -p $$ -oargs=|awk '{print $1}')
|
||||
date=$(date "+%F %T")
|
||||
script=$(basename "$0")
|
||||
user="$(eval echo ~$(logname))"
|
||||
|
||||
echo "$date Successful provisioning test from '$shell': $script" >> "$user/Desktop/provision.log"
|
||||
chmod 555 "$user/Desktop/provision.log"
|
||||
15
tray/test/qz/installer/provision/resources/script4.py
Normal file
15
tray/test/qz/installer/provision/resources/script4.py
Normal file
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
|
||||
def notify(title, message):
|
||||
os.system(f"notify-send '{title}' '{message}'")
|
||||
|
||||
title=os.getenv('APP_TITLE')
|
||||
version=os.getenv('APP_VERSION')
|
||||
printer="\U0001F5A8"
|
||||
tada="\U0001F389"
|
||||
|
||||
notify("{} {}".format(printer, title), """{} This is a sample message from {} {}.
|
||||
|
||||
This message indicates that provisioning startup tasks are working.""".format(tada, title, version))
|
||||
24
tray/test/qz/installer/provision/resources/selfsigned1.crt
Normal file
24
tray/test/qz/installer/provision/resources/selfsigned1.crt
Normal file
@@ -0,0 +1,24 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIID+TCCAuGgAwIBAgIUf1NN9L3Tw6UVqPiHcFsnS+sdm1kwDQYJKoZIhvcNAQEL
|
||||
BQAwgaQxCzAJBgNVBAYTAlVTMREwDwYDVQQIDAhOZXcgWW9yazESMBAGA1UEBwwJ
|
||||
Q2FuYXN0b3RhMRswGQYDVQQKDBJRWiBJbmR1c3RyaWVzLCBMTEMxGzAZBgNVBAsM
|
||||
ElFaIEluZHVzdHJpZXMsIExMQzEZMBcGA1UEAwwQVHJlcyBGaW5vY2NoaWFybzEZ
|
||||
MBcGCSqGSIb3DQEJARYKdHJlc0Bxei5pbzAeFw0yNTAyMTAxODQxNDlaFw0yNTAz
|
||||
MTIxODQxNDlaMIGkMQswCQYDVQQGEwJVUzERMA8GA1UECAwITmV3IFlvcmsxEjAQ
|
||||
BgNVBAcMCUNhbmFzdG90YTEbMBkGA1UECgwSUVogSW5kdXN0cmllcywgTExDMRsw
|
||||
GQYDVQQLDBJRWiBJbmR1c3RyaWVzLCBMTEMxGTAXBgNVBAMMEFRyZXMgRmlub2Nj
|
||||
aGlhcm8xGTAXBgkqhkiG9w0BCQEWCnRyZXNAcXouaW8wggEiMA0GCSqGSIb3DQEB
|
||||
AQUAA4IBDwAwggEKAoIBAQCyLio0KuXpKr7rmFRP9UpbKvmMZlUytKeYKfiffJub
|
||||
7V4kcD2dAWnl2DL6IK8MNVM6SuTOGUIl8XDV1MTxKhtZoIF2tFtG3UpX2heL76Ai
|
||||
Q7A3cqXiNzZAIxxfppgIZZSZlEjr1r+OCsJEpTJJA6Dm0xOKBcC7c4C3fi7xPvEM
|
||||
hu4EOmzO1EczFF3/mpgO+RG4MFNDPa8zz8SFZN6e9LRkPiPupiapvklgHikkRm3L
|
||||
V7ktP/jmA0zp7JVKDvfNBVR8iZQ3Fbhtk06Iv0t/a0bov4NtyItD1O1oftLS7jEK
|
||||
Erop9NMAofk/MAduevQTHkKLwwAGXXEtHnpaXx7FDpnLAgMBAAGjITAfMB0GA1Ud
|
||||
DgQWBBTcQETEM4iqTfFf6Tq5GvzbhnA7bzANBgkqhkiG9w0BAQsFAAOCAQEASY6v
|
||||
ep8asCIbdDjj1knYEMUMaHsvPbXQYY60Zt1HeQxACrUHCBZ375A+sl/INrH7gRJj
|
||||
KygYKbI/LGM2lDErLTyOzWu1CBTIUUbaDwY5Fc+xl39N+EDctU82Gg8ddUoJDb6f
|
||||
8w/gy2FtcCiRUKdIR5rYxIDl1izkBHPoV3jgUe5ydhlfHUjBZdIWWnZs2+fETG5B
|
||||
62sG9MBwOlPJkE7Wdsf6Q7lQwnpUpnj08IY9+T7c3SA3pGKi2/e7di3G/47riMOd
|
||||
vnldRfCl5erR0qR6J3Ksk6oZCYngLj3zR8R9qjUgEaiC76DGZd9s9wT867SMJJLs
|
||||
iu9NclpILl4aZRJg0w==
|
||||
-----END CERTIFICATE-----
|
||||
Reference in New Issue
Block a user