solid-ui 2.4.28-a414b470 → 2.4.28-df3d9431

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.
@@ -9,5 +9,8 @@ export declare function generatePublicKey(privateKey: string): string;
9
9
  * @returns string | undefined
10
10
  */
11
11
  export declare function getPublicKey(webId: NamedNode): Promise<string | undefined>;
12
+ export declare function validPublicKey(webId: NamedNode, publicKey: string | undefined, privateKey: string): boolean;
13
+ export declare function generateAndStoreNewPublicKey(webId: NamedNode, privateKey: string, publicKey: string | undefined, publicKeyDoc: string): Promise<void>;
14
+ export declare function createAndSaveKeyPairs(webId: NamedNode, publicKey: string | undefined, privateKeyDoc: string, publicKeyDoc: string): Promise<string>;
12
15
  export declare function getPrivateKey(webId: NamedNode): Promise<string>;
13
16
  //# sourceMappingURL=keys.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/chat/keys.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAKlC,wBAAgB,kBAAkB,IAAK,MAAM,CAE5C;AAED,wBAAgB,iBAAiB,CAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAE,KAAK,EAAE,SAAS,+BAUnD;AAED,wBAAsB,aAAa,CAAE,KAAK,EAAE,SAAS,mBA4CpD"}
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/chat/keys.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAKlC,wBAAgB,kBAAkB,IAAK,MAAM,CAE5C;AAED,wBAAgB,iBAAiB,CAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAE,KAAK,EAAE,SAAS,+BAgBnD;AAED,wBAAgB,cAAc,CAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAM5G;AAED,wBAAsB,4BAA4B,CAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,EAAE,MAAM,iBAK5I;AAED,wBAAsB,qBAAqB,CAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAQxI;AAED,wBAAsB,aAAa,CAAE,KAAK,EAAE,SAAS,mBAoBpD"}
package/lib/chat/keys.js CHANGED
@@ -5,10 +5,13 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
+ exports.createAndSaveKeyPairs = createAndSaveKeyPairs;
9
+ exports.generateAndStoreNewPublicKey = generateAndStoreNewPublicKey;
8
10
  exports.generatePrivateKey = generatePrivateKey;
9
11
  exports.generatePublicKey = generatePublicKey;
10
12
  exports.getPrivateKey = getPrivateKey;
11
13
  exports.getPublicKey = getPublicKey;
14
+ exports.validPublicKey = validPublicKey;
12
15
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
16
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
14
17
  var debug = _interopRequireWildcard(require("../debug"));
@@ -44,109 +47,150 @@ function _getPublicKey() {
44
47
  return _regenerator["default"].wrap(function _callee2$(_context2) {
45
48
  while (1) switch (_context2.prev = _context2.next) {
46
49
  case 0:
47
- _context2.next = 2;
50
+ _context2.prev = 0;
51
+ _context2.next = 3;
48
52
  return _solidLogic.store.fetcher.load(webId);
49
- case 2:
50
- _context2.next = 4;
53
+ case 3:
54
+ _context2.next = 5;
51
55
  return (0, _accessData.pubKeyUrl)(webId);
52
- case 4:
56
+ case 5:
53
57
  publicKeyDoc = _context2.sent;
54
- _context2.prev = 5;
55
- _context2.next = 8;
58
+ _context2.prev = 6;
59
+ _context2.next = 9;
56
60
  return _solidLogic.store.fetcher.load(publicKeyDoc);
57
- case 8:
61
+ case 9:
58
62
  // url.href)
59
63
  key = _solidLogic.store.any(webId, ns.solid('publicKey'));
60
64
  return _context2.abrupt("return", key === null || key === void 0 ? void 0 : key.value);
61
- case 12:
62
- _context2.prev = 12;
63
- _context2.t0 = _context2["catch"](5);
65
+ case 13:
66
+ _context2.prev = 13;
67
+ _context2.t0 = _context2["catch"](6);
68
+ debug.error(_context2.t0);
64
69
  return _context2.abrupt("return", undefined);
65
- case 15:
70
+ case 17:
71
+ _context2.next = 23;
72
+ break;
73
+ case 19:
74
+ _context2.prev = 19;
75
+ _context2.t1 = _context2["catch"](0);
76
+ debug.error(_context2.t1);
77
+ return _context2.abrupt("return", undefined);
78
+ case 23:
66
79
  case "end":
67
80
  return _context2.stop();
68
81
  }
69
- }, _callee2, null, [[5, 12]]);
82
+ }, _callee2, null, [[0, 19], [6, 13]]);
70
83
  }));
71
84
  return _getPublicKey.apply(this, arguments);
72
85
  }
