@sap_oss/wdio-qmate-service 2.13.2 → 2.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/.eslintignore +2 -1
  2. package/lib/reuse/modules/util/Util.d.ts +5 -1
  3. package/lib/reuse/modules/util/Util.js.map +1 -1
  4. package/lib/reuse/modules/util/data.d.ts +14 -2
  5. package/lib/reuse/modules/util/data.js +21 -9
  6. package/lib/reuse/modules/util/data.js.map +1 -1
  7. package/lib/scripts/hooks/utils/decryption.d.ts +0 -17
  8. package/lib/scripts/hooks/utils/decryption.js +24 -121
  9. package/lib/scripts/hooks/utils/decryption.js.map +1 -1
  10. package/package.json +3 -2
  11. package/packages/qcrypt/dist/classes/Decrypter.d.ts +41 -0
  12. package/packages/qcrypt/dist/classes/Decrypter.js +172 -0
  13. package/packages/qcrypt/dist/classes/Encrypter.d.ts +49 -0
  14. package/packages/qcrypt/dist/classes/Encrypter.js +164 -0
  15. package/packages/qcrypt/dist/classes/KeyGenerator.d.ts +19 -0
  16. package/packages/qcrypt/dist/classes/KeyGenerator.js +53 -0
  17. package/packages/qcrypt/dist/classes/helper/ErrorHandler.d.ts +11 -0
  18. package/packages/qcrypt/dist/classes/helper/ErrorHandler.js +69 -0
  19. package/packages/qcrypt/dist/classes/helper/Util.d.ts +69 -0
  20. package/packages/qcrypt/dist/classes/helper/Util.js +126 -0
  21. package/packages/qcrypt/dist/constants/common.d.ts +12 -0
  22. package/packages/qcrypt/dist/constants/common.js +15 -0
  23. package/packages/qcrypt/dist/index.d.ts +4 -0
  24. package/packages/qcrypt/dist/index.js +12 -0
  25. package/packages/qcrypt/dist/keys/public.key +8 -0
  26. package/packages/qcrypt/dist/types/common.d.ts +27 -0
  27. package/packages/qcrypt/dist/types/common.js +2 -0
  28. package/packages/qcrypt/package.json +8 -0
  29. package/test/reuse/util/data/data/decrypt.base64.secure.json +3 -0
  30. package/test/reuse/util/data/data/decrypt.noRepo.secure.json +3 -0
  31. package/test/reuse/util/data/data/decrypt.secure.json +3 -0
  32. package/test/reuse/util/data/data/{test.secure.json → getSecureData.secure.json} +1 -1
  33. package/test/reuse/util/data/decrypt.spec.js +57 -4
  34. package/test/reuse/util/data/{getSecureData.spec.js → getSecureData1.spec.js} +11 -15
  35. package/test/reuse/util/data/getSecureData2.spec.js +11 -0
  36. package/test/reuse/util/data/test.data.privacy.conf.js +5 -2
  37. /package/test/reuse/util/data/customSourceData/{test.secure.json → getSecureData.secure.json} +0 -0
package/.eslintignore CHANGED
@@ -1,3 +1,4 @@
1
1
  node_modules/
2
2
  results/
3
- lib/
3
+ lib/
4
+ packages/
@@ -8,7 +8,11 @@ import { System } from "./system";
8
8
  import { Component } from "./component";
9
9
  import { UserSettings } from "./userSettings";
10
10
  interface DataHooksExtended extends Data {
11
- decrypt: (input: string | Array<string>) => string;
11
+ decrypt: (input: string | Array<string>, options?: {
12
+ useBase64Input: boolean;
13
+ useBase64Output: boolean;
14
+ includeRepoUrl: boolean;
15
+ }) => string;
12
16
  privateKeyFound: boolean;
13
17
  }
