diff --git a/azure-qseow/client.pem b/azure-qseow/client.pem
new file mode 100644
index 0000000..0dade3d
--- /dev/null
+++ b/azure-qseow/client.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDCjCCAfKgAwIBAgIQALHkhdJnD4HIsMPlvt0kwzANBgkqhkiG9w0BAQsFADAT
+MREwDwYDVQQDDAhxc2Vvdy1DQTAeFw0yMTAyMDcyMDI3MjlaFw0zMTAyMTQyMDI3
+MjlaMBUxEzARBgNVBAMMClFsaWtDbGllbnQwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQCPu0JXHGR2uPFQSxlAW1Fh0L1QOmZVYeyG0cI6V/2qxWUmJ25Y
+VH1JZJtARYGJ6FPkRAIBiMEW0I8t3NDat7b2DmgzPR40x/K1rzS+m8/OpqafZImL
+8tBOEvKcx/brRl3QA9ZPDTOtdnab+JV1ni4BMPMwv/Q3ZBfd26UGqlcYo6hlvpaH
+hHamh4Iy6s21YjSws8Z2suCDLwJzRGL7OmkdFn7Mte1kGdKqfrJzYGpTFOnlWQLp
+QQfVvTl/HjvWimgtQuAUDSog9fp/XQ3ReufJw6IyIzrsEMcFrUK+KQonVwMS1I0k
+eoWbttk141RSr95BtSm8sQjcK9o2PEcc9mUzAgMBAAGjWDBWMB0GA1UdDgQWBBSZ
+5ddde7n8OeFxMFdqDE2UmHYF0DAfBgNVHSMEGDAWgBRB2cs88xddN9xiHaa37MGe
+MUxX0TAUBggrBgEFBQcNAwQIBAZDbGllbnQwDQYJKoZIhvcNAQELBQADggEBAF4D
+hIUNQiyVlI9Z0Ateo+SS0gtf8ZJV4P3ueqcpjy2z6mk57hMQWq5cAf9b4E9pc6+a
+ksFk9k8R/BM6zI6+AKATc2fciAErPIZeccvt8+iOAfNcHL64aeb1on76HyFGeuAq
+NUePouRj8yh0OWd7MXR8gj9ZxcVqxRzO35IvMGZMlfCzZxdljozyd+twEdgFinFS
+d/DN1/miJ4BMcur2QhqoIlyv3SDqLg4OfmGSo804kemGrO4RCQOGaaEltJ7RApYb
+JD8gAU2uxO/z9+e8pAX43KcsoNCMlA8e7pw9u3h9PvoeoJwTBbn3eHdnGm47PRMi
+ycbV7sqh/ypN6vxZSHc=
+-----END CERTIFICATE-----
diff --git a/azure-qseow/client_key.pem b/azure-qseow/client_key.pem
new file mode 100644
index 0000000..c61b479
--- /dev/null
+++ b/azure-qseow/client_key.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEogIBAAKCAQEAj7tCVxxkdrjxUEsZQFtRYdC9UDpmVWHshtHCOlf9qsVlJidu
+WFR9SWSbQEWBiehT5EQCAYjBFtCPLdzQ2re29g5oMz0eNMfyta80vpvPzqamn2SJ
+i/LQThLynMf260Zd0APWTw0zrXZ2m/iVdZ4uATDzML/0N2QX3dulBqpXGKOoZb6W
+h4R2poeCMurNtWI0sLPGdrLggy8Cc0Ri+zppHRZ+zLXtZBnSqn6yc2BqUxTp5VkC
+6UEH1b05fx471opoLULgFA0qIPX6f10N0XrnycOiMiM67BDHBa1CvikKJ1cDEtSN
+JHqFm7bZNeNUUq/eQbUpvLEI3CvaNjxHHPZlMwIDAQABAoIBAD21TvkpZnSWWHx5
+kaDQ0/Lj9LOCLzdPMIZ9fh8gcfckgpXL7hMcSyH8gK8qaEA2L/ZbwGS6OvQ5nI87
+M6wDnhir/M6q2dIdWjXowANpz+FQKU9bkbY1DHvIpMLtEzTV5CcPzq3n5B0ANFIo
+erqhq+y1AGQYtZgmcBy/VW20KmqYB3YiupHfB72SasMWl1G9BJ98dW7oQwIq4PZx
+hAY3oWyC/KJRdOzIpJyTBWgCxYRWc43LU1sV/cqA+jlqGgBYfHRzJ8qjFOAk63XA
+99Xh0ClmtSFztcLJZrV2xzIoVxKRyxExyGuSiJs4KnMlZT8FGhT1+RINZiLkOt1s
+4Va3WdECgYEA9JcM4g4JguemJQ7MBklkW532B1hg5cr7X7aGMZi/ob5iuOSOm7dc
+oRoGBXsOVFh5Cotowu3OQfwm2uQczhnbVjKTeMbJ93Y0s4PjToPAFX8gEdLzykEz
+MI/3f9Gf1DvALwCYmeY7aHr+hk8LoCoQy4bGpDiwRlZT3XmArLC7k0kCgYEAlm+7
+qUcyiGqHNuVrnFs9DQLT1DbTKItBxfjjQVrNwkhcsQhQvde94akmQQSVZlD4efK1
+tbhYTDyt9HXvnD5ip7O9Z1cQA9zz0CSM+c6staOROdhbw+mpLUHFshoKfvZq3AOh
++S5ez46/kbIVLXs0L1gKlvKkw8tAaT9HM4GKeJsCgYBQU2ccukVvY0pSM0jX67R0
+ziylfuXbsczaQyRRF3wfz1m2pQEcrJxUICrIFADBvIiL6PrPwa+SRhAwpOe83AsH
+hPafnJFpnr1yEydMesJTjPtoPyJnUwBPu4gpxxs5ZSIZjZWQPWdXScVbMIx93jLD
+1JBaEG/7uZAzVRroG+aOWQKBgA1o9F+ImzaR2G/KT6dmcrDAOcXHBVet4jUVlJx0
+zbat4KVfSmNB4glFnMVa9T5jpWKpgg0q26QgHJmYEb3pyb2NRir6FdFiVtGNEIwM
+IlUmuYFgif2SzKPeIxNXQuxCZxApuryNp6H05ZrFNyIQw3wc6wS9qHZTnfBD1cL/
+nypVAoGAOOCpu/AY0vKE3NSu4Mm7YzW1T2NQWKmWTw0gEQ4eXhzOkqb/ZrYoIRvH
+JzuMaFfbyhChC4MASn9I3DQy+HPDHGLHhxc35xGTgRsdUfzs/31xSQ4kExZiUE8/
+moPe+sVCeRX8DwLqh6BgSDaa/9pz7SfvrEZUpMcflIvAM9g2dIQ=
+-----END RSA PRIVATE KEY-----
diff --git a/azure-qseow/jwt.js b/azure-qseow/jwt.js
new file mode 100644
index 0000000..fa5432d
--- /dev/null
+++ b/azure-qseow/jwt.js
@@ -0,0 +1,59 @@
+const fs = require('fs');
+const jwt = require('jsonwebtoken');
+const { http, https } = require('follow-redirects');
+
+// Your Sense Enterprise installation hostname:
+const senseHost = 'qseow.jprdonnelly.com';
+
+// Your configured virtual proxy prefix for JWT authentication:
+const proxyPrefix = 'jwt';
+
+// The Sense Enterprise-configured user directory for the user you want to identify
+// as:
+const userDirectory = 'INTERNAL';
+
+// The user to use when creating the session:
+const userId = 'sa_api';
+
+// The Sense Enterprise-configured JWT structure. Change the attributes to match
+// your configuration:
+const token = {
+ directory: userDirectory,
+ user: userId,
+};
+
+// Path to the private key used for JWT signing:
+const privateKeyPath = './fort_private.key';
+const key = fs.readFileSync(path.resolve(__dirname, privateKeyPath));
+
+// Sign the token using the RS256 algorithm:
+const signedToken = jwt.sign(token, key, { algorithm: 'RS256' });
+
+const options = {
+ hostname: 'central.browntown.local',
+ port: 4243,
+ path: '/qrs/about?xrfkey=abcdefghijklmnop',
+ method: 'GET',
+ // agent: 'Windows',
+ // login: 'INTERNAL\SA_API',
+ password: '',
+ headers: {
+ 'X-Qlik-Xrfkey' : 'abcdefghijklmnop',
+ 'X-Qlik-User' : `UserDirectory=${encodeURIComponent('INTERNAL')}; UserId=${encodeURIComponent('sa_api')}`,
+ 'Authorization' : 'Bearer ${signedToken}'}
+ },
+ // key: fs.readFileSync("client_key.pem"),
+ // cert: fs.readFileSync("client.pem"),
+ // ca: fs.readFileSync("root.pem"),
+ // rejectUnauthorized: false
+};
+
+https.get(options, function(res) {
+ console.log("Got response: " + res.statusCode);
+ res.on("data", function(chunk) {
+ console.log("BODY: " + chunk);
+ });
+ }).on('error', function(e) {
+ con
+ sole.log("Got error: " + e.message);
+});
diff --git a/azure-qseow/root.pem b/azure-qseow/root.pem
new file mode 100644
index 0000000..50ad894
--- /dev/null
+++ b/azure-qseow/root.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDFzCCAf+gAwIBAgIQAMcHUrjO7gPVIDsf+EbVWzANBgkqhkiG9w0BAQsFADAT
+MREwDwYDVQQDDAhxc2Vvdy1DQTAeFw0yMTAyMDcxNzA1MDRaFw0zMTAyMTQxNzA1
+MDRaMBMxETAPBgNVBAMMCHFzZW93LUNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAh7BhqD9YSOgPHUb6JyZ8z2yTbIZX+i1//uOxwid9FquirByWf90V
+o2TcbfOh1JNaM+TzvhByLJSowTrRQyPHKr/GnMfOb2PpVPY19/yFDdVjEVTorx8O
+ipI7eAMgJGdgzMtjW+npCNigqDDKpzxdorc4n8wPkK7Auum5CjEyiRkuOrwRs09i
+3GXzrFvFn3MPx1XEbf80ShJbR2nv8V0gQ4lB7ngJRFOROdi3RwTHiqoXyhkVYwpX
+N/7QMCRJWEiR/GmvizzRzzeEo59RnQ96PNqU2n0ppqThSujNjBB9ow7xV/vYrrIZ
+R3jpoysuazs+nxK180IFEaiK/JERm4bhWwIDAQABo2cwZTAPBgNVHRMBAf8EBTAD
+AQH/MB0GA1UdDgQWBBRB2cs88xddN9xiHaa37MGeMUxX0TAfBgNVHSMEGDAWgBRB
+2cs88xddN9xiHaa37MGeMUxX0TASBggrBgEFBQcNAwQGBARSb290MA0GCSqGSIb3
+DQEBCwUAA4IBAQByS7f9Iuw3oxchtxoMN7nk4e0gR8tFx97J88GPx5xT8+Q2KfEr
+y0zUiXaVh3rShR7boe+JHoatqQqbPDNtqaVNeKKT/rE7GKR3IKbfSDVCuDbsKoU4
+hUmhTibmNjPIuRrzY6MmKitjEXdo/MLXOVCnG83LqHkgOs40gTyDtf436A0r/9ep
+bJ7+M0ZrR4jhUPtCea74MgnE5tZKdZcIrHf2GLKKeccZLm+xcyH+cu/VWNxzYjxo
+Jkosd/YLUArTXkEalnBsNyNK48YCaWid6UPTRvK41GNC7DFDpaP2Gft4hOU2DMzF
+3UraQ096bQQbgoGHs7Z+qrb+y6MRahxwucX5
+-----END CERTIFICATE-----
diff --git a/azure-qseow/server.pem b/azure-qseow/server.pem
new file mode 100644
index 0000000..51db8a6
--- /dev/null
+++ b/azure-qseow/server.pem
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFaDCCBFCgAwIBAgIQAMp2GECVXzu751Deuh2+BTANBgkqhkiG9w0BAQsFADAT
+MREwDwYDVQQDDAhxc2Vvdy1DQTAeFw0yMTAyMDcyMDI3MzFaFw0zMTAyMTQyMDI3
+MzFaMCAxHjAcBgNVBAMMFXFzZW93LmpwcmRvbm5lbGx5LmNvbTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAKCBD6F7bPKAb+Jt254Ro/SiKLfhdFqlHpCH
+UZUlALPAKqd+EIdVSp/ECR4XP+i12gXUmn1qEy4qo8+uhZak2Z3DiSBQ9+HZMbz9
+wb2/z8rGYSrpdf0hioXbkTM0gyFYNb3HidMM8vj5U9Z0a1H50B3cC59lSqD/aClo
+jsDUiEDpoTY/ArAhiZi29qYTIMA4GkMFXtcVfrdRKTbwZGi/ms3xnJF4tONZJtho
+mLdjRSSYRGAW/DoXPGLTxgA+kklcR9bxn/MDDkZQ6U2mRCNJTYCM0LJusTKh8otN
+jMrd9JMcxBgmMCalu7hrimMWg653Zm2c5B9Krz0+NlCflaJsRR0CAwEAAaOCAqkw
+ggKlMCAGA1UdEQQZMBeCFXFzZW93LmpwcmRvbm5lbGx5LmNvbTAdBgNVHQ4EFgQU
+Jjail6yUnZ1wBHz1QvrUba9ma4swHwYDVR0jBBgwFoAUQdnLPPMXXTfcYh2mt+zB
+njFMV9EwFQYIKwYBBQUHDQMECQQHU2VydmljZTCCARIGCCsGAQUFBw0BBIIBBASC
+AQBPxAZewfSS4ufGUZT1WCdJl3jNSGFjStPH+zvdqTyujAD/ikKPmEjcRcJ4BX9l
+5lynQ1s0MYVmhKMQjC9Tdjpw8bS4vJffgZ3RVsD/1dsXY9LEL7f8wFip5TlEvxub
+pcSvRwoXBf6lWwQWAu2c6hpSqDF+pAPGXtE/J9MftF0M/4AaEWAAEWZWKe1Vobnq
+VLwGsKN7zFv5tYBEaYXl2aDGDDlaGgzbK6zZxs8Cn0eEIXaHGdl60b45aSrUVJKH
+7LnDL6r9vjZ4EefqNPdIEVrvrvopUSpnxmqe6dvBJ0iQtxXPl2kJTN+j9wJbiZyc
+WVmw3AUFpCml6KaDIB9wQIENMIIBEgYIKwYBBQUHDQIEggEEBIIBAANu8nkFzqsy
+/Q87UNUmnuB3nqoRI6xCrn3j8soMVyurDexVi9Uu2gIlc94JD2YY6+uyy15wnftC
+UzRlMz0c1xKePuIMXuSQcSwVPSYF5bDziMMIdTyCSotBuzeDisjHBerHbNd1qmQH
+Xdp51/lCQq0sGpLlOyMphF5V3z0Z8hdTsKAMmZwQ3ACbRT1oWWrfojUlndkwueXZ
+BkpvosHS8xLRzaIztwGgA1vPi1Y9kSZWcj9UeyJ5xsYiyE3rC7DHvAr9k5y1vVCR
+1vyJXpmzz+OerIZZhI+cEXVgRC32/1j94GEtC8VrYYeNwpP+6RxnVm+CoTFf5e4O
+kjWNL/9/l0UwDQYJKoZIhvcNAQELBQADggEBABUidvs/LvYX8oBK0aWHuy5UsVo8
+L0oMNKA7RLlBC5Yu2vjKFXOLYMKpN00YqQD9npC2hbhH2BVXmxWeIfxTNpG88gTR
+g/9ddM+xi7UElnld4MRLiO4DGQ3Zf9OGwXJyJC2xyAd4bXgL+Z/hu0ObyBi3nzDi
+U1RNSRpxhG6LwesvcmdRJxXnol6QpZwIW51IaW1uCfL9Q+1b6I0PweQ+KamjGQUF
+SSo89wySi6H1Ggsz0dMbppqGFLg6Neveh5idFdko+f1Qh+gL8iFXzak37DeO6Joi
+8CUJaSLwPFod2S7ikHqGk/RWoiU1yrkD3B01xd66YOtrf11/seaHfYOoKy0=
+-----END CERTIFICATE-----
diff --git a/azure-qseow/server_key.pem b/azure-qseow/server_key.pem
new file mode 100644
index 0000000..96761b4
--- /dev/null
+++ b/azure-qseow/server_key.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAoIEPoXts8oBv4m3bnhGj9KIot+F0WqUekIdRlSUAs8Aqp34Q
+h1VKn8QJHhc/6LXaBdSafWoTLiqjz66FlqTZncOJIFD34dkxvP3Bvb/PysZhKul1
+/SGKhduRMzSDIVg1vceJ0wzy+PlT1nRrUfnQHdwLn2VKoP9oKWiOwNSIQOmhNj8C
+sCGJmLb2phMgwDgaQwVe1xV+t1EpNvBkaL+azfGckXi041km2GiYt2NFJJhEYBb8
+Ohc8YtPGAD6SSVxH1vGf8wMORlDpTaZEI0lNgIzQsm6xMqHyi02Myt30kxzEGCYw
+JqW7uGuKYxaDrndmbZzkH0qvPT42UJ+VomxFHQIDAQABAoIBAQCWQTwIyCrtuh8D
+siRujcUXNtc3jPAIC5vZYVSWctV9cOB9fB6tEsORXUvLx6gkillYK/eUgMED7xb7
+TT3yENFIR80PW70yyMkvS78bi31TLvO34GZ8WfH77di4PuijRpjI2QvFb9HmEkLR
++JqfW2XhDiYzSffbUD6KxT8eddg4KwMhprUDOUzmYHaYoBhUqry89a/eyUjH9iLF
+2/nfHj2lZli8MIUU84waZSJrEevhZkllseMwd9SpWamniUypT67ro9pWxHnOvVXk
+7ibEpzRYJSRvifrBOvhkPwqlgbVReyAbsb8vDU6vj8Iv+NlsS4WqW8s2yenBF+hc
+kbpZzWphAoGBAMriQt9W+AvsJ1/EIuW0ljkfgY5MSxFYnHS3svSCD+1wPqOybcak
+2HRfyZ6ocKLgWsx0g0kUl3zrjWJNXfavNtfXDWudHjeRadIsuvqaUs2yFZFUwjpn
+StjUbox6OXMtzi6QaYQI0xiPtt6iwpVF+vyQ9VNxpXhIK+8gPwclNPJ3AoGBAMqG
+aoj8XpmMdZCRqYaAFhtSxcFvadLxjdaHdPwFsmUDjajpr6C+Yh2ZkCKusRxtfXtX
+hJMOr+U/mingqfqPg03nT7M9XRvKzebRDfRvTR6A0KgQIspmknICv7HADPoFmfO8
+muDsEO+daaf690JoMsQ7yOPA0XFC+d7SIiv3dXYLAoGAPcjFwKoFg+v42asrTXS/
+QsobdDA7tB6eFtVShC+PlilWihduYs4UtOvuxIhbNN7KB/V7faftsjcxqTwSX2tg
+cj6lcZ45c4avCThiAKs6iDWxZ76+H3cRThLzT4hxMmhCn9+OoozlbFdnw0khpL/Y
+/U1PyIeVcpnX90yEpTJpe2UCgYAtRNhhYE/g8JWCyBxllRHb76eGclnsLdQvhL2w
+a7GRhLbQb9OzEXsq9J1UM0oheZPX0xsuJ9VHX+0cuTwlZpjJ/A9DmE7MnItjsYz1
++z74t4BsYJb2OPE5DMY+fBgqdsAPzDOuXPX4KW5pft5v+IyIcniX+AyYzYi+tqeu
+vjSCOwKBgBaJi8tpP3Xm0uPOdsiWY5uEDHg0xGDGzILhzCsrfZbaVfWEEaW8IbU2
+BQN4BpwmgVbNxKb4E1bIjFQT4K99TaM2NDzjW5azdf48kJjrwiAZSUaP0EXZuwd0
+6EG+eZM0sV1S4D2C48Q/DZxu+PukOKZk4bSHWDPfKdbPkqni+KEQ
+-----END RSA PRIVATE KEY-----
diff --git a/azure-qseow/win-4242.js b/azure-qseow/win-4242.js
new file mode 100644
index 0000000..f2e92b5
--- /dev/null
+++ b/azure-qseow/win-4242.js
@@ -0,0 +1,32 @@
+// const https = require('https');
+const { http, https } = require('follow-redirects');
+
+const fs = require('fs');
+
+const options = {
+ hostname: 'central.browntown.local',
+ port: 4242,
+ path: '/qrs/about?xrfkey=abcdefghijklmnop',
+ method: 'GET',
+ // agent: 'Windows',
+ // login: 'INTERNAL\SA_API',
+ password: '',
+ headers: {
+ 'X-Qlik-Xrfkey' : 'abcdefghijklmnop',
+ 'X-Qlik-User' : `UserDirectory=${encodeURIComponent('INTERNAL')}; UserId=${encodeURIComponent('sa_api')}`
+ },
+ key: fs.readFileSync("client_key.pem"),
+ cert: fs.readFileSync("client.pem"),
+ ca: fs.readFileSync("root.pem"),
+ rejectUnauthorized: false
+};
+
+https.get(options, function(res) {
+ console.log("Got response: " + res.statusCode);
+ res.on("data", function(chunk) {
+ console.log("BODY: " + chunk);
+ });
+ }).on('error', function(e) {
+ console.log("Got error: " + e.message);
+});
+
diff --git a/azure-qseow/win-443.js b/azure-qseow/win-443.js
new file mode 100644
index 0000000..820db00
--- /dev/null
+++ b/azure-qseow/win-443.js
@@ -0,0 +1,28 @@
+
+// var https = require('https');
+var https = require('follow-redirects').https;
+var fs = require('fs');
+
+var options = {
+ hostname: '20.36.130.9',
+ port: 4243,
+ path: '/qrs/about?xrfkey=abcdefghijklmnop',
+ method: 'GET',
+ headers: {
+ 'X-Qlik-Xrfkey' : 'abcdefghijklmnop',
+ 'X-Qlik-User' : 'UserDirectory=Internal; UserId=sa_repository'
+ },
+ key: fs.readFileSync("./client_key.pem"),
+ cert: fs.readFileSync("./client.pem"),
+ ca: fs.readFileSync("./root.pem"),
+ rejectUnauthorized: false
+};
+
+https.get(options, function(res) {
+ console.log("Got response: " + res.statusCode);
+ res.on("data", function(chunk) {
+ console.log("BODY: " + chunk);
+ });
+ }).on('error', function(e) {
+ console.log("Got error: " + e.message);
+});
diff --git a/azure-qseow/win-main.js b/azure-qseow/win-main.js
new file mode 100644
index 0000000..efd9131
--- /dev/null
+++ b/azure-qseow/win-main.js
@@ -0,0 +1,33 @@
+// const https = require('https');
+const { http, https } = require('follow-redirects');
+
+const fs = require('fs');
+
+const options = {
+ hostname: 'qseow.jprdonnelly.com',
+ port: 443,
+ path: '/main/qrs/about?xrfkey=abcdefghijklmnop',
+ method: 'GET',
+ // agent: 'Windows',
+ // login: 'INTERNAL\SA_API',
+ // password: '',
+ headers: {
+ 'X-Qlik-Xrfkey' : 'abcdefghijklmnop',
+ 'X-Qlik-User' : 'UserDirectory=INTERNAL; UserId=sa_api'
+ // 'X-Qlik-User' : `UserDirectory=${encodeURIComponent('INTERNAL')}; UserId=${encodeURIComponent('sa_api')}`
+ },
+ key: fs.readFileSync("client_key.pem"),
+ cert: fs.readFileSync("client.pem"),
+ ca: fs.readFileSync("root.pem"),
+ rejectUnauthorized: false
+};
+
+https.get(options, function(res) {
+ console.log("Got response: " + res.statusCode);
+ res.on("data", function(chunk) {
+ console.log("BODY: " + chunk);
+ });
+ }).on('error', function(e) {
+ console.log("Got error: " + e.message);
+});
+
diff --git a/qseow-dev.code-workspace b/qseow-dev.code-workspace
new file mode 100644
index 0000000..2b991f7
--- /dev/null
+++ b/qseow-dev.code-workspace
@@ -0,0 +1,11 @@
+{
+ "folders": [
+ {
+ "path": "."
+ },
+ {
+ "path": "../sense-conductor"
+ }
+ ],
+ "settings": {}
+}
\ No newline at end of file
diff --git a/vault-testing/client.pem b/vault-testing/client.pem
new file mode 100644
index 0000000..02b3819
--- /dev/null
+++ b/vault-testing/client.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDDDCCAfSgAwIBAgIQAIB5hhFvreUNHfHljwkEwTANBgkqhkiG9w0BAQsFADAV
+MRMwEQYDVQQDDApjZW50cmFsLUNBMB4XDTIxMDIwNzE3MDUxNloXDTMxMDIxNDE3
+MDUxNlowFTETMBEGA1UEAwwKUWxpa0NsaWVudDCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAMC5D8WvsgNFnB3NUCKxqX+3xn8X971y4pX600HampPDq+bJ
+5yJQsDo0LcfGDl4XZvvDNFB2GFxrYef3S5xHp9QSWhj3dll0k0rAl0ITbKkQNHhF
+L3meDd0d0DCshcCmEia0vRryYLVtUCBm00tyiWPLIC925XqYBp85B38quD0gLaaM
+c79R/LUoqjf4589pIowFfYjzB/NK1qbERNhtu0W+FH/5+eh8WNlsJ/dfs0h0dC5/
+n0/qPBl15qh40AWb9zUiQd1BUBdrhVm6bSD0zOjEDbuCAjr7Dk9QnsUl3wVpjIEK
+aP6JVln0En4fzEfPgfiJjeO69xfXe1gG8HVtXJ0CAwEAAaNYMFYwHQYDVR0OBBYE
+FHPiw6xQnTxXBQJKw4ovSrLIZ55XMB8GA1UdIwQYMBaAFLXVWapk7qSadaPJG+SA
+mgbDwwqsMBQGCCsGAQUFBw0DBAgEBkNsaWVudDANBgkqhkiG9w0BAQsFAAOCAQEA
+L1ndp+V+MBb8oMpmDEen5fzwO0U9t7kLe6tShFGvpYvVV6W4BnsaEHi9ebD5SbBK
+MLmN63B8mACDxJp4esXiZcSj2phTLOdOEm3/TWtLB0YBiKhDQRIrSyI/9Uxfk3NW
+YY/htDe0Xe1CRBUJvFD03a15+BkXAoALuYBBku0gveeJUXkDuVe/UNzVdLd3Z/1B
+cdieROmUWK/I1JJyjDPEvGbPJ9EBI37Iop6tPDBasHSEmGHmFVZj5+rSiGFJOGJn
+whiMV3mOdHyL+peqyj7Q8Uv72RgW0QLRBdssYcQWuQcEcuozCz0ARYTQk7CNHwsF
+iXP+k9NziyFT8sdE8ccd7w==
+-----END CERTIFICATE-----
diff --git a/vault-testing/client_key.pem b/vault-testing/client_key.pem
new file mode 100644
index 0000000..e94662c
--- /dev/null
+++ b/vault-testing/client_key.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEAwLkPxa+yA0WcHc1QIrGpf7fGfxf3vXLilfrTQdqak8Or5snn
+IlCwOjQtx8YOXhdm+8M0UHYYXGth5/dLnEen1BJaGPd2WXSTSsCXQhNsqRA0eEUv
+eZ4N3R3QMKyFwKYSJrS9GvJgtW1QIGbTS3KJY8sgL3blepgGnzkHfyq4PSAtpoxz
+v1H8tSiqN/jnz2kijAV9iPMH80rWpsRE2G27Rb4Uf/n56HxY2Wwn91+zSHR0Ln+f
+T+o8GXXmqHjQBZv3NSJB3UFQF2uFWbptIPTM6MQNu4ICOvsOT1CexSXfBWmMgQpo
+/olWWfQSfh/MR8+B+ImN47r3F9d7WAbwdW1cnQIDAQABAoIBAQCGhWZl9XJK6F7F
+Spdh8CLA3FU4R1GMslFIoNCvCdiVxaIKsOmdwTaRGfTOmgdTVAB1QVcVxqjQcb/g
+O3RSfI2/8KNlA+5fGIjrR60M2SQiigYl4Rz3RgSlT/cO0o114DWRQN0ynvY0DT49
+r6hS5HrT5mfr2ZDqVo1gvFzoPbhmKQVrQv9l1Owb+ZI1zzzvOE5pBkWv+vU3mLJ5
+XzsDGC87MQj9l6iSh/HU1zQQ0VgTJ8hB3NL7vRZMYn6zyzpaDdRyerysGfJZtWfd
+Q4Z/ANIv67LHch5FWJBA5iOPiZZFqPdPaptfbaGO+CFk8M55YAS0QY4zBD8YxBxt
+qo379k79AoGBAPOhh5dR1Ox6MEiInATDnrqLCuamJWwiAU+KMDqrKnIi9FNSfQd5
+F16PGI5/kmbnc6jLftDdLBgeWU+BoAqRtXoOUt7NXp62jkjy0c9lmo1wAEhvS3Fj
++csp2VCgadmx+0QXN5b0gMbznHRx7pXptASslVw1VlTQ6XWEfIyFoKIDAoGBAMqB
+4UVXYx6bkClppeFNlZRvpXMnDSFm+0UCKmoHAu1WsoSbJ2nErxB1T6NLe6fI/NXr
+vFINRXUZ8rgInFTCeeQamRuxsRXVM0CmwQS7uFj/ZOTK4+TkjeoydsKE5NGGla45
+P6Voswy39xSH4/FZIStPbA6wuWe07aWPoVv7SBTfAoGBAKE47oqTi4zmGxeU13JL
+pbmak58oqbESG73wG5RnetJHEVomRzjvyCg6F60M/Ov+FErKR2SeSDS5uK5lgGwe
+GnLoEa0BSLFM64GYtoFBonIggP9uLwWdfEsWqYmybfmyzy0zFAVgTevagFmKn7Ez
+E37YWorHfRbpnOS4xNcVAsTTAoGALaw/X4FHFLcnO3/dbsQt0U2g9ii/mGH+l+DW
+KhWsvlTIbIoFyKAYj9C1hnHW0M/O3nyNe8AMg0235XPjtmYqUZ0CHTHla7QrHBDA
+Bc5E1KW9XrC3138I1uJM0LBiXzNIfQPia+8COwMe0d2YNm3QwlDmYSXQmyg+VRHg
+5br11ecCgYAm2CL6kXV9YF2WPxtqgXexkM/DtechRZTEMNKilUtylIF3+MzsWp4C
+zvRBE2vwLZOHd9E7r7WYHnTA9MWEvy1d6pVvlain4oNSnmii5kTs75XM0aSzkduC
+QwBy2+ufKAZ3+DxrVFWRHt4vNgXjdrQadDTuHOItAvsFXTwM8X4yIw==
+-----END RSA PRIVATE KEY-----
diff --git a/vault-testing/default.aspx b/vault-testing/default.aspx
new file mode 100644
index 0000000..f6fd346
--- /dev/null
+++ b/vault-testing/default.aspx
@@ -0,0 +1,338 @@
+
+
+
+
+ Login Required
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vault-testing/fort_certificate.crt b/vault-testing/fort_certificate.crt
new file mode 100644
index 0000000..68260a5
--- /dev/null
+++ b/vault-testing/fort_certificate.crt
@@ -0,0 +1,30 @@
+-----BEGIN CERTIFICATE-----
+MIIFOjCCAyKgAwIBAgIBATANBgkqhkiG9w0BAQsFADBFMQswCQYDVQQGEwJDQTEL
+MAkGA1UECBMCT04xDzANBgNVBAcTBk90dGF3YTEYMBYGA1UEChMPUWxpayBQcml2
+YXRlIENBMB4XDTIxMDExMDAyMzIzN1oXDTI2MDEwOTAyMzIzN1owRTELMAkGA1UE
+BhMCQ0ExCzAJBgNVBAgTAk9OMQ8wDQYDVQQHEwZPdHRhd2ExGDAWBgNVBAoTD1Fs
+aWsgUHJpdmF0ZSBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQt
+eC1n06S6YhT51OEpJlsGrBzehPgZYaq3y0N6K0yQNPYJlyyyyTBzZtROWpWornha
+H2ImTSRlSO4pPgxhLO3g5AwzFK0dAhL1GHN33RoX+V4cHJC21uiRmG+hiuKHKOTK
+6PgPAR77zxPPx6Cp974i9Xuu93XowBkCb3OzlAAEPnP3B5SzUasSIUwVfWJ4fYFK
+zBgbc21xR0+x4avdV79XIU7/wVAXkjnkZXQ2fxrJY3yfiskAdniDqOXUs+rFE725
+IdmeWkH//ktCQ2RoGJ5cuc6Uh3msUugpxYSPxm8+KKrwmpwajp7kcMzZW63r/qGT
+g6wh/gLbEOBRHgeKtHjcUdKDB0xn77xxYLtdOCQlqLnuukgM+aHMPQiSWKfB8xrE
+GuJwMYNrRgbMTX9ZEIcK+A+OADyHxmUV3abVPO04UkjGCnE4TQssLnzg6bIKp0GX
+g1SUlIfQswotXjR/Fpi5sFM0DWAegTZw9Mvyv1GbP8h6L6PNlN+jLj7cmm4kYEKL
+NniW/tgihh8oPAHV/8MdMly5FtACPtu2WeNLvPT+7857ACaM+bwvrJSABahe+FQ6
+ngyHLYGDHVa+J48SbEVBo13QtHEO/ZMMGP4TFtTJp4uo7lLTP6U6j/lllTlVLuNY
+rMZ7TltAx1Gj3gki71ftHuxEdUw3Y14EO1UqlPqJAgMBAAGjNTAzMA4GA1UdDwEB
+/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMA0GCSqG
+SIb3DQEBCwUAA4ICAQCm5AhVoTShucCCXg2cbqEzd+dFkEki50HWDES25Xlx1iN3
+akUGiaat93NsGcrG8/M8eel2fBEz7jPJDb3l62b4GuM62fzkqxc0p6UgnOa8JaOL
+gX2RZhZb/ik1u1gnUvvzuDsESx0elRHE13xPk9MtnJo3yMsMcTeDLpa+N0PKIwGz
+Ei3CQFCIdr3qZOlsr2RsjSXZ6d3FR9hLDBiLNI+bqaiJEMyszupPdXPPMV2dyWX1
+XCR8vwKRbDHLlE3X03qRXp+xhbENAmfDfJa96yHBl8zpNYBkYNh9YAV2Tg24cnF4
+WbMAeChbl8m31F5UafbfmITMpO28V+jjbScwM/tHGhiwnbvyOlfjH31YEfYJKyPF
+IJYFhV+W6nxlRxIz8QPENRo3euTG6T4iCb9NSlIb35yLMkwmBncodPpdys2J8oaw
+g0B44ZgOLhUqOMA+YTR04GuuN6jBRoezwITupMtiSz0Mn7PwIu4OfVY8vB8D4fTd
+R38tJ5fbFcLrEk6bQk+Jnh5CY6xwkMcYWi5avTH6VnHq5zQDnMJrLt+RiG+H17vp
+ncT2Q2/IS75gx6cTlR0Dg2DjwsHM3YZYYQId3lbVfmH6yxBw3RnCKFIRjaCretmk
+U6ztAQ/jMYjZ9DJIDc/whrInADeLCw5DWs6K4QXjSMnYd9PAlpf+lu8Tw98y1A==
+-----END CERTIFICATE-----
diff --git a/vault-testing/fort_private.key b/vault-testing/fort_private.key
new file mode 100644
index 0000000..58adda2
--- /dev/null
+++ b/vault-testing/fort_private.key
@@ -0,0 +1,51 @@
+-----BEGIN PRIVATE KEY-----
+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
+-----END PRIVATE KEY-----
diff --git a/vault-testing/fs1.js b/vault-testing/fs1.js
new file mode 100644
index 0000000..3b68ac7
--- /dev/null
+++ b/vault-testing/fs1.js
@@ -0,0 +1,72 @@
+/***** index.js *****/
+const express = require('express');
+const ticket = require('./ticket');
+var app = express();
+
+app.get('/index.html', function(req,res) {
+ console.log("accessed the index.html node page");
+ console.log("proxyRestUri: " + req.query.proxyRestUri);
+ console.log("targetId: " + req.query.targetId);
+ ticket.get_ticket_redirect(req.query.proxyRestUri, req.query.targetId, function(redirectUrl){
+ console.log("Redirecting to "+redirectUrl);
+ res.redirect(redirectUrl);
+ });
+});
+
+app.use('/', express.static('public'));
+
+app.listen(3000, function() {
+ console.log("Listening on port 3000");
+});
+
+/***** ticket.js *****/
+var fs = require('fs');
+var request = require('request');
+
+//define certificate folder
+var directory = "./";
+
+var get_ticket_redirect = function(proxyRestUri, targetId, callback){
+
+ //set up request options
+ var options = {
+ uri: proxyRestUri + 'ticket?xrfkey=somerandomstring',
+ headers: {'content-type': 'application/json',
+ 'X-Qlik-xrfkey': 'somerandomstring',
+ 'X-Qlik-user': 'UserDirectory=INTERNAL;UserId=sa_api'
+ },
+ method: 'POST',
+ body: {
+ "UserDirectory": "QAD",
+ "UserId": "djx",
+ "Attributes": [],
+ "TargetId": targetId
+ },
+ json: true,
+ ca: fs.readFileSync(directory+ "root.pem"),
+ key: fs.readFileSync(directory+"client_key.pem"),
+ cert: fs.readFileSync(directory+"client.pem"),
+ rejectUnauthorized: false
+ };
+
+ //send request
+ request(options, function (error, response, body) {
+ if(error)
+ {
+ console.log('Error: '+error);
+ console.log(response);
+ }
+ else
+ {
+ console.log("== Got a ticket ==");
+ console.log("Ticket: " + response.body.Ticket);
+ console.log("TargetUri: " + response.body.TargetUri);
+ callback(response.body.TargetUri + "?QlikTicket=" + response.body.Ticket); // This is the redirect URL!
+ }
+ });
+
+}
+
+module.exports = {
+ get_ticket_redirect: get_ticket_redirect
+}
\ No newline at end of file
diff --git a/vault-testing/index.html b/vault-testing/index.html
new file mode 100644
index 0000000..3d8cbd2
--- /dev/null
+++ b/vault-testing/index.html
@@ -0,0 +1,10 @@
+
+
+
+Simple web app
+Loading...
+Loading...
+
+
+
+
\ No newline at end of file
diff --git a/vault-testing/index.js b/vault-testing/index.js
new file mode 100644
index 0000000..c4a3421
--- /dev/null
+++ b/vault-testing/index.js
@@ -0,0 +1,20 @@
+/***** index.js *****/
+const express = require('express');
+const ticket = require('./ticket');
+var app = express();
+
+app.get('/index.html', function(req,res) {
+ console.log("accessed the index.html node page");
+ console.log("proxyRestUri: " + req.query.proxyRestUri);
+ console.log("targetId: " + req.query.targetId);
+ ticket.get_ticket_redirect(req.query.proxyRestUri, req.query.targetId, function(redirectUrl){
+ console.log("Redirecting to "+redirectUrl);
+ res.redirect(redirectUrl);
+ });
+});
+
+app.use('/', express.static('public'));
+
+app.listen(3000, function() {
+ console.log("Listening on port 3000");
+});
diff --git a/vault-testing/jwt.js b/vault-testing/jwt.js
new file mode 100644
index 0000000..fa5432d
--- /dev/null
+++ b/vault-testing/jwt.js
@@ -0,0 +1,59 @@
+const fs = require('fs');
+const jwt = require('jsonwebtoken');
+const { http, https } = require('follow-redirects');
+
+// Your Sense Enterprise installation hostname:
+const senseHost = 'qseow.jprdonnelly.com';
+
+// Your configured virtual proxy prefix for JWT authentication:
+const proxyPrefix = 'jwt';
+
+// The Sense Enterprise-configured user directory for the user you want to identify
+// as:
+const userDirectory = 'INTERNAL';
+
+// The user to use when creating the session:
+const userId = 'sa_api';
+
+// The Sense Enterprise-configured JWT structure. Change the attributes to match
+// your configuration:
+const token = {
+ directory: userDirectory,
+ user: userId,
+};
+
+// Path to the private key used for JWT signing:
+const privateKeyPath = './fort_private.key';
+const key = fs.readFileSync(path.resolve(__dirname, privateKeyPath));
+
+// Sign the token using the RS256 algorithm:
+const signedToken = jwt.sign(token, key, { algorithm: 'RS256' });
+
+const options = {
+ hostname: 'central.browntown.local',
+ port: 4243,
+ path: '/qrs/about?xrfkey=abcdefghijklmnop',
+ method: 'GET',
+ // agent: 'Windows',
+ // login: 'INTERNAL\SA_API',
+ password: '',
+ headers: {
+ 'X-Qlik-Xrfkey' : 'abcdefghijklmnop',
+ 'X-Qlik-User' : `UserDirectory=${encodeURIComponent('INTERNAL')}; UserId=${encodeURIComponent('sa_api')}`,
+ 'Authorization' : 'Bearer ${signedToken}'}
+ },
+ // key: fs.readFileSync("client_key.pem"),
+ // cert: fs.readFileSync("client.pem"),
+ // ca: fs.readFileSync("root.pem"),
+ // rejectUnauthorized: false
+};
+
+https.get(options, function(res) {
+ console.log("Got response: " + res.statusCode);
+ res.on("data", function(chunk) {
+ console.log("BODY: " + chunk);
+ });
+ }).on('error', function(e) {
+ con
+ sole.log("Got error: " + e.message);
+});
diff --git a/vault-testing/root.cer b/vault-testing/root.cer
new file mode 100644
index 0000000..d694a74
Binary files /dev/null and b/vault-testing/root.cer differ
diff --git a/vault-testing/root.pem b/vault-testing/root.pem
new file mode 100644
index 0000000..6dffdf2
--- /dev/null
+++ b/vault-testing/root.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDGzCCAgOgAwIBAgIQAKqc00Zx4AfvKdtqjSsWbTANBgkqhkiG9w0BAQsFADAV
+MRMwEQYDVQQDDApjZW50cmFsLUNBMB4XDTIwMTIzMDE1NDIwNFoXDTMxMDEwNjE1
+NDIwNFowFTETMBEGA1UEAwwKY2VudHJhbC1DQTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBAJ/6pWC/0N1fOMc/4/AWYEAuV+mokmlstBBjsczscoGGV/dl
+F0am/M7QzFKYJE7ypzIIGob/i96m9+oc1bG5i5l9UFMknSonVag6sBjmKd+B5aG9
+VuZ3JNCu1dVaXQ5pHf7kmXGfOAhWMhjf6BxLjRDh6T6ZvyEx4ZL+ofarggtllpAI
+O91vpNWixN7qgcYT0ahs8d8QwMkDrZRMcOPWSlp6XpLE+reM1MI1GAFctRBeGW7K
+SefasF/OMw3i4NGhGy0vju78In23AZTtu69j2xhZM98fWXoPV5tdC8kFMjm+INxn
+ZNCXWjjsIB5+etGKTiMtDTEs6C/zn/CVpTMnO00CAwEAAaNnMGUwDwYDVR0TAQH/
+BAUwAwEB/zAdBgNVHQ4EFgQUtdVZqmTupJp1o8kb5ICaBsPDCqwwHwYDVR0jBBgw
+FoAUtdVZqmTupJp1o8kb5ICaBsPDCqwwEgYIKwYBBQUHDQMEBgQEUm9vdDANBgkq
+hkiG9w0BAQsFAAOCAQEAJSFhaGQW2UoICwjmIDW63UqVXrLOH9VoeBHko4SAuCv5
+9ambUZ+ccdFqkVfUnRdudFYq4fwBkJp2O9fDNnmVjMleSTGUJt09arAs69Hlze9y
+LsOmWTqWkuxMwXfzMl2CP2LNVjxFIiNDOvGFtUEMIQriCIf0ESNmdqQlBSd8Ebcd
+8NTQb8yc1h6f5vw9dmo18myFQio9nKbMJP7ADumbmCSOVPAcQZItcscMY05IkeYs
+B3EfA/hb9y1lqBj3BLVQ8upZQQWxCuzFFJukpmNKJ28Xb6Bxvdzzkfce9Y3dFrtZ
+qwYhIxzkb1A1sqjP32VecqA7HsxLfv6nt3GBEAZoXQ==
+-----END CERTIFICATE-----
diff --git a/vault-testing/server.pem b/vault-testing/server.pem
new file mode 100644
index 0000000..6ce9274
--- /dev/null
+++ b/vault-testing/server.pem
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFajCCBFKgAwIBAgIQAL2xxPBwLS0l55gsSyxQXzANBgkqhkiG9w0BAQsFADAV
+MRMwEQYDVQQDDApjZW50cmFsLUNBMB4XDTIxMDIwNzE3MDUxNloXDTMxMDIxNDE3
+MDUxNlowIDEeMBwGA1UEAwwVcXNlb3cuanByZG9ubmVsbHkuY29tMIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAksBbEhm9tpnBR1laE234ZN9KKjDtUgZb
+h58UJ2v4b0tsvI58ctSRs7wzrKhkNoDu22vh1IyiC5mowbF9jPnTg9aOOhbXN9vQ
+/Cj/IpIfeTk9dJwNV9ALxKmyq5ENSPeePk82pPSvm9nfz4/2p46rL98LKruQCA2G
+cRpuk+8I5SETA8yxsKa0vwmXHTCw/Lft4vOdq50GOUxTVkPfyzfZKV7iMAkOGnOw
+p/eWPRKG+CGITDup8Bbv7GRvUQkTD/4rcSytk7kpoqNIAbYyTDX+rTidBIZNZ8bj
+lfxY3CqXPO0vNREMMh/8m3EsOzjSZbgDAqWgjBW5fed3MY6mcJO75wIDAQABo4IC
+qTCCAqUwIAYDVR0RBBkwF4IVcXNlb3cuanByZG9ubmVsbHkuY29tMB0GA1UdDgQW
+BBQI/P4vL6JlRJvtu1U5E1p5N2+PDTAfBgNVHSMEGDAWgBS11VmqZO6kmnWjyRvk
+gJoGw8MKrDAVBggrBgEFBQcNAwQJBAdTZXJ2aWNlMIIBEgYIKwYBBQUHDQEEggEE
+BIIBAIXwDWHHErd/uPNqw/TSLyRX/AMEngic34OqFjx6VNx9rwDatR55XEh4n7gy
+wVB4bU9BoI3AChX3nMNMio5YXPiY13PLWt+mhOzvGTROUQUfyIp/+kD/Aa0ICFK8
+WJe564sJGOHUP3dasbNUOA1na/eHV4VWCyz5V7gJ7V1bRXjtiJckyh9Z4vM2elTM
+2QeBVR+nb+sDwL3noz0lp9OuE95nMH/vs3Dk9SCVT8V/5bXsHRyg3UmBtY+bjlnz
+0Y8C90+1BRk8+rnsW8sPQU+Xs+uYXTrw3AnNbuaesVGS7hwtvZparkpIZ4zJG5sW
+hbt73Q9x8mY02+/3IhN3T1jiduQwggESBggrBgEFBQcNAgSCAQQEggEAVJQMpCDf
+cefsm11ufw3GRv2DmeSLnWT3eJ3UV5tRAsJ9U8S8mf7FlqeVmiXL2YX9hPQf/+RP
+GEk+6Sx+vfmnjsSEhOEBDwnsePMM9ZnvA/H2xufsio9m7uTapsFWPFUNt3JbKror
+R0OdQzsgE0aTpkDP02ojpS5LmCuD/jMEkcrbbSkksRDYjohuIKZRERDijpw9WDhM
+1CyW6MJmaxwdOqLqeakt1FLqHbBEYEy9JowTzaNLbOt14ohJ3XsVn8Kf2Yxc69yQ
+28BBEKH2p34G82op/mP37kuGjdh5oMEnWbHdRNSGxzRJkjn+7N08tfneiTxzszd7
+0ZoHI++3bgTopTANBgkqhkiG9w0BAQsFAAOCAQEAb83XLFmREAfCWfH+w23peo7s
+lsUkayVRsBWC6KnvxqtEWdqKNR6PbvwZQp6ue0ENUt6Of14Qlfumm74CnS9oxusT
+q2S1a31GnPfYq3ItMKDvETjibe0DT14JkmkqtJQe4FgdvdOoXZEKvLtZqlv1Xf0l
+dDu2EAtTSnae6mSqvulaWo23qH7iyj15dp2SdWKjfLlv86iLdHUmXV/NkiZ/HTRZ
+4R2IowAd9oUrqGdbunVBy6teyEmvIQiiJHK126Daijih88/TIKK79MK2Tl2UYP+S
+dPZKrhEwlGpmY29rfGt6uAXb0WChkfkghc9NlpCQUk4PY6KAzkcxCqUUiLWOgA==
+-----END CERTIFICATE-----
diff --git a/vault-testing/server_key.pem b/vault-testing/server_key.pem
new file mode 100644
index 0000000..b1a4b70
--- /dev/null
+++ b/vault-testing/server_key.pem
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEAksBbEhm9tpnBR1laE234ZN9KKjDtUgZbh58UJ2v4b0tsvI58
+ctSRs7wzrKhkNoDu22vh1IyiC5mowbF9jPnTg9aOOhbXN9vQ/Cj/IpIfeTk9dJwN
+V9ALxKmyq5ENSPeePk82pPSvm9nfz4/2p46rL98LKruQCA2GcRpuk+8I5SETA8yx
+sKa0vwmXHTCw/Lft4vOdq50GOUxTVkPfyzfZKV7iMAkOGnOwp/eWPRKG+CGITDup
+8Bbv7GRvUQkTD/4rcSytk7kpoqNIAbYyTDX+rTidBIZNZ8bjlfxY3CqXPO0vNREM
+Mh/8m3EsOzjSZbgDAqWgjBW5fed3MY6mcJO75wIDAQABAoIBAQCJp9wFj5XQikuu
+BNeksBw3auijyP9kWMhU4FjEXdhNdZ/LA5EjGdiOk3SZed9+7NShiIHuofiDDyEo
+h7hwnAvXeFQzkydQo2ZWkpI4uH7DdHj8QEGX5HSVhmUt4ENo9bU/V4i3lTqA5A+4
+IJ/LLt3PataLwCLsGtvIjnW5WJisbDitqLD09SfEoHzCpN7cCDjYJrXDykP64MQK
+ERCrMz1yoMThbv1Q7J8gPEm4AsN5NLKdky1zd+xbjy7WljMWTTNHLAoUWhkc9D+1
+7WtcTZYQnE+9lo8gb1MVxwlglyruW0Ch+SZhXhQQGuy5OYWd6fRhq+B8aybovWCg
+7GlJo85JAoGBAONFtIIEiFoKbEZtwCJ0FkLbwVvsWMB/dMHdy/45Cwb8/0xC9WHi
+sPfM9LKNe4Q6E/mlVSotdsOHQocvVVgiGoBrVBWOn6olK+oF155VXyWwaFFE4KTR
+zHiDGioodeFFgZ1x9kM9q9U9TwZr/Knt0lI1JzQTKFp82NEYgkjInt7DAoGBAKVN
+FAHCH0rcfaCgcQEhn4lWYMjrBVNq5Gtq/xFWqMwzyPCvn/kXTvzhPlbMWcTByrIx
+bS9KeMNk/zdu6pAUq5KV0A9laBBWJ2F5Cg1RK91DcmTNKtV3+Pq6n/2F8TQOEryY
+Wcj9fyVOPQMkIaYacaSceH9NVS5y65rQxcv9JSQNAoGBAIIrSletgOsRTTKJaaJS
+Gu3wL68Wjz6xwY3IGy5gPZCjFxX2w9Rsoi9LlFsv7a6uFQLHTx/5KiyTK+eBlMAF
+yGgFEQPHzGsHHz/KWNS20OglQZpKeN/tyc68SCAdTGbaCILE4udgSyq3Eqv67Zvm
+OrAbAXkx/8rT9trLztMhFN1BAoGAMwXQqB5IVG4spNkBKI09VkIAS+QnV7FF4lY7
+dxmdrrJJUumS4mssaWgJOveGufHrZAdXoWJGVmGlWXH2GxUWRH/Tofz2GxzMuQyI
+asXkWT7JX43oq82FX7cdTT77zcqORAJurFh614QH1yFe9YtyCpJ1qy2unlDAop/Q
+ff+caD0CgYBRbFBtGZLc3DhufolHswF9zAlbg+Ro+m2YA0FaK5tnxqOC60NlRRgG
+QyJtmBL2Lo3gOp1/icHAgMI1aVqho6+7r2bAWS2EFCbxfzWMoYdwoi3d7KuNFOYd
+/sskoTGj0iQAR7VCzjJyakKvhuTJhiP1YnMEoxjwSyGhBT85RC6Tbw==
+-----END RSA PRIVATE KEY-----
diff --git a/vault-testing/ticket.js b/vault-testing/ticket.js
new file mode 100644
index 0000000..560cab0
--- /dev/null
+++ b/vault-testing/ticket.js
@@ -0,0 +1,72 @@
+/***** index.js *****/
+const express = require('express');
+const ticket = require('./ticket');
+var app = express();
+
+app.get('/index.html', function(req,res) {
+ console.log("accessed the index.html node page");
+ console.log("proxyRestUri: " + req.query.proxyRestUri);
+ console.log("targetId: " + req.query.targetId);
+ ticket.get_ticket_redirect(req.query.proxyRestUri, req.query.targetId, function(redirectUrl){
+ console.log("Redirecting to "+redirectUrl);
+ res.redirect(redirectUrl);
+ });
+});
+
+app.use('/', express.static('public'));
+
+app.listen(3000, function() {
+ console.log("Listening on port 3000");
+});
+
+/***** ticket.js *****/
+var fs = require('fs');
+var request = require('request');
+
+//define certificate folder
+var directory = "./";
+
+var get_ticket_redirect = function(proxyRestUri, targetId, callback){
+
+ //set up request options
+ var options = {
+ uri: proxyRestUri + 'ticket?xrfkey=somerandomstring',
+ headers: {'content-type': 'application/json',
+ 'X-Qlik-xrfkey': 'somerandomstring',
+ 'X-Qlik-user': 'UserDirectory=INTERNAL;UserId=sa_api'
+ },
+ method: 'POST',
+ body: {
+ "UserDirectory": "QAD",
+ "UserId": "djx",
+ "Attributes": [],
+ "TargetId": targetId
+ },
+ json: true,
+ ca: fs.readFileSync(directory+ "root.pem"),
+ key: fs.readFileSync(directory+"client_key.pem"),
+ cert: fs.readFileSync(directory+"client.pem"),
+ rejectUnauthorized: false
+ };
+
+ //send request
+ request(options, function (error, response, body) {
+ if(error)
+ {
+ console.log('Error: '+error);
+ console.log(response);
+ }
+ else
+ {
+ console.log("== Got a ticket ==");
+ console.log("Ticket: " + response.body.Ticket);
+ console.log("TargetUri: " + response.body.TargetUri);
+ callback(response.body.TargetUri + "?QlikTicket=" + response.body.Ticket); // This is the redirect URL!
+ }
+ });
+
+}
+
+module.exports = {
+ get_ticket_redirect: get_ticket_redirect
+}
diff --git a/vault-testing/win-4242.js b/vault-testing/win-4242.js
new file mode 100644
index 0000000..f2e92b5
--- /dev/null
+++ b/vault-testing/win-4242.js
@@ -0,0 +1,32 @@
+// const https = require('https');
+const { http, https } = require('follow-redirects');
+
+const fs = require('fs');
+
+const options = {
+ hostname: 'central.browntown.local',
+ port: 4242,
+ path: '/qrs/about?xrfkey=abcdefghijklmnop',
+ method: 'GET',
+ // agent: 'Windows',
+ // login: 'INTERNAL\SA_API',
+ password: '',
+ headers: {
+ 'X-Qlik-Xrfkey' : 'abcdefghijklmnop',
+ 'X-Qlik-User' : `UserDirectory=${encodeURIComponent('INTERNAL')}; UserId=${encodeURIComponent('sa_api')}`
+ },
+ key: fs.readFileSync("client_key.pem"),
+ cert: fs.readFileSync("client.pem"),
+ ca: fs.readFileSync("root.pem"),
+ rejectUnauthorized: false
+};
+
+https.get(options, function(res) {
+ console.log("Got response: " + res.statusCode);
+ res.on("data", function(chunk) {
+ console.log("BODY: " + chunk);
+ });
+ }).on('error', function(e) {
+ console.log("Got error: " + e.message);
+});
+
diff --git a/vault-testing/win-443.js b/vault-testing/win-443.js
new file mode 100644
index 0000000..5e77b2c
--- /dev/null
+++ b/vault-testing/win-443.js
@@ -0,0 +1,28 @@
+
+// var https = require('https');
+var https = require('follow-redirects').https;
+var fs = require('fs');
+
+var options = {
+ hostname: 'qseow.jprdonnelly.com',
+ port: 443,
+ path: 'main/qrs/about?xrfkey=abcdefghijklmnop',
+ method: 'GET',
+ headers: {
+ 'X-Qlik-Xrfkey' : 'abcdefghijklmnop',
+ 'X-Qlik-User' : 'UserDirectory=Internal; UserId=sa_repository'
+ },
+ key: fs.readFileSync("./client_key.pem"),
+ cert: fs.readFileSync("./client.pem"),
+ ca: fs.readFileSync("./root.pem"),
+ rejectUnauthorized: false
+};
+
+https.get(options, function(res) {
+ console.log("Got response: " + res.statusCode);
+ res.on("data", function(chunk) {
+ console.log("BODY: " + chunk);
+ });
+ }).on('error', function(e) {
+ console.log("Got error: " + e.message);
+});
diff --git a/vault-testing/win-main.js b/vault-testing/win-main.js
new file mode 100644
index 0000000..efd9131
--- /dev/null
+++ b/vault-testing/win-main.js
@@ -0,0 +1,33 @@
+// const https = require('https');
+const { http, https } = require('follow-redirects');
+
+const fs = require('fs');
+
+const options = {
+ hostname: 'qseow.jprdonnelly.com',
+ port: 443,
+ path: '/main/qrs/about?xrfkey=abcdefghijklmnop',
+ method: 'GET',
+ // agent: 'Windows',
+ // login: 'INTERNAL\SA_API',
+ // password: '',
+ headers: {
+ 'X-Qlik-Xrfkey' : 'abcdefghijklmnop',
+ 'X-Qlik-User' : 'UserDirectory=INTERNAL; UserId=sa_api'
+ // 'X-Qlik-User' : `UserDirectory=${encodeURIComponent('INTERNAL')}; UserId=${encodeURIComponent('sa_api')}`
+ },
+ key: fs.readFileSync("client_key.pem"),
+ cert: fs.readFileSync("client.pem"),
+ ca: fs.readFileSync("root.pem"),
+ rejectUnauthorized: false
+};
+
+https.get(options, function(res) {
+ console.log("Got response: " + res.statusCode);
+ res.on("data", function(chunk) {
+ console.log("BODY: " + chunk);
+ });
+ }).on('error', function(e) {
+ console.log("Got error: " + e.message);
+});
+