73
- function getPrivateKey(_x2) {
74
- return _getPrivateKey.apply(this, arguments);
86
+ function validPublicKey(webId, publicKey, privateKey) {
87
+ if (privateKey && publicKey !== generatePublicKey(privateKey)) {
88
+ if (confirm('This is strange the publicKey is not valid for\n' + (webId === null || webId === void 0 ? void 0 : webId.uri) + '\'shall we repair keeping the private key ?')) return false;
89
+ }
90
+ return true;
75
91
  }
76
- function _getPrivateKey() {
77
- _getPrivateKey = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(webId) {
78
- var publicKeyDoc, privateKeyDoc, publicKey, privateKey, validPublicKey, del, add, newPublicKey, keyContainer;
92
+ function generateAndStoreNewPublicKey(_x2, _x3, _x4, _x5) {
93
+ return _generateAndStoreNewPublicKey.apply(this, arguments);
94
+ }
95
+ function _generateAndStoreNewPublicKey() {
96
+ _generateAndStoreNewPublicKey = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(webId, privateKey, publicKey, publicKeyDoc) {
97
+ var del, newPublicKey, add;
79
98
  return _regenerator["default"].wrap(function _callee3$(_context3) {
80
99
  while (1) switch (_context3.prev = _context3.next) {
81
100
  case 0:
82
- _context3.next = 2;
101
+ del = [$rdf.st(webId, ns.solid('publicKey'), $rdf.lit(publicKey || ''), _solidLogic.store.sym(publicKeyDoc))];
102
+ newPublicKey = generatePublicKey(privateKey);
103
+ add = [$rdf.st(webId, ns.solid('publicKey'), $rdf.literal(newPublicKey), _solidLogic.store.sym(publicKeyDoc))];
104
+ _context3.next = 5;
105
+ return saveKeyAndHandleAcl(publicKeyDoc, del, add);
106
+ case 5:
107
+ case "end":
108
+ return _context3.stop();
109
+ }
110
+ }, _callee3);
111
+ }));
112
+ return _generateAndStoreNewPublicKey.apply(this, arguments);
113
+ }
114
+ function createAndSaveKeyPairs(_x6, _x7, _x8, _x9) {
115
+ return _createAndSaveKeyPairs.apply(this, arguments);
116
+ }
117
+ function _createAndSaveKeyPairs() {
118
+ _createAndSaveKeyPairs = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(webId, publicKey, privateKeyDoc, publicKeyDoc) {
119
+ var privateKey, add;
120
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
121
+ while (1) switch (_context4.prev = _context4.next) {
122
+ case 0:
123
+ privateKey = generatePrivateKey();
124
+ add = [$rdf.st(webId, ns.solid('privateKey'), $rdf.literal(privateKey), _solidLogic.store.sym(privateKeyDoc))];
125
+ _context4.next = 4;
126
+ return saveKeyAndHandleAcl(privateKeyDoc, [], add, webId.uri);
127
+ case 4:
128
+ _context4.next = 6;
129
+ return generateAndStoreNewPublicKey(webId, privateKey, publicKey, publicKeyDoc);
130
+ case 6:
131
+ return _context4.abrupt("return", privateKey);
132
+ case 7:
133
+ case "end":
134
+ return _context4.stop();
135
+ }
136
+ }, _callee4);
137
+ }));
138
+ return _createAndSaveKeyPairs.apply(this, arguments);
139
+ }
140
+ function getPrivateKey(_x10) {
141
+ return _getPrivateKey.apply(this, arguments);
142
+ }
143
+ function _getPrivateKey() {
144
+ _getPrivateKey = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(webId) {
145
+ var publicKeyDoc, privateKeyDoc, publicKey, privateKey, keyContainer;
146
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
147
+ while (1) switch (_context5.prev = _context5.next) {
148
+ case 0:
149
+ _context5.next = 2;
83
150
  return _solidLogic.store.fetcher.load(webId);
84
151
  case 2:
85
- _context3.next = 4;
152
+ _context5.next = 4;
86
153
  return (0, _accessData.pubKeyUrl)(webId);
87
154
  case 4:
88
- publicKeyDoc = _context3.sent;
89
- _context3.next = 7;
155
+ publicKeyDoc = _context5.sent;
156
+ _context5.next = 7;
90
157
  return (0, _accessData.privKeyUrl)(webId);
91
158
  case 7:
92
- privateKeyDoc = _context3.sent;
93
- _context3.next = 10;
159
+ privateKeyDoc = _context5.sent;
160
+ _context5.next = 10;
94
161
  return (0, _accessData.getExistingPublicKey)(webId, publicKeyDoc);
95
162
  case 10:
96
- publicKey = _context3.sent;
97
- _context3.next = 13;
163
+ publicKey = _context5.sent;
164
+ _context5.next = 13;
98
165
  return (0, _accessData.getExistingPrivateKey)(webId, privateKeyDoc);
99
166
  case 13:
100
- privateKey = _context3.sent;
101
- // is publicKey valid ?
102
- validPublicKey = true;
103
- if (privateKey && publicKey !== generatePublicKey(privateKey)) {
104
- if (confirm('This is strange the publicKey is not valid for\n' + (webId === null || webId === void 0 ? void 0 : webId.uri) + '\'shall we repair keeping the private key ?')) validPublicKey = false;
105
- }
106
-
107
- // create key pair or repair publicKey
108
- if (!(!privateKey || !publicKey || !validPublicKey)) {
109
- _context3.next = 34;
110
- break;
111
- }
112
- del = [];
113
- add = [];
167
+ privateKey = _context5.sent;
114
168
  if (privateKey) {
115
- _context3.next = 24;
169
+ _context5.next = 18;
116
170
  break;
117
171
  }
118
- // add = []
119
- privateKey = generatePrivateKey();
120
- add = [$rdf.st(webId, ns.solid('privateKey'), $rdf.literal(privateKey), _solidLogic.store.sym(privateKeyDoc))];
121
- _context3.next = 24;
122
- return saveKey(privateKeyDoc, [], add, webId.uri);
123
- case 24:
124
- if (!(!publicKey || !validPublicKey)) {
125
- _context3.next = 31;
172
+ _context5.next = 17;
173
+ return createAndSaveKeyPairs(webId, publicKey, privateKeyDoc, publicKeyDoc);
174
+ case 17:
175
+ privateKey = _context5.sent;
176
+ case 18:
177
+ if (validPublicKey(webId, publicKey, privateKey)) {
178
+ _context5.next = 21;
126
179
  break;
127
180
  }
128
- del = [];
129
- // delete invalid public key
130
- if (publicKey) {
131
- del = [$rdf.st(webId, ns.solid('publicKey'), $rdf.lit(publicKey), _solidLogic.store.sym(publicKeyDoc))];
132
- debug.log(del);
133
- }
134
- // update new valid key
135
- newPublicKey = generatePublicKey(privateKey);
136
- add = [$rdf.st(webId, ns.solid('publicKey'), $rdf.literal(newPublicKey), _solidLogic.store.sym(publicKeyDoc))];
137
- _context3.next = 31;
138
- return saveKey(publicKeyDoc, del, add);
139
- case 31:
181
+ _context5.next = 21;
182
+ return generateAndStoreNewPublicKey(webId, privateKey, publicKey, publicKeyDoc);
183
+ case 21:
140
184
  keyContainer = privateKeyDoc.substring(0, privateKeyDoc.lastIndexOf('/') + 1);
141
- _context3.next = 34;
185
+ _context5.next = 24;
142
186
  return (0, _acl.setAcl)(keyContainer, (0, _acl.keyContainerAclBody)(webId.uri));
143
- case 34:
144
- return _context3.abrupt("return", privateKey);
145
- case 35:
187
+ case 24:
188
+ return _context5.abrupt("return", privateKey);
189
+ case 25:
146
190
  case "end":
147
- return _context3.stop();
191
+ return _context5.stop();
148
192
  }
149
- }, _callee3);
193
+ }, _callee5);
150
194
  }));