14
18
  export declare class Util {
@@ -1 +1 @@
1
- {"version":3,"file":"Util.js","sourceRoot":"","sources":["../../../../src/reuse/modules/util/Util.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA6C;AAC7C,wDAA6C;AAC7C,kDAAoC;AACpC,kDAAoC;AACpC,4DAAmD;AACnD,0DAA4D;AAC5D,sDAA0C;AAC1C,4DAAmD;AACnD,kEAA4D;AAQ5D,MAAa,IAAI;IAAjB;QACE,YAAO,GAAY,iBAAO,CAAC;QAC3B,YAAO,GAAY,iBAAO,CAAC;QAC3B,SAAI,GAAsB,cAAyB,CAAC;QACpD,SAAI,GAAS,cAAI,CAAC;QAClB,cAAS,GAAc,mBAAS,CAAC;QACjC,aAAQ,GAAmB,kBAAc,CAAC;QAC1C,WAAM,GAAW,gBAAM,CAAC;QACxB,cAAS,GAAc,mBAAS,CAAC;QACjC,iBAAY,GAAiB,sBAAY,CAAC;IAC5C,CAAC;CAAA;AAVD,oBAUC;AAED,kBAAe,IAAI,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"Util.js","sourceRoot":"","sources":["../../../../src/reuse/modules/util/Util.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA6C;AAC7C,wDAA6C;AAC7C,kDAAoC;AACpC,kDAAoC;AACpC,4DAAmD;AACnD,0DAA4D;AAC5D,sDAA0C;AAC1C,4DAAmD;AACnD,kEAA4D;AAO5D,MAAa,IAAI;IAAjB;QACE,YAAO,GAAY,iBAAO,CAAC;QAC3B,YAAO,GAAY,iBAAO,CAAC;QAC3B,SAAI,GAAsB,cAAyB,CAAC;QACpD,SAAI,GAAS,cAAI,CAAC;QAClB,cAAS,GAAc,mBAAS,CAAC;QACjC,aAAQ,GAAmB,kBAAc,CAAC;QAC1C,WAAM,GAAW,gBAAM,CAAC;QACxB,cAAS,GAAc,mBAAS,CAAC;QACjC,iBAAY,GAAiB,sBAAY,CAAC;IAC5C,CAAC;CAAA;AAVD,oBAUC;AAED,kBAAe,IAAI,IAAI,EAAE,CAAC"}
@@ -1,3 +1,8 @@
1
+ type DecryptionOptions = {
2
+ useBase64Input: boolean;
3
+ useBase64Output: boolean;
4
+ includeRepoUrl: boolean;
5
+ };
1
6
  /**
2
7
  * @class data
3
8
  * @memberof util
@@ -5,6 +10,7 @@
5
10
  export declare class Data {
6
11
  private vlf;
7
12
  private ErrorHandler;
13
+ private _alreadyDecryptedData;
8
14
  /**
9
15
  * @function getData
10
16
  * @memberOf util.data
@@ -21,10 +27,15 @@ export declare class Data {
21
27
  * @description Returns and encrypts the data object with the given filename (JSON, stored in data folder). Will return the local file object if private key is not accessible.
22
28
  * @param {String} filename - The name of the data file (without suffix '.secure' or '.local').
23
29
  * @param {String} [source=data] - The source key defined under params.import of the config file.
30
+ * @param {Object} [options] - The options object.
24
31
  * @returns {Object} The encrypted or local data object.
25
32
  * @example const secureData = util.data.getSecureData("myTest");
26
33
  */
27
- getSecureData(filename: string, source?: string): object;
34
+ getSecureData(filename: string, source?: string, options?: {
35
+ useBase64Input: false;
36
+ useBase64Output: false;
37
+ includeRepoUrl: true;
38
+ }): object;
28
39
  /**
29
40
  * @function readDataFromFile
30
41
  * @memberOf util.data
@@ -48,10 +59,11 @@ export declare class Data {
48
59
  * @memberOf util.data
49
60
  * @description Decrypts the passed input data.
50
61
  * @param {String | Array<String>} data - The encrypted data to decrypt. Single value or array of values for different keys.
62
+ * @param {Object} options - The decryption options.
51
63
  * @returns {String} The decrypted data.
52
64
  * @example const decrypted = util.data.decrypt("d704004c262faa8ef4bdcf34c8a94883e15524872c7bef334d26a391a1934cf47338b749d99426980ee4cc7a81deaef21439c6894ab0324cdb29b9b6332635baca442651c5d37847f52bb90b8868e037271a7d456024b39b65fdf4dc62e8d82a3d5683a72e4324c59d339742fc79749f0ee74abef916d38e306218adc48e3547a2b346962249320c962d22cb46d9998de36d8219a2496c0997d0fc389f76fb1431a9b57c317886e9c9795c0a09ad98d9fa0b7687d10814dc7973397f3f72a227a04ead4c3d1d428c096a51922ffc4d7afc3952df1c130def5c5fb3e834605cbf1454885966cc65c77046343f4c678e74931fb2dd6cac8dae17837cf674f288d6550dd7fa6b01f5b7ea68aa6bd27d79dd5d53edb5fd4b4edce824bd31b3939352ad7a71a16bab8c54025c2bb92c54e022fcd23ff08bc54a17fc50d00dc3b884cadbfdefe1e75901fdf80e7324ad02a891f2c4863fa120ca238520b79126c65a03");
53
65
  */
54
- decrypt(data: string | Array<string>): string;
66
+ decrypt(data: string | Array<string>, options: DecryptionOptions): string;
55
67
  private _decryptRecursively;
56
68
  }
57
69
  declare const _default: Data;
@@ -27,10 +27,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.Data = void 0;
30
- const verboseLogger_1 = require("../../helper/verboseLogger");
30
+ // Common imports
31
31
  const fs_1 = require("fs");
32
32
  const path = __importStar(require("path"));
33
+ // Own imports
33
34
  const dataExchangeUtil_1 = __importDefault(require("../../../scripts/dataExchange/dataExchangeUtil"));
35
+ const verboseLogger_1 = require("../../helper/verboseLogger");
34
36
  const errorHandler_1 = __importDefault(require("../../helper/errorHandler"));
35
37
  /**
36
38
  * @class data
@@ -38,9 +40,12 @@ const errorHandler_1 = __importDefault(require("../../helper/errorHandler"));
38
40
  */
39
41
  class Data {
40
42
  constructor() {
43
+ // ========================== Class variables ==========================
41
44
  this.vlf = new verboseLogger_1.VerboseLoggerFactory("util", "data");
42
45
  this.ErrorHandler = new errorHandler_1.default();
46
+ this._alreadyDecryptedData = [];
43
47
  }
48
+ // ========================== Public functions ==========================
44
49
  /**
45
50
  * @function getData
46
51
  * @memberOf util.data
@@ -70,10 +75,11 @@ class Data {
70
75
  * @description Returns and encrypts the data object with the given filename (JSON, stored in data folder). Will return the local file object if private key is not accessible.
71
76
  * @param {String} filename - The name of the data file (without suffix '.secure' or '.local').
72
77
  * @param {String} [source=data] - The source key defined under params.import of the config file.
78
+ * @param {Object} [options] - The options object.
73
79
  * @returns {Object} The encrypted or local data object.
74
80
  * @example const secureData = util.data.getSecureData("myTest");
75
81
  */
76
- getSecureData(filename, source = "data") {
82
+ getSecureData(filename, source = "data", options) {
77
83
  const vl = this.vlf.initLog(this.getSecureData);
78
84
  const privateKeyFound = global.util.data.privateKeyFound === true;
79
85
  if (privateKeyFound) {
@@ -86,9 +92,13 @@ class Data {
86
92
  if (browser.config.params && browser.config.params.import && browser.config.params.import[source]) {
87
93
  if (browser.config.params.import[source][filename]) {
88
94
  const data = browser.config.params.import[source][filename];
89
- if (privateKeyFound) {
90
- this._decryptRecursively(data);
95
+ const dataIdentifier = `${source}_${filename}`;
96
+ // Decrypt data if not already decrypted and private key is found
97
+ if (!this._alreadyDecryptedData.includes(dataIdentifier) && privateKeyFound) {
98
+ this._decryptRecursively(data, options);
91
99
  }
100
+ // Make sure data is not decrypted again
101
+ this._alreadyDecryptedData.push(dataIdentifier);
92
102
  return data;
93
103
  }
94
104
  else {
@@ -144,22 +154,24 @@ class Data {
144
154
  * @memberOf util.data
145
155
  * @description Decrypts the passed input data.
146
156
  * @param {String | Array<String>} data - The encrypted data to decrypt. Single value or array of values for different keys.
157
+ * @param {Object} options - The decryption options.
147
158
  * @returns {String} The decrypted data.
148
159
  * @example const decrypted = util.data.decrypt("d704004c262faa8ef4bdcf34c8a94883e15524872c7bef334d26a391a1934cf47338b749d99426980ee4cc7a81deaef21439c6894ab0324cdb29b9b6332635baca442651c5d37847f52bb90b8868e037271a7d456024b39b65fdf4dc62e8d82a3d5683a72e4324c59d339742fc79749f0ee74abef916d38e306218adc48e3547a2b346962249320c962d22cb46d9998de36d8219a2496c0997d0fc389f76fb1431a9b57c317886e9c9795c0a09ad98d9fa0b7687d10814dc7973397f3f72a227a04ead4c3d1d428c096a51922ffc4d7afc3952df1c130def5c5fb3e834605cbf1454885966cc65c77046343f4c678e74931fb2dd6cac8dae17837cf674f288d6550dd7fa6b01f5b7ea68aa6bd27d79dd5d53edb5fd4b4edce824bd31b3939352ad7a71a16bab8c54025c2bb92c54e022fcd23ff08bc54a17fc50d00dc3b884cadbfdefe1e75901fdf80e7324ad02a891f2c4863fa120ca238520b79126c65a03");
149
160
  */
150
- decrypt(data) {
161
+ decrypt(data, options) {
151
162
  const vl = this.vlf.initLog(this.decrypt);
152
- return global.util.data.decrypt(data); // Function is defined under: scripts\hooks\utils\decryption.js
163
+ return global.util.data.decrypt(data, options); // Function is defined under: scripts\hooks\utils\decryption.js
153
164
  }
154
- _decryptRecursively(data) {
165
+ // ========================== Private functions ==========================
166
+ _decryptRecursively(data, options) {
155
167
  const vl = this.vlf.initLog(this._decryptRecursively);
156
168
  vl.log(`Decrypting ${data}`);
157
169
  for (const key in data) {
158
170
  if (typeof data[key] === "object" && !Array.isArray(data[key])) {
159
- data[key] = this._decryptRecursively(data[key]);
171
+ data[key] = this._decryptRecursively(data[key], options);
160
172
  }
161
173
  else if (typeof data[key] === "string" || Array.isArray(data[key])) {
162
- data[key] = global.util.data.decrypt(data[key]);
174
+ data[key] = global.util.data.decrypt(data[key], options);
163
175
  }
164
176
  }
165
177
  return data;
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","sourceRoot":"","sources":["../../../../src/reuse/modules/util/data.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEb,8DAAkE;AAClE,2BAAoC;AACpC,2CAA6B;AAC7B,sGAAkF;AAClF,6EAAqD;AAErD;;;GAGG;AACH,MAAa,IAAI;IAAjB;QACU,QAAG,GAAG,IAAI,oCAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,iBAAY,GAAG,IAAI,sBAAY,EAAE,CAAC;IAkI5C,CAAC;IAhIC;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAgB,EAAE,SAAiB,MAAM;QAC/C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAClG,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnD,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,SAAS,QAAQ,sCAAsC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,cAAc,MAAM,0BAA0B,CAAC,CAAC,CAAC;QACnG,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,aAAa,CAAC,QAAgB,EAAE,SAAiB,MAAM;QACrD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC;QAElE,IAAI,eAAe,EAAE,CAAC;YACpB,QAAQ,GAAG,GAAG,QAAQ,SAAS,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;YACrF,QAAQ,GAAG,GAAG,QAAQ,QAAQ,CAAC;QACjC,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAClG,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAE5D,IAAI,eAAe,EAAE,CAAC;oBACpB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBACjC,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,SAAS,QAAQ,sCAAsC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,cAAc,MAAM,0BAA0B,CAAC,CAAC,CAAC;QACnG,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,gBAAgB,CAAC,QAAgB;QACrC,MAAM,gBAAgB,GAAG,0BAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAEvE,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,aAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,KAAK,EAAE,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,IAAS;QAC/C,MAAM,gBAAgB,GAAG,0BAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAEvE,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,CAAC;YACH,MAAM,aAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,KAAK,EAAE,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,OAAO,CAAC,IAA4B;QAClC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,+DAA+D;IACxG,CAAC;IAEO,mBAAmB,CAAC,IAAS;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACtD,EAAE,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC/D,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAClD,CAAC;iBAAM,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACrE,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AApID,oBAoIC;AACD,kBAAe,IAAI,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../../../src/reuse/modules/util/data.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,6 @@
1
1
  declare class Decryption {
2
- private path;
3
- private fs;
4
- private crypto;
5
- private childProcess;
6
2
  initDecryptFunction(): void;
7
- retrievePrivateKey(dirname: string): any;
8
- decryptSecureData(privateKey: string, input: string | Array<string>, options?: {
9
- base64Output: boolean;
10
- base64Input: boolean;
11
- }): any;
12
3
  decryptSauceConfig(config: Record<string, any>): void;
13
- private _decryptDataWithRepoName;
14
- private _unifyRepoUrl;
15
- private _unifySSHUrl;
16
- private _unifyHTTPUrl;
17
- private _hashHostAccountAndRepo;
18
- private _parseKeyByEncoding;
19
- private _base64ToUtf8;
20
- private _utf8ToBase64;
21
4
  }
22
5
  declare const _default: Decryption;
23
6
  export default _default;
@@ -1,18 +1,33 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ const path_1 = __importDefault(require("path"));
7
+ const qcrypt_1 = require("qcrypt");
8
+ const DEFAULT_OPTIONS = {
9
+ useBase64Input: false,
10
+ useBase64Output: false,
11
+ includeRepoUrl: true
12
+ };
3
13
  class Decryption {
4
- constructor() {
5
- this.path = require("path");
6
- this.fs = require("fs");
7
- this.crypto = require("crypto");
8
- this.childProcess = require("child_process");
9
- }
10
14
  initDecryptFunction() {
11
15
  try {
12
- const privateKey = this.retrievePrivateKey(this.path.resolve(__dirname, "../../../.."));
16
+ const privateKey = qcrypt_1.Decrypter.retrievePrivateKey(path_1.default.resolve(__dirname, "../../../.."));
13
17
  global.util.data.privateKeyFound = true;
14
- global.util.data.decrypt = (input) => {
15
- return this.decryptSecureData(privateKey, input);
18
+ global.util.data.decrypt = (input, options) => {
19
+ const mergedOptions = { ...DEFAULT_OPTIONS, ...options };
20
+ try {
21
+ return qcrypt_1.Decrypter.decryptData(input, privateKey, mergedOptions);
22
+ }
23
+ catch (error) {
24
+ if (error instanceof Error) {
25
+ throw new Error(`Function 'decrypt' failed: ${error.message}`);
26
+ }
27
+ else {
28
+ throw new Error("Function 'decrypt' failed: Unknown error");
29
+ }
30
+ }
16
31
  };
17
32
  }
18
33
  catch (error) {
@@ -21,57 +36,6 @@ class Decryption {
21
36
  };
22
37
  }
23
38
  }
24
- retrievePrivateKey(dirname) {
25
- let privateKey;
26
- try {
27
- privateKey = this.fs.readFileSync(this.path.resolve(process.cwd(), "private.key"), "utf8");
28
- }
29
- catch (error) {
30
- if (process.env.QMATE_PRIVATE_KEY) {
31
- privateKey = process.env.QMATE_PRIVATE_KEY;
32
- privateKey = privateKey.replace(/\\n/gm, "\n");
33
- privateKey = privateKey.replace(/\\s/gm, " ");
34
- }
35
- else {
36
- try {
37
- privateKey = this.fs.readFileSync(this.path.resolve(dirname, "private.key"), "utf8");
38
- }
39
- catch (error) {
40
- throw new Error(`No private key found: ${error}`);
41
- }
42
- }
43
- }
44
- process.env.QMATE_PRIVATE_KEY = "";
45
- return privateKey;
46
- }
47
- decryptSecureData(privateKey, input, options) {
48
- // input data can either be as single value or array of values for different keys
49
- if (typeof input === "string") {
50
- input = [input];
51
- }
52
- let decryptedDataByKey;
53
- let decryptError;
54
- for (const data of input) {
55
- try {
56
- const dataEncoded = options?.base64Input ? this._base64ToUtf8(data) : data;
57
- const decryptedDataByRepoName = Buffer.from(this._decryptDataWithRepoName(Buffer.from(dataEncoded, "hex")), "base64");
58
- decryptedDataByKey = this.crypto.privateDecrypt({
59
- key: this._parseKeyByEncoding(privateKey),
60
- padding: this.crypto.constants.RSA_PKCS1_OAEP_PADDING,
61
- oaepHash: "sha256",
62
- }, decryptedDataByRepoName);
63
- }
64
- catch (error) {
65
- decryptError = error;
66
- }
67
- }
68
- if (decryptedDataByKey) {
69
- return options?.base64Output ? this._utf8ToBase64(decryptedDataByKey.toString()) : decryptedDataByKey.toString();
70
- }
71
- else {
72
- throw new Error(`Function 'decrypt' failed: ${decryptError}`);
73
- }
74
- }
75
39
  decryptSauceConfig(config) {
76
40
  try {
77
41
  config.user = util.data.decrypt(config.user);
@@ -86,67 +50,6 @@ class Decryption {
86
50
  // do nothing, key was not encrypted
87
51
  }
88
52
  }
89
- _decryptDataWithRepoName(data) {
90
- let repoUrl;
91
- try {
92
- repoUrl = this.childProcess.execSync("git config --get remote.origin.url").toString();
93
- }
94
- catch (error) {
95
- throw new Error("Please execute from a valid git repository.");
96
- }
97
- const repoUrlContractHashed = this._unifyRepoUrl(repoUrl);
98
- const salt = "72hdh393987f0hdc";
99
- const secretKey = this.crypto.pbkdf2Sync(repoUrlContractHashed, salt, 100000, 32, "sha512");
100
- const iv = "203efccd80e94d9f";
101
- const decipher = this.crypto.createDecipheriv("aes-256-cbc", secretKey, iv);
102
- let decryptedData = decipher.update(data, "hex", "utf8");
103
- decryptedData += decipher.final("utf8");
104
- return decryptedData;
105
- }
106
- _unifyRepoUrl(url) {
107
- const httpsRegex = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/gm;
108
- const sshRegex = /git@.*:.*\/.*.git/gm;
109
- if (url.match(httpsRegex)) {
110
- return this._unifyHTTPUrl(url);
111
- }
112
- else if (url.match(sshRegex)) {
113
- return this._unifySSHUrl(url);
114
- }
115
- else {
116
- throw new Error("Repo url is not valid");
117
- }
118
- }
119
- _unifySSHUrl(url) {
120
- const [hostAndAccount, repo] = url.replace("git@", "").trim().split("/");
121
- const [host, account] = hostAndAccount.split(":");
122
- const repoTrimmed = repo.endsWith(".git") ? repo.slice(0, -4) : repo;
123
- return this._hashHostAccountAndRepo(host, account, repoTrimmed);
124
- }
125
- _unifyHTTPUrl(url) {
126
- const urlWithoutProtocol = url.replace(/((\bhttp\b)|(\bhttps\b)):\/\//, "").trim();
127
- const [host, account, repo] = urlWithoutProtocol.split("/");
128
- const repoTrimmed = repo.endsWith(".git") ? repo.slice(0, -4) : repo;
129
- return this._hashHostAccountAndRepo(host, account, repoTrimmed);
130
- }
131
- _hashHostAccountAndRepo(host, account, repo) {
132
- return this.crypto.createHash("sha256").update(`${host}${account}${repo}`).digest("hex");
133
- }
134
- _parseKeyByEncoding(key) {
135
- const utf8Regex = /-*(BEGIN|END)\s\w*\s(PRIVATE|PUBLIC)\sKEY-*/gm;
136
- if (utf8Regex.test(key)) {
137
- return key;
138
- }
139
- else {
140
- console.log("Key was processed in base64 format");
141
- return this._base64ToUtf8(key);
142
- }
143
- }
144
- _base64ToUtf8(string) {
145
- return Buffer.from(string, "base64").toString("utf-8");
146
- }
147
- _utf8ToBase64(string) {
148
- return Buffer.from(string, "utf-8").toString("base64");
149
- }
150
53
  }
151
54
  exports.default = new Decryption();
152
55
  //# sourceMappingURL=decryption.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"decryption.js","sourceRoot":"","sources":["../../../../src/scripts/hooks/utils/decryption.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decryption.js","sourceRoot":"","sources":["../../../../src/scripts/hooks/utils/decryption.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AAExB,mCAAmC;AAEnC,MAAM,eAAe,GAAG;IACtB,cAAc,EAAE,KAAK;IACrB,eAAe,EAAE,KAAK;IACtB,cAAc,EAAE,IAAI;CACrB,CAAC;AAEF,MAAM,UAAU;IACd,mBAAmB;QACjB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,kBAAS,CAAC,kBAAkB,CAAC,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;YACxF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;gBAC5C,MAAM,aAAa,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,EAAE,CAAC;gBACzD,IAAI,CAAC;oBACH,OAAO,kBAAS,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;gBACjE,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;wBAC3B,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBACjE,CAAC;yBAAM,CAAC;wBACN,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;oBAC9D,CAAC;gBACH,CAAC;YACH,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG;gBACzB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACtE,CAAC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,MAA2B;QAC5C,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qCAAqC;QACvC,CAAC;QACD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oCAAoC;QACtC,CAAC;IACH,CAAC;CACF;AACD,kBAAe,IAAI,UAAU,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sap_oss/wdio-qmate-service",
3
- "version": "2.13.2",
3
+ "version": "2.14.0",
4
4
  "author": "SAP SE",
5
5
  "types": "./@types/index.d.ts",
6
6
  "main": "./lib/index.js",
@@ -144,7 +144,8 @@
144
144
  "undici": "^7.1.0",
145
145
  "xlsx": "^0.18.5",
146
146
  "xml2js": "^0.6.0",
147
- "yargs": "^17.1.1"
147
+ "yargs": "^17.1.1",
148
+ "qcrypt": "file:./packages/qcrypt"
148
149
  },
149
150
  "devDependencies": {
150
151
  "@types/fs-extra": "^11.0.1",
@@ -0,0 +1,41 @@
1
+ import { DecryptionOptions, PrintOptions, SecureData } from "../types/common";
2
+ export default abstract class Decrypter {
3
+ /**
4
+ * @description Retrieves the private key from the file system and decrypts data using it.
5
+ * @param data Data to be decrypted.
6
+ * @param decryptionOptions Decryption options.
7
+ * @returns Decrypted data.
8
+ */
9
+ static decryptDataForAvailableKey(data: SecureData, decryptionOptions: DecryptionOptions, printOptions: PrintOptions): string;
10
+ /**
11
+ * @description Decrypts data using the passed private key.
12
+ * @param data Data to be decrypted. Can either be as single value or array of values for different keys.
13
+ * @param privateKey Private key.
14
+ * @param options Decryption options.
15
+ * @returns Decrypted data.
16
+ */
17
+ static decryptData(data: SecureData, privateKey: string, options: DecryptionOptions): string;
18
+ /**
19
+ * @description Retrieves the private key from the current working directory, env var or the given path.
20
+ * @param keyPath Path to the directory containing the private key.
21
+ * @returns Private key.
22
+ */
23
+ static retrievePrivateKey(keyPath: string): string;
24
+ /**
25
+ * @description Decrypts data using a password.
26
+ * @param data Data to be decrypted.
27
+ * @returns Decrypted data.
28
+ */
29
+ private static _decryptDataWithPassword;
30
+ /**
31
+ * @description Prints the input options and data to the console.
32
+ * @param options Decryption options.
33
+ * @param data Data to be encrypted.
34
+ */
35
+ private static _printInput;
36
+ /**
37
+ * @description Prints the decrypted data.
38
+ * @param decryptedData Decrypted data.
39
+ */
40
+ private static _printOutput;
41
+ }
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ // Imports
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const crypto_1 = __importDefault(require("crypto"));
10
+ const Util_1 = __importDefault(require("./helper/Util"));
11
+ const ErrorHandler_1 = __importDefault(require("./helper/ErrorHandler"));
12
+ // Constants
13
+ const common_1 = require("../constants/common");
14
+ class Decrypter {
15
+ // ========================== Public functions ==========================
16
+ /**
17
+ * @description Retrieves the private key from the file system and decrypts data using it.
18
+ * @param data Data to be decrypted.
19
+ * @param decryptionOptions Decryption options.
20
+ * @returns Decrypted data.
21
+ */
22
+ static decryptDataForAvailableKey(data, decryptionOptions, printOptions) {
23
+ if (printOptions === null || printOptions === void 0 ? void 0 : printOptions.printInput) {
24
+ this._printInput(data, decryptionOptions);
25
+ }
26
+ const commonKeyPath = path_1.default.resolve(__dirname, "../keys");
27
+ const privateKey = this.retrievePrivateKey(commonKeyPath);
28
+ const decryptedData = this.decryptData(data, privateKey, decryptionOptions);
29
+ if (printOptions === null || printOptions === void 0 ? void 0 : printOptions.printOutput) {
30
+ this._printOutput(decryptedData);
31
+ }
32
+ return decryptedData;
33
+ }
34
+ /**
35
+ * @description Decrypts data using the passed private key.
36
+ * @param data Data to be decrypted. Can either be as single value or array of values for different keys.
37
+ * @param privateKey Private key.
38
+ * @param options Decryption options.
39
+ * @returns Decrypted data.
40
+ */
41
+ static decryptData(data, privateKey, options) {
42
+ let encodedData;
43
+ let decryptedDataByKey;
44
+ let decryptedDataByRepoName;
45
+ const decryptErrors = [];
46
+ data = Util_1.default.convertStringToArray(data);
47
+ for (const [index, value] of data.entries()) {
48
+ // Convert base64 encoded data to utf8
49
+ try {
50
+ encodedData = options.useBase64Input ? Util_1.default.base64ToUtf8(value) : value;
51
+ }
52
+ catch (error) {
53
+ decryptErrors.push(new Error(`\n - Invalid input data format at index ${index}. ${error.message}`));
54
+ continue;
55
+ }
56
+ // Decrypt data with password
57
+ try {
58
+ decryptedDataByRepoName = Buffer.from(this._decryptDataWithPassword(encodedData, options), "base64");
59
+ }
60
+ catch (error) {
61
+ const errorMessage = ErrorHandler_1.default.handleDecryptDataWithPasswordError(error, options);
62
+ decryptErrors.push(new Error(`\n - Decryption with password failed for data at index ${index}. ${errorMessage}`));
63
+ continue;
64
+ }
65
+ // Decrypt data with private key
66
+ try {
67
+ decryptedDataByKey = crypto_1.default.privateDecrypt({
68
+ key: Util_1.default.parseKeyByEncoding(privateKey),
69
+ padding: crypto_1.default.constants.RSA_PKCS1_OAEP_PADDING,
70
+ oaepHash: "sha256"
71
+ }, decryptedDataByRepoName);
72
+ }
73
+ catch (error) {
74
+ const errorMessage = ErrorHandler_1.default.handleDecryptDataWithPrivateKeyError(error);
75
+ decryptErrors.push(new Error(`\n - Decryption with private key failed for data at index ${index}. ${errorMessage}`));
76
+ }
77
+ }
78
+ // Return the decrypted data if successful
79
+ if (decryptedDataByKey) {
80
+ return options.useBase64Output ? Util_1.default.utf8ToBase64(decryptedDataByKey.toString()) : decryptedDataByKey.toString();
81
+ }
82
+ else {
83
+ throw new Error(`${ErrorHandler_1.default.DECRYPTION_ERROR_MESSAGE}: ${decryptErrors.map((error) => error.message).join(" ")}`);
84
+ }
85
+ }
86
+ /**
87
+ * @description Retrieves the private key from the current working directory, env var or the given path.
88
+ * @param keyPath Path to the directory containing the private key.
89
+ * @returns Private key.
90
+ */
91
+ static retrievePrivateKey(keyPath) {
92
+ let privateKey;
93
+ if (fs_1.default.existsSync(path_1.default.resolve(process.cwd(), common_1.PRIVATE_KEY_NAME))) {
94
+ privateKey = fs_1.default.readFileSync(path_1.default.resolve(process.cwd(), common_1.PRIVATE_KEY_NAME), "utf8");
95
+ }
96
+ else if (process.env.QMATE_PRIVATE_KEY) {
97
+ privateKey = Util_1.default.normalizeKey(process.env.QMATE_PRIVATE_KEY);
98
+ }
99
+ else if (fs_1.default.existsSync(path_1.default.resolve(keyPath, common_1.PRIVATE_KEY_NAME))) {
100
+ privateKey = fs_1.default.readFileSync(path_1.default.resolve(keyPath, common_1.PRIVATE_KEY_NAME), "utf8");
101
+ }
102
+ if (!privateKey) {
103
+ throw new Error(`${ErrorHandler_1.default.NO_PRIVATE_KEY_ERROR_MESSAGE}.`);
104
+ }
105
+ // Clear the private key from the environment variables after use
106
+ process.env.QMATE_PRIVATE_KEY = "";
107
+ return privateKey;
108
+ }
109
+ // ========================== Private functions ==========================
110
+ /**
111
+ * @description Decrypts data using a password.
112
+ * @param data Data to be decrypted.
113
+ * @returns Decrypted data.
114
+ */
115
+ static _decryptDataWithPassword(data, options) {
116
+ let secretKey;
117
+ if (options.includeRepoUrl) {
118
+ const repoUrl = Util_1.default.getRepoUrl();
119
+ const repoUrlContractHashed = Util_1.default.unifyRepoUrl(repoUrl);
120
+ secretKey = crypto_1.default.pbkdf2Sync(repoUrlContractHashed, common_1.SALT, common_1.ITERATIONS, common_1.KEY_LENGTH, common_1.DIGEST);
121
+ }
122
+ else {
123
+ secretKey = crypto_1.default.pbkdf2Sync(common_1.STATIC_PASSWORD, common_1.SALT, common_1.ITERATIONS, common_1.KEY_LENGTH, common_1.DIGEST);
124
+ }
125
+ try {
126
+ const decipher = crypto_1.default.createDecipheriv(common_1.ALGORITHM, secretKey, common_1.IV);
127
+ let decryptedData = decipher.update(data, "hex", "utf8");
128
+ decryptedData += decipher.final("utf8");
129
+ return decryptedData;
130
+ }
131
+ catch (error) {
132
+ ErrorHandler_1.default.handleAndThrowError(error);
133
+ }
134
+ }
135
+ /**
136
+ * @description Prints the input options and data to the console.
137
+ * @param options Decryption options.
138
+ * @param data Data to be encrypted.
139
+ */
140
+ static _printInput(data, options) {
141
+ console.log("\n===========INPUT==========================================================");
142
+ if (options.includeRepoUrl || options.useBase64Input || options.useBase64Output) {
143
+ console.log("Options:");
144
+ if (options.includeRepoUrl) {
145
+ console.log("\x1b[33m - Using repo URL in key derivation.\x1b[0m");
146
+ }
147
+ if (options.useBase64Input) {
148
+ console.log("\x1b[33m - Input data is processed as base64 format.\x1b[0m");
149
+ }
150
+ if (options.useBase64Output) {
151
+ console.log("\x1b[33m - Output data is displayed in base64 format.\x1b[0m");
152
+ }
153
+ console.log("");
154
+ }
155
+ if (data instanceof Array) {
156
+ console.log("Input Data:");
157
+ console.log("\x1b[33mMultiple data entries found. Trying to decrypt the data with the first key matching one of the entries.\x1b[0m");
158
+ }
159
+ console.log("==========================================================================\n");
160
+ }
161
+ /**
162
+ * @description Prints the decrypted data.
163
+ * @param decryptedData Decrypted data.
164
+ */
165
+ static _printOutput(decryptedData) {
166
+ console.log("\n===========OUTPUT=========================================================");
167
+ console.log("Decrypted Data ⬎");
168
+ console.log(`\x1b[32m${decryptedData}\x1b[0m\n`);
169
+ console.log("==========================================================================");
170
+ }
171
+ }
172
+ exports.default = Decrypter;