151
195
  return _getPrivateKey.apply(this, arguments);
152
196
  }
@@ -189,7 +233,7 @@ var deleteKeyAcl = /*#__PURE__*/function () {
189
233
  }
190
234
  }, _callee, null, [[4, 11]]);
191
235
  }));
192
- return function deleteKeyAcl(_x3) {
236
+ return function deleteKeyAcl(_x11) {
193
237
  return _ref.apply(this, arguments);
194
238
  };
195
239
  }();
@@ -199,35 +243,35 @@ var deleteKeyAcl = /*#__PURE__*/function () {
199
243
  * create/edit keyDoc
200
244
  * set keyDoc acl
201
245
  */
202
- function saveKey(_x4, _x5, _x6) {
203
- return _saveKey.apply(this, arguments);
246
+ function saveKeyAndHandleAcl(_x12, _x13, _x14) {
247
+ return _saveKeyAndHandleAcl.apply(this, arguments);
204
248
  }
205
- function _saveKey() {
206
- _saveKey = (0, _asyncToGenerator2["default"])(function (keyDoc, del, add) {
249
+ function _saveKeyAndHandleAcl() {
250
+ _saveKeyAndHandleAcl = (0, _asyncToGenerator2["default"])(function (keyDoc, del, add) {
207
251
  var me = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
208
- return /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
252
+ return /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
209
253
  var aclBody;
210
- return _regenerator["default"].wrap(function _callee4$(_context4) {
211
- while (1) switch (_context4.prev = _context4.next) {
254
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
255
+ while (1) switch (_context6.prev = _context6.next) {
212
256
  case 0:
213
- _context4.next = 2;
257
+ _context6.next = 2;
214
258
  return deleteKeyAcl(keyDoc);
215
259
  case 2:
216
- _context4.next = 4;
260
+ _context6.next = 4;
217
261
  return _solidLogic.store.updater.updateMany(del, add);
218
262
  case 4:
219
263
  // or a promise store.updater.update ?
220
264
  // create READ only ACL
221
265
  aclBody = (0, _acl.keyAclBody)(keyDoc, me);
222
- _context4.next = 7;
266
+ _context6.next = 7;
223
267
  return (0, _acl.setAcl)(keyDoc, aclBody);
224
268
  case 7:
225
269
  case "end":
226
- return _context4.stop();
270
+ return _context6.stop();
227
271
  }
228
- }, _callee4);
272
+ }, _callee6);
229
273
  })();
230
274
  });
231
- return _saveKey.apply(this, arguments);
275
+ return _saveKeyAndHandleAcl.apply(this, arguments);
232
276
  }
233
277
  //# sourceMappingURL=keys.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","names":["debug","_interopRequireWildcard","require","_secp256k","_utils","ns","_solidLogic","$rdf","_accessData","_acl","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","generatePrivateKey","bytesToHex","schnorr","utils","randomPrivateKey","generatePublicKey","privateKey","getPublicKey","_x","_getPublicKey","apply","arguments","_asyncToGenerator2","_regenerator","mark","_callee2","webId","publicKeyDoc","wrap","_callee2$","_context2","prev","next","store","fetcher","load","pubKeyUrl","sent","any","solid","abrupt","value","t0","undefined","stop","getPrivateKey","_x2","_getPrivateKey","_callee3","privateKeyDoc","publicKey","validPublicKey","del","add","newPublicKey","keyContainer","_callee3$","_context3","privKeyUrl","getExistingPublicKey","getExistingPrivateKey","confirm","uri","st","literal","sym","saveKey","lit","log","substring","lastIndexOf","setAcl","keyContainerAclBody","deleteKeyAcl","_ref","_callee","keyDoc","keyAclDoc","response","_callee$","_context","webOperation","status","Error","_x3","_x4","_x5","_x6","_saveKey","me","length","_callee4","aclBody","_callee4$","_context4","updater","updateMany","keyAclBody"],"sources":["../../src/chat/keys.ts"],"sourcesContent":["import * as debug from '../debug'\r\nimport { schnorr } from '@noble/curves/secp256k1'\r\nimport { bytesToHex } from '@noble/hashes/utils'\r\nimport * as ns from '../ns'\r\nimport { store } from 'solid-logic'\r\nimport { NamedNode } from 'rdflib'\r\nimport * as $rdf from 'rdflib'\r\nimport { getExistingPublicKey, pubKeyUrl, privKeyUrl, getExistingPrivateKey } from '../utils/keyHelpers/accessData'\r\nimport { setAcl, keyContainerAclBody, keyAclBody } from '../utils/keyHelpers/acl'\r\n\r\nexport function generatePrivateKey (): string {\r\n return bytesToHex(schnorr.utils.randomPrivateKey())\r\n}\r\n\r\nexport function generatePublicKey (privateKey: string): string {\r\n return bytesToHex(schnorr.getPublicKey(privateKey))\r\n}\r\n\r\n/**\r\n * getPublicKey\r\n * used for displaying messages in chat, therefore does not\r\n * create a new key if not found\r\n * @param webId\r\n * @returns string | undefined\r\n */\r\nexport async function getPublicKey (webId: NamedNode) {\r\n await store.fetcher.load(webId)\r\n const publicKeyDoc = await pubKeyUrl(webId)\r\n try {\r\n await store.fetcher.load(publicKeyDoc) // url.href)\r\n const key = store.any(webId, ns.solid('publicKey'))\r\n return key?.value // as NamedNode\r\n } catch (err) {\r\n return undefined\r\n }\r\n}\r\n\r\nexport async function getPrivateKey (webId: NamedNode) {\r\n await store.fetcher.load(webId)\r\n // find keys url's\r\n const publicKeyDoc = await pubKeyUrl(webId)\r\n const privateKeyDoc = await privKeyUrl(webId)\r\n\r\n // find key pair\r\n const publicKey = await getExistingPublicKey(webId, publicKeyDoc)\r\n let privateKey = await getExistingPrivateKey(webId, privateKeyDoc)\r\n\r\n // is publicKey valid ?\r\n let validPublicKey = true\r\n if (privateKey && (publicKey !== generatePublicKey(privateKey as string))) {\r\n if (confirm('This is strange the publicKey is not valid for\\n' + webId?.uri +\r\n '\\'shall we repair keeping the private key ?')) validPublicKey = false\r\n }\r\n\r\n // create key pair or repair publicKey\r\n if (!privateKey || !publicKey || !validPublicKey) {\r\n let del: any[] = []\r\n let add: any[] = []\r\n\r\n if (!privateKey) {\r\n // add = []\r\n privateKey = generatePrivateKey()\r\n add = [$rdf.st(webId, ns.solid('privateKey'), $rdf.literal(privateKey), store.sym(privateKeyDoc))]\r\n await saveKey(privateKeyDoc, [], add, webId.uri)\r\n }\r\n if (!publicKey || !validPublicKey) {\r\n del = []\r\n // delete invalid public key\r\n if (publicKey) {\r\n del = [$rdf.st(webId, ns.solid('publicKey'), $rdf.lit(publicKey), store.sym(publicKeyDoc))]\r\n debug.log(del)\r\n }\r\n // update new valid key\r\n const newPublicKey = generatePublicKey(privateKey)\r\n add = [$rdf.st(webId, ns.solid('publicKey'), $rdf.literal(newPublicKey), store.sym(publicKeyDoc))]\r\n await saveKey(publicKeyDoc, del, add)\r\n }\r\n const keyContainer = privateKeyDoc.substring(0, privateKeyDoc.lastIndexOf('/') + 1)\r\n await setAcl(keyContainer, keyContainerAclBody(webId.uri)) // includes DELETE and PUT\r\n }\r\n return privateKey as string\r\n}\r\n\r\nconst deleteKeyAcl = async (keyDoc: string) => {\r\n await store.fetcher.load(keyDoc)\r\n\r\n const keyAclDoc = store.any(store.sym(keyDoc), store.sym('http://www.iana.org/assignments/link-relations/acl'))\r\n if (keyAclDoc) {\r\n // delete READ only keyAclDoc. This is possible if the webId is an owner\r\n try {\r\n const response = await store.fetcher.webOperation('DELETE', keyAclDoc.value) // this may fail if webId is not an owner\r\n debug.log('delete ' + keyAclDoc.value + ' ' + response.status) // should test 404 and 2xx\r\n } catch (err) {\r\n if (err.response.status !== 404) { throw new Error(err) }\r\n debug.log('delete ' + keyAclDoc.value + ' ' + err.response.status) // should test 404 and 2xx\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * delete acl if keydoc exists\r\n * create/edit keyDoc\r\n * set keyDoc acl\r\n */\r\nasync function saveKey (keyDoc: string, del, add, me: string = '') {\r\n await deleteKeyAcl(keyDoc)\r\n // save key\r\n await store.updater.updateMany(del, add) // or a promise store.updater.update ?\r\n\r\n // create READ only ACL\r\n const aclBody = keyAclBody(keyDoc, me)\r\n await setAcl(keyDoc, aclBody)\r\n}\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"keys.js","names":["debug","_interopRequireWildcard","require","_secp256k","_utils","ns","_solidLogic","$rdf","_accessData","_acl","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","generatePrivateKey","bytesToHex","schnorr","utils","randomPrivateKey","generatePublicKey","privateKey","getPublicKey","_x","_getPublicKey","apply","arguments","_asyncToGenerator2","_regenerator","mark","_callee2","webId","publicKeyDoc","wrap","_callee2$","_context2","prev","next","store","fetcher","load","pubKeyUrl","sent","any","solid","abrupt","value","t0","error","undefined","t1","stop","validPublicKey","publicKey","confirm","uri","generateAndStoreNewPublicKey","_x2","_x3","_x4","_x5","_generateAndStoreNewPublicKey","_callee3","del","newPublicKey","add","_callee3$","_context3","st","lit","sym","literal","saveKeyAndHandleAcl","createAndSaveKeyPairs","_x6","_x7","_x8","_x9","_createAndSaveKeyPairs","_callee4","privateKeyDoc","_callee4$","_context4","getPrivateKey","_x10","_getPrivateKey","_callee5","keyContainer","_callee5$","_context5","privKeyUrl","getExistingPublicKey","getExistingPrivateKey","substring","lastIndexOf","setAcl","keyContainerAclBody","deleteKeyAcl","_ref","_callee","keyDoc","keyAclDoc","response","_callee$","_context","webOperation","log","status","Error","_x11","_x12","_x13","_x14","_saveKeyAndHandleAcl","me","length","_callee6","aclBody","_callee6$","_context6","updater","updateMany","keyAclBody"],"sources":["../../src/chat/keys.ts"],"sourcesContent":["import * as debug from '../debug'\r\nimport { schnorr } from '@noble/curves/secp256k1'\r\nimport { bytesToHex } from '@noble/hashes/utils'\r\nimport * as ns from '../ns'\r\nimport { store } from 'solid-logic'\r\nimport { NamedNode } from 'rdflib'\r\nimport * as $rdf from 'rdflib'\r\nimport { getExistingPublicKey, pubKeyUrl, privKeyUrl, getExistingPrivateKey } from '../utils/keyHelpers/accessData'\r\nimport { setAcl, keyContainerAclBody, keyAclBody } from '../utils/keyHelpers/acl'\r\n\r\nexport function generatePrivateKey (): string {\r\n return bytesToHex(schnorr.utils.randomPrivateKey())\r\n}\r\n\r\nexport function generatePublicKey (privateKey: string): string {\r\n return bytesToHex(schnorr.getPublicKey(privateKey))\r\n}\r\n\r\n/**\r\n * getPublicKey\r\n * used for displaying messages in chat, therefore does not\r\n * create a new key if not found\r\n * @param webId\r\n * @returns string | undefined\r\n */\r\nexport async function getPublicKey (webId: NamedNode) {\r\n try {\r\n await store.fetcher.load(webId)\r\n const publicKeyDoc = await pubKeyUrl(webId)\r\n try {\r\n await store.fetcher.load(publicKeyDoc) // url.href)\r\n const key = store.any(webId, ns.solid('publicKey'))\r\n return key?.value // as NamedNode\r\n } catch (err) {\r\n debug.error(err)\r\n return undefined\r\n }\r\n } catch (err) {\r\n debug.error(err)\r\n return undefined\r\n }\r\n}\r\n\r\nexport function validPublicKey (webId: NamedNode, publicKey: string | undefined, privateKey: string): boolean {\r\n if (privateKey && (publicKey !== generatePublicKey(privateKey as string))) {\r\n if (confirm('This is strange the publicKey is not valid for\\n' + webId?.uri +\r\n '\\'shall we repair keeping the private key ?')) return false\r\n }\r\n return true\r\n}\r\n\r\nexport async function generateAndStoreNewPublicKey (webId: NamedNode, privateKey: string, publicKey: string | undefined, publicKeyDoc: string) {\r\n const del = [$rdf.st(webId, ns.solid('publicKey'), $rdf.lit(publicKey || ''), store.sym(publicKeyDoc))]\r\n const newPublicKey = generatePublicKey(privateKey)\r\n const add = [$rdf.st(webId, ns.solid('publicKey'), $rdf.literal(newPublicKey), store.sym(publicKeyDoc))]\r\n await saveKeyAndHandleAcl(publicKeyDoc, del, add)\r\n}\r\n\r\nexport async function createAndSaveKeyPairs (webId: NamedNode, publicKey: string | undefined, privateKeyDoc: string, publicKeyDoc: string) {\r\n const privateKey = generatePrivateKey()\r\n const add = [$rdf.st(webId, ns.solid('privateKey'), $rdf.literal(privateKey), store.sym(privateKeyDoc))]\r\n await saveKeyAndHandleAcl(privateKeyDoc, [], add, webId.uri)\r\n\r\n await generateAndStoreNewPublicKey(webId, privateKey, publicKey, publicKeyDoc)\r\n\r\n return privateKey\r\n}\r\n\r\nexport async function getPrivateKey (webId: NamedNode) {\r\n await store.fetcher.load(webId)\r\n // find keys url's\r\n const publicKeyDoc = await pubKeyUrl(webId)\r\n const privateKeyDoc = await privKeyUrl(webId)\r\n\r\n // find key pair\r\n const publicKey = await getExistingPublicKey(webId, publicKeyDoc)\r\n let privateKey = await getExistingPrivateKey(webId, privateKeyDoc)\r\n\r\n if (!privateKey) {\r\n privateKey = await createAndSaveKeyPairs(webId, publicKey, privateKeyDoc, publicKeyDoc)\r\n }\r\n if (!validPublicKey(webId, publicKey, privateKey)) {\r\n await generateAndStoreNewPublicKey(webId, privateKey, publicKey, publicKeyDoc)\r\n }\r\n\r\n const keyContainer = privateKeyDoc.substring(0, privateKeyDoc.lastIndexOf('/') + 1)\r\n await setAcl(keyContainer, keyContainerAclBody(webId.uri)) // includes DELETE and PUT\r\n return privateKey as string\r\n}\r\n\r\nconst deleteKeyAcl = async (keyDoc: string) => {\r\n await store.fetcher.load(keyDoc)\r\n\r\n const keyAclDoc = store.any(store.sym(keyDoc), store.sym('http://www.iana.org/assignments/link-relations/acl'))\r\n if (keyAclDoc) {\r\n // delete READ only keyAclDoc. This is possible if the webId is an owner\r\n try {\r\n const response = await store.fetcher.webOperation('DELETE', keyAclDoc.value) // this may fail if webId is not an owner\r\n debug.log('delete ' + keyAclDoc.value + ' ' + response.status) // should test 404 and 2xx\r\n } catch (err) {\r\n if (err.response.status !== 404) { throw new Error(err) }\r\n debug.log('delete ' + keyAclDoc.value + ' ' + err.response.status) // should test 404 and 2xx\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * delete acl if keydoc exists\r\n * create/edit keyDoc\r\n * set keyDoc acl\r\n */\r\nasync function saveKeyAndHandleAcl (keyDoc: string, del, add, me: string = '') {\r\n await deleteKeyAcl(keyDoc)\r\n // save key\r\n await store.updater.updateMany(del, add) // or a promise store.updater.update ?\r\n\r\n // create READ only ACL\r\n const aclBody = keyAclBody(keyDoc, me)\r\n await setAcl(keyDoc, aclBody)\r\n}\r\n"],"mappings":"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"}
@@ -144,23 +144,20 @@ function renderMessageRow(_x, _x2, _x3, _x4, _x5) {
144
144
  } // END OF RENDERMESSAGE
145
145
  function _renderMessageRow() {
146
146
  _renderMessageRow = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9(channelObject, message, fresh, options, userContext) {
147
- var unsignedMessage, colorizeByAuthor, creator, date, latestVersion, latestVersionCreator, msgId, content, versions, replies, thread, straightReplies, _iterator2, _step2, reply, signature, msg, originalMessage, edited, sortDate, messageRow, td1, img, bothDates, td2, text, isURI, para, isImage, _img, anc, bgcolor, getBgColor, strip, td3, toolsButton;
147
+ var colorizeByAuthor, creator, date, latestVersion, latestVersionCreator, msgId, content, versions, replies, thread, straightReplies, _iterator2, _step2, reply, signature, msg, messageRow, publicKey, regex, validSignature, validPublicKeyHexString, originalMessage, edited, sortDate, td1, img, bothDates, td2, text, isURI, para, isImage, _img, anc, bgcolor, getBgColor, strip, td3, toolsButton;
148
148
  return _regenerator["default"].wrap(function _callee9$(_context10) {
149
149
  while (1) switch (_context10.prev = _context10.next) {
150
150
  case 0:
151
151
  getBgColor = function _getBgColor(fresh) {
152
152
  return fresh ? '#e8ffe8' : 'white';
153
153
  };
154
- unsignedMessage = false;
155
- colorizeByAuthor = options.colorizeByAuthor === '1' || options.colorizeByAuthor === true; // const id = store.any(latestVersion, ns.sioc('id'))
156
- // const replies = store.each(latestVersion, ns.sioc('has_reply'))
154
+ colorizeByAuthor = options.colorizeByAuthor === '1' || options.colorizeByAuthor === true;
157
155
  creator = _solidLogic.store.any(message, ns.foaf('maker'));
158
156
  date = _solidLogic.store.any(message, ns.dct('created'));
159
- _context10.next = 7;
157
+ _context10.next = 6;
160
158
  return (0, _chatLogic.mostRecentVersion)(message);
161
- case 7:
159
+ case 6:
162
160
  latestVersion = _context10.sent;
163
- debug.log('@@@@ alain mostRecentVersion');
164
161
  debug.log(message);
165
162
  debug.log(latestVersion);
166
163
  latestVersionCreator = _solidLogic.store.any(latestVersion, ns.foaf('maker')); // use latest content if same owner, else use original
@@ -170,9 +167,9 @@ function _renderMessageRow() {
170
167
  debug.log(latestVersionCreator);
171
168
  msgId = creator.uri === (latestVersionCreator === null || latestVersionCreator === void 0 ? void 0 : latestVersionCreator.uri) ? latestVersion : message;
172
169
  content = _solidLogic.store.any(msgId, ns.sioc('content'));
173
- _context10.next = 19;
170
+ _context10.next = 17;
174
171
  return (0, _chatLogic.allVersions)(msgId);
175
- case 19:
172
+ case 17:
176
173
  versions = _context10.sent;
177
174
  if (versions.length > 1) {
178
175
  debug.log('renderMessageRow versions: ', versions.join(', '));
@@ -214,35 +211,38 @@ function _renderMessageRow() {
214
211
  msg.created = _solidLogic.store.any(msgId, ns.dct('created')).value;
215
212
  msg.content = content.value;
216
213
  msg.maker = creator.uri;
217
-
218
- // verify signature
219
- if (!(signature !== null && signature !== void 0 && signature.value)) {
220
- // unsigned message
221
- unsignedMessage = true;
222
- debug.warn(msgId.uri + ' is unsigned'); // TODO replace with UI (colored message ?)
223
- } else {
224
- // signed message, get public key and check signature
225
- (0, _keys.getPublicKey)(creator).then(function (publicKey) {
226
- debug.log(creator.uri + '\n' + msg.created + '\n' + msg.id + '\n' + publicKey);
227
- if (!publicKey) {
228
- debug.warn('message is signed but ' + creator.uri + ' is missing publicKey');
229
- }
230
- // check that publicKey is a valid hex string
231
- var regex = /[0-9A-Fa-f]{6}/g;
232
- if (!(publicKey !== null && publicKey !== void 0 && publicKey.match(regex))) debug.warn('invalid publicKey hex string\n' + creator.uri + '\n' + publicKey);
233
- // verify signature
234
- else if (signature !== null && signature !== void 0 && signature.value && !(0, _signature.verifySignature)(signature === null || signature === void 0 ? void 0 : signature.value, msg, publicKey)) debug.warn('invalid signature\n' + msg.id);
235
- });
214
+ messageRow = dom.createElement('tr'); // verify signature
215
+ if (signature !== null && signature !== void 0 && signature.value) {
216
+ _context10.next = 38;
217
+ break;
236
218
  }
237
- _context10.next = 38;
238
- return (0, _chatLogic.originalVersion)(message);
219
+ // unsigned message
220
+ messageRow.setAttribute('style', style.textInputBackgroundColorHighlight);
221
+ _context10.next = 48;
222
+ break;
239
223
  case 38:
224
+ _context10.next = 40;
225
+ return (0, _keys.getPublicKey)(creator);
226
+ case 40:
227
+ publicKey = _context10.sent;
228
+ debug.log(creator.uri + '\n' + msg.created + '\n' + msg.id + '\n' + publicKey);
229
+ if (!publicKey) {
230
+ debug.warn('message is signed but ' + creator.uri + ' is missing publicKey');
231
+ }
232
+ // check that publicKey is a valid hex string
233
+ regex = /[0-9A-Fa-f]{6}/g;
234
+ validSignature = (0, _signature.verifySignature)(signature === null || signature === void 0 ? void 0 : signature.value, msg, publicKey);
235
+ validPublicKeyHexString = publicKey === null || publicKey === void 0 ? void 0 : publicKey.match(regex);
236
+ if (!validPublicKeyHexString) debug.warn('invalid publicKey hex string\n' + creator.uri + '\n' + publicKey);else if (signature !== null && signature !== void 0 && signature.value && !validSignature) debug.warn('invalid signature\n' + msg.id);
237
+ if (!validSignature || !validPublicKeyHexString) messageRow.setAttribute('style', style.textInputBackgroundColorError);
238
+ case 48:
239
+ _context10.next = 50;
240
+ return (0, _chatLogic.originalVersion)(message);
241
+ case 50:
240
242
  originalMessage = _context10.sent;
241
243
  edited = !message.sameTerm(originalMessage); // @@ load it first @@ Or display the new data at the old date.
242
244
  // @@@ kludge!
243
245
  sortDate = _solidLogic.store.the(originalMessage, ns.dct('created'), null, originalMessage.doc()) || _solidLogic.store.the(message, ns.dct('created'), null, message.doc()); // In message
244
- messageRow = dom.createElement('tr');
245
- if (unsignedMessage) messageRow.setAttribute('style', 'background-color: red');
246
246
  messageRow.AJAR_date = sortDate.value;
247
247
  messageRow.AJAR_subject = message;
248
248
  td1 = dom.createElement('td');
@@ -293,9 +293,9 @@ function _renderMessageRow() {
293
293
  bgcolor = colorizeByAuthor ? pad.lightColorHash(creator) : getBgColor(fresh);
294
294
  para.setAttribute('style', messageBodyStyle + 'background-color: ' + bgcolor + ';');
295
295
  }
296
- _context10.next = 59;
296
+ _context10.next = 69;
297
297
  return (0, _messageTools.sentimentStripLinked)(message, message.doc());
298
- case 59:
298
+ case 69:
299
299
  strip = _context10.sent;
300
300
  if (strip.children.length) {
301
301
  td2.appendChild(dom.createElement('br'));
@@ -360,7 +360,7 @@ function _renderMessageRow() {
360
360
  }));
361
361
  }
362
362
  return _context10.abrupt("return", messageRow);
363
- case 68:
363
+ case 78:
364
364
  case "end":
365
365
  return _context10.stop();
366
366
  }